Documentation de l'API

API REST en lecture seule sur le catalogue Skinlooters : recherche de skins, meilleures offres par marketplace et historique de prix, pour CS2, Rust, TF2 et Dota 2.

← Retour à l'offre API

URL de base

Toutes les routes sont préfixées par /v1/public. Le numéro de version ne change qu'en cas de rupture de compatibilité : l'ajout d'un champ dans une réponse n'en est pas une, votre intégration doit ignorer les champs qu'elle ne connaît pas.

https://api.skinlooters.com/v1/public

Authentification

Chaque requête doit porter votre clé dans l'en-tête X-Api-Key. Elle vous est envoyée par email à la confirmation de l'abonnement, et reste consultable (et régénérable) depuis votre backoffice.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.skinlooters.com/v1/public/skins?game=cs2&query=ak-47&sort=price_asc"

La clé vaut mot de passe : appelez l'API depuis votre serveur, jamais depuis un front web ou une app mobile où elle serait lisible. En cas de fuite, régénérez-la depuis le backoffice — l'ancienne est révoquée immédiatement.

Quotas et limites

Le quota est journalier et se remet à zéro à minuit UTC. Chaque réponse porte l'état courant du compteur :

ChampTypeDescription
X-RateLimit-LimitintegerQuota journalier de votre formule.
X-RateLimit-RemainingintegerNombre d'appels restants sur la journée UTC en cours.

Au-delà, l'API répond 429. Les appels hors quota sont comptés : réessayer en boucle ne débloque rien avant la remise à zéro.

Pagination

La liste est paginée par page (1 à 1000) et limit (1 à 100, 30 par défaut). Les valeurs hors bornes sont ramenées à la borne la plus proche plutôt que rejetées, et le nombre total d'éléments correspondants est renvoyé dans total. Pour parcourir un catalogue entier, itérez sur page jusqu'à couvrir total.

Prix et devises

Tous les prix sont des entiers en centimes, jamais des flottants — 2439 signifie 24,39. best_price est exprimé dans la devise native de l'offre (best_currency) ; sur le détail d'un skin, chaque offre porte en plus price_usd_cents, converti au taux du jour, pour comparer des offres de devises différentes sans refaire la conversion.

Endpoints

GET/v1/public/skins

Lister et rechercher des skins

Le catalogue paginé, filtré et trié. Seuls les skins ayant au moins une offre active sont renvoyés.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.skinlooters.com/v1/public/skins?game=cs2&category=couteaux&minPrice=100&sort=price_asc&limit=30"
Paramètres
ParamètreTypeDéfautDescription
querystringRecherche plein texte sur le nom de marché de l'item.
gamestringcs2Jeu du catalogue.
categorystringCatégorie d'item (CS2).
weaponstringArme exacte, telle que renvoyée dans weapon.
typestringType d'item (TF2, Dota 2).
wearstringUsure exacte (CS2).
stattrakbooleantrue pour ne garder que les StatTrak™, false pour les exclure.
minPricenumberPrix minimum en USD (unités, pas centimes) — 12.5 est valide.
maxPricenumberPrix maximum en USD (unités, pas centimes).
sortstringbest_dealOrdre de tri.
pageinteger1Page, 1 à 1000.
limitinteger30Éléments par page, 1 à 100.
Champs de la réponse
ChampTypeDescription
skinsarrayLes skins de la page courante.
skins[].best_priceintegerMeilleur prix actif, en centimes de best_currency.
skins[].best_currencystringDevise native de la meilleure offre.
skins[].offer_countintegerNombre d'offres actives sur ce skin.
totalintegerNombre total de skins correspondant au filtre, toutes pages confondues.
pageintegerPage effectivement renvoyée (après application des bornes).
limitintegerTaille de page effectivement appliquée.
Exemple de réponse
{
  "skins": [
    {
      "id": "b5c12128-3cdb-4a62-af3a-7826888161d0",
      "game": "cs2",
      "slug": "ak-47-redline-field-tested",
      "market_hash_name": "AK-47 | Redline (Field-Tested)",
      "weapon": "AK-47",
      "skin_name": "Redline",
      "wear": "Field-Tested",
      "stattrak": 0,
      "souvenir": 0,
      "icon_url": "/icons/a8300e12119917504.png",
      "best_price": 2439,
      "best_currency": "USD",
      "offer_count": 7
    }
  ],
  "total": 31045,
  "page": 1,
  "limit": 30
}

GET/v1/public/skins/:slug

Détail d'un skin

