API

API Vinted : annonces, prix et dressings de vinted.fr en JSON

Vinted ne publie pas d'API pour consulter son catalogue. Celle-ci lit vinted.fr comme le ferait un visiteur non connecté : titre, marque, taille, état, prix en euros et photos de chaque annonce, plus le prix final, frais de Protection acheteurs compris. Ce n'est pas un outil pour vendeurs, Vinted Pro compris : rien n'est mis en ligne ni modifié, on se contente de lire ce qui est en vente.

Endpoints

endpointCe qui est renvoyéObligatoires
catalog_searchRecherche par mot-clé et filtres (marque, catégorie, taille, état, couleur, matière, fourchette de prix), avec les quatre tris de Vinted. Jusqu'à 96 annonces par page.tous optionnels
item_detailUne annonce par identifiant ou URL : description, toutes les photos, catégorie, couleur, matière, et si l'article est réservé ou encore achetable.tous optionnels
sellerLe profil public d'un membre : note, nombre d'articles, répartition des évaluations.id
seller_itemsLe dressing d'un membre, c'est-à-dire ses articles en vente, avec leur statut (réservé, vendu, masqué).id
seller_feedbackLes évaluations laissées à un membre : texte et note.id
similarLes articles que Vinted propose comme proches d'une annonce donnée.id
brand_searchTransforme un nom de marque en brand_id pour le filtre de recherche, avec le nombre d'annonces.tous optionnels
autocompleteLes suggestions de la barre de recherche, dans la langue du site choisi.query
catalog_filtersLes filtres disponibles pour un mot-clé ou une catégorie, avec les identifiants de chaque option.tous optionnels
categoriesL'arborescence complète des catégories du site, avec identifiants et adresses.tous optionnels
sizesLes grilles de tailles et leurs identifiants pour size_ids.tous optionnels
conditionsLa liste des états (Neuf avec étiquette, Très bon état…) et leurs status_ids.tous optionnels
colorsLes couleurs avec leur identifiant et leur code hexadécimal.tous optionnels
countriesLes pays Vinted avec code ISO et devise.tous optionnels

Chaque appel est facturé en crédits. Les appels en échec ou bloqués sont gratuits.

Exemple qui fonctionne

`price` est le prix fixé par le vendeur ; `total_item_price` y ajoute les frais de Protection acheteurs (`service_fee`) : 40 € deviennent 42,70 €. Pour comparer des prix entre annonces, choisissez l'un des deux champs et tenez-vous-y. Sans `tld`, c'est vinted.fr qui est interrogé ; pour la Belgique, passez `"tld": "be"`.

Requête
curl -X POST https://api.reefapi.com/vinted/v1/catalog_search \
  -H "x-api-key: VOTRE_CLE" \
  -H "content-type: application/json" \
  -d '{"query": "robe Sézane", "tld": "fr", "per_page": 20, "order": "newest_first"}'
Réponse (abrégée)
{
  "ok": true,
  "data": {
    "items": [
      {
        "id": 10511498155,
        "title": "Robe Sézane",
        "url": "/items/10511498155-robe-sezane",
        "price": { "amount": 40, "currency": "EUR" },
        "total_item_price": { "amount": 42.7, "currency": "EUR" },
        "service_fee": { "amount": 2.7, "currency": "EUR" },
        "brand": "Sézane",
        "size": "EU 38",
        "condition": "Bon état",
        "favourite_count": 0,
        "uploaded_ts": null,
        "seller": { "id": 17510522, "login": null, "business": false }
      },
      ...
    ],
    "pagination": { "current_page": 1, "per_page": 20, "total_entries": 960, "total_pages": 48 },
    "tld": "fr"
  },
  "meta": {
    "record_count": 20,
    "total_entries": 960,
    "window_cap": 960,
    "warnings": ["source_fields_unavailable: uploaded_ts, seller.login, ... (catalog listing page does not publish them)"],
    "cache_hit": false,
    "mode": "live"
  }
}

Scraper Vinted en Python : trois pièges à connaître

Une recherche Vinted ne revient presque jamais vide. Quand rien ne correspond, le site remplit la page avec une grille de remplacement : une requête volontairement absurde nous a renvoyé 96 articles et un total_entries de 123, alors qu'une recherche réellement sans résultat annonce total_entries 0. Un script qui compte les cartes croit avoir trouvé 96 annonces.

Début octobre 2026, Vinted a retiré l'ancienne route JSON de la recherche. Les résultats sont désormais lus dans la page catalogue elle-même, qui dépasse 3,5 Mo. Cette page remplit ses champs vides avec la chaîne "$undefined" (sur 96 articles sur 96 pour certains champs), qu'un parseur naïf enregistre comme une vraie valeur. Ici, ces chaînes deviennent null, et les champs que la page ne publie pas sont listés dans meta.warnings.

Enfin, la fiche article de vinted.fr ne se lit pas comme la ligne de recherche : lors de notre test du 24 octobre 2026, l'attribut « Taille » contenait le mot « État » et l'état arrivait sous la forme UsedCondition. Pour la taille et l'état, fiez-vous à la ligne de recherche.

Si vous écrivez votre propre code, retenez au moins une règle : ne jugez jamais une recherche Vinted au nombre de cartes reçues, lisez total_entries.

Limites et remarques honnêtes

  • API non officielle : Vinted ne la fournit pas et nous n'avons conclu aucun partenariat avec Vinted.
  • Une même combinaison de filtres ne donne pas plus de 960 résultats environ (total_entries plafonne à 960, comme sur notre recherche « robe Sézane »). Pour aller plus loin, resserrez les filtres : marque, taille, fourchette de prix.
  • Les articles de la grille de remplacement ne sont pas retirés de la réponse. Si total_entries est faible ou si les titres s'éloignent de votre recherche, vérifiez la marque et le titre avant d'exploiter les lignes.
  • Les résultats de vinted.fr ne sont pas tous rédigés en français : sur nos 20 lignes, deux titres étaient en allemand et en espagnol (« Sézane Kleid », « Vestido gasa negro Sézane »), prix en euros. Si la langue compte pour vous, filtrez-la de votre côté.
  • Une ligne de recherche n'a ni date de mise en ligne, ni nombre de vues, ni pseudo du vendeur, ni statut de réservation : ces champs valent null et sont listés dans meta.warnings. Le statut réservé ou achetable se trouve dans item_detail et seller_items.
  • Dans item_detail sur vinted.fr, url est null et la taille n'est pas fiable (voir plus haut) : reprenez taille, état et adresse depuis catalog_search.
  • Les frais de port (Mondial Relay, point relais, domicile) ne figurent dans aucune réponse ; seuls le prix et les frais de Protection acheteurs sont renvoyés.