resellflip Guides

Développeurs · publié le

L’API resellflip

Vous envoyez le nom et l’état d’un article. L’API renvoie un prix de revente, sa fourchette, et le nombre de ventes conclues retrouvées pour cet article. Deux routes, des crédits prépayés, pas d’abonnement.

Premier appel en deux minutes

1. Créez une clé

Connectez-vous (ou créez un compte), puis ouvrez l’espace développeur et cliquez sur « Créer une clé ». Copiez-la tout de suite : elle ne s’affiche qu’une fois. Votre première clé vous donne 1 000 crédits offerts, soit 100 estimations, sans carte bancaire.

2. Collez cet appel dans un terminal

Remplacez la clé de la première ligne par la vôtre. Le reste marche tel quel.

export RESELLFLIP_API_KEY="rf_live_collez_votre_cle_ici"

curl https://resellflip.com/api/v1/estimate \
  -H "Authorization: Bearer $RESELLFLIP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Doudoune Uniqlo", "condition": "Bon", "size": "M"}'

3. Lisez la réponse

{
  "price": 35,
  "price_low": 28,
  "price_high": 42,
  "confidence": "moyenne",
  "category": "Mode",
  "comps_count": 0,
  "sales_count": 0,
  "rotation_days": null,
  "rotation_samples": null,
  "credits_remaining": 990
}

Les valeurs ci-dessus sont un exemple. Regardez d’abord comps_count : le nombre d’articles comparables trouvés dans le corpus. sales_count dit combien sont des ventes conclues ; à 0, aucune vente n’a pesé sur le prix. Notre corpus est jeune : ces chiffres valent souvent 0 aujourd’hui, et le prix est alors estimé sans comparables. confidence est l’avis du modèle sur l’article, pas sur le corpus : ce sont ces deux compteurs qu’il faut tester. L’appel vous a coûté 10 crédits ; votre solde est dans credits_remaining.

Appelez l’API depuis votre serveur. Dans un navigateur ou une appli installée chez vos utilisateurs, la clé serait lisible par n’importe qui.

Les champs de la réponse

Champ Ce qu’il contient
price Le prix de revente conseillé
price_low, price_high La fourchette. Un prix juste est un intervalle.
confidence haute, moyenne ou basse. L’avis du modèle sur l’article, pas sur le nombre de ventes.
category La catégorie reconnue
comps_count Le nombre d’articles comparables trouvés : les ventes conclues, ou à défaut les estimations d’articles encore en stock. Peut valoir 0.
sales_count Les ventes conclues trouvées. À 0, aucune vente n’a pesé sur le prix, même quand comps_count est positif.
rotation_days Le délai médian entre la mise en stock et la vente, en jours. null tant qu’il n’y a pas cinq ventes de trois vendeurs distincts : nous préférons ne rien dire qu’inventer un délai.
rotation_samples Le nombre de ventes derrière ce délai
credits_remaining Votre solde après l’appel

Pour un article que le corpus connaît bien, la réponse ressemble plutôt à ceci : sept ventes derrière le prix, et un délai de revente.

{
  "price": 50,
  "price_low": 40,
  "price_high": 60,
  "confidence": "haute",
  "category": "Mode",
  "comps_count": 7,
  "sales_count": 7,
  "rotation_days": 21,
  "rotation_samples": 7,
  "credits_remaining": 90
}

Le corpus est filtré avant usage : les dix-huit derniers mois, une seule ligne par vendeur, et jamais de chiffre bâti sur un seul vendeur.

Dans la version 1, nous pouvons ajouter des champs, jamais en retirer ni en renommer. Ignorez ceux que vous ne connaissez pas et votre code ne cassera pas.

Les deux routes

Toutes deux prennent un POST, un corps JSON, et votre clé dans l’en-tête Authorization: Bearer. Pas de SDK, pas de webhooks, pas de bac à sable : l’essai se fait sur le vrai corpus.

POST /api/v1/estimate · 10 crédits

Une estimation complète. Le corps JSON :

