Screener & Outils

L'API JSON
du screener

Interroger le screener depuis vos propres scripts : authentification par clé, deux endpoints, quatre filtres. Cette page documente le contrat exact — ce qui est renvoyé, ce qui ne l'est pas, et les erreurs que vous pouvez rencontrer.

Mis à jour juillet 2026 6 min de lecture Réservé Pro

Obtenir une clé

L'API est réservée aux abonnés Pro. La clé se crée depuis votre espace abonné, dans le module Portefeuille, onglet API. Vous pouvez avoir jusqu'à cinq clés actives — utile pour séparer un script de production d'un carnet d'expérimentation, et pour révoquer l'un sans casser l'autre.

La clé n'est affichée qu'une seule fois. Nous n'en stockons qu'une empreinte cryptographique (SHA-256) : personne ne peut la retrouver ensuite, nous compris. Copiez-la à la création. Si vous la perdez, révoquez-la et générez-en une nouvelle — c'est immédiat et sans conséquence sur vos autres clés.

Authentification

Chaque appel porte la clé dans un en-tête. Deux formes sont acceptées, au choix :

X-API-Key: sk_live_votreCle
Authorization: Bearer sk_live_votreCle

Le niveau d'abonnement est vérifié à chaque appel, pas seulement à la création de la clé. Une résiliation ferme donc l'accès immédiatement.

Les endpoints

GET/api/v1/screener

Le dernier instantané de l'univers, trié par score composite décroissant.

FiltreValeursEffet
countryFR, DE, IT, NL, BERestreint à un pays de cotation. Insensible à la casse.
signalBUY, WATCH, AVOIDRestreint à une classe de signal du modèle.
min_scorenombre 0–100Score composite minimum.
limit1–2000 (défaut 1000)Nombre de lignes. Toute valeur supérieure est ramenée à 2000.
curl -H "X-API-Key: sk_live_votreCle" \
  "https://screener-smallcaps.fr/api/v1/screener?country=FR&min_score=60&limit=50"

La réponse enveloppe les données avec le contexte nécessaire pour les interpréter :

{
  "status": "ok",
  "snapshot_date": "20260723",
  "count": 50,
  "columns": ["ticker", "company_name", "..."],
  "data": [ { "ticker": "...", "score_total": 78, "..." } ],
  "disclaimer": "..."
}
GET/api/v1/meta

Métadonnées sans charger l'univers : date de l'instantané, taille de l'univers, version du modèle, limite de débit et liste des colonnes disponibles. C'est l'appel à faire pour savoir s'il y a du nouveau avant de télécharger les données.

Ce qui est renvoyé, et ce qui ne l'est pas

Les colonnes couvrent l'identité de la valeur (ticker, nom, pays, secteur, marché, éligibilité PEA-PME), le score composite et sa note, les quatre sous-scores par pilier, trois ratios fondamentaux (EV/EBITDA, croissance du chiffre d'affaires sur trois ans, dette nette/EBITDA) et le signal du modèle.

En revanche, les variables internes du modèle ne sont pas exposées. L'instantané en compte plus de cent cinquante ; l'API en publie une liste blanche stable. Ce choix est délibéré : il garantit que le contrat ne bouge pas quand le modèle évolue, et évite de diffuser des données intermédiaires sans signification hors de leur contexte de calcul.

Rythme et limite de débit

L'instantané est régénéré une fois par jour ouvré, après la clôture des marchés européens. Interroger l'API plus souvent ne renvoie donc rien de neuf : fiez-vous au champ snapshot_date plutôt qu'à une heure supposée de publication.

La limite est de soixante requêtes par minute et par clé, largement au-delà d'un usage normal. Elle existe pour éviter qu'un script en boucle ne dégrade le service pour les autres.

Codes d'erreur

CodeSignificationQue faire
401Clé absente, invalide ou révoquéeVérifiez l'en-tête et que la clé n'a pas été révoquée depuis votre espace abonné.
403Le compte n'est plus ProL'accès reprend au réabonnement, avec les mêmes clés.
429Limite de débit atteinteAttendez la minute suivante. Espacez vos appels.
503Aucun instantané disponibleSituation transitoire pendant la régénération quotidienne. Réessayez plus tard.

Exemple en Python

import os, requests

r = requests.get(
    "https://screener-smallcaps.fr/api/v1/screener",
    headers={"X-API-Key": os.environ["SCREENER_API_KEY"]},
    params={"country": "FR", "min_score": 60, "limit": 100},
    timeout=30,
)
r.raise_for_status()
payload = r.json()

print(payload["snapshot_date"], payload["count"], "valeurs")
for row in payload["data"][:5]:
    print(row["ticker"], row["score_total"], row.get("ml_signal"))

Ne mettez jamais votre clé dans le code. Passez-la par une variable d'environnement, comme dans l'exemple. Une clé poussée dans un dépôt public doit être considérée comme compromise : révoquez-la immédiatement.

Ce que l'API ne fait pas

Elle sert l'instantané du jour, pas d'historique : il n'existe pas d'endpoint pour récupérer les scores passés d'une valeur. Le track record du modèle est publié à part, sous forme agrégée, sur la page dédiée.

Elle ne passe aucun ordre et ne se connecte à aucun courtier. Les données sont des données financières publiques traitées automatiquement ; elles constituent une aide à la décision et non un conseil en investissement au sens de la directive MIF2. Les performances passées ne préjugent pas des performances futures, et tout investissement comporte un risque de perte en capital.