Un skin, la totalité de ses offres actives triées de la moins chère à la plus chère, et ses 200 derniers relevés de prix. Le slug est celui renvoyé par la liste.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.skinlooters.com/v1/public/skins/ak-47-redline-field-tested"
Paramètres
ParamètreTypeDéfautDescription
slugstringIdentifiant d'URL du skin (segment de chemin, pas un paramètre de requête).
Champs de la réponse
ChampTypeDescription
skinobjectLe skin, avec ses métadonnées et son meilleur prix précalculé.
listingsarrayOffres actives, de la moins chère à la plus chère (sur le prix net).
listings[].providerstringMarketplace d'origine de l'offre.
listings[].price_centsintegerPrix affiché par la marketplace, en centimes de currency.
listings[].net_price_centsintegerPrix net après frais de la marketplace, en centimes — c'est lui qui sert au tri et au meilleur prix.
listings[].price_usd_centsintegerÉquivalent du prix net en centimes de dollar, au taux du jour.
listings[].float_valuenumber | nullFloat de l'item quand la marketplace l'expose, sinon null.
listings[].affiliate_urlstringLien d'achat affilié, à utiliser tel quel pour ne pas perdre l'attribution.
listings[].updated_atstringDate de dernière mise à jour côté Skinlooters (ISO 8601, UTC).
historyarray200 derniers relevés de prix, du plus récent au plus ancien.
Exemple de réponse
{
  "skin": {
    "id": "b5c12128-3cdb-4a62-af3a-7826888161d0",
    "game": "cs2",
    "slug": "ak-47-redline-field-tested",
    "market_hash_name": "AK-47 | Redline (Field-Tested)",
    "weapon": "AK-47",
    "skin_name": "Redline",
    "wear": "Field-Tested",
    "stattrak": 0,
    "souvenir": 0,
    "icon_url": "/icons/a8300e12119917504.png",
    "item_type": null,
    "best_price_native_cents": 2439,
    "best_price_currency": "USD",
    "best_price_usd_cents": 2439,
    "offer_count": 7
  },
  "listings": [
    {
      "id": "fd9350e0-845c-4cb6-a7a7-755bed83c5ab",
      "provider": "skinport",
      "price_cents": 2439,
      "currency": "EUR",
      "net_price_cents": 2317,
      "float_value": 0.2214,
      "affiliate_url": "https://skinport.com/item/...",
      "updated_at": "2026-09-06T05:22:36.000Z",
      "price_usd_cents": 2510
    }
  ],
  "history": [
    { "provider": "skinport", "price_cents": 2439, "recorded_at": "2026-09-05T13:34:22.000Z" }
  ]
}

GET/v1/public/skins/:slug/price-history

Historique de prix

Série temporelle par marketplace. Les points de moins de 30 jours sont renvoyés bruts (un point par relevé) ; au-delà, ils sont moyennés à un point par marketplace et par jour, pour qu'une fenêtre de 90 jours reste traçable sans renvoyer des milliers de points.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.skinlooters.com/v1/public/skins/ak-47-redline-field-tested/price-history?period=90d"
Paramètres
ParamètreTypeDéfautDescription
slugstringIdentifiant d'URL du skin (segment de chemin, pas un paramètre de requête).
periodstring30dFenêtre de l'historique.
Champs de la réponse
ChampTypeDescription
periodstringFenêtre effectivement appliquée (30d si la valeur demandée est inconnue).
pointsarrayPoints de la série, du plus ancien au plus récent.
points[].providerstringMarketplace d'origine de l'offre.
points[].price_centsintegerPrix affiché par la marketplace, en centimes de currency.
points[].recorded_atstringDate du relevé (ISO 8601, UTC).
Exemple de réponse
{
  "period": "7d",
  "points": [
    { "provider": "waxpeer", "price_cents": 2239, "recorded_at": "2026-09-04T10:16:41.000Z" },
    { "provider": "skinport", "price_cents": 2317, "recorded_at": "2026-09-04T10:37:22.000Z" }
  ]
}

Valeurs acceptées

Jeux cs2 rust tf2 dota2

Catégories (CS2) armes couteaux gants stickers graffitis autres

Usures (CS2) Factory New Minimal Wear Field-Tested Well-Worn Battle-Scarred

Tris best_deal price_asc price_desc date_asc date_desc

Périodes d'historique 7d 30d 90d

category, wear et stattrak sont des notions propres à CS2 : sur les autres jeux, ces filtres ne renvoient rien.

Erreurs

CodeCorpsDescription
401{"error":"missing_api_key"}En-tête X-Api-Key absent.
401{"error":"invalid_api_key"}Clé inconnue, révoquée ou désactivée.
404{"error":"not_found"}Aucun skin ne correspond à ce slug.
429{"error":"quota_exceeded"}Quota journalier dépassé, réessayez après minuit UTC.

Fraîcheur des données

Les offres sont réingérées en continu ; updated_at sur chaque offre dit exactement quand cette ligne a été revue. Inutile d'interroger le même skin plus souvent que toutes les quelques minutes : la réponse ne bougera pas et la requête sera décomptée du quota.

Support

Une question, un champ manquant, un besoin de volume au-delà du plan Pro ? hello@skinlooters.com