Champ Type Obligatoire Contrainte
name texte oui, sauf si images 200 caractères ; la marque en est déduite
condition texte oui une valeur de la liste ci-dessous
size texte non 30 caractères
notes texte non 500 caractères : défauts, détails
images liste d’objets oui, sauf si name 3 au plus, format ci-dessous
gradingService texte non PSA, BGS, CGC ou SFG
gradingGrade nombre oui si gradingService de 1 à 10, au demi-point

Un texte trop long est tronqué, pas refusé. Il n’y a pas de champ brand sur cette route.

condition n’accepte que ces valeurs, écrites exactement ainsi, accents et majuscule compris. Textile et objets : Neuf, Très bon, Bon ou Satisfaisant. Cartes à collectionner (échelle Cardmarket) : Mint, Near Mint, Excellent, Good, Light Played, Played ou Poor. « Très bon état » ou « neuf » rendent un 400, sans rien débiter.

images : jusqu’à 3 objets { "mime_type", "data" }. data est l’image en base64, sans préfixe data:. Types acceptés : image/jpeg, image/png ou image/webp. Chaque data fait au plus 2 800 000 caractères, environ 2 Mo décodé. Une seule image invalide et tout l’appel rend un 400, sans rien débiter.

{
  "condition": "Bon",
  "images": [
    { "mime_type": "image/jpeg", "data": "/9j/4AAQSkZJRgABAQ…" }
  ]
}

POST /api/v1/comps · 1 crédit, 0 si la liste est vide

Les articles comparables bruts, sans estimation, cinq au plus. Chaque ligne porte kind : sale pour une vente conclue, estimate pour un article encore en stock. Pour une vente, net_price est le prix net vendeur : ce que le vendeur a encaissé, frais de la plateforme déduits. Pour une estimation, c’est le prix que vise son propriétaire.

Le corps porte name, obligatoire (200 caractères), et brand, facultative (80 caractères). Sans brand, la marque est déduite du nom. Pas de photo sur cette route : pour reconnaître un article sur une image, utilisez /estimate. Ajoutez "sold_only": true pour ne recevoir que les ventes ; par défaut, il vaut false. comps_count et sales_count ont le même sens que sur /estimate, et peuvent dépasser cinq.

curl https://resellflip.com/api/v1/comps \
  -H "Authorization: Bearer $RESELLFLIP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"name": "Doudoune Uniqlo", "brand": "Uniqlo"}'

Exemple de réponse :

{
  "comps": [
    {
      "name": "Doudoune Uniqlo",
      "brand": "Uniqlo",
      "condition": "Bon",
      "size": "M",
      "net_price": 32.5,
      "days_ago": 12,
      "kind": "sale"
    },
    {
      "name": "Doudoune ultra légère Uniqlo",
      "brand": "Uniqlo",
      "condition": "Très bon",
      "size": "L",
      "net_price": 40,
      "days_ago": 5,
      "kind": "estimate"
    }
  ],
  "comps_count": 9,
  "sales_count": 9,
  "rotation_days": 18,
  "rotation_samples": 9,
  "credits_remaining": 90
}

Aujourd’hui, vous recevrez souvent une liste vide. C’est un 200, et rien n’est débité :

{
  "comps": [],
  "comps_count": 0,
  "sales_count": 0,
  "rotation_days": null,
  "rotation_samples": null,
  "credits_remaining": 1000
}

Si le corpus met plus de 2,5 secondes à répondre, vous recevez aussi cette liste vide. Vous ne pouvez donc pas distinguer « aucun article » d’une base lente. Dans les deux cas, rien n’est débité.

Les erreurs

Chaque erreur porte un code stable et un message error lisible. Testez le code : le message peut changer.

Statut code Signification Débité ?
400 invalid_request Corps invalide : champ manquant, état hors liste, photo refusée Non
401 unauthorized Clé absente, inconnue ou révoquée Non
402 insufficient_credits Solde insuffisant pour cet appel Non
403 account_suspended Accès API du compte suspendu : aucune clé ne fonctionne Non
404 — Route inconnue de la version 1 Non
405 — Méthode autre que POST Non
429 rate_limited Plus de 60 appels par minute pour cette clé Non
500 internal_error Erreur interne Remboursé
502 upstream_error Le service d’estimation n’a pas répondu Remboursé
503 unavailable Service indisponible Non
504 upstream_error L’estimation a dépassé son délai. Réessayez. Remboursé

