Aller au contenu
polysignals.net

Développeurs

API

Chaque chiffre de ce site provient de quelques fichiers JSON servis en HTTPS avec CORS ouvert. Mettez en cache de votre côté et n’interrogez pas plus souvent que les données ne changent. Les assistants d’IA peuvent utiliser à la place le serveur MCP.

sans clé ni inscription
Gratuit
requêtes par IP, API et MCP ensemble
50 / 10 s
sans garantie de disponibilité ni niveau de service
Au mieux
sources, signal combiné, score de confiance
Version 2
Sur cette page
  1. Endpoints
  2. Exemple
  3. Limites
  4. Champs de la lecture combinée
  5. Champs de la lecture d’une source
  6. Par crypto
  7. Fichier d’historique
  8. Champs des résultats
  9. Fichier de résultats par crypto

Endpoints

GET /api/v1/signals.json
Tout : lectures combinées et par source pour chaque crypto × fenêtre. Écrit à chaque tick (tick_seconds). Cache 10 s.
GET /api/v1/combined.json
Les lectures combinées seulement. Écrit une fois par minute. Cache 30 s.
GET /api/v1/venues/{venue}.json
Les lectures d’une source. Sources : polymarket, kalshi, limitless, gemini, binance_options, deribit_options, bybit_options, okx_options. Écrit une fois par minute. Cache 30 s.
GET /api/v1/history/{coin}.json
Les dernières 48 h : combiné à la minute et par source toutes les 5 minutes. Toute crypto couverte par une source dans meta.json (actuellement au moins BTC, ETH, SOL, XRP, DOGE, HYPE, BNB, ZEC, NEAR) ; une crypto avec seulement un signal de régime n’en a pas. Reconstruit toutes les 5 min.
GET /api/v1/results.json
Backtest en direct : par crypto et par stratégie, ce qu’a rapporté le suivi des signaux sur Coinbase USD face à l’achat-conservation (rendement net et brut, exécutions, transactions, taux de réussite, repli, position ouverte). Écrit une fois par minute. Cache 1 min.
GET /api/v1/results/{coin}.json
Le backtest d’une crypto avec ses 100 dernières exécutions par stratégie et sa courbe de capital (toutes les 15 min sur 48 h, toutes les heures jusqu’à 30 jours, quotidienne au-delà). Écrit toutes les 5 min. Cache 5 min.
GET /api/v1/meta.json
Cryptos trouvées auprès des sources, fenêtres (5m, 15m, 1h, 4h, 1d), sources couvertes en direct, seuils et version de la méthodologie.
GET /api/v1/markets.json
Chaque marché des plateformes de Cryptohopper qui reçoit les signaux de tendance quotidiens : par plateforme son nom, son nombre de marchés et les marchés de chaque crypto. Mis à jour environ chaque jour. Cache 10 min.
GET /api/v1/deliveries.json
Les signaux de tendance quotidiens récents du signaler, du plus récent au plus ancien : la crypto, achat ou vente, et combien de marchés ont accepté, refusé ou laissé expirer chacun, et tant qu’une décision est encore en cours d’envoi, combien il lui reste à atteindre (queued) ; totals compte chaque signal depuis la mise en service du signaler. Réécrit après chaque envoi. Cache 1 min.
GET /api/v1/trend-history.json
Le signal de tendance quotidien de chaque crypto sur les 90 dernières clôtures, une lettre par jour (L long, F flat, - pas de clôture) face à la liste des dates ; réécrit après chaque décision de 00:05 UTC. La page Changements de tendance le dessine.
GET /api/v1/live/index.md
Le signal global et le signal de tendance quotidien de chaque crypto en markdown, pour les assistants IA et les outils qui n’exécutent pas JavaScript. Cache 30 s.
GET /api/v1/live/{coin}.md
Une crypto en markdown : chaque fenêtre, chaque source, son signal de tendance quotidien, les marchés Cryptohopper qui reçoivent ses signaux et son dernier signal livré, son backtest et les titres les plus récents qui la citent. Un ticker en minuscules redirige. Cache 30 s.
GET /api/v1/live/trend.md
Les changements de tendance quotidienne en markdown : les cryptos passées long (un achat envoyé à Cryptohopper) ou flat (une vente) à chaque décision de 00:05 UTC, et la dernière décision même si elle n’a changé aucun signal. Cache 5 min.
GET /api/v1/live/trend.xml
Les mêmes changements en flux Atom, une entrée par décision. Cache 5 min.
GET /api/v1/live/trend/{coin}.xml
Les changements de tendance d’une crypto en flux Atom. Cache 5 min.
GET /api/v1/live/markets.md
Chaque marché qui reçoit les signaux de tendance quotidiens en markdown : les plateformes avec leurs chiffres, puis par plateforme les marchés de chaque crypto. Cache 1 h.
GET /api/v1/live/markets/{exchange}.md
Les marchés d’une plateforme par crypto en markdown, selon sa clé Cryptohopper (binance, kraken2, crypto, etc., comme dans markets.json). Chaque page de plateforme renvoie vers la sienne. Cache 1 h.
GET /api/v1/live/news.json
Les derniers titres crypto de CoinArticle, avec les cryptos suivies que chacun mentionne. Cache 5 min.
GET /api/v1/openapi.json
Description OpenAPI 3.1 de tout ce qui précède.
POST /api/mcp
Le serveur MCP (Streamable HTTP, lecture seule, sans clé) pour Claude, ChatGPT, Cursor et d’autres assistants IA ; l’installation est sur la page MCP.

