Pour récupérer les données Vinted dans du code, utilisez l'API Vinted de Scavio. Un POST /api/v1/vinted/search avec "country": "fr" et une requête renvoie 96 annonces de vinted.fr par appel, chacune avec le prix, les frais Vinted, le total payé par l'acheteur hors livraison, la taille, l'état, les photos et l'identifiant du vendeur. Traduisez d'abord marques, catégories et états en identifiants avec /brands, /categories et /filters, lisez une annonce en entier (description, photos, vendue ou réservée) avec /product, et vérifiez le vendeur avec /seller et /seller-feedback. Chaque appel coûte 1 crédit, sur n'importe lequel des 27 sites Vinted.
L'API officielle de Vinted, Vinted Pro Integrations, est réservée aux entreprises Vinted Pro admises sur liste et gère leurs propres articles et commandes ; elle ne cherche pas dans la marketplace. Les étapes ci-dessous donnent le côté marketplace en JSON avec une seule clé Scavio. Toutes les réponses ont été capturées le 9 novembre 2026 sur vinted.fr, et l'exemple suit une robe Sézane en taille S / 36.
Étape 1 : transformer les noms en identifiants
Les filtres de recherche attendent des identifiants, pas des noms. Partez de ce que tapent les acheteurs :
curl -s https://api.scavio.dev/api/v1/vinted/suggestions \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "query": "robe séz"}'data capturé (6 suggestions sur 10 retirées) :
{
"country": "fr",
"query": "robe séz",
"count": 10,
"suggestions": [
{"text": "robe sézane hiver", "type": "non_parent_cat+brand+attr"},
{"text": "robe sézane longue", "type": "non_parent_cat+brand+attr"},
{"text": "robe sézane laine", "type": "non_parent_cat+brand+attr"},
{"text": "robe sézane manches longues", "type": "non_parent_cat+brand+attr"}
]
}Les suggestions arrivent dans la langue du site : ce que tapent les acheteurs de vinted.fr, utile aussi pour rédiger des titres d'annonces. Puis l'identifiant de la marque :
curl -s https://api.scavio.dev/api/v1/vinted/brands \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "query": "sezane"}'data capturé (8 marques sur 10 retirées) :
{
"country": "fr",
"query": "sezane",
"count": 10,
"brands": [
{"id": 38437, "title": "Sézane", "slug": "sezane", "url": "https://www.vinted.fr/brand/38437-sezane", "item_count": 1277896, "is_luxury": true, "requires_authenticity_check": true},
{"id": 5805509, "title": "Sézane x La Redoute", "slug": "sezane-x-la-redoute", "url": "https://www.vinted.fr/brand/5805509-sezane-x-la-redoute", "item_count": 1792, "is_luxury": true, "requires_authenticity_check": true}
]
}La correspondance est approximative : la même réponse liste Sea New York ou Stefanel. Prenez le title exact. item_count est le nombre d'annonces de la marque sur ce site, 1 277 896 pour Sézane, ce qui fait de /brands un moyen rapide de mesurer une marque. La catégorie vient de /categories ({"country": "fr", "parent_id": 1904} renvoie l'arbre Femmes) ou du category.path d'une fiche : Femmes > Vêtements > Robes porte l'identifiant 10.
Étape 2 : les identifiants d'état et de taille, avec leurs compteurs
curl -s https://api.scavio.dev/api/v1/vinted/filters \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "filter": "status", "query": "robe sézane", "category_id": 10}'data capturé (descriptions retirées) :
{
"country": "fr",
"filter": "status",
"search_param": "status_ids",
"query": "robe sézane",
"category_id": 10,
"count": 5,
"options": [
{"id": 6, "title": "Neuf avec étiquette", "item_count": 5985},
{"id": 1, "title": "Neuf sans étiquette", "item_count": 11292},
{"id": 2, "title": "Très bon état", "item_count": 40814},
{"id": 3, "title": "Bon état", "item_count": 4186},
{"id": 4, "title": "Satisfaisant", "item_count": 385}
]
}search_param indique le paramètre de recherche qui reçoit ces identifiants. Les compteurs sont en direct : sur vinted.fr, 62 662 annonces correspondaient à « robe sézane » dans Robes, dont 40 814 en très bon état. Le même endpoint accepte "filter": "size", "color" ou "material" : pour les robes, il a renvoyé 70 tailles, dont S / 36 / 8 avec l'identifiant 3 (22 481 annonces). Les libellés suivent la langue du site, les identifiants sont les mêmes partout.
Étape 3 : rechercher avec les filtres
curl -s https://api.scavio.dev/api/v1/vinted/search \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "query": "robe sézane", "brand_ids": [38437], "category_id": 10, "size_ids": [3], "status_ids": [2], "price_to": 60, "sort": "newest_first"}'data capturé en 3,8 secondes (94 annonces sur 96 retirées, identifiants des vendeurs particuliers supprimés) :
{
"country": "fr",
"currency": "EUR",
"query": "robe sézane",
"page": 1,
"per_page": 96,
"count": 96,
"listed_results": 960,
"total_is_capped": true,
"total_pages": 10,
"has_more": true,
"filters": {
"query": "robe sézane",
"category_ids": [10],
"brand_ids": [38437],
"status_ids": [2],
"size_ids": [3],
"color_ids": [],
"material_ids": [],
"price_from": null,
"price_to": 60,
"currency": "EUR",
"sort": "newest_first"
},
"items": [
{
"id": 10731896932,
"title": "Robe Sézane bleu marine avec motifs",
"url": "https://www.vinted.fr/items/10731896932-robe-sezane-bleu-marine-avec-motifs",
"price": 35,
"currency": "EUR",
"price_with_discount": null,
"service_fee": 2.45,
"total_price": 37.45,
"brand": "Sézane",
"size": "EU 36",
"condition": "Très bon état",
"favourite_count": 0,
"is_promoted": false,
"image": "https://images1.vinted.net/t/01_00eac_Uh9wzN2GT1xLrUtXzBkJrEd2/f800/a0494fd8.webp?s=2423c979f51d5df525520b1d4a074f28bd31377d",
"thumbnail": "https://images1.vinted.net/t/01_00eac_Uh9wzN2GT1xLrUtXzBkJrEd2/310x430/a0494fd8.webp?s=7dfd0eff85786227313e516394d30db72b45af17",
"photos": ["https://images1.vinted.net/t/01_00eac_Uh9wzN2GT1xLrUtXzBkJrEd2/f800/a0494fd8.webp?s=2423c979f51d5df525520b1d4a074f28bd31377d"],
"seller": {"is_business": false}
},
{
"id": 10732351078,
"title": "Sézane Leopard Dress - Size 36",
"url": "https://www.vinted.fr/items/10732351078-sezane-leopard-dress-size-36",
"price": 32,
"currency": "EUR",
"price_with_discount": null,
"service_fee": 2.3,
"total_price": 34.3,
"brand": "Sézane",
"size": "EU 36",
"condition": "Très bon état",
"favourite_count": 7,
"is_promoted": false,
"image": "https://images1.vinted.net/t/01_002fe_a5apKcGVo3RMdTjkbfonbxxa/f800/9dbc2a6a.webp?s=b2196390423f7c082819d12506efd8824576fd89",
"thumbnail": "https://images1.vinted.net/t/01_002fe_a5apKcGVo3RMdTjkbfonbxxa/310x430/9dbc2a6a.webp?s=00eda135af468d93a80520c42876cb107adf4eaa",
"photos": ["https://images1.vinted.net/t/01_002fe_a5apKcGVo3RMdTjkbfonbxxa/f800/9dbc2a6a.webp?s=b2196390423f7c082819d12506efd8824576fd89"],
"seller": {"is_business": false}
}
]
}Lisez une ligne ainsi : l'annonce demande 35 €, les frais Vinted (service_fee) sont de 2,45 €, l'acheteur paie donc 37,45 € hors livraison. Sur les 480 annonces Sézane relevées ce jour-là, les frais valaient toujours 0,70 € plus 5 % du prix ; la livraison n'est pas renvoyée. Le bloc filters montre ce que Vinted a appliqué : tous les identifiants envoyés y sont, donc les 96 lignes sont bien en S / 36, en très bon état et à 60 € au plus. La deuxième ligne, « Sézane Leopard Dress - Size 36 », rappelle que le catalogue européen est partagé : des annonces rédigées dans d'autres langues remontent sur vinted.fr, en euros. listed_results: 960 avec total_is_capped: true signifie au moins 960 correspondances, pas exactement 960 : Vinted sert 10 pages de 96, pas plus. Pour une étude de prix, une recherche par état donne l'écart ; sur cette requête, le prix médian allait de 85 € neuf avec étiquette à 20 € en état satisfaisant :
Étape 4 : lire une annonce et savoir si elle est vendue
curl -s https://api.scavio.dev/api/v1/vinted/product \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "item_id": 10731896932}'data capturé en 10,7 secondes (3 photos sur 4 retirées ; pseudo, identifiant et URL de profil de la vendeuse supprimés) :
{
"country": "fr",
"id": 10731896932,
"url": "https://www.vinted.fr/items/10731896932-robe-sezane-bleu-marine-avec-motifs",
"title": "Robe Sézane bleu marine avec motifs",
"description": "Robe bleu marine avec motifs roses et oranges, presque jamais portée.",
"description_translated": false,
"price": 35,
"currency": "EUR",
"brand": {"id": 38437, "name": "Sézane"},
"size": null,
"condition": "Très bon état",
"color": "Marine, Rouge",
"material": null,
"uploaded_relative": "Il y a une heure",
"category": {
"id": 1056,
"name": "Midi",
"path": [
{"id": 1904, "title": "Femmes", "url": "https://www.vinted.fr/catalog/1904-women"},
{"id": 4, "title": "Vêtements", "url": "https://www.vinted.fr/catalog/4-clothing"},
{"id": 10, "title": "Robes", "url": "https://www.vinted.fr/catalog/10-dresses"},
{"id": 1056, "title": "Midi", "url": "https://www.vinted.fr/catalog/1056-midi-dresses"}
]
},
"photos": ["https://images1.vinted.net/t/01_00eac_Uh9wzN2GT1xLrUtXzBkJrEd2/f800/a0494fd8.webp?s=2423c979f51d5df525520b1d4a074f28bd31377d"],
"favourite_count": 0,
"is_reserved": false,
"is_sold": false,
"status_label": null,
"can_buy": true,
"instant_buy": true,
"is_hidden": false,
"seller": {"is_business": false, "feedback_count": 16, "feedback_reputation": 0.84, "badges": []}
}Deux détails à connaître. uploaded_relative est la formule de Vinted (« Il y a une heure »), pas un horodatage. Et la fiche affiche le prix dans la devise du vendeur : en euros ici, mais pas toujours. Le même jour sur vinted.co.uk, un jean affiché 10,43 £ dans la recherche est revenu de /product à 20 AUD, car son vendeur est en Australie. Comparez des prix de recherche entre eux. La fiche ne renvoie pas les frais : prenez service_fee dans la ligne de recherche. feedback_reputation est une note de 0 à 1.
Une annonce vendue répond toujours, avec son dernier prix, "is_sold": true, "status_label": "Sold" et "can_buy": false ; une annonce réservée a "is_reserved": true. C'est ainsi qu'un outil de suivi sait s'arrêter : relisez l'article, et quand is_sold ou is_reserved passe à true, retirez-le. La recherche ne renvoie jamais d'annonces vendues : c'est un article à la fois, pas un historique des ventes.
Étape 5 : vérifier le vendeur
Le seller.id d'une ligne de recherche ou d'une fiche alimente trois endpoints. L'exemple est une boutique professionnelle, la_casa_du_phoenix (8670378) :
curl -s https://api.scavio.dev/api/v1/vinted/seller \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "user_id": 8670378}'data capturé en 3,5 secondes :
{
"country": "fr",
"id": 8670378,
"login": "la_casa_du_phoenix",
"profile_url": "https://www.vinted.fr/member/8670378-lacasaduphoenix",
"is_business": true,
"feedback_count": 1907,
"feedback_reputation": 1,
"positive_feedback_count": 1894,
"neutral_feedback_count": 4,
"negative_feedback_count": 9,
"item_count": 330,
"country_code": "FR",
"country_name": "France",
"city": null,
"verification": {"email": true, "facebook": false, "google": false},
"avg_response_time": null,
"is_on_holiday": false,
"last_seen_date": "2026-11-09"
}feedback_reputation: 1 côtoie 9 avis négatifs : citez les compteurs, pas la note, quand les réclamations comptent. Puis les avis, jusqu'à 50 par page :
curl -s https://api.scavio.dev/api/v1/vinted/seller-feedback \
-H "Authorization: Bearer $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"country": "fr", "user_id": 8670378, "limit": 50}'data capturé (48 lignes sur 50 retirées) :
{
"country": "fr",
"user_id": 8670378,
"page": 1,
"per_page": 50,
"total_results": 1907,
"total_pages": 39,
"count": 50,
"has_more": true,
"feedback": [
{"id": 4710949781, "rating": 5, "text": "J’adore ! Vendeuse très agréable et sérieuse.", "created_at": "2026-11-09T09:25:39.000Z", "is_automatic": false, "seller_reply": null},
{"id": 4709339023, "rating": 5, "text": "Évaluation automatique : vente réalisée avec succès", "created_at": "2026-11-08T18:45:07.000Z", "is_automatic": true, "seller_reply": null}
]
}22 des 50 lignes étaient des évaluations automatiques de Vinted : filtrez sur is_automatic avant de résumer ce qu'ont écrit les acheteurs. Les 28 autres, du 26 octobre au 9 novembre, comptaient 27 notes de 5 étoiles et une note d'une étoile, avec la réponse de la boutique dans seller_reply. Vinted note les deux côtés d'une transaction, et quelques avis décrivent le compte comme acheteur (« Ottima acquirente »). Les lignes ne portent ni auteur ni article, par conception. /seller-products avec le même user_id et "limit": 96 a renvoyé la première page de ses 330 articles (4 pages), de 18 € à 147 €, chacun avec frais, total et indicateurs is_sold et is_reserved.
Étape 6 : créer un bot d'alertes Vinted avec l'API
import time
import requests
KEY = "sk_live_votre_cle" # depuis le tableau de bord Scavio
BODY = {"country": "fr", "query": "robe sézane", "brand_ids": [38437], "category_id": 10,
"size_ids": [3], "status_ids": [2], "price_to": 60, "sort": "newest_first"}
vus = set()
while True:
r = requests.post("https://api.scavio.dev/api/v1/vinted/search", json=BODY,
headers={"Authorization": f"Bearer {KEY}"}, timeout=60)
for item in r.json()["data"]["items"]:
if item["id"] not in vus:
vus.add(item["id"])
print(item["total_price"], item["currency"], item["title"], item["url"])
time.sleep(300) # une vérification toutes les 5 minutes : 288 crédits par jourAu premier passage, vus se remplit avec les 96 annonces actuelles ; ensuite, seules les nouvelles s'affichent. Envoyez-les sur Discord, Telegram ou par e-mail au lieu de les afficher. L'API ne renvoie que des données : elle n'achète pas, ne fait pas d'offre et n'écrit pas aux vendeurs, et elle ne se connecte à aucun compte Vinted.
Les 9 endpoints
| Endpoint | Ce qu'il renvoie | Crédits |
|---|---|---|
/api/v1/vinted/search | 96 annonces par page, pages 1 à 10, avec prix, frais Vinted, total, taille, état, photos et identifiant du vendeur, plus les filtres appliqués | 1 |
/api/v1/vinted/product | Une annonce par identifiant ou URL : description, toutes les photos, chemin de catégorie, état vendu ou réservé, note du vendeur | 1 |
/api/v1/vinted/seller | Le profil public d'un membre : note, avis positifs, neutres et négatifs, articles en ligne, vérifications | 1 |
/api/v1/vinted/seller-products | Les articles d'un membre, jusqu'à 96 par page, avec frais, total et indicateurs vendu et réservé | 1 |
/api/v1/vinted/seller-feedback | Les avis, jusqu'à 50 par page, du plus récent au plus ancien, avec l'indicateur automatique et la réponse du membre | 1 |
/api/v1/vinted/brands | Les identifiants de marque avec nombre d'annonces et indicateurs luxe et vérification d'authenticité | 1 |
/api/v1/vinted/suggestions | Jusqu'à 10 suggestions de la barre de recherche, dans la langue du site | 1 |
/api/v1/vinted/filters | Les identifiants de taille, d'état, de couleur ou de matière avec compteurs en direct | 1 |
/api/v1/vinted/categories | L'arborescence des catégories dans la langue du site, ou un sous-arbre | 1 |
Les erreurs ne sont pas facturées : un article, un membre ou une catégorie inconnu renvoie une 404, une panne passagère une 502. Chaque endpoint accepte country : fr (par défaut) et les autres sites européens, uk, us ou au. Il n'y a pas de recherche dans les annonces vendues, ni de frais de livraison, ni d'articles similaires. Pour comparer toutes les options Vinted, lisez les meilleures API Vinted en 2026 ; pour une alerte sur une recherche enregistrée, ce cas pratique.
Pour commencer
- Inscrivez-vous sur dashboard.scavio.dev/sign-up : 50 crédits offerts, sans carte bancaire, de quoi faire 50 appels Vinted.
- Copiez votre clé API depuis le tableau de bord.
- Envoyez un POST sur
/api/v1/vinted/searchavec{"country": "fr", "query": "robe sézane"}et votre clé dans l'en-têteAuthorization.
Essayez l'API Vinted gratuitement dans le playground, utilisez le SDK Python, ou appelez-la depuis Claude et d'autres agents via le serveur MCP.
Références : API Vinted de Scavio · recherche · fiche article · vendeur · articles d'un vendeur · avis · marques · filtres · catégories · suggestions
Frequently asked questions
Comment trouver l'identifiant d'une marque ou d'une catégorie Vinted ?
Appelez /api/v1/vinted/brands avec un nom : « sezane » a renvoyé Sézane, identifiant 38437, avec 1 277 896 annonces sur vinted.fr le 9 novembre 2026. La catégorie se lit dans le champ category.path d'une fiche article ou dans /api/v1/vinted/categories (Femmes > Vêtements > Robes porte l'identifiant 10). /api/v1/vinted/filters donne les identifiants d'état, de taille, de couleur et de matière avec leur nombre d'annonces. Les identifiants sont les mêmes sur les 27 sites.
Pourquoi une annonce en allemand ou en anglais apparaît-elle sur vinted.fr ?
Les sites Vinted européens partagent un même catalogue transfrontalier. Une recherche sur vinted.fr renvoie donc aussi des annonces publiées depuis l'Allemagne, l'Espagne ou l'Italie, affichées en euros. Sur nos 480 annonces de robes Sézane, 408 titres contenaient le mot « robe ». Pour un résultat plus français, cherchez avec des mots français et un filtre de marque ou de catégorie.
Combien de résultats peut renvoyer une recherche Vinted ?
96 par page et 10 pages, donc 960 au plus. Quand total_is_capped vaut true, il y a plus de correspondances ; affinez avec une catégorie, une marque, une taille, un état ou une fourchette de prix et lancez chaque tranche séparément.
Peut-on savoir si un article Vinted est vendu ?
Oui, article par article. /api/v1/vinted/product renvoie is_sold à true, status_label « Sold » et can_buy à false pour une annonce vendue, avec son dernier prix ; is_reserved signale une annonce réservée. La recherche ne renvoie que des annonces encore en vente : il n'existe pas de liste des articles vendus à parcourir.
Combien coûte l'accès aux données Vinted avec Scavio ?
Chaque endpoint Vinted coûte 1 crédit par appel, soit 1 $ les 1 000 requêtes au tarif Growth de 1 $ les 1 000 crédits. Une recherche renvoie 96 annonces pour ce crédit. Les erreurs, comme un article inconnu (404), ne sont pas facturées, et un nouveau compte reçoit 50 crédits sans carte bancaire.