Pour construire un outil de veille sur Vinted, interrogez l’endpoint `/api/v1/vinted/search` avec une URL de catalogue pré-filtrée. Ce script Python extrait les champs `brand`, `price` et `size` pour structurer vos données dans un format exploitable immédiatement.

Sommaire
La sécurisation de l'infrastructure commence par la gestion rigoureuse des identifiants et le choix des bibliothèques HTTP. Vous devez installer requests via votre environnement virtuel standard, car il offre un contrôle précis sur les en-têtes et la persistance des sessions. La clé API, générée une seule fois dans votre tableau de bord LeBonDeal, ne doit jamais être hardcodée ni commitée dans le code source. Elle s'injecte impérativement via les variables d'environnement pour éviter toute exposition accidentelle lors du déploiement ou du partage de scripts.
import os
import requests
BASE_URL = os.environ.get("LEBONDEAL_BASE_URL", "https://bot.lebondeal-bot.fr")
API_KEY = os.environ["LEBONDEAL_API_KEY"]
VINTED_ENDPOINT = "/api/v1/vinted/search"
def get_vinted_trends(url: str) -> dict:
headers = {"Authorization": f"Bearer {API_KEY}"}
try:
response = requests.get(
url=f"{BASE_URL}{VINTED_ENDPOINT}",
params={"url": url},
headers=headers,
timeout=45
)
if response.status_code == 429:
print("Limite de débit atteinte. Attendez avant de réessayer.")
return None
if response.status_code != 200:
err = response.json().get('error', 'unknown')
raise Exception(f"Erreur API ({response.status_code}): {err}")
data = response.json()
# Vérification des crédits restants
credits_remaining = data.get("credits_remaining")
if not credits_remaining:
print("Attention : champ credits_missing manquant dans la réponse.")
return data
except requests.exceptions.Timeout:
print("Timeout serveur (45s). Réessayez plus tard.")
return None
except Exception as e:
print(f"Erreur critique : {e}")
return None
if __name__ == "__main__":
# Exemple d'appel avec une URL de catalogue Vinted filtrée
catalog_url = "https://www.vinted.fr/catalog?search_text=jackie+oates&brand_id[]=123"
results = get_vinted_trends(catalog_url)
if results:
print(f"Annonces trouvées : {results.get('count')}")Ce script initialise la connexion en chargeant dynamiquement les identifiants depuis le système d'exploitation. Il utilise requests pour envoyer une requête GET vers l'endpoint Vinted avec un timeout de 45 secondes, nécessaire face aux latences potentielles du scraping externe. La gestion des erreurs capture spécifiquement le code 429 (rate limiting) et les exceptions réseau, tout en validant la présence des champs critiques comme credits_remaining. Pour plus de détails sur l'intégration technique, consultez la documentation Vinted.
L'API LeBonDeal ne reconstruit pas vos filtres de recherche. Vous devez copier l'URL exacte du catalogue depuis votre navigateur après avoir appliqué les critères de veille. Cette contrainte technique découle de la complexité des requêtes internes aux marketplaces et garantit que vous récupérez exactement ce qu'un utilisateur verrait à cet instant.
Pour construire la bonne URL, suivez cette procédure :
L'argument url doit être passé tel quel en paramètre GET de votre requête vers l'endpoint Vinted. Ne modifiez pas les paramètres de page ou de tri, car ils sont gérés par le crawler serveur.
invalid_url.Le script suivant illustre l'appel direct à l'endpoint Vinted, en respectant strictement le protocole d'authentification par bearer token. Il intègre un timeout de 45 secondes, nécessaire car les incidents temporaires peuvent prolonger la latence serveur au-delà des standards habituels.
import os
import requests
from urllib.parse import urljoin
BASE_URL = os.environ.get("LEBONDEAL_BASE_URL", "https://bot.lebondeal-bot.fr")
API_KEY = os.environ["LEBONDEAL_API_KEY"]
def fetch_vinted_trends(url: str):
headers = {"Authorization": f"Bearer {API_KEY}"}
# Gestion des erreurs de connexion et timeout étendu (45s)
try:
response = requests.get(
urljoin(BASE_URL, "/api/v1/vinted/search"),
params={"url": url},
headers=headers,
timeout=45
)
# Gestion des limites de taux et erreurs serveur
if response.status_code == 429:
print("Erreur : limite de débit atteinte. Réessayez plus tard.")
return None
if response.status_code != 200:
error_data = response.json()
raise Exception(f"API Error ({response.status_code}): {error_data.get('message')}")
data = response.json()
# Nettoyage : conversion du prix "15.0 EUR" en float pour analyse
items_raw = data.get("items", [])
cleaned_items = []
for item in items_raw:
price_str = item.get("price", "")
try:
# Extraction simple de la valeur numérique avant l'espace et la devise
price_val = float(price_str.split()[0])
except (ValueError, IndexError):
price_val = 0.0
cleaned_items.append({
"id": item.get("id"),
"title": item.get("title"),
"brand": item.get("brand"),
"size": item.get("size"),
"price_cleaned": price_val,
"status": item.get("status")
})
print(f"Extraction terminée. {len(cleaned_items)} articles traités.")
return cleaned_items
except requests.exceptions.Timeout:
raise Exception("Timeout : la requête a dépassé 45 secondes.")
except requests.exceptions.RequestException as e:
raise Exception(f"Erreur réseau : {e}")
# Exemple d'utilisation avec une URL de catalogue Vinted filtrée
if __name__ == "__main__":
# Remplacez par votre URL de catalogue Vinted configurée dans le navigateur
catalog_url = "https://www.vinted.fr/catalog?search_text=nic&brand_id=123"
try:
results = fetch_vinted_trends(catalog_url)
if results:
for r in results[:5]: # Affichage des 5 premiers résultats pour vérification
print(f"- {r['title']} | Marque: {r['brand']} | Prix: {r['price_cleaned']:.2f}€")
except Exception as e:
print(e)Ce code exécute la requête GET, gère le timeout potentiellement long et transforme le prix en chaîne numérique pour l'analyse. La conversion du champ price (format "15.0 EUR") en float permet d'alimenter directement des outils de statistiques ou de visualisation sans traitement supplémentaire complexe côté client.
Les champs brand et size constituent les piliers de l'analyse structurelle sur Vinted. Contrairement au prix, qui fluctue selon la négociation ou l'état du vêtement, ces deux attributs définissent le segment de marché cible. Une veille efficace ne se limite pas à relever les coûts moyens ; elle doit identifier les ruptures d'équilibre entre l'offre (marque/taille) et la demande implicite via le prix.
Pour extraire une valeur pertinente, vous devez croiser ces données sur un échantillon statistique significatif. Un seul listing ne permet pas de dégager une tendance fiable en raison des anomalies (ventes forcées, erreurs de saisie). L'agrégation des résultats renvoyés par l'endpoint Vinted vous donne accès à la distribution réelle du marché.
Voici les points clés à surveiller lors du nettoyage :
size peut contenir des valeurs standardisées (S, M, L) ou spécifiques ("38", "EU 42"). Si votre analyse vise une comparaison inter-catégories, mappez ces valeurs vers un code universel pour éviter les biais.Activez l'accès à l'API Vinted et configurez vos filtres de recherche directement depuis votre tableau de bord.
Découvrir l'API LeBonDealLire la documentationLorsque vous interrogez l’endpoint Vinted via notre API, une réponse HTTP 503 avec l’erreur unexpected_error peut provenir de deux causes distinctes : un échec technique persistant ou une recherche légitimement vide. Le serveur ne distingue pas ces scénarios côté client pour des raisons architecturales et de confidentialité des données sources.
Il est donc impossible de déterminer par le seul code retour si l’absence d’annonces résulte d’une absence réelle sur la plateforme ou d’un problème de connexion aux serveurs cibles. Cette indistinction technique implique une stratégie de reprise spécifique pour ne pas fausser vos statistiques de veille.
Lorsqu’une requête échoue avec ce statut, aucun crédit n’est débité (credits_charged reste à 0). Vous pouvez donc réessayer sans crainte financière immédiate, mais vous devez intégrer un mécanisme de détection robuste :
error dans la réponse JSON.unexpected_error, considérez que les données sont indisponibles pour cet instant T.Notez également que la durée de traitement peut varier significativement. En cas de réessais internes silencieux côté serveur pour résoudre des incidents temporaires, une requête normale peut s’étendre jusqu’à 40 secondes. Il est impératif de configurer votre client HTTP avec un timeout d’au moins 45 secondes pour éviter les interruptions prématurées qui ne sont pas gérées par l’API comme des échecs complets mais comme des timeouts réseau classiques, potentiellement facturables si la requête a été traitée partiellement avant coupure.
Pour comprendre comment ces erreurs s’intègrent dans votre consommation globale et vos limites de débit spécifiques à cette source, consultez les détails techniques sur la documentation Vinted.
Comment analyser plusieurs tailles simultanément sur Vinted ?
L'API ne filtre pas par taille dans la réponse. Vous devez récupérer les annonces via l’URL de catalogue et traiter le champ `size` côté client pour isoler les données souhaitées.
L'API retourne-t-elle toutes les pages de résultats Vinted ?
Non, cet endpoint ne renvoie que la première page des résultats disponibles sur l’URL fournie, sans paramètre de pagination supplémentaire.
Quelle durée d'attente est recommandée pour une requête API ?
Configurez un timeout client d'au moins 45 secondes pour absorber les délais liés aux tentatives silencieuses en cas d’incident serveur.
Peut-on récupérer l'historique des prix via cet endpoint ?
L’endpoint ne fournit que les données courantes des annonces visibles et n’accède pas à l’historique des variations de prix passées.
LeBonDealBot Discord gratuit pour vos alertes Leboncoin, et API à la demande pour extraire des données Leboncoin, Vinted, Kleinanzeigen et Marktplaats en JSON.
© 2026 LeBonDeal — Tous droits réservés.