Exemple

curl -s https://polysignals.net/api/v1/combined.json | jq '.coins.BTC.overall'

curl -s https://polysignals.net/api/v1/signals.json | jq '.coins.ETH.timeframes["1h"].combined.current.confidence'

curl -s https://polysignals.net/api/v1/venues/kalshi.json | jq '.coins.SOL["15m"].current.prob_up'

signals.json, réduit à une crypto, une fenêtre et une source :

{
  "version": 2,
  "generated_at": "2026-09-30T20:26:05Z",
  "tick_seconds": 30,
  "venues": ["polymarket", "kalshi", "limitless", "gemini", "binance_options", "deribit_options", "bybit_options", "okx_options"],
  "coins": {
    "BTC": {
      "spot_usd": 83616.4,
      "overall": { "score": 9, "direction": "neutral", "confidence": 71 },
      "timeframes": {
        "1h": {
          "combined": {
            "current": {
              "prob_up": 0.511,
              "score": 2,
              "direction": "neutral",
              "late_window": false,
              "window_start": "2026-09-30T20:00:00Z",
              "window_end": "2026-09-30T21:00:00Z",
              "sources": ["polymarket", "kalshi", "limitless"],
              "merged_options": [],
              "divergence": 0.02,
              "raw_divergence": 0.05,
              "confidence": { "score": 88, "label": "high", "depth": 0.974, "agreement": 0.9, "timing": 1, "sources": 3, "independent_sources": 3, "qualifying_sources": 2, "divergence": 0.02 }
            },
            "next": null
          },
          "venues": {
            "kalshi": {
              "current": {
                "venue": "kalshi", "coin": "BTC", "timeframe": "1h",
                "window_start": "2026-09-30T20:00:00Z", "window_end": "2026-09-30T21:00:00Z",
                "prob_up": 0.51, "score": 2, "direction": "neutral",
                "spread": 0.01, "volume_usd": 333616, "liquidity_usd": null, "depth_usd": 12574,
                "derived": true, "stale": false, "late_window": false,
                "market_url": "https://kalshi.com/markets/kxbtcd/KXBTCD-26SEP3017",
                "confidence": { "score": 72, "label": "high", "quality": 0.72, "timing": 1 }
              },
              "next": null
            }
          }
        }
      }
    }
  }
}

Limites

Jusqu’à 50 requêtes par 10 secondes et par IP sur l’ensemble de /api/ (le JSON, le markdown en direct et le serveur MCP ensemble) ; au-delà, l’API répond 429 pendant 10 secondes. Les fichiers JSON sont mis en cache en bordure aussi longtemps que l’indique leur Cache-Control et les query strings sont ignorées, donc interroger plus souvent que les durées de cache ci-dessus renvoie le même fichier. Lisez l’historique d’une crypto toutes les 5 minutes, pas à chaque tick.

Champs de la lecture combinée