Un 429 rate_limited porte un en-tête Retry-After, en secondes. Un 429 upstream_error, plus rare, veut dire que notre service d’estimation sature : l’appel est remboursé. Le 401 rend le même message pour une clé absente et une clé inconnue, exprès. « Remboursé » veut dire que les crédits sont prélevés au début de l’appel puis rendus aussitôt : votre solde ne bouge pas.

Les tarifs

Des crédits prépayés, payés une fois, sans abonnement. Une estimation coûte 10 crédits. Un appel à /comps en coûte 1, et rien quand il ne trouve rien.

Formule Crédits Estimations Prix Par estimation
Essai 1 000 100 Offert Une fois par compte
Pack S 10 000 1 000 49 € 0,049 €
Pack M 100 000 10 000 390 € 0,039 € (−20 %)
Pack L 1 000 000 100 000 2 900 € 0,029 € (−40 %)
Au-delà — — Sur devis —

Les crédits n’expirent pas dans la version actuelle de l’offre. Ceux d’un pack que vous n’avez pas utilisés sont remboursables sur demande. Une erreur de notre côté (5xx) ne vous coûte rien. TVA non applicable, article 293 B du CGI : le prix affiché est le prix payé.

Au-delà du pack L, écrivez à contact@resellflip.com. Envoyez-nous aussi vos catégories : nous vous dirons ce que le corpus couvre vraiment chez vous.

Questions fréquentes

Que se passe-t-il quand le corpus ne connaît pas l’article ?

Vous recevez quand même un prix, mais sans article comparable : comps_count et sales_count valent 0. Le corpus est jeune, donc ça arrive souvent. Lisez ce champ avant d’afficher le prix à vos utilisateurs.

Un appel qui échoue est-il facturé ?

Non. Une erreur de votre côté (400, 401, 402, 429) ne débite rien. Une erreur du nôtre (500, 502, 504) est remboursée aussitôt. Une indisponibilité (503) n’est pas débitée.

Les crédits expirent-ils ?

Non, pas dans la version actuelle de l’offre. Les crédits d’un pack acheté que vous n’avez pas utilisés sont remboursables sur demande. Les crédits d’essai ne le sont pas.

Puis-je stocker les articles comparables renvoyés ?

Vous pouvez les afficher à vos utilisateurs et les garder le temps de les servir. Vous ne pouvez pas les accumuler pour reconstituer le corpus, les revendre comme base de données, ni interroger l’API en boucle pour l’aspirer, ni vous en servir pour monter un service concurrent d’estimation. Les conditions générales le détaillent.

Que faire si ma clé a fuité ?

Révoquez-la et créez-en une autre. Nous ne gardons que son empreinte, donc nous ne pouvons pas vous la renvoyer. Tout appel signé avec elle débite vos crédits : ne la mettez jamais dans du code qui tourne chez vos utilisateurs.

Conditions

L’usage de l’API est encadré par la section « API pour les professionnels » des conditions générales : crédits prépayés, usage acceptable, sécurité de la clé, révocation en cas d’abus. Aucune donnée personnelle de vendeur ne sort par l’API : un article comparable, c’est un nom d’article, une marque, un état, une taille, un prix, une ancienneté et sa nature (kind) : vente ou estimation.

Trois usages sont interdits : vous servir de l’API pour proposer un service concurrent d’estimation de prix de revente, aspirer ou revendre le corpus (en interrogeant /comps en boucle, par exemple), et contourner les limites avec plusieurs comptes ou plusieurs clés. Dans ces cas, toutes les clés du compte sont suspendues sur-le-champ et répondent 403 account_suspended. Les crédits consommés ainsi ne sont pas remboursés. Ceux d’un pack acheté qui restent sont remboursables comme d’habitude, moins les crédits consommés en violation.

Déjà un compte ? Connectez-vous, puis ouvrez l’espace développeur.

Créer ma clé

À lire ensuite : Le label « estimé par resellflip » · Comment on calcule