Vinted API: inzeráty z vinted.cz s cenou v korunách, velikostí a stavem
Oficiální přístup ke katalogu Vinted pro vývojáře neexistuje. Toto API bere data z vinted.cz v podobě, v jaké je vidí kdokoli bez přihlášení, a vrací je jako JSON: název, značku, velikost, stav s českým označením z webu („Velmi dobrý“, „Nový bez visačky“), fotky a cenu. Cena se skládá ze tří čísel: kolik chce prodávající, poplatek za ochranu kupujícího a jejich součet. U všech 60 inzerátů, které jsme 28. října 2026 načetli z vinted.cz, byl poplatek 18 Kč plus 5 % z ceny. Cenu dopravy odpověď neobsahuje. Prodávajícím, kteří hledají hromadné vystavování nebo správu objednávek, toto API nepomůže: nic na Vinted nezapisuje a nepřihlašuje se k žádnému účtu. Parametr `"tld": "cz"` je potřeba poslat při každém volání; bez něj se API ptá francouzského webu.
Endpointy
| endpoint | Co se vrací | Povinné |
|---|---|---|
| catalog_search | Hledání podle slova a/nebo filtrů: kategorie, velikost, barva, značka (podle id) a cenové rozmezí. Čtyři řazení: od nejnovějších (výchozí), podle relevance, od nejlevnějších a od nejdražších; až 96 inzerátů na stránku. Každý řádek má `price`, `service_fee` a `total_item_price` zvlášť v CZK, dále značku, velikost, stav a příznak propagace `promoted`. | vše volitelné |
| item_detail | Jeden inzerát podle id nebo URL: popis, fotky v plné velikosti, kategorie (např. „Muži Lehké svetry a mikiny s kapucí“), barva, materiál, jestli je rezervovaný a jestli se dá koupit hned (`can_buy`, `instant_buy`). | vše volitelné |
| seller | Veřejný profil člena: hodnocení, počet hodnocení rozdělený na kladná, neutrální a záporná a počet inzerátů. | id |
| seller_items | Šatník člena po stránkách, včetně času nahrání, počtu oblíbení a stavových příznaků (rezervováno, uzavřeno, skryto), které v řádcích hledání chybí. | id |
| seller_feedback | Hodnocení, která člen dostal: text, počet hvězdiček a čas. | id |
| categories | Strom kategorií vinted.cz s českými názvy (Ženy › Oblečení › Vnější oblečení …) a id, která bere `catalog_ids`. | vše volitelné |
| sizes | Skupiny velikostí s id pro `size_ids`, zapsané jako na webu („XS / 34 / 6“, „S / 36 / 8“). | vše volitelné |
| colors | Barvy s id, českým názvem (Černá, Šedá …) a hex kódem pro `color_ids`. | vše volitelné |
| countries | Země, ve kterých Vinted funguje, s ISO kódem a měnou. | vše volitelné |
Každé volání se účtuje v kreditech. Neúspěšná a blokovaná volání jsou zdarma.
Funkční příklad
Hledání „zimní bunda“ podle relevance, 28. října 2026: 40 inzerátů, 39 z nich s cenou v celých korunách. Výjimkou je vložka do bundy se slovenským názvem za 246,19 Kč, tedy cena přepočtená z jiné měny. Poplatek sedí na vzorec 18 Kč + 5 %: 33 Kč u bundy za 300 Kč, 92,50 Kč u dětské bundy Reima za 1 490 Kč. Příznak `promoted` mělo 14 ze 40 řádků. Pozor na řazení: výchozí „od nejnovějších“ vypadá úplně jinak. Hledání „bunda zara“ vrátilo 10 inzerátů a všech 10 mělo přepočtenou cenu s haléři a rumunský nebo polský název; stejně dopadl dotaz „bunda“ s `brand_ids: [12]` (Zara).
curl -X POST https://api.reefapi.com/vinted/v1/catalog_search \
-H "x-api-key: VAS_KLIC" \
-H "content-type: application/json" \
-d '{"query": "zimní bunda", "tld": "cz", "order": "relevance", "per_page": 40}'{
"ok": true,
"data": {
"items": [
...
{
"id": 10571615700,
"title": "Zimní bunda",
"url": "/items/10571615700-zimni-bunda",
"price": { "amount": 300.0, "currency": "CZK" },
"total_item_price": { "amount": 333.0, "currency": "CZK" },
"service_fee": { "amount": 33.0, "currency": "CZK" },
"brand": "F&F",
"size": "S",
"condition": "Velmi dobrý",
"favourite_count": 10,
"promoted": true,
"uploaded_ts": null,
...
},
...
{
"id": 10569769316,
"title": "Vsadka do bundy pre nosiacu maminku, doplnok k nosiču",
"price": { "amount": 246.19, "currency": "CZK" },
"total_item_price": { "amount": 276.5, "currency": "CZK" },
"service_fee": { "amount": 30.31, "currency": "CZK" },
"brand": "Konvalinka",
"size": "Všechny",
"condition": "Velmi dobrý",
"promoted": false,
...
},
...
{
"id": 10569952906,
"title": "Zimní bunda Reima",
"price": { "amount": 1490.0, "currency": "CZK" },
"total_item_price": { "amount": 1582.5, "currency": "CZK" },
"service_fee": { "amount": 92.5, "currency": "CZK" },
"brand": "Reima",
"size": "134–139 cm / 9 let",
"condition": "Velmi dobrý",
"promoted": true,
...
},
...
],
"pagination": { "current_page": 1, "per_page": 40, "total_entries": 960, "total_pages": 24 },
"tld": "cz"
},
"meta": {
"record_count": 40,
"tld": "cz",
"total_entries": 960,
"window_cap": 960,
"warnings": ["source_fields_unavailable: uploaded_ts, seller.login, seller.profile_url, is_visible, stats_visible, view_count, ..."],
"charged_credits": 2,
"cache_hit": false,
"mode": "live"
}
}Vinted scraper: dvě zrušené adresy během necelého měsíce
Vinted mění místo, odkud jeho vlastní web bere data, a předem to neohlašuje. 14. září 2026 zmizela adresa `/api/v2/catalog/items`, ze které motor četl výsledky hledání, a celý den končilo každé hledání chybou NOT_FOUND. 9. října 2026 během dopoledne přestala fungovat i náhradní cesta. Na všech třech zkoušených trzích odpovídala skutečnou stránkou „Page not found“, bez captchy a bez jakékoli blokace. Vysvětlení bylo přímo na webu: stránku katalogu teď skládá server Vintedu a prohlížeč tu adresu vůbec nevolá.
Od 9. října proto hledání čte přímo stránku katalogu. Má kolem 3,8 MB, kdežto dřívější odpověď měla zhruba 150 kB, takže jedno volání přenese asi 25krát víc dat. Pole, která na stránce nejsou (čas nahrání, počet zobrazení, rezervace a další), API nedoplňuje odhadem: jsou null a vyjmenovaná v `meta.warnings`.
Dvě čísla z této stránky klamou. U širších dotazů se `total_entries` zastaví na 960, tedy 10 stránek po 96; je to strop, ne počet inzerátů. A dotaz, ke kterému Vinted nic nenajde, nevrátí nulu: Vinted ho doplní náhradní nabídkou. Při našem testu s vymyšleným výrazem uvedl 123 výsledků a poslal 96 inzerátů, které s dotazem neměly nic společného. Prázdný seznam API vrací jen tehdy, když sám Vinted uvede 0 výsledků.
Po zářijové změně dostal motor kontrolu, která pozná rozdíl mezi „adresa zmizela“ (místo JSON přijde HTML stránka 404) a „nic se nenašlo“. Díky ní se příčina říjnového výpadku ukázala během několika minut. Kdo píše vlastní scraper pro vinted.cz, potřebuje stejné rozlišení, jinak se zrušená adresa tváří jako prázdný výsledek.
Omezení a poctivé poznámky
- Vinted toto API neprovozuje ani neschválil. Partnerství ani smlouvu s Vintedem nemáme.
- Když `tld` chybí, použije se `fr`: odpověď pak pochází z vinted.fr a ceny jsou v eurech.
- Pět endpointů na vinted.cz momentálně nefunguje správně, a proto v tabulce nejsou. Měřeno 28. října 2026, dva pokusy u každého: `autocomplete` a `conditions` vrátily UPSTREAM_HTTP, `catalog_filters` NOT_FOUND a `similar` TARGET_BLOCKED („Přístup zamítnut“); neúspěšná volání nestála nic. `brand_search` sice odpovídá, ale hledaný výraz ignoruje: „zara“ i „nike“ vrátily stejných 12 značek (adidas, Calvin Klein, GUESS, H&M …) a každé takové volání stálo 1 kredit.
- Id značek, stavů a materiálů proto teď nejde vyhledat. Filtr `brand_ids` funguje s id, která už znáte: Zara má 12, Nike 53, H&M 7, adidas 14. S `brand_ids: [12]` přišlo 10 z 10 inzerátů značky Zara. Řádky hledání nesou jen název značky, ne její id.
- Při výchozím řazení od nejnovějších vrátil vinted.cz v obou našich dotazech jen zahraniční inzeráty s cenou přepočtenou na koruny (20 z 20). Při řazení podle relevance to bylo u „zimní bunda“ 1 ze 40 a u „mikina nike“ 4 z 10. Filtr podle země prodávajícího neexistuje; kdo počítá jen s českými inzeráty, musí je vytřídit sám.
- U zahraničního inzerátu vrací `item_detail` cenu v měně prodávajícího. Bunda, kterou hledání ukázalo za 1 610,51 Kč, měla v detailu 350 RON. Pro porovnání v korunách použijte cenu z `catalog_search`.
- `item_detail` nemá u všech inzerátů správnou velikost. U českého inzerátu byla v pořádku (S); u rumunského chyběla a atribut „Velikost“ obsahoval slovo „Stav“. Stav je v detailu jen ve tvaru schema.org (`UsedCondition`) a `url` je null. České označení stavu a velikost spolehlivěji obsahuje řádek z hledání.
- Vinted vydá nejvýš 960 výsledků na jednu kombinaci filtrů. Kdo potřebuje víc, musí hledání rozdělit podle kategorie, velikosti nebo cenového rozmezí.
- Cenu dopravy nevrací žádný endpoint; `total_item_price` obsahuje jen poplatek za ochranu kupujícího. Historii změn ceny API nevede, takže snížení ceny u inzerátu se dá sledovat jen z vlastních záznamů s datem.
- V řádcích hledání jsou čas nahrání, počet zobrazení a stavové příznaky null. Tato pole vrací `seller_items`, u jednotlivého inzerátu i `item_detail` (`is_reserved`, `can_buy`).
- `catalog_search` a `item_detail` stojí 2 kredity za volání, ostatní endpointy 1. Neúspěšná volání se neúčtují.