prob_up
Moyenne pondérée par la qualité des probabilités Up des sources (0 à 1). null si aucune source n’est retenue.
score
(prob_up - 0,5) × 200, arrondi. De -100 à +100. Surtout une lecture du mouvement depuis l’ouverture de la fenêtre, pas une prévision (voir la méthodologie).
direction
strong_up · up · neutral · down · strong_down.
late_window
true quand il reste moins de 20 % de la fenêtre.
window_start / window_end
ISO-8601 UTC.
reference_price / reference_source / move_since_open / time_left
Le prix de la fenêtre à l’ouverture et sa provenance (venue, collector_spot ou candle), le prix actuel ÷ celui-ci - 1, et la part de la fenêtre restante. La référence est null pour la fenêtre suivante et pour une fenêtre ouverte avant qu’une référence ne soit enregistrée.
sources
Ids des sources fusionnées dans cette lecture (qualité > 0, ou toute source cotée dans le repli à poids égaux) ; une lecture d’options fusionnée liste chaque source d’options qu’elle contient.
merged_options
Sources d’options fusionnées en une seule lecture avant le mélange : leur prob_up médiane, comptée comme une source. Une source d’options à plus de 0,30 de la médiane des autres est écartée et marquée outlier. Vide si aucune n’a été fusionnée.
divergence
max - min de prob_up parmi les sources retenues (qualité ≥ 0,2) ; null si moins de deux sont retenues.
raw_divergence
max - min de prob_up sur toutes les sources cotées, quelle que soit leur qualité ; null si moins de deux sont cotées.
confidence
{ score, label, depth, agreement, timing, sources, independent_sources, qualifying_sources, divergence } ; score = round(100 × depth × agreement × timing). depth porte sur les sources indépendantes (les sources d’options fusionnées en une). agreement = clamp(1 - divergence / 0,20, 0, 1) avec deux sources retenues ou plus, sinon 0,7.

Champs de la lecture d’une source

prob_up / score / direction
Comme ci-dessus, pour cette source seule.
spread
Meilleur ask - meilleur bid de la part Up. null pour les sources AMM.
volume_usd
Le volume tel que le site de la source l’indique, actualisé à chaque tick (Kalshi compte des contrats qui paient chacun 1 $).
depth_usd
Taille des ordres en attente à moins de 0,05 du milieu, des deux côtés, en USD, à partir des données que la source renvoie déjà : carnet complet chez Polymarket, meilleur niveau chez Kalshi ; null pour Limitless, Gemini et les sources d’options.
liquidity_usd
Liquidité du pool pour les sources AMM, sinon null.
derived
true quand la lecture est interpolée d’une échelle de strikes (Kalshi horaire, toutes les lectures d’options).
stale
true quand la cotation n’a pas pu être actualisée et que la valeur précédente est affichée (qualité 0).
market_url
Le marché sur le site de la source.
bid / ask / options
Le meilleur bid et ask de la part Up quand la source cote directement la fenêtre (null pour les échelles et les options). Les sources d’options ajoutent options : { p_at_spot, atm_iv, rr25, forward_usd, basis, method }, chacun null si la source ne fournit pas la donnée ; method indique si prob_up et p_at_spot viennent de la volatilité implicite (iv) ou des écarts de prix des calls (curve).
flags
Présent seulement sur une lecture publiée mais jamais fusionnée : outlier (une source d’options à plus de 0,30 de la médiane des autres sources d’options sur sa fenêtre) ou degenerate_curve (les probabilités implicites de l’échelle d’options couvrent moins de 0,50, donc prob_up est null).
confidence
{ score, label, quality, timing } ; score = round(100 × quality × timing).

Par crypto

overall est la moyenne pondérée par la confiance des scores actuels combinés des fenêtres 1h, 4h et 1d, avec sa propre confidence ; venue_overall.{venue} est le même calcul à partir des lectures d’une seule source (renvoyé aussi comme overall dans venues/{venue}.json) ; spot_usd est un prix spot de Coinbase, à titre d’affichage seulement.

