Documentation API
Données DepthFeed
Référence API
Découverte de marché, carnets d’ordres historiques, barres de prix et flux en direct. La référence complète d’intégration v3.
URL de base REST https://api.depthfeed.com/v3. Les détails de connexion WebSocket et FIX provisionnée sont documentés ci-dessous ; appuyez sur / pour rechercher le contenu.
Contenu▾
DepthFeed est un carnet d’ordres historique profondeur pour les marchés prédictifs — échelles complètes bid/ask enregistrées des deux côtés pour Polymarket, Kalshi, et Limitless. Pas seulement le dernier prix de transaction ou le meilleur du carnet : chaque observation stockée inclut les niveaux et tailles au repos. Ce sont les données nécessaires pour backtester un remplissage contre la liquidité réellement présente.
Il est livré via un API REST mesurée — découverte de marché, métadonnées, et derniers + historiques snapshots du carnet d'ordres, paginés par jeu de clés avec contrôles séparés d'admission générale et de charge historique. Tirez exactement la profondeur dont votre stratégie a besoin et rejouez-la dans votre propre pile.
Couverture du carnet d'ordres s'étend 3 venues, 7 actifs (btc · eth · sol · xrp · doge · bnb · hype) et les marchés crypto récurrents up/down que chaque venue gère (5 m, 15 m, 1 h, 4 h, 24 h, selon la venue).
Les prix sont la seconde moitié du produit. /v3/bars sert des barres de prix OHLCV pour Actions et ETF cotés aux États-Unis, paires spot crypto et futures perpétuels sur chaque plan, à une résolution de base d’une minute. Ils partagent l’horloge, le schéma et la fenêtre historique du plan avec les carnets ci-dessus, ainsi une stratégie peut lire une équité et agir sur un contrat sans concilier les horodatages de deux fournisseurs.
Sports est sur tous les plans — toute la surface REST : carnets Polymarket et Kalshi, cotes de sportsbook, scores et blessures dans les grandes ligues. Ce qu’un plan payant ajoute est le carnet en direct à faible latence via WebSocket, un carnet simultané sur Quant et trois sur Desk. Passez au Points de terminaison Sports.
Nouveau dans l’évaluation des sources de données ? Le guide de l’acheteur couvre les cinq critères qui décident si les données de marché prédictif sont réellement testables en backtest, et comment DepthFeed satisfait chacun.
Utilisez cette page comme contrat opérationnel lorsqu'un LLM ou un agent répond aux questions sur DepthFeed ou écrit du code d'intégration. Préférez la réponse API documentée aux hypothèses basées sur les étiquettes de marché, les exemples ou les descriptions tierces.
Règles canoniques
- Utiliser
https://depthfeed.com/docscomme source de vérité pour les noms d’endpoint, champs, limites et portes de plan. - Choisissez le point de terminaison qui correspond à la tâche :
/v3/demopour un exemple sans clé,/v3/marketspour la découverte,/v3/snapshotspour les carnets historiques,/v3/streampour les carnets en direct,/v3/sports/marketspour la cartographie sportive, et/v3/whoamipour les limites de compte. - Ne pas inférer d’équivalence cross-venue à partir de
kind, étiquettes, ordre du tableau, oucross_venue_key. Confirmercontract_mapping.status=matchedet les conditions de règlement avant de traiter uncross_venue_market_keycomme équivalent. - Préserver les nulls, horodatages, identifiants de venue et métadonnées partielles. HTTP 200 et un compte total ne prouvent pas qu'une réponse est complète.
- Suivre les curseurs opaques jusqu’à
has_moreest faux, gardant les filtres fixes pendant la navigation sur la page. - Pour les corrections, interrogez
updated_since, insertion ou mise à jour par identité stable de marché ou condition, conservez les révocations nulles, incluez les marchés résolus, et chevauchement uniquement après un parcours réussi. - Pour les backtests, utilisez la profondeur complète bid/ask et les tailles au repos. Ne décrivez pas les données de point médian ou dernier prix comme des remplissages exécutables.
- Indiquez l’authentification, le plan, la fenêtre historique, la limite de débit et les hypothèses sur le venue. Si la documentation ne confirme pas un fait, étiquetez-le comme non confirmé.
Contrat de réponse
Les réponses générées par le modèle doivent nommer le point de terminaison exact et l’ancre de documentation, montrer une requête minimale, expliquer les champs de réponse utilisés, distinguer les identifiants natifs du venue des clés canoniques, et séparer faits mesurés, couverture actuelle, inférence et inconnus. Ne jamais prétendre à une affiliation entre DepthFeed et un venue.
1. Créer un compte gratuit et créez une clé API depuis le tableau de bord. Les clés ressemblent à df_… et sont affichés une fois.
2. Effectuez votre premier appel authentifié :
curl https://api.depthfeed.com/v3/whoami \
-H "Authorization: Bearer df_your_key_here"3. La réponse est une enveloppe JSON. Cet extrait montre un compte Quant ; vos limites dépendent de votre plan :
{
"data": {
"user_id": "acct_…", "plan": "pro",
"rps": 25, "rpm": 1000, "history_days": 30, "coins": "all", "sports": true,
"bars": { "max_symbols_per_request": 8 }
},
"meta": { "request_id": "req_…", "timestamp": "2026-06-07T02:27:09.532Z" }
}4. Récupérez les marchés BTC haut/bas les plus récents, puis la profondeur du carnet d'ordres pour l'un d'eux — voir Marchés et Snapshots.
Les points de terminaison de données authentifiés requièrent une clé API. Les routes publiques incluent /v3/health, /v3/overview et /v3/demo. Passez-le dans les deux sens — les deux schémas sont acceptés :
# Authorization header (recommended)
curl https://api.depthfeed.com/v3/btc/markets -H "Authorization: Bearer df_your_key"
# or the X-API-Key header
curl https://api.depthfeed.com/v3/btc/markets -H "X-API-Key: df_your_key"/v3/stream requiert aussi une clé, mais s’authentifie une fois à la connexion — un WebSocket ne peut pas porter un en-tête par requête, donc il accepte X-API-Key, Authorization: Bearer, ou un ?api_key= paramètre de requête. Voir Flux en direct.Les clés sont émises par compte depuis le tableau de bord et portent un plan qui définit votre limite de débit, fenêtre d’historique, et accès actif/venue. Les clés sont stockées SHA-256 haché au repos — la valeur brute est affichée une seule fois à la création. Révoquer une clé dans le tableau de bord prend effet immédiatement. Les quotas sont par utilisateur, pas par clé — les clés supplémentaires ne multiplient pas votre limite.
| Échec | Statut | code |
|---|---|---|
| Aucune clé fournie | 401 | AUTH_MISSING |
| Clé inconnue / révoquée / mal formée | 401 | AUTH_INVALID |
| Magasin de clés temporairement inaccessible | 503 | AUTH_UNAVAILABLE |
Tous les points d'accès vivent sous un chemin de base versionné unique :
https://api.depthfeed.com/v3TLS est requis (Let's Encrypt, HTTP/2). La version actuelle de l’API est v3, construit à parité PolyBackTest (même enveloppe, pagination par curseur, et énumération des codes d’erreur) sur notre ensemble de données superset (3 venues, 7 actifs). Héritage v1/v2 les espaces de noms ne sont pas servis.
Chaque réponse réussie a la même enveloppe :
{
"data": … , // object (single) or array (list)
"pagination": { … }, // present only on list endpoints
"meta": { "request_id": "req_…", "timestamp": "2026-06-07T02:27:09.532Z" }
}Les erreurs partagent la forme, avec le statut HTTP défini par code:
{
"error": { "code": "INVALID_COIN", "message": "…", "details": { … } },
"meta": { "request_id": "req_…", "timestamp": "…" }
}Chaque réponse — succès ou erreur — porte meta.request_id, aussi renvoyé comme le X-Request-Id en-tête. Citez-le dans les demandes de support.
Branche sur error.code — il est stable. Le statut HTTP est implicite par le code.
| code | HTTP | Signification |
|---|---|---|
AUTH_MISSING | 401 | Pas de clé API dans la requête. |
AUTH_INVALID | 401 | La clé est inconnue, révoquée ou mal formée. |
COIN_NOT_IN_PLAN | 402 | Renvoyé uniquement par la surface démo anonyme (échantillon BTC). Chaque plan de compte, Explorer inclus, comprend chaque coin. |
ENDPOINT_NOT_IN_PLAN | 402 | Renvoyé uniquement par la surface démo anonyme. Chaque plan de compte comprend chaque venue ; l'historique est limité par la fenêtre de votre plan. |
SYMBOL_LIMIT_EXCEEDED | 402 | Plus de symboles dans une requête /v3/bars que la taille de lot de votre plan (3 / 8 / 16 / 32). Divisez la liste et requêtez à nouveau — cela limite UN appel, pas combien de symboles vous pouvez extraire. |
WINDOW_TOO_WIDE | 400 | Une requête /v3/bars couvre plus de temps que le nombre de lignes du cadre ne le permet (45 jours à 1Min, 180 à 5Min, un an à 15Min et 1Heure, dix ans à 1Jour). Pagination avec limite et curseur. |
HISTORY_LIMIT_EXCEEDED | 403 | start_time / timestamp est plus ancien que la fenêtre de votre plan. |
INVALID_COIN | 400 | La pièce n'est pas l'une des sept prises en charge. |
INVALID_CURSOR | 400 | Le curseur est mal formé. |
INVALID_TIMESTAMP | 400 | Pas ms-epoch ni ISO-8601. |
INVALID_INTERVAL | 400 | intervalle et non une durée comme 30s, 1m, 5m, 1h, 1j (1s–1j). |
INVALID_PARAMETER | 400 | Un paramètre de requête ou une variable d'URL a été rejeté ; details.parameter names it. Couvre les exécutions envoyées sans intervalle, et un segment vide {ticker}/{slug}/{asset_id}/{market_id} — un chemin avec deux barres obliques consécutives, ce qui signifie presque toujours qu'une variable de modèle n'a pas été substituée. |
MISSING_PARAMETER | 400 | Un paramètre requis était absent ; details.parameter names it. |
INVALID_LIMIT | 400 | la limite n’est pas un entier positif. |
INVALID_JSON | 400 | Le corps de la requête n’est pas un JSON valide. Seules les routes POST peuvent le retourner. |
INVALID_RANGE | 400 | Activé /v3/bars: end_time n’est pas après start_time. Transporte les deux valeurs en retour. |
INVALID_SYMBOL | 400 | Activé /v3/bars: le symbole n'est pas l'un de ceux que nous servons. Épelez une paire comme le fait la plateforme — BTCUSDT, pas BTC. |
INVALID_TIMEFRAME | 400 | Activé /v3/bars: pas l'un de 1Min, 5Min, 15Min, 1Hour, 1Day. details.supported les liste. |
INVALID_VENUE | 400 | Activé /v3/bars: venue n’est pas us-equities, binance, ou binance-futures. |
INVALID_WINDOW | 400 | Activé /v3/screener/{asset}/{window}: la fenêtre n'est pas l'une de 5m, 15m, 1h, 4h, 24h. |
INVALID_METRIC | 400 | Sur la série temporelle de prédiction Binance : metric n’est pas chance, price, ou last_trade. |
INVALID_MARKET_ID | 400 | Activé /v3/binance-prediction/{market_id}/*: l'identifiant n'est pas un entier non signé. |
BAD_REQUEST | 400 | Le service de barres a rejeté la requête et son propre message est transmis. Lire error.message. |
MARKET_TICKER_REQUIRED | 400 | Une série Kalshi a été passée où un ticker de marché découvert exact est requis. |
BATCH_TOO_LARGE | 400 | Plus de 10 sous-requêtes dans un lot. |
BATCH_INVALID_PATH | 400 | La sous-requête n’est pas un chemin GET /v3/ (statut par sous-requête). |
TICKS_NOT_IN_PLAN | 402 | Les routes au niveau tick sont réservées au Desk. |
MARKET_NOT_FOUND | 404 | Aucun marché avec cet identifiant / slug / ticker. |
SNAPSHOT_NOT_FOUND | 404 | Aucun carnet n’a été capturé pour la requête — le marché peut ne pas avoir encore ouvert, peut avoir expiré, ou être hors couverture. |
CANDLES_NOT_AVAILABLE | 404 | Aucune série de chandeliers n’est enregistrée pour ce ticker Kalshi. |
GAME_NOT_FOUND | 404 | Aucun jeu avec ce game_slug. |
ENDPOINT_NOT_FOUND | 404 | Le chemin ne correspond à aucune route v3. |
SPORTS_UNKNOWN_ROUTE | 404 | Le chemin est sous /v3/sports mais ne correspond à aucune route sports. GET /v3/sports liste tous les chemins. |
SPORTS_METHOD_NOT_ALLOWED | 405 | Mauvais verbe HTTP pour une route sportive. |
RESPONSE_TOO_LARGE | 413 | La page dépasse le plafond de réponse. Limitez, réduisez la fenêtre ou ajoutez un intervalle. |
RATE_LIMIT_BURST | 429 | Débordement par seconde dépassé. |
RATE_LIMIT_SUSTAINED | 429 | Limite soutenue par minute dépassée. |
HISTORY_CONCURRENCY_LIMIT | 429 | Une autre requête d'historique instantané ou par lot est toujours en cours pour ce compte (details.scope = "account"). |
HISTORY_POOL_BUSY | 429 | Le pool partagé de requêtes d’archive est saturé côté serveur, pas la limite de votre compte (details.scope = "shared_pool") — réessayez avec temporisation. |
SERVICE_PROFILE_UNAVAILABLE | 503 | La configuration de service de votre compte n’a pas pu être lue. Transitoire ; details.retry_after est en secondes. |
HISTORY_METER_UNAVAILABLE | 503 | La comptabilisation historique d’usage est en baisse, donc une lecture d’historique ne peut pas être admise. Transitoire ; porte details.retry_after. |
HISTORY_FALLBACK_UNAVAILABLE | 503 | Une plage manquante dans le magasin en direct n'a pas pu être récupérée de l'archive pour le moment. Transitoire ; porte details.retry_after. |
BARS_LICENCE | 502 | L'historique des prix n'est pas licencié pour cette plage. Réduisez la fenêtre plutôt que de réessayer. |
HISTORY_START_RATE_LIMIT | 429 | Ce compte a lancé autant de requêtes historiques que son profil le permet cette minute. Retry-After : 60. |
HISTORY_DELIVERY_LIMIT | 429 | L’allocation roulante de livraison historique du compte est épuisée. Retry-After : 3600. |
TRIAL_DELIVERY_LIMIT | 429 | L’allocation de données incluse dans l’essai gratuit est épuisée. Ce n’est pas une faute, et cela ne se résout pas en attendant — abonnez-vous pour l’allocation complète du plan. |
INTERNAL_ERROR | 500 | Erreur serveur inattendue — réessayez, puis contactez-nous avec l'identifiant de la requête. |
AUTH_UNAVAILABLE | 503 | La vérification de clé est temporairement indisponible — réessayez bientôt. |
UPSTREAM_UNAVAILABLE | 503 | Un service de profondeur derrière l'API n'a pas répondu (details.retryable = true). Il s'agit de nous, pas de votre ticker — réessayez avec un backoff plutôt que de traiter le marché comme manquant. |
BARS_BUSY | 503 | Le service de barres est actuellement à son plafond de concurrence, pas en panne. Il porte details.retry_after en secondes — reculez et réessayez, la même requête réussit généralement. |
BARS_UNAVAILABLE | 503 | Le service de barres est en panne. Réessayez avec temporisation. |
BARS_UPSTREAM | 502 | Le fournisseur de barres a répondu avec une erreur. |
SPORTS_UNAVAILABLE | 503 | La passerelle sports n’a pas répondu. À propos de nous, pas de votre marché. |
SPORTS_UPSTREAM | 502 | La passerelle sports a répondu avec une erreur. |
ISOLATED_ROUTE_UNAVAILABLE | 503 | Desk uniquement : le nœud d’historique dédié Desk est inaccessible. Réessayez avec temporisation progressive. |
ISOLATED_ROUTE_FAILED | 502 | Desk uniquement : le nœud d’historique dédié Desk a répondu avec une erreur. |
403 HISTORY_LIMIT_EXCEEDED porte details.max_history_days et details.oldest_allowed. 429 définit aussi Retry-After et le X-RateLimit-* en-têtes.
Les limites sont un seau de jetons par utilisateur avec deux fenêtres : une par seconde explosion et un par minute soutenu plafond. Dépasser l’un ou l’autre renvoie 429 avec le code de correspondance et un Retry-After de 1 seconde.
Explorer est une requête par seconde, sans plafond séparé par minute. C'est un rythme, pas une allocation par rafale : une boucle qui s'exécute aussi vite que possible passera la plupart de ses requêtes sur 429. Lire X-RateLimit-Remaining, ou simplement attendez une seconde entre les appels.
Les valeurs rps/rpm annoncées sont limites générales d’admission REST, pas des taux de livraison d’archive. Les snapshots historiques, lots contenant des lectures d’historique, et autres routes lourdes utilisent des contrôles de concurrence et de livraison au niveau du compte séparés. Ces contrôles s’appliquent indépendamment du seau de jetons général et ne modifient pas la fenêtre historique du plan.
Explorer, Quant et Research acceptent actuellement une requête historique en cours par compte. Desk accepte 6 requêtes d'instantanés historiques parallèles par compte via son pool de requêtes Desk dédié. Un chevauchement retourne 429 HISTORY_CONCURRENCY_LIMIT avec Retry-After: 2; réessayez uniquement après qu'une requête active soit terminée. Les valeurs générales de rps/rpm ne doivent pas être utilisées pour déduire le parallélisme historique.
Une lecture historique peut également être rejetée lorsque votre compte est toujours dans sa propre limite, car le pool de requêtes d'archives partagé est saturé. Ce cas renvoie 429 HISTORY_POOL_BUSY avec details.scope = "shared_pool" au lieu de "account". Branchez sur details.scope: sur account, réduisez votre parallélisme ; sur shared_pool, réduire le parallélisme ne suffira pas — réessayez avec temporisation.
/v3/bars a son propre plafond de concurrence, indépendant des deux contrôles ci-dessus. Au-delà, une requête est immédiatement refusée avec 503 BARS_BUSY et details.retry_after en secondes, plutôt que d’être mis en file d’attente — un refus rapide que vous pouvez retenter est plus utile qu’un succès lent que vous ne pouvez pas budgéter. Traitez-le exactement comme un 429 : reculez et réessayez la même requête. Les barres comportent aussi deux limites qui ne sont pas des limites de débit — taille du lot (402 SYMBOL_LIMIT_EXCEEDED) et étendue par requête (400 WINDOW_TOO_WIDE) — tous deux corrigés en divisant la requête, pas en attendant.
| En-tête | Signification |
|---|---|
X-RateLimit-Limit | Votre limite de rafale par seconde (rps). |
X-RateLimit-Remaining | Jetons Burst restants cette seconde. |
Retry-After | Secondes à attendre (définies sur 429). |
X-Request-Id | Écho de meta.request_id. |
Voir Forfaits et accès pour les rps/rpm par niveau.
Schéma de requête historique
Ne gardez pas plus que votre concurrence d’historique confirmée active. Utilisez borné start_time etend_time, pagination par curseur, et limit=1000; omettre include_count et demandez l’échelle complète uniquement si nécessaire. Ajouter interval lorsqu'une série sous-échantillonnée est suffisante. DepthFeed est un produit d'accès par requête mesurée : fichiers en vrac, livraison d'archives hors ligne, réplication de base de données et miroir systématique d'archives ne sont pas inclus.
Les points de terminaison de liste utilisent opaque curseurs de jeu de clés — O(1) à toute profondeur. Passez ?cursor= de la page précédente pagination.next_cursor; arrêtez quand has_more est false.
"pagination": {
"next_cursor": "6274…", // opaque; feed back as ?cursor=
"has_more": true,
"limit": 50,
"count": 50,
"total_count": 1284 // only when ?include_count=true
}Paramètres de requête courants
| Paramètre | Type | Notes |
|---|---|---|
limit | int | Marchés max 100, instantanés/transactions max 1000. Valeurs par défaut : 50 / 100. |
cursor | chaîne | Curseur opaque de jeu de clés de la page précédente. |
include_count | booléen | Ajoute total_count (coûte un COUNT — optionnel). |
start_time | ts | ms-epoch ou ISO-8601. Plus ancien que votre fenêtre → 403. |
end_time | ts | ms-epoch ou ISO-8601. |
de | ts | Alias pour start_time, accepté sur chaque route. |
à | ts | Alias pour end_time, accepté sur chaque route. |
interval | dur | Uniquement snapshots. Sous-échantillonnez à un carnet par bucket (le dernier dans chaque) : 30s, 1m, 5m, 1h … jusqu’à 1j. Omettre pour résolution complète. |
fill | énum | Uniquement snapshots, et nécessite interval. ffill retourne une ligne par bucket, reportant le dernier carnet dans les buckets sans capture. Désactivé par défaut. |
de/à et start_time/end_time sont la même fenêtre. Les deux orthographes fonctionnent partout ; si une requête porte les deux, start_time/end_time gagner.
Les horodatages acceptent soit millisecondes depuis l’époque (par ex. 1780774485780) ou ISO-8601 (par exemple 2026-06-07T02:27:09Z). Chaque valeur atteignant la base de données est validée et sécurisée contre l’injection. La fenêtre historique du plan est appliquée sur chaque point de liste/snapshot : un start_time au-delà des retours de la fenêtre 403; un élément omis est limité au sol de la fenêtre.
Downsampling avec interval
Par défaut, les points de terminaison d’instantané retournent chaque changement de carnet enregistré — résolution complète pilotée par événements. Lorsque vous avez seulement besoin d’un échantillon périodique (par exemple un carnet par minute pour un graphique ou un backtest grossier), ajoutez ?interval= et le serveur réduit chaque bucket temporel à un instantané unique : le dernier carnet dans ce compartiment. C'est beaucoup moins de données transmises que de récupérer chaque tick et de filtrer côté client.
# one snapshot per minute instead of the raw stored series
curl "https://api.depthfeed.com/v3/btc/markets/{id}/snapshots?interval=1m&include_orderbook=true" \
-H "Authorization: Bearer df_your_key"Accepte une durée : un simple nombre de secondes, ou une valeur avec une unité — 30s, 1m, 5m, 15m, 1h, 4h, 1d — de 1s à 1d. Les seaux sont alignés sur l'époque, donc 1m s’aligne sur les limites de minute de l’horloge murale. Pagination par curseur et include_count s’appliquent aux lignes sous-échantillonnées (total_count devient le nombre de buckets). Omettez-le, passez raw, ou passez 0 pour la résolution complète. Une valeur non reconnue renvoie 400 INVALID_INTERVAL. Fonctionne sur chaque point de terminaison snapshot — Polymarket, Kalshi, Limitless, PredictFun, Binance, et sports.
L'intervalle sélectionne ; il n'interpole pas. Un compartiment apparaît dans la réponse uniquement si un carnet a été capturé à l'intérieur. Deux heures à ?interval=1m couvre 121 limites de minute mais retourne uniquement les minutes qui ont tenu une capture — communément dix à trente sur un marché peu coté. C’est l’enregistrement complet pour la fenêtre, pas une page tronquée.
Combler les lacunes avec fill=ffill
Un carnet d'ordres conserve son état jusqu'à ce que quelque chose le modifie, donc une minute sans capture n'est pas une donnée manquante — le carnet de la minute précédente était toujours le carnet. ?fill=ffill le dit explicitement : une ligne par bucket pour toute la fenêtre, avec le dernier carnet capturé reporté dans les buckets sans capture. C’est ce que vous voulez quand la série doit s’aligner sur une horloge fixe, une barre de prix ou un autre venue.
# a dense 1-minute grid: 121 rows for a 2-hour window, gaps and all
curl "https://api.depthfeed.com/v3/btc/markets/{id}/snapshots?interval=1m&fill=ffill&from=1788202800000&to=1788210000000" \
-H "Authorization: Bearer df_your_key"fill exige interval; seul, il renvoie 400 INVALID_PARAMETER. Les valeurs acceptées sont ffill (aussi previous, prev, true, 1) et none (aussi false, 0, par défaut). Il est supporté sur les mêmes routes que interval. La liste, le tick, la bougie, et orderbook/latest les routes n’ont pas de grille à remplir et ignorent le paramètre plutôt que de le rejeter, donc un client qui l’envoie partout obtient toujours un 200 d’eux.
L’horloge propre à la ligne change quand vous tournez fill sur. Avec interval seule la ligne est une capture réelle, donc id et time/timestamp sont l’instant où il a été enregistré — 04:37:59.926 pour le bucket 04:37. Avec fill=ffill chaque ligne représente un bucket, y compris ceux capturés, donc ces champs deviennent la limite du bucket (04:37:00.000) et l’instant de capture passe à as_of_ts. Rien n'est perdu dans les deux cas, mais un graphique dessiné à partir des deux sera décalé jusqu'à un intervalle sauf si vous lisez le même champ dans les deux. Si vous avez besoin de la grille et de l'instant de capture ensemble, demandez fill=ffill et lire as_of_ts.
Lecture d'une ligne remplie
Les réponses remplies ajoutent trois champs, et seules les réponses remplies les ont. Une requête sans fill retourne exactement la forme qu’il a toujours eue.
| Champ | Signification |
|---|---|
filled | 0 lorsque la ligne est un carnet capturé, 1 lorsqu'il a été reporté. |
as_of_ts | Quand le carnet de cette ligne a été effectivement enregistré. Sur une ligne reportée, c'est plus ancien que le bucket, et la distance entre eux est exactement l'ancienneté du carnet. null lorsqu'il n'y avait pas de carnet antérieur à reporter. |
as_of_ts_ms | Le même instant que l’époque ms. |
L’horodatage du bucket et as_of_ts sont proches mais pas égaux même sur une capture, car la capture est arrivée quelque part à l’intérieur du bucket plutôt qu’à sa frontière : 2026-09-02T00:50:00.000Z avec as_of_ts de 2026-09-02T00:50:44.437Z est une vraie minute qui a tenu un vrai carnet.
La première ligne d’une fenêtre remplie est généralement une ligne reportée. La grille est initialisée avec le carnet le plus récent enregistré avant la fenêtre s’est ouverte, donc la série démarre d’un état réel au lieu d’un état vide. Son as_of_ts peut être des heures plus vieux que le premier bucket, et c’est la réponse honnête.
Quand la fenêtre s'ouvre avant que le marché ne l'ait fait, il n'y a pas de carnet antérieur à reporter. Ces buckets initiaux reviennent avec une échelle vide et as_of_ts: null — générés, sans rien à y mettre. Limitez start_time au début propre du marché pour les ignorer.
Le resolution bloc
Chaque réponse qui a utilisé ?interval= porte un resolution bloquer, pour que vous puissiez distinguer un enregistrement de capture clairsemé d’une page tronquée sans une seconde requête.
"resolution": {
"interval_secs": 60,
"buckets_in_range": 121, // minute boundaries the window spans
"buckets_filled": 29, // minutes that held a CAPTURE
"rows_returned": 121, // rows on this page
"fill": "ffill", // absent when fill is off
"complete": true // false while a next_cursor is outstanding
}buckets_filled compte les captures, jamais les lignes, donc cela signifie la même chose avec fill sur comme avec hors service. C’est le nombre à comparer avec buckets_in_range lorsqu'on juge de la qualité de la cotation d'un marché. Avec fill hors, rows_returned et buckets_filled d’accord. Avec cela activé, l’écart entre eux est la quantité de grille transportée. Si buckets_filled est bien en dessous buckets_in_range, demandez un intervalle plus grossier, ou omettez interval et lire chaque capture.
Quatre forfaits fixes. Le plan champ retourné par /v3/whoami est la valeur brute dans la colonne de droite.
| Plan | plan | Prix | rps général | rpm général | Parallélisme historique | Historique unifié | Wallet Intelligence | Crypto | Sports REST | Carnets d’ordres des marchés sportifs en direct |
|---|---|---|---|---|---|---|---|---|---|---|
| Explorer | free | $0 | 1 | — | 1 | 7 jours | 1 sauvegardé · 3 audits | Tous les actifs + plateformes | Toutes les plateformes sportives | REST uniquement |
| Quant ★ | pro | $29/mois | 25 | 1,000 | 1 | 30 jours | 5 sauvegardés · 10 audits | Tous les actifs + plateformes | Toutes les plateformes sportives | 1 |
| Research | scale | $99/mois | 50 | 3,000 | 1 | 90 jours | 10 sauvegardé · 25 audits | Tous les actifs + plateformes | Toutes les plateformes sportives | 2 |
| Desk | entreprise | $249/mois | 100 | 6,000 | 6 en parallèle | Archive complète | 20 sauvegardé · 50 audits | Tous ; pool de requêtes historiques dédié au Desk | Toutes les plateformes sportives | 3 |
Il n’y a pas d’add-ons Polymarket ou Kalshi. Les deux venues sports utilisent la même clé, schéma, limite de taux et fenêtre historique ; la montée en gamme achète plus d’historique, de débit et de concurrence sur carnet live.
Ce que Explorer atteint
Explorer est une vraie clé sur de vraies données, pas un bac à sable : toutes les sept pièces, chaque venue, sept jours d’historique, toute la surface REST sportive, barres de prix et screener. Une venue n’est jamais quelque chose qu’un plan achète. Ce qu’un upgrade achète est la fenêtre historique, le débit, les abonnements au flux et les données tick. Chaque clé retourne l’échelle complète ; le seul carnet tronqué sur l’API est la démo sans clé, à huit niveaux par côté.
La seule famille de routes que Explorer ne peut pas atteindre est ticks, qui sont uniquement disponibles sur Desk pour chaque lieu et retournent 402 TICKS_NOT_IN_PLAN en dessous. La surface de démonstration anonyme — sans clé du tout — est limitée séparément à un échantillon BTC, et c’est la seule chose qui répond 402 COIN_NOT_IN_PLAN.
Les colonnes générales rps/rpm décrivent l’admission des requêtes, pas les scans simultanés d’archives. Le parallélisme des requêtes historiques et les contrôles de livraison sont séparés. Les lectures historiques Desk utilisent un pool de requêtes dédié uniquement à Desk isolé du trafic de requêtes des plans réguliers, sans supprimer les contrôles au niveau du compte. Le pool est partagé entre les comptes Desk et n’est pas une infrastructure exclusive ou détenue par le client.
Le contrôle d’accès est appliqué côté serveur :
- Marchés — chaque plan, Explorer inclus, atteint chaque coin, chaque venue, et le carnet d'ordres complet ; ce qui est limité est le débit, l'historique et les ticks, pas l'accès.
- Historique — une fenêtre hors de votre plan →
403 HISTORY_LIMIT_EXCEEDED; la mise à niveau élargit la fenêtre, jamais la liste des marchés. - Sports — le /v3/sports/* La surface REST est incluse dans chaque plan ; la même fenêtre historique s'applique aux deux venues.
- Historique —
start_timeau-delà de votre fenêtre →403 HISTORY_LIMIT_EXCEEDED. - Barres de prix — /v3/bars obéit à la même fenêtre historique que la profondeur, et limite en plus les symboles par requête (3 / 8 / 16 / 32), au-delà de laquelle il retourne
402 SYMBOL_LIMIT_EXCEEDED. - Streaming — les limites s'appliquent au moment de l'abonnement sur /v3/stream; chaque plan diffuse chaque plateforme — Explorer est limité à un abonnement simultané, les niveaux payants augmentent le nombre.
/v3/healthpas d’authentificationSonde de vivacité, sans authentification. Retourne { status: "ok", service, time }.
/v3/whoamiVotre plan, limites de fréquence, fenêtre historique unifiée, accès aux cryptos et accès sportif — la manière la plus rapide de confirmer qu’une clé fonctionne.
Marchés Polymarket up/down par coin, reliés à la référence de règlement (prix d'ouverture/fermeture, gagnant, volume). {coin} est un des btc · eth · sol · xrp · doge · bnb · hype.
/v3/{coin}/marketsFiltres : type (5 m/15 m/1 h/4 h/24 h), resolved (vrai/faux), plus les paramètres communs de temps + pagination.
/v3/{coin}/markets/{market_id}/v3/{coin}/markets/by-slug/{slug}Un seul marché par id ou slug. Exemple de réponse (les clés de prix par pièce sont dynamiques, comme la référence) :
{ "data": {
"market_id": "2456720", "event_id": "566750",
"slug": "btc-updown-5m-1780860300", "market_type": "5m",
"start_time": "…", "end_time": "2026-06-07T19:30:00Z",
"condition_id": "0xb7ce…",
"clob_token_up": "15598…", "clob_token_down": "51823…",
"btc_price_start": null, "btc_price_end": null,
"winner": null, "final_volume": null, "final_liquidity": null, "resolved_at": null
}, "meta": { … } }*_price_*, winner, resolved_at, final_volume, et final_liquidity — sont null jusqu'à ce que le marché se règle et que le remplissage de référence soit effectué (~12–24 h après le règlement)./v3/polymarket/marketsLe toute la venue Polymarket, pas seulement les marchés crypto up/down. Les routes ci-dessus adressent les marchés par coin, donc elles ne peuvent atteindre que les marchés qui en ont un — élections, géopolitique, actions et FX n’ont pas de coin ni d’URL là-bas. Ceci liste tout.
Filtres : ?q= (recherche par slug), ?type=event pour tout ce qui n’est pas une échelle up/down, plus ?coin=, ?event= et ?outcome=. Les marchés ici sont indexés par CLOB asset_id (ID de jeton) ; transmettez-le à /v3/polymarket/{asset_id}/snapshots pour l’historique de profondeur ou /v3/polymarket/{asset_id}/ticks pour la bande. Les marchés non crypto portent un base_asset — ils n'ont pas de coin, et nous n'en inventons pas.
Chaque ligne porte category et tags. Les échelles montantes/descendantes sont crypto; chaque autre marché prend sa catégorie des balises d'événements de la plateforme, dans la même orthographe que Polymarket US (sports, crypto, politics, geopolitics, finance, macro, technology, science, climate, culture), avec les slugs de tags bruts dans tags et null là où la venue n'a pas d'étiquette. Filtrer avec ?category=politics,macro ou ?exclude_category=sports,crypto : séparés par des virgules, insensibles à la casse, combinables ; une exclusion conserve les marchés non étiquetés. ?closed=true|false est le drapeau de trading du lieu (une échelle est fermée une fois que son end_time a passé). Pour un miroir, ?updated_since= (ISO-8601, date ou millisecondes epoch) renvoie uniquement les lignes dont le contenu, l’étiquette ou l’état fermé ont changé depuis ce moment ; chaque ligne updated_at est ce tampon. resolved n’est pas un filtre sur cette route et est rapporté sous meta.ignored_params.
/v3/polymarket/{asset_id}/snapshotsHistorique des instantanés du carnet d'ordres pour tout marché Polymarket — sports, politique, actualités et crypto — limité par la fenêtre d'historique de votre plan. Même forme et pagination que les routes d'instantanés par crypto.
/v3/polymarket/{asset_id}/ticksentrepriseLa bande venue-wide pour le même asset_id clés.
La série temporelle de profondeur du carnet d’ordres pour un marché, avec le prix de la pièce sous-jacente horodaté sur chaque instantané.
/v3/{coin}/markets/{market_id}/snapshotsAjouter ?include_orderbook=true pour obtenir l’échelle complète (omise par défaut pour un payload plus léger). Fenêtré dans le temps + paginé par curseur. Ajouter ?interval=1m (ou 5m, 1h, …) pour sous-échantillonner à un livre par seau au lieu de la série brute stockée — voir Pagination & filtres. La réponse de liste est un tableau avec un pagination bloc :
{ "data": [{
"id": "1780774485780", "time": "2026-06-06 19:34:45.780",
"market_id": "2456720", "btc_price": 60606.68,
"price_up": 0.505, "price_down": 0.495,
"orderbook_up": { "bids": [[0.50, 304.25], …], "asks": [[0.51, 30.0], …] },
"orderbook_down": { "bids": [ … ], "asks": [[0.50, 304.25], …] }
}], "pagination": { … }, "meta": { … } }/v3/{coin}/markets/{market_id}/snapshots/at/{timestamp}Le seul snapshot le plus proche d’un horodatage (dans ±2 s). {timestamp} est ms-epoch ou ISO-8601. Contrairement au point de terminaison de liste, data est un objet unique (même forme de ligne) avec non pagination bloc; aucune correspondance dans un rayon de ±2 s ne renvoie 404 SNAPSHOT_NOT_FOUND.
{ "data": {
"id": "1780774485780", "time": "2026-06-06 19:34:45.780",
"market_id": "2456720", "btc_price": 60606.68,
"price_up": 0.505, "price_down": 0.495,
"orderbook_up": { "bids": [[0.50, 304.25], …], "asks": [[0.51, 30.0], …] },
"orderbook_down": { "bids": [ … ], "asks": [[0.50, 304.25], …] }
}, "meta": { … } }Les niveaux sont [price, size]. price_up est le point médian meilleur offre/demande ; price_down = 1 − price_up. Le orderbook_down le côté est dérivé comme le complément binaire du carnet up (down = 1 − up, tailles préservées). Le prix de la coin est le tick le plus proche précédent via une jointure ASOF — exact pour 1 h/4 h/24 h, un proxy Binance étiqueté pour 5 m/15 m.
Chaque ligne est un carnet complet à sa date d’horodatage, jamais un delta par rapport à la ligne précédente, donc vous n’avez jamais à reconstruire l’état à partir des changements. Pour le flux de changements lui-même, utilisez ticks.
Les autres routes d’instantanés de venue
Le même contrat — fenêtre, curseur, interval, fill, fenêtre historique du plan — est servi par une route par venue. Elles diffèrent par l’identifiant qu’elles prennent et par la façon dont les deux côtés d’un marché binaire sont présentés, car les venues elles-mêmes le font.
| Acheminement | Identifiant | Forme du carnet |
|---|---|---|
/v3/{coin}/markets/{market_id}/snapshots | Numérique market_id de /v3/{coin}/markets | La vue événement par pièce : price_up/price_down uniquement, sauf si vous ajoutez include_orderbook=true |
/v3/polymarket/{asset_id}/snapshots | ID du jeton — clob_token_up/clob_token_down, ou asset_id de /v3/polymarket/markets | Le carnet d'un jeton : bids et asks tableaux, toujours inclus |
/v3/kalshi/{ticker}/snapshots | ticker de /v3/kalshi/markets | yes et non échelles |
/v3/limitless/{slug}/snapshots | slug de /v3/limitless/markets | bids, asks, et un midpoint |
/v3/predictfun/{id}/snapshots | market_id de /v3/predictfun/markets | Niché up et down objets, chacun avec bids/asks |
/v3/{coin}/{venue}/snapshots | venue est spot ou futures — pas un nom d'échange | 20-niveau carnet sous-jacent : bids, asks, price |
La route Polymarket atteint tout le venue, pas seulement les carnets crypto — élections, sports et tout le reste listé par Polymarket. La route par coin est la vue crypto up/down avec le prix sous-jacent joint.
La bande brute : chaque changement individuel du carnet d’ordres, pas une série snapshot échantillonnée. Là où instantanés vous donne le carnet à des points dans le temps, les ticks vous donnent chaque changement entre eux — ce dont un workflow de market-making ou de recherche d’exécution a besoin pour savoir où était le carnet juste avant un remplissage, ou combien de temps un niveau est resté avant d’être pris.
Réservé aux entreprises. Les autres plans reçoivent 402 TICKS_NOT_IN_PLAN.
/v3/{coin}/markets/{market_id}/ticksentreprisePolymarket, sourcé du flux delta CLOB. Les deux jetons d'issue sont retournés par défaut et étiquetés outcome; affinez avec ?outcome=up ou ?outcome=down.
Historique : la bande est continue depuis 2026-06-25 (vérifié 2026-09-02) et continue de s’accumuler, donc la fenêtre fiable grandit d’un jour chaque jour. Les jours avant cela existent dans l’archive mais ne sont pas contigus — 61 d’entre eux manquent entre 2026-04-14 et la série continue — donc un backtest nécessitant une série ininterrompue ne devrait pas commencer avant 2026-06-25.
Couverture : les marchés up/down sur le 5m, 15m et 24h fenêtres, sur les sept actifs. Le 1h et 4h les familles haut/bas sont pas actuellement dans la bande de ticks — utilisez instantanés pour ceux-là.
{ "data": [{
"id": "1780774485780", "time": "2026-06-06 19:34:45.780",
"received_ms": "1780774485812", "outcome": "up",
"token_id": "7194…", "side": "BUY", "price": 0.505, "size": 1240.0
}], "pagination": { … }, "meta": { … } }/v3/kalshi/{ticker}/ticksentrepriseNouveau — la capture de ticks Kalshi a commencé le 2026-08-07. Il n’y a pas d’historique tick Kalshi avant cette date ; la bande s’accumule à partir de là. Kalshi instantanés restent disponibles sur toute la fenêtre d’historique.
La couverture est un sous-ensemble roulant, pas tous les marchés Kalshi : les sept actifs crypto, priorisés par échéance la plus proche, avec un nombre limité de marchés enregistrés simultanément. Contactez-nous si vous avez besoin d'une série spécifique couverte.
Provenant de l’authentifié orderbook_delta WebSocket. kind est snapshot pour les lignes qui ancrent un carnet (ainsi toute fenêtre demandée commence à partir d’un état complet) ou delta pour un changement. delta est le changement de taille signé et size est la taille au repos à ce prix après cela. seq est le propre numéro de séquence de Kalshi pour la session de capture — il s’incrémente exactement de un pendant la session, vous pouvez donc vérifier qu’une portion de bande est complète plutôt que de nous croire sur parole. Une série de snapshot les lignes marquent une nouvelle session, où elle redémarre. Restreindre à un côté avec ?side=yes ou ?side=no.
Reconstruction d'un carnet : traiter chaque snapshot exécuter comme une réinitialisation complète du carnet de ce marché, puis appliquer delta lignes dans seq ordre au sein de la session. Trier par seq, pas par time: les horodatages de la plateforme ne sont pas monotones à travers les niveaux à l'intérieur d'une milliseconde, tandis que seq est. Tout seq une étape autre que +1 dans une session est un trou dans la bande pour cette période ; la capture se reconnecte et refait un instantané automatiquement dès qu’elle en détecte un, donc le suivant snapshot le run est le point à partir duquel le carnet est à nouveau complet.
{ "data": [{
"id": "1780774485780", "time": "2026-06-06 19:34:45.780",
"received_ms": "1780774485791", "seq": "418823",
"kind": "delta", "side": "yes", "price": 0.62, "delta": -85.0, "size": 240.0
}], "pagination": { … }, "meta": { … } }Les pages contiennent jusqu'à 10000 lignes (par défaut 1000) et sont paginés par curseur comme tous les autres points de liste. Beaucoup de ticks partagent couramment une milliseconde, donc les curseurs portent une position dans un horodatage — paginer un marché actif ne divise ni ne supprime les lignes partageant un instant frontière.start_time/end_time et la fenêtre historique de votre plan s’appliquent comme d’habitude.
Le carnet et la bande de transactions de l’actif sous-jacent de Binance. {venue} est spot ou futures. Le carnet est de 20 niveaux par côté.
/v3/{coin}/{venue}/latest/v3/{coin}/{venue}/snapshotsDernier carnet / historique paginé du carnet. Chaque capture : price (milieu), bids, asks, timestamp.
/v3/{coin}/{venue}/trades/v3/{coin}/{venue}/trades/latest1 secondes OHLCV avec une séparation agressive achat/vente — exact, 1:1 avec la référence :
{ "data": [{
"id": "1780747762000", "timestamp": "2026-06-06 12:09:22.000",
"price_open": 61097.1, "price_high": 61097.1,
"price_low": 61097.09, "price_close": 61097.1,
"total_volume": 0.01667,
"aggressive_buy_volume": 0.0156, "aggressive_sell_volume": 0.00107,
"num_trades": 3
}], "pagination": { … }, "meta": { … } }Barres de prix OHLCV pour actions et ETF cotés aux États-Unis, paires spot Binance et contrats à terme perpétuels. Une minute est la résolution la plus fine ; les cadres plus larges sont agrégés à partir de celle-ci.
/v3/barssymbols est une liste séparée par des virgules. timeframe est un des 1Min, 5Min, 15Min, 1Hour ou 1Day (par défaut 1Min). start_time, end_time, limit et cursor se comportent exactement comme ils le font sur toutes les autres collections ici.
id est un horodatage, pas une clé unique. Le flux de profondeur arrive toutes les 100 ms et la bourse tamponne parfois deux carnets différents à la même milliseconde, donc une page peut légitimement contenir deux lignes avec un seul id et deux échelles différentes. La pagination gère l’égalité — le curseur est un keyset, donc un milliseconde partagée n’est jamais divisée entre deux pages — mais un client qui indexe les lignes par id seule supprimera silencieusement l’une des deux. Clé sur la ligne, ou sur (id, sequence within the page).
venue est optionnel et sélectionne directement le marché : us-equities, binance (spot) ou binance-futures (perpétuels). Laissez-le désactivé et un symbole nu est résolu pour vous — actions d’abord, puis spot Binance. Nommez-le et vous obtenez ce marché ou rien, ce qui est ce que vous voulez quand une chaîne peut être deux instruments.
limit est des barres par symbole. Une requête sans cela n'est pas paginée du tout, car la récupération naturelle des barres est une fenêtre entière et une taille de page par défaut renverrait silencieusement une série courte — ce qui est indiscernable d'un trou dans les données. Lorsque vous paginez, chaque série est coupée au même instant et pagination.next_cursor reprend exactement là : pas de chevauchement, pas de trou.
curl -H "X-API-Key: $DEPTHFEED_KEY" \
"https://api.depthfeed.com/v3/bars?symbols=AAPL,BTCUSDT&timeframe=1Hour&start_time=2026-08-01T00:00:00Z"{ "data": {
"timeframe": "1Hour",
"license_class": "source_attributed_public_serving",
"attribution": "Market data via QuarterTrace. Source-attributed; not a consolidated (SIP) feed.",
"series": [{
"symbol": "AAPL", "timeframe": "1Hour", "assetClass": "equity",
"source": "yahoo_finance", "derived": true,
"t": [1785974400000, 1785978000000],
"open": [306.83, 307.04], "high": [307.9, 308.1],
"low": [306.1, 306.55], "close": [307.04, 307.8],
"volume": [1043200, 887400]
}]
}, "meta": { … } }Comment épeler un symbole
Les actions et ETF ont leur ticker ordinaire : AAPL, SPY, BRK-B. Une paire crypto est orthographiée comme le lieu l'écrit, donc elle est BTCUSDT plutôt que BTC. Un futur perpétuel prend un .P suffixe — BTCUSDT.P, AAPLUSDT.P — parce que la paire spot et le perp sont des instruments différents tradant à des prix différents, et un espace de symboles plat qui en choisirait un pour vous choisirait quel marché votre stratégie mesure.
BTCU, ETHU et WLDU. Chacun résout vers le équité, décidé contre l’univers des symboles plutôt que votre plage de dates — donc la réponse ne change jamais quand vous déplacez la fenêtre. La paire crypto est toujours accessible sous son orthographe propre à la venue.Trames dérivées
Les actions sont collectées à 1Min et 1Day; la crypto est collectée à 1Min. Tout le reste est agrégé à la lecture, et une série indique laquelle avec derived. Une barre agrégée prend l'ouverture de la première barre et la clôture de la dernière, les extrêmes du haut et du bas, et la somme du volume, sur des seaux alignés UTC.
Limites
Trois limites séparées, et elles échouent avec trois codes différents. La fenêtre historique de votre plan s’applique ici comme partout ailleurs — au-delà, 403 HISTORY_LIMIT_EXCEEDED. Les symboles par requête sont 3 sur Explorer, 8 sur Quant, 16 sur Research, 32 sur Desk ; au-delà, 402 SYMBOL_LIMIT_EXCEEDED. Et une seule requête ne peut couvrir que le temps que permet le nombre de lignes du cadre — 45 jours à 1Min, 180 à 5Min, un an à 15Min et 1Hour, dix ans à 1Day — sur lequel il retourne 400 WINDOW_TOO_WIDE. Paginer avec limit et cursor pour parcourir une plage plus large qu'une seule requête.
Une quatrième réponse n'est pas une limite mais un moment : 503 BARS_BUSY signifie que le service de barres est à son plafond de concurrence actuellement. Il porte details.retry_after en secondes, comme un refus de limite de taux, et la même requête réussit généralement à la tentative suivante — considérez-le comme un recul et une nouvelle tentative, pas comme une panne.
403 HISTORY_LIMIT_EXCEEDED, avec oldest_allowed dans les détails). L’open-source Constructeur de stratégie lit ce point de terminaison exact avec votre propre clé, donc un backtest là-bas remonte exactement aussi loin que votre plan ici.attribution chaîne et chaque série nomme la sienne propre source; les deux doivent accompagner les données si vous les affichez.Les contrats crypto de Kalshi — profondeur complète oui/non que la référence ne porte pas. 21 séries pour tous les 7 actifs : 15 minutes KX{ASSET}15M, seuil KX{ASSET}, et directionnel KX{ASSET}D. La série seuil et directionnelle exécutent chacune les marchés horaires, quotidiens et hebdomadaires simultanément — market_type porte la fenêtre réelle de chaque marché.
/v3/kalshi/marketsFiltres : ?coin= (actif de base), ?type= (fenêtre), et exact ?series= (par exemple KXBTC15M). Pour les téléchargements historiques, passez start_time et end_time ici d'abord et utilisez les tickers natifs du lieu retournés. Ne générez pas d’identifiants de ticker Kalshi à partir des horodatages UTC ; la convention d’horloge des tickers du lieu a changé historiquement.
Par défaut, la liste est limitée aux marchés dont le carnet d’ordres a été capturé dans la fenêtre de votre plan, donc chaque ligne a un /snapshots. Passer ?include_uncaptured=true pour tout le catalogue du venue : chaque série listée par Kalshi, sports, politique, économie, météo et divertissement inclus. Ces lignes portent des bougies, pas des carnets ; depth_captured sur chaque ligne indique le type que vous regardez.
Chaque ligne porte category, l’étiquette de série propre à la venue (Politics, Sports, Crypto, Climate and Weather, …). Filtrer avec ?category=politics,elections ou ?exclude_category=sports,crypto; les deux prennent des listes séparées par des virgules, comparent sans tenir compte de la casse et peuvent être combinés. Utilisez category pour ceci, pas base_asset: base_asset est lu depuis le préfixe de la série et n’a de sens que sur les lignes crypto.
/v3/kalshi/{ticker}/orderbook/latestCarnet complet oui/non le plus récent pour un ticker. yes/non sont [price, size] tableaux (prix en dollars 0–1).
{ "data": {
"ticker": "KXHYPED-26JUN0717-T73.9999", "series": "KXHYPED",
"base_asset": "hype", "market_type": "24h",
"id": "1780…", "timestamp": "…",
"yes": [[0.62, 1400], …], "no": [[0.38, 900], …]
}, "meta": { … } }/v3/kalshi/{ticker}/snapshotsLe historique série de profondeur oui/non pour un ticker de marché découvert exact — même forme de ligne, ordonnée par heure de réception, fenêtrée temporellement + paginée par curseur (include_count opt-in, max 1000). L’historique du carnet Kalshi capturé en avant depuis une boucle de sondage REST cadencée. La cadence effective varie avec l’ensemble des marchés actifs et les limites API ; elle utilise le même modèle de point de terminaison historique que Polymarket et Limitless /snapshots, donc la profondeur Kalshi est aussi testable en backtest. Passer une série telle que KXBTC15M, ou un ticker historique inventé, renvoie une erreur de découverte explicite au lieu d’une page vide trompeuse.
/v3/kalshi/{ticker}/candlesHoraire OHLC de l’offre oui, de la demande oui et du prix négocié, plus volume et open_interest. C'est le seul historique existant pour la plupart du catalogue Kalshi : Kalshi ne fournit aucun carnet d'ordres historique, donc un marché clôturé avant le début de notre capture de carnet n'a pas de /snapshots et non /ticks — mais il a des chandeliers, remontant jusqu'à un an.
Fenêtré dans le temps et paginé par curseur comme /snapshots (max 5000 lignes), limité à la fenêtre historique de votre plan. ?interval= sélectionne la période de la bougie ; uniquement 1h est enregistré, et toute autre valeur retourne une erreur explicite nommant ce qui existe plutôt qu’une page vide. Les chandeliers sont stockés tels qu’enregistrés et jamais rééchantillonnés, donc une période plus courte n’est jamais synthétisée à partir d’une plus longue.
price est null lorsqu'aucune transaction n'a eu lieu pendant la période — environ 95% d'entre elles. Les côtés de la cotation sont toujours réels, donc une heure calme vous indique toujours où se trouvait le carnet. La couverture concerne les marchés de longue durée (ouverts plus de 24 heures) ; les échelles crypto à court terme sont capturées en pleine résolution par /snapshots et /ticks à la place, et demander leurs chandeliers retourne un 404 qui le dit.
{ "data": [{
"ticker": "KXFEDDECISION-26JUL-H26", "series": "KXFEDDECISION",
"market_type": "1w", "id": "1786168800000", "timestamp": "…",
"period_minutes": 60,
"yes_bid": { "open": 0.56, "high": 0.58, "low": 0.55, "close": 0.57 },
"yes_ask": { "open": 0.64, "high": 0.65, "low": 0.62, "close": 0.63 },
"price": { "open": 0.60, "high": 0.61, "low": 0.59, "close": 0.61 },
"volume": 240, "open_interest": 1180
}], "pagination": { … }, "meta": { … } }Vous comparez les trois venues en même temps ? Commencez par le sélecteur cross-venue au lieu d’assembler des appels par lieu.
Polymarket US est un marché de contrats désigné par la CFTC et une venue distincte de Polymarket : les marchés sont indexés sur un slug, il n’y a pas de condition_id et non asset_id, et rien ici ne rejoint les surfaces Polymarket ci-dessus. Plans payants uniquement. Cette venue est en test en direct : le catalogue, les prix et les transactions sont servis dans chaque catégorie, et la couverture du carnet est encore en expansion.
/v3/polymarket-us/marketsLe catalogue des venues, chaque catégorie, fermeture la plus récente en premier et paginé par curseur. Chaque ligne porte la propre category (sports, crypto, politics, climate, culture, macro, technology, finance, geopolitics, science). Filtrer avec ?category=politics,macro ou ?exclude_category=sports,crypto : séparés par des virgules, insensibles à la casse, combinables. Autres filtres : ?coin=, ?type= (15m, 1h, futures, …), ?series=, ?closed=, ?resolved=, start_time/end_time sur l’heure de clôture. Pour un miroir, ?updated_since= retourne uniquement les lignes dont le contenu a changé depuis ce moment (une inscription, une clôture, un changement de statut) ; chaque ligne updated_at est ce tampon. sports_market_type est un champ du lieu que le lieu remplit aussi hors sports ; ce n’est pas un discriminateur sportif, category est.
/v3/polymarket-us/{slug}/orderbook/latest/v3/polymarket-us/{slug}/snapshotsCarnet le plus récent, et la série de carnets capturée, pour un slug. La profondeur sur ce venue est enregistrée depuis le jour où la capture a commencé et conservée pendant 14 jours ; un marché hors de cette fenêtre retourne 404 ici même lorsque sa ligne de catalogue existe. La couverture est par marché : les échelles haut/bas sont capturées en continu, les catégories à long terme seulement en partie.
/v3/polymarket-us/{slug}/prices/v3/polymarket-us/{slug}/trades/v3/polymarket-us/{slug}/settlementPrix à la minute, bande d'exécution de la plateforme et règlement par marché. Les prix et transactions existent pour la plupart des marchés catalogués dans chaque catégorie ; les lignes de règlement apparaissent une fois que la plateforme rapporte un résultat.
Limitless Exchange — un CLOB sur Base exécutant des marchés crypto récurrents up/down à 5m et 15m. La profondeur est capturée en direct via son websocket de carnet d'ordres (donc même les livres rapides 5m sont enregistrés). {slug} ressemble à btc-up-or-down-15-min-1780798512077.
/v3/limitless/marketsCréneaux ouverts actuellement. Filtres : ?coin= et ?type= (5 m/15 m).
/v3/limitless/{slug}/orderbook/latestProfondeur L2 la plus récente pour un slug (bids décroissants, asks croissants) :
{ "data": {
"slug": "btc-up-or-down-15-min-1780798512077", "condition_id": "0x…",
"base_asset": "btc", "market_type": "15m",
"id": "1780798…", "timestamp": "2026-06-07 02:27:09.532", "midpoint": 0.5,
"bids": [[0.45, 200.0], …], "asks": [[0.46, 120.0], …]
}, "meta": { … } }/v3/limitless/{slug}/snapshotsLe historique série de profondeur pour un slug — même forme de ligne, ordonnée par temps de réception, fenêtrée temporellement + paginée par curseur. C’est l’historique du carnet d’ordres capturé en avant.
Les marchés prédictifs crypto portefeuille Binance soutenus par Predict.fun, normalisés dans un espace de noms dédié DepthFeed. Le catalogue initial couvre les marchés up/down BTC, ETH et BNB.
/v3/binance-prediction/marketsFiltrer avec ?coin=btc, ?type=5m, ou ?status=resolved. Les résultats incluent les ID de marché/sujet, les métadonnées de condition et de jeton, la résolution, le résultat gagnant, le volume, la liquidité, le nombre de participants, la chaîne et le contrat d'échange.
/v3/binance-prediction/{market_id}/orderbook/latest/v3/binance-prediction/{market_id}/snapshotsProfondeur L2 complète récente et historique. Le panneau standardisé du cycle de vie BTC 15 minutes commence 26 juin 2026; la capture stable d'une minute en avant sur les marchés en direct suivis commence le 26 juillet. Les carnets de commandes au repos antérieurs ne peuvent pas être reconstitués à partir des données de règlement.
/v3/binance-prediction/{market_id}/timeseries?metric=chance/v3/binance-prediction/{market_id}/timeseries?metric=price/v3/binance-prediction/{market_id}/timeseries?metric=last_trade/v3/binance-prediction/{market_id}/tradesProbabilité, prix affiché et échantillons de dernier trade sont conservés séparément et commencent le 17 juillet 2026. La route des trades est réservée pendant que les remplissages historiques sont reconstruits à partir des logs BNB Smart Chain et retourne actuellement un ensemble de données historique vide.
/v3/predictfun/* les chemins restent des alias compatibles. Les clients utilisent une clé DepthFeed ; aucune clé Binance ni appariement de portefeuille n’est requis.Commencez ici pour tout ce qui est cross-venue. Le screener répond à la question centrale — comment est actuellement tarifé le même marché “haut ou bas” sur Polymarket, Kalshi et Limitless ? — dans un requête unique, donc vous ne reliez jamais vous-même les trois points de terminaison par venue (avec leurs trois identifiants différents). Chaque plan voit les trois venues ; la fenêtre historique du plan est la seule différence quand vous suivez une cellule dans son historique.
/v3/screenerLa grille : une cellule par actif avec la dernière probabilité “up” de chaque venue, la meilleure offre/demande et la référence de règlement. Un carnet vide ou de remplacement rapporte null plutôt qu’un 0.50 dénué de sens.
{ "data": {
"assets": ["btc","eth","sol","xrp","doge","bnb","hype"],
"windows": ["5m","15m","1h","4h","24h"],
"cells": [{ "asset": "btc",
"polymarket": { "up": 0.735, "down": 0.265, "best_bid": 0.73, "best_ask": 0.74, "price_to_beat": 62764.0 },
"kalshi": { "up": 0.71, "down": 0.29, … },
"limitless": { "up": 0.75, "down": 0.25, "slug": "btc-up-or-down-…", … } }],
"paid": true
}, "meta": { … } }/v3/screener/{asset}/{window}Explorez un (actif, fenêtre) : le carnet L2 complet sur chaque venue côte à côte (books.polymarket / books.kalshi / books.limitless), plus la série spot sous-jacente et le règlement price_to_beat — l'appel unique qu'un backtest cross-venue ou un écran d'arbitrage nécessite réellement.
/v3/overviewpas d’authentificationVue d'ensemble des séries temporelles par actif et par venue (segments de prix par fenêtre) — ce qui alimente le graphique de synthèse du tableau de bord. Public, sans clé requise; sélectionnez avec ?asset=.
/v3/batchExécuter jusqu'à 10 GET /v3/ requêtes en un aller-retour. Chaque sous-requête est dispatchée indépendamment et reçoit son propre statut.
curl -X POST https://api.depthfeed.com/v3/batch \
-H "Authorization: Bearer df_your_key" -H "Content-Type: application/json" \
-d '{ "requests": [
{ "id": "a", "method": "GET", "path": "/v3/btc/markets?limit=1" },
{ "id": "b", "method": "GET", "path": "/v3/limitless/markets?type=5m&limit=1" },
{ "id": "c", "method": "GET", "path": "/v3/bars?symbols=BTCUSDT&timeframe=1Hour" }
] }'La profondeur d'un contrat et les barres de prix du sous-jacent en un seul aller-retour est le jumelage pour lequel cela existe — /v3/bars est une sous-requête comme une autre.
Retours { data: [ { id, status, body }, … ] } avec un extérieur 200. Sur 10 sous-requêtes → 400 BATCH_TOO_LARGE; un non-GET ou non-/v3/ le chemin obtient un abonnement par 400 BATCH_INVALID_PATH.
Mis à jour en septembre 19, 2026. Voir le guide d’intégration actuel pour les identifiants, corrections, pagination et contrôles de complétude.
Identités de fixture, candidat et contrat
| Champ | Signification |
|---|---|
game_slug | Identifiant de jeu spécifique à la venue ; pas une clé de jointure inter-venues. |
cross_venue_key | Même fixture ou sujet supporté ; pas des termes de paiement équivalents. |
contract_mapping.candidate_key | Groupe sujet contenu dans le fixture supporté ; mutable après corrections et potentiellement plusieurs-à-plusieurs. |
contract_mapping.outcomes[].participant_key | Participant canonique pour un jeton de résultat, indépendant de l’ordre dans le tableau. |
cross_venue_market_key | Clé de contrat équivalente confirmée ; null sauf si le statut est apparié. |
contract_mapping.outcomes[].cross_venue_outcome_key | Clé de résultat confirmée ; null sans équivalence de contrat revue. |
Existant kind, outcomes et tokens restent des chaînes natives du venue ; les résultats et jetons s’alignent par index dans une même ligne. fixture_participants fournit les participants canoniques des fixtures indépendamment du type de marché. market_family et market_period normaliser les étiquettes de type supportées sans affirmer l’équivalence des lignes, côtés ou règles. Les étiquettes génériques Oui/Non et Plus/Moins ne sont pas attribuées à une équipe. Un contrat Kalshi OUI à un jeton reste un jeton ; son complément NON n’est pas automatiquement l’adversaire.
Les candidats moneyline sont évalués à travers les ligues lorsque le fixture et deux résultats étiquetés participants peuvent être identifiés. La comparaison de spread à demi-unité liée à la source, total et total par équipe utilise maintenant sports-lines-v1, contract_spec et côté par résultat. Les périodes natives demi/quart remplacent les étiquettes génériques. Les propositions natives explicites peuvent se normaliser aux limites demi-unités lorsque leur strike, métrique et sujet concordent. Les jeux/sets de tennis, jeux/cartes d’esports, corners, touchdowns, field goals et yards offensifs conservent des métriques distinctes. Les totaux des cinq premiers sont des courses combinées ; les portées individuelles d’inning restent distinctes. Les lignes entières/poussées et divisées, métriques inconnues, futures et props restent non supportées ; consultez le contrat de mapping pour la sémantique du spread signé. Le registre de profil examiné actuel n’a pas de paires équivalentes approuvées ; les clés confirmées sont donc nulles. Les clés candidates supportent le regroupement par sujet avec une décision de règlement examinée séparément ; elles ne remplacent pas l’équivalence confirmée. Aucune date pour une correspondance confirmée plus large n’est engagée.
Le niveau supérieur cross_venue_market_key et contract_mapping.cross_venue_market_key sont des alias identiques d’un mapping. Lisez la preuve source actuelle avec GET /v3/sports/markets/{condition_id}/contract; l'absence de preuve est nulle, et la preuve expirée ou non conforme à l'entrée est explicitement marquée. GET /v3/sports/market-families retourne la correspondance lisible par machine des types.
| Statut | Interprétation |
|---|---|
matched | Une contrepartie partage les conditions de règlement révisées ; utilisez les clés confirmées. |
unmatched | Une différence connue, une portée non prise en charge ou une contrepartie manquante empêche une jointure. |
needs_review | La disponibilité de preuves, d’identité ou de correspondance est insuffisante ; ne la considérez pas comme équivalente. |
Les comparaisons couvrent la période, les prolongations, les égalités, les reports, les annulations, la source des résultats, la finalité des résultats, les abandons, les forfaits, les changements de venue et d'autres règles matérielles. L'extraction diagnostique n'est pas une preuve d'équivalence : les correspondances confirmées nécessitent terms_verified: true, un hash de preuve et une preuve source fraîche.
Pour Rams vs. 49ers, l’identité du participant seule ne résout pas les clauses de report divergentes. Les preuves et diagnostics peuvent expirer ; lisez les codes de raison actuels et les preuves sources plutôt que de coder en dur un statut exemple.
Les clés candidates incluent l’identité du match et peuvent changer ou être effacées après corrections d’identité, ligne, période ou famille. Mise à jour par condition_id, consommez updated_since deltas et conserve les versions précédentes des lignes pour les jointures historiques. candidate_group expose les comptes natifs des venues et les ID de condition ; aucun marché autoritaire n’est sélectionné parmi plusieurs listings natifs.
L'écart trimestriel, total et total équipe sont classifiés explicitement. Les candidats binaires liés à la source utilisent sports-binary-v1 et un prédicat explicite : ne jamais inférer le sens d’un label tel que nrfi. Les résultats de ligne supportés se joignent par côté dans le candidat ; les résultats moneyline se joignent par participant. Voir la référence API sports pour les paramètres d’endpoint et les champs de réponse avant de persister les jointures.
Granularité des lignes et triage qualité des données
Une ligne est un enregistrement de marché du catalogue. Certaines lignes moneyline Kalshi regroupent deux contrats YES indépendants ; d'autres exposent un contrat. Un fixture peut produire des résultats moneyline séparés, spreads, totaux, totaux d'équipe, props, variantes de ligne et enregistrements de conditions historiques, donc les comptes regroupés par cross_venue_key ne sont pas censés correspondre entre venues. Une grande différence est un signal de révision, pas une preuve que des lignes manquent ou sont dupliquées.
resolved=false signifie que le lieu n’a pas marqué cette condition comme finale ; cela ne signifie pas que la correspondance est non résolue. Un marché peut être non résolu avec une clé de fixture candidate, ou résolu avec une correspondance nulle ou révoquée. Gardez resolved, contract_mapping.status et présence de clé comme axes séparés.
Pour un audit, énumérez league, scope et kind avec GET /v3/sports/markets, puis comparez les lignes à la même signature normalisée : rencontre, période, participant, ligne, côté, type et profil de règlement. Utilisez candidate_key pour les groupes de candidats et cross_venue_market_key uniquement pour les jointures confirmées. Ne remplissez jamais une clé nulle à partir d’un slug, titre, position dans un tableau ou ratio de nombre de lignes ; conservez reason_codes et état de preuve.
Les slugs de venues peuvent différer pour la même fixture. Par exemple, Kalshi kalshi-soccer-ieloak-2026-09-20 et Polymarket uslc-iel-oak-2026-09-20 exigent des vérifications de fixture, participant, heure de début et règlement avant toute jonction.
Corrections incrémentales
/v3/sports/markets?updated_since= accepte les millisecondes epoch, ISO-8601 ou une date. updated_at et updated_ms sont les heures de publication du catalogue. Identité, coup d’envoi, révocations de mapping et renouvellements de preuve publient des mises à jour.
- Enregistrer l'heure de début du sondage et le point de contrôle précédent.
- Conserver
updated_sinceet filtres fixes sur chaque curseur. - Mise à jour par
condition_id, y compris les nulls qui révoquent d’anciennes correspondances. - Inclure les marchés résolus lors du sondage de correction.
- Avancez depuis le début du sondage avec chevauchement uniquement après que chaque page ait réussi.
Les modifications persistantes des clés de fixture, des identités des participants, des métadonnées de famille de type et des preuves de contrat sont republiées via des deltas de catalogue. Une expiration de preuve basée sur l'horloge murale est différente : cessez d'utiliser les clés confirmées à evidence_valid_until_ms même avant qu’un delta de révocation n’arrive. L’expiration conserve les identités des candidats et participants. Cela remplace les anciennes directives selon lesquelles les corrections de fixture pouvaient contourner updated_at. Suivez le flux de correction ci-dessus et les règles de validation d’intégration lors de la conservation ou du rafraîchissement des correspondances.
Validation de réponse
Inspecter meta.partial même après HTTP 200. Préservez les prix nuls, suivez les curseurs opaques tout en has_more est vrai, et ne considérez pas les comptes ou métadonnées de résolution comme preuve d’exhaustivité sur tout le lieu. Les lignes remplies par propagation sont des observations reportées, pas de nouvelles captures.
En temps réel sports données de marché prédictif — profondeur de carnet d’ordres en direct sur Polymarket et Kalshi, avec cotes sportsbook, scores en direct et flux de blessures pour les grandes ligues (NBA, NFL, MLB, NHL, football, tennis, UFC, F1 et plus). Les deux venues sont incluses ensemble à chaque niveau ; les plans modifient la fenêtre d’historique partagée, le débit et la simultanéité des carnets en direct. Même{ data, meta, pagination } enveloppe, auth, et pagination par curseur comme le reste de l’API.
Découverte d’un marché. Parcourez l'entonnoir : /v3/sports/leagues → /v3/sports/markets?league=… → prendre un marché tokens[] (chacun est le asset_id) → /v3/sports/books/{asset_id}/latest pour le carnet en direct.
/v3/sports/overviewCouverture et état du compte. Les droits sportifs de votre plan, les venues et ligues suivis, les comptes de marchés et carnets, et la fenêtre historique détenue, en un seul appel. Il ne contient pas de données de marché ou carnet ; l’entonnoir ci-dessus est la voie vers un carnet en direct.
/v3/sports/leaguesLes ligues que nous suivons, chacune avec ses comptes de jeux et marchés — le sommet de l’entonnoir de découverte.
/v3/sports/marketsMarchés sportifs sur Polymarket et Kalshi. Filtrer avec ?league= (par exemple nba, mlb, soccer); pagination par curseur comme chaque point de liste (?limit=, ?cursor=). Chaque marché porte son condition_id, market_slug, outcomes, et tokens — le par-résultat asset_ids que vous transmettez au point de terminaison du carnet.
{ "data": [{
"condition_id": "0xfb53…", "market_slug": "mls-nyc-laf-…-total-2pt5",
"league": "soccer", "kind": "totals", "title": "New York City FC vs. Los Angeles FC",
"outcomes": ["Over", "Under"],
"tokens": ["45485059…", "38846626…"], // one asset_id per outcome
"game_start": "2026-11-05T00:30:00Z", "resolved": false
}], "pagination": { "next_cursor": "…", "has_more": true, "limit": 50 }, "meta": { … } }/v3/sports/books/{asset_id}/latestCarnet complet enregistré le plus récent pour un résultat — le asset_id est un jeton issu dutokens[]. L'échelle arrive sous forme de quatre tableaux alignés par index (bid_prices avec bid_sizes, ask_prices avec ask_sizes) plutôt que le [price, size] paires retournées par les routes crypto ; Ce que chaque route de carnet partage liste chaque différence. Pour un usage en direct sensible à la latence, Quant et les niveaux supérieurs peuvent s’abonner aux canaux WebSocket sportifs ci-dessous.
condition_id. Un marché a un condition_id et une entrée dans tokens[] par résultat, et le carnet appartient au résultat. Sur les lignes Kalshi, les deux chaînes sont égales, donc le code qui lit condition_id fonctionne sur Kalshi puis retourne 404 SNAPSHOT_NOT_FOUND sur chaque marché Polymarket. Lire tokens[]./v3/sports/books/{asset_id}/historySnapshots historiques complets de l’échelle pour le résultat. Page avec ?limit= et ?cursor=; liez le temps avec ?start_time= / ?end_time= (le plus court ?from= / ?to= les alias sont aussi acceptés). Ajouter ?interval=1m pour retourner le dernier instantané dans chaque bucket aligné sur l’époque ; les unités supportées sont s, m, h, et d, de une seconde à un jour. Omettez-le, ou utilisezraw / tick, pour chaque snapshot capturé. La profondeur sportive est capturée en avance : l’archive Polymarket commence le 14 avril 2026 et l’archive Kalshi commence le 12 juin 2026.
L'intervalle sous-échantillonne ; il n'interpole pas. Un compartiment existe dans la réponse uniquement si le carnet a été capturé à l'intérieur, donc une fenêtre de deux heures à ?interval=1m couvre 120 buckets mais retourne uniquement les minutes qui ont tenu une capture. Pour un résultat peu coté — un marché encore à plusieurs jours du coup d’envoi — cela fait communément dix à vingt lignes, et c’est la bande complète pour la fenêtre plutôt qu’une page tronquée. Chaque réponse qui utilisait ?interval= porte un resolution bloquer pour que les deux soient distinguables :
{ "data": [ … ],
"pagination": { "count": 13, "has_more": false, "limit": 500 },
"resolution": {
"interval_secs": 60,
"buckets_in_range": 121, // minutes the window spans
"buckets_filled": 13, // minutes that held a capture
"complete": true // false while a next_cursor is outstanding
} }Si buckets_filled est bien en dessous buckets_in_range, le résultat est coté peu fréquemment — demandez un intervalle plus grossier, ou omettez-le et lisez chaque capture. La densité de capture suit l’activité de trading : un résultat sur un jeu en cours enregistre des centaines à milliers de snapshots sur deux heures, tandis que le même résultat trois semaines plus tard enregistre quelques dizaines. Donc ?interval=1m retourne une série minute quasi complète une fois le match commencé, et une courte pour un marché pas encore négocié.
Ajouter ?fill=ffill à côté de interval pour la grille dense à la place : une ligne par bucket pour toute la fenêtre, portant le dernier carnet capturé dans les minutes sans capture, chaque ligne marquée filled et estampillé as_of_ts avec le moment où ce carnet a été enregistré. Même paramètre, même signification, mêmes marqueurs que toutes les autres routes snapshot — voir Combler les lacunes.
Jeux et contexte de marché résolu
/v3/sports/{league}/gamesJeux et scores en direct pour une ligue (par exemple nba, nfl, soccer/eng.1), chacun avec ses marchés Polymarket & Kalshi liés.
/v3/sports/games/{game_slug}Le document de jeu joint : calendrier et score final, marchés de prédiction liés et règlements, lignes de sportsbook et contexte des blessures. Utilisez les routes complémentaires ci-dessous lorsque vous avez besoin d’une couche individuelle à fort volume.
La liste de marchés intégrée est un aperçu d’au plus 1,000 enregistrements. Vérifiez markets_returned et markets_truncated, puis suivez markets_url et son curseur depuis le début pour la collection complète. Les lectures de données échouées retournent 503 CATALOGUE_UNAVAILABLE; conservez vos enregistrements précédents et réessayez au lieu de traiter une recherche indisponible comme un résultat vide.
/v3/sports/games/{game_slug}/markets/v3/sports/games/{game_slug}/lines/v3/sports/games/{game_slug}/box/v3/sports/games/{game_slug}/plays/v3/sports/games/{game_slug}/winprobMarchés de jeu, mouvement de ligne, scores, play-by-play et probabilité de victoire par action.
/markets est lié à un événement ESPN, donc un match que nous n’avons pas pu associer retourne 404 DATA_NOT_FOUND avec “game is not matched to an ESPN event” — le jeu lui-même et ses marchés prédictifs sont toujours servis. Vérifiez espn sur /v3/sports/games/{game_slug}: null signifie que les quatre routes ci-dessous retourneront 404 pour cela. Le taux de correspondance est une propriété de la ligue, pas du match (mesuré 2026-09-02) : NHL 97%, NBA 91%, NFL 68%, WNBA 67%, EPL 66%, MLB 59%, UFC 56%, CFB 49% — et presque zéro pour esports, cricket, fléchettes et rugby, où aucun flux ESPN ne rétroalimente le catalogue. Triez vos candidats par ligue avant de construire un pipeline sur les scores de match./v3/sports/markets/{condition_id}Un marché normalisé avec identifiants de plateforme, résultats, ID de jetons, participation au jeu et état de règlement.
Joueurs, props et blessures
/v3/sports/{league}/playersRecherchez dans l'annuaire des athlètes de la ligue et récupérez les identifiants stables des athlètes utilisés par les jonctions de paris sur joueurs.
/v3/sports/players/{athlete_id}/v3/sports/players/{athlete_id}/injuries/v3/sports/players/{athlete_id}/box/v3/sports/players/{athlete_id}/marketsProfil joueur, journal des blessures, journal de match box-score, et props de marché prédictif résolus par entité.
/v3/sports/{league}/injuriesLe flux de blessures en direct par ligue — les changements de statut pré-match qui font bouger le marché.
Cotes sportsbook
/v3/sports/odds/linesCotes moneyline, spread, total et prop en direct à travers les carnets, normalisées pour comparaison avec le prix du marché.
/v3/sports/odds/booksLe catalogue actif des sportsbooks et la fraîcheur des sources.
/v3/sports/{league}/odds-historyLignes historiques de sportsbook pour quatre ligues : nfl (nflverse, saisons 1999–2026) et epl, la-liga, soccer (football-data.co.uk, 2000/01 et suivants). Toute autre ligue renvoie 404 SPORTS_UNKNOWN_ROUTE nommer ces quatre. Une requête nécessite au moins un filtre : NFL prend season, team, de, ou à; le football prend un code de saison de football-data (par exemple 2324) et/ou team. Sans cela, vous obtenez 400 INVALID_PARAMETER indiquant lequel.
?season=1999 retourne 1999 sur une clé Explorer. La pagination s’applique toujours : NFL retourne jusqu’à 500 lignes par page avec un cursor, football jusqu'à 1,000./v3/sports/odds/streamServer-Sent Events pour les changements de lignes de sportsbook. Envoyer Accept: text/event-stream; les événements passent au fur et à mesure de leur arrivée et la connexion reste ouverte. Les carnets d'ordres sportifs utilisent le WebSocket DepthFeed principal ci-dessous.
Webhooks de blessure
/v3/sports/webhooksplan payantEnregistrez un récepteur HTTPS avec filtres de ligue et statut de blessure. Le secret de signature est affiché une fois. Les livraisons incluent X-DepthFeed-Event et X-DepthFeed-Signature; vérifiez la signature HMAC-SHA256 sur le corps exact de la requête brute avant d'analyser le JSON.
curl -X POST "https://api.depthfeed.com/v3/sports/webhooks" \
-H "Authorization: Bearer df_your_key" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/depthfeed","leagues":["nba","nfl"],"statuses":["out","questionable"]}'/v3/sports/webhooksplan payant/v3/sports/webhooks/{sub_id}/testplan payant/v3/sports/webhooks/{sub_id}plan payantLister les abonnements et la santé de livraison, envoyer un événement test signé, ou révoquer un abonnement.
# discover a market, then pull its live book
curl "https://api.depthfeed.com/v3/sports/markets?league=mlb&limit=1" -H "Authorization: Bearer df_your_key"
# take tokens[0] from the response, then:
curl "https://api.depthfeed.com/v3/sports/books/<asset_id>/latest" -H "Authorization: Bearer df_your_key"FIX 4.4 données de marché sur TLS
Connectez un système de données de marché FIX existant aux carnets d'ordres normalisés de Binance, Polymarket, Kalshi, Limitless et des canaux sportifs pris en charge. Le profil fournit des snapshots initiaux, des mises à jour de niveau de prix nouvelles/modifiées/supprimées, des battements de cœur, des numéros de séquence persistants et une récupération de comblement de lacunes suivie de nouveaux snapshots. Il consomme le même flux que WebSocket.
| Paramètre | Contrat |
|---|---|
| Admissibilité | Desk / entreprise uniquement ; vérifications en direct de clé et plan, CompID lié au compte |
| Session | FIX 4.4 sur TLS vérifié 1.2+ ; SenderCompID et TargetCompID assignés |
| Connexion | Clé API existante dans la balise 554 via votre callback moteur ; heartbeat 5–30 secondes |
| Données de marché | 35=V requêtes ; 35=W instantanés ; 35=X changements de niveau de prix ; 35=Y rejets de requêtes |
| Récupération | État de séquence persistant ; renvoyer les remplissages de lacunes ; attendre les instantanés de remplacement |
| Limites | Les quotas REST existants et les limites de connexion/abonnement WebSocket restent inchangés |
REST reste l'interface de découverte et de données historiques. Ce profil FIX couvre les données de marché ; il ne route pas les ordres ni ne fournit de relecture historique des ticks. Il n'ajoute aucune couverture de capture indépendante ni garantie de latence. Les horodatages source et ceux d'envoi de la passerelle sont distincts de la réception client.
Lire le profil FIX complet pour les symboles, résultats binaires, champs de requête, ID de niveau déterministes, limites de récupération et de sécurité. Contactez support entreprise pour le statut de provisionnement. Ne devinez pas un nom d’hôte ni n’envoyez une clé API à un endpoint FIX non vérifié.
/v3/streamUn WebSocket qui pousse carnets d’ordres et prix en direct au fur et à mesure qu’ils changent. Les charges utiles des trames sont le mêmes objets JSON que retournent les points de terminaison instantanés REST, donc le code écrit contre REST transfère directement. Authentifiez-vous à la connexion avec le X-API-Key en-tête, Authorization: Bearer, ou — pour les navigateurs, qui ne peuvent pas définir d’en-têtes WebSocket — ?api_key=df_….
# wscat -c "wss://api.depthfeed.com/v3/stream?api_key=df_your_key"
> {"op":"subscribe","channels":["book:polymarket:btc:2510645","price:btc"]}
< {"op":"subscribed","channels":[…],"active":2}
< {"channel":"price:btc","data":{"coin":"btc","price":63560.1,…},"ts":1781300671083}
< {"channel":"book:polymarket:btc:2510645","data":{…same shape as REST snapshot…},"ts":…}Canaux
| Canal | Charge utile | Notes |
|---|---|---|
book:polymarket:<coin>:<market_id> | Objet snapshot REST (avec carnets d'ordres) | Tick-level via notre tap WebSocket CLOB |
book:kalshi:<coin>:<ticker> | Même forme que les lignes /v3/kalshi/…/snapshots | Mises à jour de la boucle de sondage cadencée de Kalshi |
book:limitless:<coin>:<slug> | Même forme que les lignes /v3/limitless/…/snapshots | Basé sur push (tap socket.io) |
book:binance:<coin>:<spot|futures> | Même forme que /v3/…/latest | 100ms flux de profondeur |
book:sports:polymarket:<token_id> | Échelle complète sportive | Quant+ : flux CLOB piloté par événement de première partie |
book:sports:kalshi:<ticker> | Échelle complète sportive | Quant+ : websocket delta carnet Kalshi en best-effort, relais de secours ; trames de changement uniquement |
price:<coin> | { coin, price, source, venue, id, time } | Sous-jacent Binance, ~4 ticks/s max |
Ops : subscribe · unsubscribe (chacun prend {"channels":[…]}, appliqué atomiquement) et ping → pong. Un trailing * segment de marché (par ex. book:kalshi:btc:*) s’abonne à une venue/coin entière — plan Desk uniquement. Les problèmes au niveau opérationnel (mauvaise chaîne, dépassement de votre plafond d’abonnement) reviennent comme {"op":"error","code":…} trames et ne jamais couper la connexion.
Les canaux sportifs utilisent des identifiants concrets et ne supportent pas les jokers. Quant, Research et Desk permettent respectivement un, deux et trois sports books simultanés. Chaque trame sportive inclut l’échelle complète, venue, asset_id, horodatages d’échange/réception, full_ladder: true, et undelivery champ nommant la source de chaque trame : polymarket_clob_ws,kalshi_orderbook_delta_ws, ou scoretape_relay lorsque le relais sportif est en service. Les sports books Kalshi sont alimentés par le websocket delta carnet d'ordres Kalshi authentifié, avec le relais en secours, donc le timing des trames suit l'activité de l'échange plutôt qu'un intervalle de sondage fixe. Lire la fraîcheur à partir des horodatages de chaque observation plutôt que d'assumer un taux de rafraîchissement.
> {"op":"subscribe","channels":[
"book:sports:polymarket:<token_id>",
"book:sports:kalshi:<market_ticker>"
]}
< {"op":"subscribed","channels":[…],"active":2}Limites par plan
| Plan | Connexions | Abonnements | Canaux |
|---|---|---|---|
| Explorer | 1 | 1 | Chaque venue, toutes les pièces ; pas de sports book |
| Quant | 1 | 5 | Chaque venue, toutes les pièces ; 1 sports book |
| Research | 2 | 25 | Chaque venue, toutes les pièces ; 2 sports books |
| Desk | 5 | 100 | Chaque venue, toutes les pièces, plus jokers ; 3 sports books |
La colonne canal est la même sur chaque ligne pour une raison : un plan n’achète pas non plus une venue ou une pièce ici. Explorer diffuse n’importe quel carnet sur n’importe laquelle des quatre venues — il ne détient qu’un abonnement à la fois, donc un second canal dans le même subscribe retours SUB_LIMIT et rien n’est appliqué. Les jokers et les carnets sportifs en direct sont les deux choses qu’un simple plafond d’abonnement ne couvre pas.
Trames d'erreur d'opération
Ils arrivent comme {"op":"error","code":…,"message":…} et laissent la connexion ouverte. Ce sont des codes de trame, pas des statuts HTTP.
| code | Signification |
|---|---|
CHANNEL_INVALID | Nom de canal non valide. Les formes sont book:<venue>:<coin>:<market> et price:<coin>. |
UNKNOWN_OP | Pas un de subscribe, unsubscribe, ping. |
SUB_LIMIT | L’abonnement dépasserait le plafond de votre plan. Rien n’a été souscrit — l’opération s’applique atomiquement. |
SPORTS_SUB_LIMIT | La même chose, pour le plafond séparé de sports-book concurrent. |
SPORTS_NOT_IN_PLAN | Votre plan ne comprend pas d’abonnement à un carnet sportif à faible latence. |
VENUE_NOT_IN_PLAN | Renvoyé uniquement sur la surface démo anonyme. Chaque plan de compte diffuse chaque venue. |
WILDCARD_NOT_IN_PLAN | Un suiveur * segment de marché est uniquement Desk. Nommez plutôt les marchés. |
SLOW_CONSUMER | Votre connexion a trop de retard sur le flux et des trames sont abandonnées. Lisez plus vite, ou abonnez-vous à moins de canaux. |
Codes de fermeture & reconnexion
| Code | Signification |
|---|---|
4001 | Échec de l'authentification (clé manquante / inconnue / révoquée) |
4003 | Limite de connexion du plan atteinte |
4029 | Inondation d'opérations — ralentissez |
1013 | Vérification de clé temporairement indisponible — réessayez bientôt |
Le serveur envoie des pings de protocole toutes les 25 s. Les déploiements et basculements coupent les connexions par conception — traitez déconnecter → reconnecter avec un backoff exponentiel (250 ms doublant jusqu’à ~5 s) et renvoyez vos abonnements comme dans le cycle normal, pas comme une erreur.
Fraîcheur et latence
La cadence de capture, le délai de relais, la taille de la charge utile et la localisation du client affectent la livraison de bout en bout. La trame ts est le temps de publication de la passerelle ; les horodatages à l’intérieur data peut représenter un événement venue, une capture ou un enregistrement stocké, selon le canal. L’âge source et le temps de traitement serveur ne sont pas la même chose que la latence de réception client.
Mesurer un reçu client indépendant avec une horloge synchronisée, préserver la provenance de l’horodatage, et rapporter chaque venue, région, charge utile et fenêtre de mesure séparément. Historiquedeploy/stream_freshness.py les observations décrivent ces séries, plutôt qu’une garantie de latence actuelle pour chaque abonné. Enterprise FIX utilise le même flux sous-jacent ; ses horodatages d’envoi et source sont décrits dans le profil FIX ci-dessus.
Wallet Intelligence est un espace de travail de recherche en lecture seule pour les portefeuilles publics Polymarket. Sauvegardez une liste de surveillance, découvrez des traders depuis le classement public de Polymarket, et consultez les positions publiques, l’activité récente, les échantillons réalisés et les métriques au niveau du portefeuille en un seul endroit. Il ne connecte jamais un portefeuille, ne signe pas de transaction, ni ne passe d’ordre réel.
Audit d’exécution du carnet suivant
Pour chaque transaction publique éligible, DepthFeed trouve le premier carnet Polymarket enregistré après le timestamp d’activité, parcourt l’échelle affichée pour le même nombre d’actions, et rapporte le prix de relecture, la fraction remplissable, le délai observé, et la différence de prix signée par rapport à la transaction publique. La fenêtre de recherche est de 90 secondes. Une correspondance manquante est indiquée comme manquante ; elle n’est jamais estimée.
Les notes sont mécaniques : Profondeur restante signifie qu’au moins 95% de la taille publique était affichée dans 1¢ du prix du trader ; Prix déplacé signifie qu’au moins 95% restait mais à une différence supérieure à 1¢ ; Taille indisponible signifie que moins de 95% de la taille publique était affichée.
Copie papier avant
Démarrez un miroir fictif depuis n’importe quel portefeuille inspecté. Seules les transactions publiques observées après la création du miroir sont éligibles : DepthFeed déduplique chaque exécution, applique le ratio de copie configuré et le plafond par transaction, puis l’exécute au prochain devis live disponible dans le registre normal de Paper Trading. Liquidités, positions, P&L, courbe d’équité, coupe-circuit et historique des règlements apparaissent sous Trading papier.
Un rappel HTTPS optionnel reçoit chaque remplissage copié réussi. Son secret de signature est affiché une seule fois. Vérifier HMAC-SHA256(timestamp.body) contre x-depthfeed-signature; l'horodatage est envoyé dans x-depthfeed-timestamp. Les destinations locales, sur réseau privé, avec authentification, non HTTPS, et redirections sont rejetées.
| Plan | Portefeuilles enregistrés | Trades audités par actualisation | Lignes d'activité publiques |
|---|---|---|---|
| Explorer | 1 | 3 | 30 |
| Quant | 5 | 10 | 100 |
| Research | 10 | 25 | 250 |
| Desk | 20 | 50 | 500 |
Limites d'interprétation
- Une adresse publique peut n'être qu'un seul portefeuille dans le portefeuille d'un trader et ne prouve pas l'identité ou la propriété.
- Les horodatages d'activité publique ne sont pas des horodatages d'ordres privés. L'audit mesure ce que DepthFeed a observé après publication, pas la latence originale du trader.
- Seules les transactions dans la couverture Polymarket enregistrée par DepthFeed peuvent être appariées. Les marchés non pris en charge ou non capturés sont affichés sans audit.
- La relecture consomme mathématiquement la taille affichée ; elle ne peut pas modéliser la liquidité cachée, la priorité dans la file, les courses aux annulations, les frais, ni l’impact sur le marché d’un ordre réel suiveur.
- Le classement, P&L, positions et activité viennent des services de données publics Polymarket et peuvent être retardés, révisés, incomplets ou temporairement indisponibles.
- Wallet Intelligence et son miroir papier sont des outils de recherche — pas du copy trading en direct, des conseils d'investissement, une recommandation ou une garantie d'exécution.
Guides de recherche Wallet
Commencer avec le Guide du suivi de portefeuille Polymarket, puis comparez analyse de portefeuille, recherche du classement, et analyse d’exécution copy-trading.
Ouvert Constructeur de stratégie pour décrire une stratégie à l’assistant, exécuter un backtest historique et inspecter les résultats. Le canevas visuel est disponible sur la vue constructeur. Les deux vues utilisent le même moteur de stratégie.
Construire et exécuter
- Décrivez le marché, les conditions d’entrée, les sorties et la taille de position dans l’assistant, ou connectez des nœuds sur la toile.
- Examinez la stratégie générée et les paramètres d'exécution avant de la lancer.
- Choisissez un échantillon historique disponible dans la fenêtre d’historique de votre compte.
- Inspecter le journal des transactions, la courbe d'équité, les remplissages et les avertissements de qualité des données avant de tirer des conclusions.
Hypothèses d’exécution
Les résultats dépendent de l'échantillon sélectionné, des paramètres de remplissage, des frais, du glissement et de la taille de position. Les observations manquantes et la profondeur indisponible affectent ce qui peut être simulé. Inspectez les hypothèses et avertissements de l'exécution ; un résultat historique ne garantit pas un remplissage en direct ni une performance future.
Continuer en trading simulé
Examinez la stratégie dans le constructeur et utilisez le flux de déploiement papier pour la suivre avec des fonds simulés. Le trading papier a ses propres positions, liquidités et registre des transactions. Il ne place pas d'ordres réels en bourse. L'utilisation de l'assistant et les limites de stratégie papier dépendent de votre plan de compte.
Trading papier exécute les stratégies sur en direct marchés avec argent virtuel. Les exécutions, marques et règlements sont tous tarifés à partir des carnets d’ordres en direct de DepthFeed — achats au prix demandé, ventes au prix offert, les positions se règlent automatiquement à $0/$1 à la résolution du marché. Chaque stratégie dispose de sa propre courbe d’équité, vue des positions et journal complet des transactions.
Trois façons de trader
| Mode | Fonctionnement |
|---|---|
| Webhook | Votre propre système (bot, cron, notebook) POSTe des signaux d’achat/vente à une URL token par stratégie. Votre logique reste la vôtre — nous faisons l’exécution, la comptabilité et les graphiques. |
| Règle du laboratoire | Déployez un préréglage Polymarket ou Kalshi Backtest Lab (entrée fenêtre temporelle, croisement de niveau, reversion de creux) avec côtés natifs de venue, take-profit/stop-loss, plafond max ouvert, et dimensionnement de position (fixe / fractionnel / Kelly) ; il est évalué côté serveur contre des cotations en direct (~90s cadence). |
| Copie du portefeuille | Miroiter les nouveaux remplissages publics d’un portefeuille Polymarket inspecté avec un ratio de copie et un plafond par transaction. Les résultats utilisent le même grand livre papier et peuvent émettre en option des webhooks HTTPS signés de remplissage. |
Webhook de signal
/paper/hook/{token}pas d’authentificationLe jeton (montré une fois à la création/rotation) est l’authentification. Les remplissages sont toujours prix depuis le carnet live au moment du signal — une charge utile ne peut jamais fixer son propre prix. Les marchés sont identifiés par venue + market : un ticker Kalshi, ou un identifiant de token CLOB Polymarket. Vous pouvez trader n’importe quel marché sur le venue, pas seulement ceux que DepthFeed enregistre — si nous ne l’avons pas localement, le remplissage est tarifé à partir d’une lecture en direct du carnet d’ordres propre à la venue.
curl -X POST 'https://api.depthfeed.com/paper/hook/pt_your_token' \
-H 'content-type: application/json' \
-d '{
"action": "buy",
"venue": "polymarket",
"market": "REPLACE_WITH_CLOB_TOKEN_ID",
"side": "yes",
"usd": 100,
"client_id": "sig-0042"
}'{ "data": { "filled": true, "action": "buy", "price": 0.62,
"shares": 161.29, "cost_cents": 10000, "cash_cents": 990000,
"position_id": "…" } }| Erreur | Signification |
|---|---|
NO_FRESH_QUOTE | Aucun carnet en direct pour ce marché — un mauvais id, ou le marché est fermé / devenu unilatéral à 0/1 (le règlement ferme automatiquement les positions). |
INSUFFICIENT_CASH | L’ordre dépasse la trésorerie papier de la stratégie. |
NO_POSITION | vendre/fermer sans lot ouvert sur ce marché/côté. |
RATE_LIMITED | Plus de 120 signaux/min pour la stratégie. |
PAUSED | La stratégie est en pause dans le tableau de bord. |
Disjoncteur
Chaque stratégie a un trailing stop de drawdown maximal (par défaut 60%, modifiable ; définissez à 0 pour désactiver). Si la valeur nette en direct tombe jamais aussi bas sous son sommet historique, la stratégie est automatiquement liquidée aux cours actuels et arrêté — un arrêt dur contre une stratégie qui trade elle-même vers zéro. Reprenez-le à tout moment ; la reprise réinitialise le point haut à votre capital actuel.
Limites
Stratégies concurrentes par plan : Explorer 1 · Quant 5 · Research 15 · Desk 40. Jusqu'à 100 positions ouvertes par stratégie ; solde initial $100–$1,000,000 (par défaut $10,000). Les marques se rafraîchissent environ toutes les 90 secondes — ceci est un traceur de test prospectif, pas un lieu d'exécution.
Chaque route de carnet d’ordres — six routes crypto et venues plus sports — répond au même contrat, donc le code écrit pour l’une se porte à l’autre en changeant le chemin et l’identifiant.
- Le
{ data, pagination, meta }enveloppe etmeta.request_id. - Ensemble de clés
cursorpagination etlimit. - La fenêtre, comme
start_time/end_timeoude/à. intervalpour un carnet par bucket, etfill=ffillpour une grille dense.filled,as_of_ts, etas_of_ts_mssur les lignes remplies.- Le
resolutionbloquer toute réponse qui a utiliséinterval. - La fenêtre historique du plan, et le
error.codeénum.
Quatre choses diffèrent encore, toutes visibles dans la réponse plutôt que cachées dans le comportement.
| Routes crypto & venues | Historique Sports | |
|---|---|---|
| Horodatage de ligne | time ou timestamp comme une chaîne, id comme ms-epoch | ts comme ISO-8601, ts_ms comme ms-epoch |
| Ordre | Les plus anciens en premier | Le plus récent d’abord |
| Ladder | Inclus, sauf la route événement par pièce, qui nécessite include_orderbook=true | Toujours inclus |
| Forme du niveau | Paires : bids / asks comme [[price, size], …], trié du meilleur au pire (Kalshi les nomme yes / non) | Tableaux parallèles : bid_prices avec bid_sizes, ask_prices avec ask_sizes, aligné sur l’index |
Ce sont les formes sur lesquelles les intégrations existantes sont construites, donc elles restent telles quelles. Triez sur l’horodatage propre à la ligne plutôt que sur l’ordre d’arrivée et la différence cesse d’importer.
La précision vient du fait de sourcer les mêmes flux en amont que ceux utilisés par les marchés, donc les valeurs correspondent par construction.
| Lieu | Capture | Fenêtres | Notes |
|---|---|---|---|
| Polymarket | WebSocket CLOB — chaque carnet + événement de changement de prix | 5m · 15m · 1h · 4h · 24h | Profondeur complète, pilotée par événements. Ouverture/fermeture de règlement issue des métadonnées propres à Polymarket. |
| Kalshi | REST public, sondage complet en profondeur cadencé | 15m · 1h · 24h · 1s | Carnet oui/non, jusqu’à 100 niveaux par côté, 7 actifs ; la cadence effective varie selon la charge du marché et les limites API. |
| Limitless | websocket socket.io (orderbookUpdate) | 5m · 15m | CLOB sur Base ; la capture push en direct saisit les carnets rapides 5m que REST ne peut pas instantané. |
| Binance | spot + contrats à terme @depth20@100ms + @aggTrade | — | Carnet sous-jacent + OHLCV 1s, l'ancre de précision pour les marchés à la hausse/à la baisse. |
Tous les 7 actifs (btc · eth · sol · xrp · doge · bnb · hype) sur chaque venue qui les liste.
Les horodatages sont en epoch-millis. exch_ts_ms = heure de la bourse, recv_ts_ms = notre heure de réception (la différence est la latence de capture). Ci-dessous se trouvent les colonnes STOCKÉES. Les routes crypto et plateforme zippent les quatre tableaux de prix/taille dans bids / asks paires avant de les retourner ; les routes sportives les transmettent telles quelles sous forme des quatre tableaux. Tout le reste vous parvient sous le nom sous lequel c’est stocké.
polymarket_book — instantanés complets de carnets d’ordres
asset_id, condition_id, slug, base_asset, market_type, exch_ts_ms, recv_ts_ms, hash, bid_prices[], bid_sizes[], ask_prices[], ask_sizes[]
polymarket_changes — deltas pour rejouer entre instantanés
asset_id, condition_id, exch_ts_ms, recv_ts_ms, side, price, size
polymarket_markets — une ligne par jeton
asset_id, market_id, event_id, condition_id, slug, outcome, base_asset, market_type, clob_token_up, clob_token_down, resolution_source, start_time, end_time, first_seen_ms
polymarket_reference — règlement
slug, base_asset, market_type, start_ms, end_ms, price_to_beat, final_price, winner, final_volume, final_liquidity, resolved_at, captured_ms
binance_book — carnet à 20 niveaux (spot & futures)
venue, symbol, exch_ts_ms, recv_ts_ms, bid_prices[], bid_sizes[], ask_prices[], ask_sizes[]
binance_trades_1s — 1s OHLCV
venue, symbol, second_ms, open, high, low, close, volume, buy_volume, sell_volume, trades, recv_ts_ms
prix — séries unifiées de prix sous-jacents
asset, source (binance|chainlink), venue, exch_ts_ms, price
kalshi_book / kalshi_markets
kalshi_book: ticker, series, base_asset, market_type, recv_ts_ms, yes_prices[], yes_sizes[], no_prices[], no_sizes[]
kalshi_markets: ticker, event_ticker, series, base_asset, market_type, title, status, strike, open_time, close_time, first_seen_ms
limitless_book / limitless_markets
limitless_book: slug, condition_id, base_asset, market_type, recv_ts_ms, midpoint, bid_prices[], bid_sizes[], ask_prices[], ask_sizes[]
limitless_markets: slug, condition_id, base_asset, market_type, title, status, expiration_ms, first_seen_ms
Chaque fenêtre de plan est servie depuis le magasin live plus l’archive froide, donc la fenêtre complète est toujours disponible. Desk n’a pas de limite d’historique roulant: il peut interroger chaque instantané enregistré du sol de la série applicable via le flux en direct. Les sols diffèrent car les contrats et la capture sous licence n'ont pas commencé le même jour pour chaque combinaison d'actif/fenêtre.
Seuils d'archive en profondeur complète Polymarket (UTC)
Un sol est le premier jour où une échelle a été enregistrée, ce qui n'est pas le premier jour d'une série ininterrompue. L'archive Polymarket contient rien avant 2026-01-03, et janvier est cinq jours dispersés (2026-01-03 à 01-06, et 01-24). La couverture quotidienne continue commence le 2026-02-12. Un backtest qui a besoin d'une série ininterrompue devrait commencer là.
| Actifs | 5m | 15m | 1h | 4h | 24h |
|---|---|---|---|---|---|
| BTC | 2026-02-12 | 2026-01-03 | 2026-01-03 | 2026-01-03 | 2026-01-03 |
| ETH, SOL, XRP | 2026-02-18 | 2026-01-03 | 2026-01-03 | 2026-01-03 | 2026-01-03 |
| BNB | 2026-03-13 | 2026-03-13 | 2026-03-06 | 2026-03-13 | 2026-03-07 |
| DOGE | 2026-03-13 | 2026-03-13 | 2026-03-11 | 2026-03-13 | 2026-03-11 |
| HYPE | 2026-03-13 | 2026-03-13 | 2026-03-06 | 2026-03-13 | 2026-03-07 |
Ce sont les premiers jours avec des échelles complètes enregistrées, pas une affirmation que chaque actif/fenêtre existait avant son plancher. Un snapshot retourne l’échelle complète enregistrée ; il peut légitimement ne contenir aucun niveau quand le marché lui-même n’avait pas d’ordres au repos à cet instant.
Planchers d'archive Kalshi (UTC)
Les planchers Kalshi sont séparé de ceux de Polymarket ci-dessus et sont ultérieurs. La plus ancienne échelle Kalshi enregistrée d’une série est 2026-01-08. Pour la série crypto 15 minutes :
| Séries | Échelle la plus ancienne enregistrée |
|---|---|
| KXBTC15M, KXETH15M | 2026-01-08 |
| KXSOL15M | 2026-01-09 |
| KXXRP15M | 2026-02-11 |
| KXBNB15M, KXDOGE15M | 2026-03-07 |
| KXHYPE15M | 2026-03-18 |
Les séries horaires, quotidiennes et hebdomadaires Kalshi portent leurs propres planchers par série, et BTC, ETH, XRP et DOGE commencent aussi sur 2026-01-08. Plutôt que de publier un plancher par série, considérez la découverte comme faisant autorité : /v3/kalshi/markets?series=KXBTC15M&start_time=…&end_time=… liste exactement les tickers dont la profondeur est récupérable dans cette plage, et les identifiants de ticker Kalshi sont définis par le lieu, ils doivent donc être découverts plutôt que construits à partir des horodatages UTC.
La cadence et la profondeur de capture Kalshi ne sont pas constantes dans l'archive. La capture actuelle sonde l'échelle complète jusqu'à 100 niveaux par côté toutes les quelques secondes ; les périodes antérieures sont plus clairsemées, et certains jours de printemps 2026 ne comportent qu'une poignée d'observations par contrat. Les lignes d'instantanés sont stockées telles qu'enregistrées, donc une extraction de recherche couvrant l'archive devrait rééchantillonner sur une grille fixe et porter un compte d'observations par bucket plutôt que supposer un intervalle d'échantillonnage constant.
La profondeur du carnet d'ordres est capturée en direct et ne peut être recréée après coup. L'accès à l'archive est fourni via les surfaces de requête mesurées documentées ; DepthFeed ne fournit pas de reconstruction demandée par le client ni de livraison en masse d'archives.
Ventes de données en vrac jours UTC entiers de l’archive sous forme de fichiers Parquet zstd scellés, un fichier par table par jour, livrés depuis un stockage d’objets par URL signée à courte durée. Il est à côté de l’API REST, pas devant : l’API sert toujours la fenêtre chaude et les voies historiques, et les fichiers en vrac prennent en charge la tâche de « parcourir toute l’archive ». Prépayé, tarifé par GiB, et soumis à une licence de données que vous acceptez une fois dans le tableau de bord.
Produits
| produit | table d’archive | jour de semaine typique |
|---|---|---|
polymarket-book | polymarket_book | 0.35 Gio |
polymarket-us-book | polymarket_us_book | 0.08 Gio |
polymarket-ticks | polymarket_changes | 2.7 Gio |
kalshi-book | kalshi_book | 0.12 Gio |
kalshi-ticks | kalshi_changes | 3.4 Gio |
Les groupes de lignes sont de 5,000 lignes dans les tableaux de carnet d’ordres et de 25,000 ailleurs, triés d’abord par marché, afin qu’un lecteur puisse lire une plage d’un marché dans un fichier journalier. Les tableaux sportifs suivent une fois leur clôture quotidienne effectuée.
Tarification
| élément | valeur |
|---|---|
| Prix | $40 par GiB pour polymarket-book, polymarket-us-book et polymarket-ticks ; $80 par GiB pour kalshi-book et kalshi-ticks. Facturé au moment de la commande selon les tailles du manifeste, arrondi à la hausse une fois sur le total de la commande. |
| Minimum | $5 par commande |
| Remboursements | Aucun. Chaque ordre est définitif une fois passé ; les crédits dépensés ne sont pas remboursés. Le tableau de bord vous demande de confirmer cela avant chaque ordre. |
| Crédits | Prépayé, 100 crédits valent $1, recharges de $25 à $10,000, utilisables pendant 12 mois |
| Liens | 1 heure chacun, émis à nouveau sans frais pendant 30 jours après la commande |
Scellement
Un jour est listé dans le catalogue uniquement une fois scellé : au moins trois jours d'ancienneté, exactement un fichier de données, et son ETag enregistré dans le manifeste. Le hash du manifeste est ce que vous achetez. Si un jour est à nouveau scellé, il devient un nouvelle version; les liens vers l'ancienne version ne sont plus émis et la ligne du catalogue affiche la nouvelle. L'ordre que vous avez passé conserve sa version enregistrée, et les liens marquent ces éléments superseded au lieu de retourner une URL.
Licence
Citations et ordres retournent 403 DATA_LICENCE_REQUIRED jusqu'à ce que le compte ait accepté le Licence de données: utilisation interne dans votre organisation, sans redistribution ni revente, analyses dérivées autorisées. Acceptez-le depuis le tableau de bord ou avec l'appel ci-dessous. Les comptes sans le produit activé reçoivent 404 DATA_PRODUCTS_DISABLED sur chaque route ici.
Itinéraires
/v3/data/productsLes tables vendables avec leur tarif.
curl https://api.depthfeed.com/v3/data/products -H "Authorization: Bearer df_your_key_here"/v3/data/licenceSi ce compte a accepté la licence, et quelle version.
curl https://api.depthfeed.com/v3/data/licence -H "Authorization: Bearer df_your_key_here"/v3/data/licence/acceptEnregistrer l'acceptation de la version imprimée sur la page de licence.
curl -X POST https://api.depthfeed.com/v3/data/licence/accept -H "Authorization: Bearer df_your_key_here" -H "Content-Type: application/json" -d '{"version":"2026-10-06"}'/v3/data/balanceSolde prépayé en tant que credits et usd. Les recharges se font depuis le tableau de bord.
curl https://api.depthfeed.com/v3/data/balance -H "Authorization: Bearer df_your_key_here"/v3/data/catalogueJours scellés pour un produit entre de et à (dates UTC, inclusives), chacune avec bytes, rows, etag, version et sealed_at. Pagination par curseur comme chaque liste.
curl "https://api.depthfeed.com/v3/data/catalogue?product=kalshi-ticks&from=2026-09-01&to=2026-09-30&limit=100" -H "Authorization: Bearer df_your_key_here"/v3/data/quotesTarifer une sélection. Retourne la cotation id, total_bytes, price_credits et expires_at (15 minutes). Un devis fixe le prix, pas l’argent : vous n’avez pas besoin de crédits prépayés pour le demander. Un nouveau devis annule les devis ouverts antérieurs sauf s’ils ont un paiement par carte en cours. Payez manuellement par carte via le point de paiement ci-dessous, ou réglez depuis votre solde de crédits. Chaque devis et commande comporte non_refundable: true.
curl -X POST https://api.depthfeed.com/v3/data/quotes -H "Authorization: Bearer df_your_key_here" -H "Content-Type: application/json" -d '{"items":[{"product":"kalshi-ticks","from":"2026-09-01","to":"2026-09-07"}]}'/v3/data/orders/checkoutAchetez via l’API et payez manuellement. Envoyez l’UUID du devis à ce point de terminaison et ouvrez le retourpayment_url (aussi renvoyé comme url) dans un navigateur. C’est un paiement par carte hébergé par Stripe pour exactement ce devis, pas un débit immédiat. Répéter cette requête pendant que le paiement est actif renvoie le même lien avec reused: true. Utilisez son expires_at.
curl -X POST https://api.depthfeed.com/v3/data/orders/checkout -H "Authorization: Bearer df_your_key_here" -H "Content-Type: application/json" -d '{"quote_id":"11111111-1111-1111-1111-111111111111"}'{ "data": {
"quote_id": "11111111-1111-1111-1111-111111111111",
"payment_url": "https://checkout.stripe.com/c/pay/...",
"payment_status": "awaiting_payment",
"price_usd": 12.34,
"expires_at": "2026-10-19T01:32:00Z",
"reused": false
} }Après paiement manuel, le webhook vérifié de Stripe crée la commande payée. SondezGET /v3/data/orders avec un recul borné et une correspondance quote_id; la page de retour du navigateur ne prouve pas le paiement. Une fois qu'une commande est paid, demandez ses liens de téléchargement. Un email de téléchargement est aussi envoyé à l’email du compte. Un paiement non réglé ou expiré ne crée pas de commande payée. Le paiement par crédits sur le même devis est bloqué tant qu’un paiement par carte est actif.
/v3/data/ordersRégler un devis. Les crédits sont débités maintenant ; la commande liste chaque jour couvert.
curl -X POST https://api.depthfeed.com/v3/data/orders -H "Authorization: Bearer df_your_key_here" -H "Content-Type: application/json" -d '{"quote_id":"q_01J…"}'/v3/data/orders/v3/data/orders/{id}Vos ordres, du plus récent au plus ancien, et un ordre avec ses articles.
curl https://api.depthfeed.com/v3/data/orders -H "Authorization: Bearer df_your_key_here"/v3/data/orders/{id}/linksÉmettre des URL signées pour chaque élément de la commande. Chaque URL dure une heure et est un jeton porteur pour ce fichier, gardez-le donc dans vos propres systèmes. Appelez à nouveau chaque fois que vous avez besoin d'un nouvel ensemble, gratuitement, pendant 30 jours. Un élément dont le jour a été à nouveau scellé revient avec status: "reissued_new_version" et une URL fraîche. Un jour sans fichier actuel est unavailable.
curl -X POST https://api.depthfeed.com/v3/data/orders/ord_01J…/links -H "Authorization: Bearer df_your_key_here"{ "data": { "items": [
{ "item_id": "…", "product": "kalshi-ticks", "day": "2026-09-01", "bytes": 3650722201,
"url": "https://<account>.r2.cloudflarestorage.com/…?X-Amz-Expires=3600&…",
"expires_at": "2026-10-06T13:00:00Z", "status": "ready" }
] } }Parcourez l'historique complet de profondeur d'un marché (Python)
import requests
BASE = "https://api.depthfeed.com/v3"
H = {"Authorization": "Bearer df_your_key"}
# 1. find a market
m = requests.get(f"{BASE}/btc/markets?type=15m&limit=1", headers=H).json()["data"][0]
mid = m["market_id"]
# 2. page through its order-book snapshots
cursor, rows = None, []
while True:
q = f"{BASE}/btc/markets/{mid}/snapshots?include_orderbook=true&limit=1000"
if cursor: q += f"&cursor={cursor}"
page = requests.get(q, headers=H).json()
rows += page["data"]
if not page["pagination"]["has_more"]: break
cursor = page["pagination"]["next_cursor"]
print(len(rows), "snapshots")Profondeur inter-venue récente pour BTC up/down (JavaScript)
const h = { Authorization: "Bearer df_your_key" };
// One call → the full BTC 15m book on all three venues at once.
// (No stitching: the screener is the cross-venue entry point.)
const res = await fetch("https://api.depthfeed.com/v3/screener/btc/15m", { headers: h }).then(r => r.json());
const { books } = res.data; // books.polymarket / books.kalshi / books.limitlessDepthFeed est conçu pour être piloté par des agents : JSON simple sur HTTPS, une clé Bearer, codes d'erreur stables, et aucun SDK requis. Un résumé produit lisible par machine est disponible à /llms.txt.
Comme outil d'appel de fonction / style MCP
Encapsulez n'importe quel point de terminaison comme un outil — l'API est suffisamment auto-descriptive pour qu'une définition générique couvre la plupart des flux de travail :
{
"name": "depthfeed_get",
"description": "Query DepthFeed prediction-market order-book data. Paths: /v3/{coin}/markets, /v3/{coin}/markets/{id}/snapshots, /v3/kalshi/markets, /v3/kalshi/{ticker}/snapshots, /v3/kalshi/{ticker}/candles, /v3/limitless/{slug}/snapshots, /v3/{coin}/{spot|futures}/latest. Coins: btc eth sol xrp doge bnb hype.",
"parameters": {
"type": "object",
"properties": { "path": { "type": "string", "description": "GET path under /v3, with query params" } },
"required": ["path"]
}
}Le corps de l’outil est un seul GET authentifié :
curl "https://api.depthfeed.com{path}" -H "Authorization: Bearer df_your_key"Données en direct dans les agents
Le Flux WebSocket utilise trois opérations JSON (subscribe / unsubscribe / ping) et s’authentifie avec ?api_key= là où les en-têtes ne peuvent pas être définis — trivial à piloter depuis n'importe quel runtime. Les trames portent les mêmes objets JSON que REST, donc le code d'analyse d'un agent est identique pour l'historique et le direct.
/v3/whoami répercute le plan de la clé, les limites de taux et la fenêtre historique — appelez-le d’abord et auto-configurez-vous au lieu de deviner les limites.Ce qui est en direct, du plus récent au plus ancien :
- Constructeur de stratégie. Backtests assistés et un canevas visuel de stratégie partagent le même moteur sur
/dashboard/backtest. - Barres de prix.
/v3/barssert des OHLCV d’actions, ETF et crypto dans la fenêtre d’historique de votre plan. - Téléchargements en vrac. Des jours UTC entiers de fichiers Parquet scellés peuvent être achetés séparément de l'accès API.
- Diffusion en direct.
/v3/streamWebSocket — canaux carnet d'ordres et prix sur chaque venue, capture et livraison dépendantes de la venue, abonnements soumis à plan. - Venue Limitless. Marchés, carnet d’ordres le plus récent, et instantanés historiques de profondeur — avec 5m + 15m capturés en direct via le websocket du carnet d’ordres.
- Kalshi développé. 21 séries pour tous les 7 actifs (15 minutes, seuil et directionnel — ces deux derniers fonctionnant simultanément à l'heure/jour/semaine) ;
market_typeexposé et filtrable. - API v3 complète. Marchés Polymarket + instantanés, spot/futures Binance, traitement par lots, pagination par curseur, application de l'historique par plan, usage mesuré.
- HTTPS public.
https://api.depthfeed.comvia TLS.
L'historique disponible varie selon la venue et la série. Vérifiez Historique & couverture et la réponse API pour confirmer le plancher d'archive pour votre période demandée. Questions ou demande de backfill ? Prendre contact.