regime (dans signals.json uniquement) est le signal de la stratégie de régime quotidienne, décidé une fois par jour à 00:05 UTC sur la clôture Coinbase de la journée qui vient de se terminer, sans données des sources : { as_of, call, close, sma50, sigma20, upper, lower, distance_sigmas, days_in_state, next_decision_at, intraday }. call passe long dès que la clôture dépasse upper = sma50 × (1 + sigma20) et flat dès qu’elle passe sous lower = sma50 × (1 - sigma20). null pour une crypto ayant moins de 200 clôtures quotidiennes ou sans la clôture du jour. intraday: { call, as_of } est la variante fictive sur quatre heures (stratégie regime_4h, non relayée) : le prix en direct de Coinbase Exchange comparé à la même bande à chaque limite de 4 heures UTC, en partant du signal quotidien ; null avant son premier contrôle. La règle se trouve dans la méthodologie.

Quand aucune source ne franchit le seuil de qualité (en général une fenêtre peu liquide sans volume déclaré), la lecture combinée est tout de même calculée à partir des prix disponibles, à poids égaux, avec confidence.score 0 : chaque fenêtre cotée montre ainsi une direction, et la confiance dit dans quelle mesure s’y fier.

Fichier d’historique

{ coin, generated_at, resolution: { combined: "1m", venues: "5m" }, range_hours: 48, timeframes: { "1h": { combined: [{ t, prob_up, score, confidence }], venues: { kalshi: [ … ] } } } }. Les minutes sans lecture exploitable sont simplement absentes.

Champs des résultats

results.json contient, par crypto et par stratégie (5m, 15m, 1h, 4h, 1d, overall, regime, regime_4h), ce qu’a rapporté le suivi des signaux sur le marché Coinbase USD de la crypto, en position longue seulement. Un signal lu à une minute est exécuté 1 minute plus tard au meilleur ask (achat) ou bid (vente) de Coinbase Exchange ; le capital est valorisé au dernier prix échangé. Fractions partout. Il s’agit de la version de résultats 2 : elle a relancé la simulation de zéro et les chiffres antérieurs ont été abandonnés. meta.json thresholds.results contient fee, fillDelayMin et altFee (0.001), les frais plus bas auxquels la page des résultats montre aussi les mêmes exécutions : (1 + gross_return) × (1 - altFee)^fills - 1.

return
Capital actuel ÷ capital de départ - 1, net de frais de 0.006 par exécution. buy_hold.return : acheté à l’ask de started_at avec une fois les frais, puis conservé.
gross_return
Les mêmes exécutions sans frais : capital ÷ capital de départ - 1 avant frais (l’écart bid/ask reste payé).
fills
Exécutions à ce jour, achats plus ventes ; chacune a payé les frais.
trades
Allers-retours terminés (un achat suivi d’une vente). win_rate et avg_trade portent sur ceux-ci ; null s’il n’y en a aucun.
max_drawdown
La plus forte baisse du capital d’un sommet à un creux.
time_in_market
Part des minutes cotées passées à détenir la crypto.
fees_paid
Frais payés à ce jour, en unités du capital de départ.
position / since / entry_price
La position ouverte : coin depuis since à entry_price, ou usd.
call
Le signal que la stratégie détient en ce moment (buy, sell ou hold).
results_version
Les règles de la simulation (« 2 ») ; quand elles changent, la simulation repart de zéro.
methodology_version
La méthodologie selon laquelle les signaux sont lus (« 5 »).

Fichier de résultats par crypto

results/{coin}.json est le bloc de la crypto tiré de results.json, plus trades (par stratégie, les 100 dernières exécutions, de la plus ancienne à la plus récente : { side, t, price, equity, return? }, le prix étant l’ask pour un achat et le bid pour une vente) et curve, dont les columns sont t, spot, 5m, 15m, 1h, 4h, 1d, overall, regime, regime_4h, buy_hold, 5m_gross, 15m_gross, 1h_gross, 4h_gross, 1d_gross, overall_gross, regime_gross, regime_4h_gross : le capital net par stratégie, l’achat-conservation, puis le capital brut (sans frais) de chaque stratégie. Une ligne toutes les 15 minutes sur les 48 dernières heures, toutes les heures jusqu’à 30 jours, une par jour au-delà.

Ce n’est pas un conseil financier. Sans lien avec Polymarket, Kalshi, Limitless, Gemini, Binance, Deribit, Bybit ou OKX. Le flux peut changer ou s’arrêter sans préavis. L’utilisation est soumise aux conditions.