Documentación de la API
Datos DepthFeed
Referencia API
Descubrimiento de mercados, libros de órdenes históricos, barras de precios y streams en vivo. La referencia completa de integración v3.
URL base REST https://api.depthfeed.com/v3. Los detalles de conexión WebSocket y FIX provisionados se documentan abajo; presione / para buscar en los contenidos.
Contenido▾
DepthFeed es libro de órdenes histórico profundidad para mercados de predicción — registros completos de escalas de compra/venta en ambos lados para Polymarket, Kalshi, y Limitless. No solo el precio de la última operación o el tope del libro: cada observación almacenada incluye niveles y tamaños en reposo. Son los datos que necesita para backtestear una ejecución contra la liquidez que realmente existía.
Se entrega a través de un API REST medida — descubrimiento de mercado, metadatos y instantáneas del libro de órdenes más recientes + históricas, paginadas por clave con controles separados de admisión general y carga de trabajo histórica. Extraiga exactamente la profundidad que necesita su estrategia y reprodúzcala en su propia pila.
Cobertura de libros de órdenes 3 venues, 7 activos (btc · eth · sol · xrp · doge · bnb · hype) y los mercados recurrentes alcistas/bajistas de criptomonedas que cada venue ejecuta (5m, 15m, 1h, 4h, 24h, según el venue).
Los precios son la segunda mitad del producto. /v3/bars sirve barras de precios OHLCV para Acciones y ETFs listados en EE.UU., pares spot cripto y futuros perpetuos en cada plan, con resolución base de un minuto. Comparten el reloj, el esquema y la ventana de historial del plan con los libros arriba, para que una estrategia pueda leer una acción y actuar sobre un contrato sin reconciliar las marcas de tiempo de dos proveedores.
Deportes está en todos los planes — toda la superficie REST: libros de Polymarket y Kalshi, cuotas de sportsbook, puntuaciones y lesiones en las principales ligas. Lo que un plan pago añade es el libro en vivo de baja latencia sobre WebSocket, un libro concurrente en Quant y tres en Desk. Salte a Endpoints deportivos.
¿Nuevo en la evaluación de fuentes de datos? El guía del comprador cubre los cinco criterios que deciden si los datos de mercados predictivos son realmente backtesteables, y cómo DepthFeed cumple cada uno.
Usa esta página como el contrato operativo cuando un LLM o agente responde preguntas sobre DepthFeed o escribe código de integración. Prefiere la respuesta API documentada sobre suposiciones de etiquetas de mercado, ejemplos o descripciones de terceros.
Reglas canónicas
- Usar
https://depthfeed.com/docscomo fuente de verdad para nombres de endpoint, campos, límites y puertas de plan. - Elija el endpoint que coincida con el trabajo:
/v3/demopara un ejemplo sin clave,/v3/marketspara descubrimiento,/v3/snapshotspara libros históricos,/v3/streampara libros en vivo,/v3/sports/marketspara mapeo deportivo, y/v3/whoamipara límites de cuenta. - No infiera equivalencia cruzada de venues a partir de
kind, etiquetas, orden de matriz, ocross_venue_key. Confirmarcontract_mapping.status=matchedy los términos de liquidación antes de tratar uncross_venue_market_keycomo equivalente. - Preserve nulos, marcas de tiempo, identificadores de venue y metadatos parciales. HTTP 200 y un conteo total no prueban que una respuesta esté completa.
- Siga cursores opacos hasta
has_morees falso, manteniendo filtros fijos a lo largo del recorrido de página. - Para correcciones, encuesta
updated_since, inserte o actualice por identidad estable de mercado o condición, retenga revocaciones nulas, incluya mercados resueltos y superposición solo después de un recorrido exitoso. - Para backtests, use profundidad completa de oferta/demanda y tamaños en reposo. No describa datos de punto medio o último precio como llenados ejecutables.
- Estado de autenticación, plan, ventana de historial, límite de tasa y supuestos del venue. Si la documentación no confirma un hecho, etiquételo como no confirmado.
Contrato de respuesta
Las respuestas generadas por el modelo deben nombrar el endpoint exacto y ancla de documentación, mostrar una solicitud mínima, explicar los campos de respuesta usados, distinguir IDs nativos del venue de claves canónicas y separar hechos medidos, cobertura actual, inferencias y desconocidos. Nunca afirme una afiliación entre DepthFeed y un venue.
1. Crear una cuenta gratuita y genera una clave API desde el panel. Las claves se ven así df_… y se muestran una vez.
2. Haga su primera llamada autenticada:
curl https://api.depthfeed.com/v3/whoami \
-H "Authorization: Bearer df_your_key_here"3. La respuesta es un sobre JSON. Este extracto muestra una cuenta Quant; tus límites dependen de tu 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. Obtén los mercados up/down más recientes de BTC, luego la profundidad del order book para uno de ellos — ver Mercados y Snapshots.
Los endpoints de datos autenticados requieren una clave API. Las rutas públicas incluyen /v3/health, /v3/overview y /v3/demo. Páselo de cualquier forma — ambos esquemas son aceptados:
# 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 también requiere clave, pero autentica una vez al conectar — un WebSocket no puede llevar un encabezado por solicitud, así que acepta X-API-Key, Authorization: Bearer, o un ?api_key= parámetro de consulta. Ver Stream en vivo.Las claves se emiten por cuenta desde el panel y llevan un plan que establece su límite de tasa, ventana de historial y acceso a activos/venues. Las claves se almacenan SHA-256 con hash en reposo — el valor bruto se muestra exactamente una vez en la creación. Revocar una clave en el panel tiene efecto inmediato. Las cuotas son por usuario, no por clave — las claves adicionales no multiplican su límite.
| Fallo | Estado | código |
|---|---|---|
| No se proporcionó clave | 401 | AUTH_MISSING |
| Clave desconocida / revocada / malformada | 401 | AUTH_INVALID |
| Almacén de claves temporalmente inaccesible | 503 | AUTH_UNAVAILABLE |
Todos los endpoints en vivo bajo una única ruta base versionada:
https://api.depthfeed.com/v3Se requiere TLS (Let's Encrypt, HTTP/2). La versión actual de la API es v3, construido para paridad PolyBackTest (mismo envoltorio, paginación por cursor y enumeración de códigos de error) sobre nuestros datos superconjunto (3 venues, 7 activos). Legado v1/v2 espacios de nombres no se sirven.
Cada respuesta exitosa es el mismo sobre:
{
"data": … , // object (single) or array (list)
"pagination": { … }, // present only on list endpoints
"meta": { "request_id": "req_…", "timestamp": "2026-06-07T02:27:09.532Z" }
}Los errores comparten la forma, con el estado HTTP establecido por código:
{
"error": { "code": "INVALID_COIN", "message": "…", "details": { … } },
"meta": { "request_id": "req_…", "timestamp": "…" }
}Cada respuesta — éxito o error — lleva meta.request_id, también devuelto como el X-Request-Id encabezado. Cítelo en solicitudes de soporte.
Ramificar en error.code — es estable. El estado HTTP se deduce del código.
| código | HTTP | Significado |
|---|---|---|
AUTH_MISSING | 401 | No hay clave API en la solicitud. |
AUTH_INVALID | 401 | Clave desconocida, revocada o malformada. |
COIN_NOT_IN_PLAN | 402 | Devuelto solo por la superficie demo anónima (muestra BTC). Cada plan de cuenta, incluido Explorer, incluye todas las monedas. |
ENDPOINT_NOT_IN_PLAN | 402 | Devuelto solo por la superficie demo anónima. Cada plan de cuenta incluye todos los venues; el historial está limitado por la ventana de tu plan. |
SYMBOL_LIMIT_EXCEEDED | 402 | Más símbolos en una solicitud /v3/bars que el tamaño de lote de tu plan (3 / 8 / 16 / 32). Divide la lista y vuelve a solicitar — esto limita UNA llamada, no cuántos símbolos puedes obtener. |
WINDOW_TOO_WIDE | 400 | Una solicitud /v3/bars abarca más tiempo del que permite el recuento de filas del marco (45 días a 1Min, 180 a 5Min, un año a 15Min y 1Hora, diez años a 1Día). Página con límite y cursor. |
HISTORY_LIMIT_EXCEEDED | 403 | start_time / timestamp es anterior a la ventana de tu plan. |
INVALID_COIN | 400 | Moneda no es una de las siete soportadas. |
INVALID_CURSOR | 400 | Cursor mal formado. |
INVALID_TIMESTAMP | 400 | No es ms-epoch ni ISO-8601. |
INVALID_INTERVAL | 400 | intervalo no una duración como 30s, 1m, 5m, 1h, 1d (1s–1d). |
INVALID_PARAMETER | 400 | Se rechazó un parámetro de consulta o una variable de URL; details.parameter names lo indica. Cubre una ejecución enviada sin intervalo, y un segmento vacío {ticker}/{slug}/{asset_id}/{market_id} — una ruta con dos barras consecutivas, lo que casi siempre significa que una variable de plantilla no se sustituyó. |
MISSING_PARAMETER | 400 | Faltaba un parámetro requerido; details.parameter names lo indica. |
INVALID_LIMIT | 400 | el límite no es un entero positivo. |
INVALID_JSON | 400 | El cuerpo de la solicitud no es JSON válido. Solo las rutas POST pueden devolverlo. |
INVALID_RANGE | 400 | Encendido /v3/bars: end_time no es después de start_time. Devuelve ambos valores. |
INVALID_SYMBOL | 400 | Encendido /v3/bars: el símbolo no es uno que servimos. Escriba un par como lo hace la plataforma — BTCUSDT, no BTC. |
INVALID_TIMEFRAME | 400 | Encendido /v3/bars: no uno de 1Min, 5Min, 15Min, 1Hour, 1Day. details.supported los lista. |
INVALID_VENUE | 400 | Encendido /v3/bars: venue no es us-equities, binance, o binance-futures. |
INVALID_WINDOW | 400 | Encendido /v3/screener/{asset}/{window}: la ventana no es una de 5m, 15m, 1h, 4h, 24h. |
INVALID_METRIC | 400 | En la serie temporal de predicción de Binance: metric no es chance, price, o last_trade. |
INVALID_MARKET_ID | 400 | Encendido /v3/binance-prediction/{market_id}/*: el id no es un entero sin signo. |
BAD_REQUEST | 400 | El servicio de barras rechazó la solicitud y se pasa su propio mensaje. Lee error.message. |
MARKET_TICKER_REQUIRED | 400 | Se pasó una serie de Kalshi donde se requiere un ticker de mercado descubierto exacto. |
BATCH_TOO_LARGE | 400 | Más de 10 subsolicitudes en un lote. |
BATCH_INVALID_PATH | 400 | La sub-solicitud no es una ruta GET /v3/ (estado por sub). |
TICKS_NOT_IN_PLAN | 402 | Rutas a nivel tick son solo para Desk. |
MARKET_NOT_FOUND | 404 | No hay mercado con ese id / slug / ticker. |
SNAPSHOT_NOT_FOUND | 404 | No se ha capturado ningún libro para la consulta — el mercado puede no haber abierto para trading aún, puede haber expirado o puede estar fuera de cobertura. |
CANDLES_NOT_AVAILABLE | 404 | No se registra ninguna serie de velas para ese ticker de Kalshi. |
GAME_NOT_FOUND | 404 | No hay juego con ese game_slug. |
ENDPOINT_NOT_FOUND | 404 | La ruta no coincide con ninguna ruta v3. |
SPORTS_UNKNOWN_ROUTE | 404 | La ruta está bajo /v3/sports pero no coincide con ninguna ruta de deportes. GET /v3/sports lista todas. |
SPORTS_METHOD_NOT_ALLOWED | 405 | Verbo HTTP incorrecto para una ruta deportiva. |
RESPONSE_TOO_LARGE | 413 | La página excede el límite de respuesta. Reduce el límite, estrecha la ventana o añade intervalo. |
RATE_LIMIT_BURST | 429 | Exceso de ráfaga por segundo. |
RATE_LIMIT_SUSTAINED | 429 | Límite sostenido por minuto excedido. |
HISTORY_CONCURRENCY_LIMIT | 429 | Otra solicitud de snapshot o historial por lotes aún está en ejecución para esta cuenta (details.scope = "account"). |
HISTORY_POOL_BUSY | 429 | La piscina compartida de consultas de archivo está saturada del lado del servidor, no el límite de tu cuenta (details.scope = "shared_pool") — reintenta con retroceso. |
SERVICE_PROFILE_UNAVAILABLE | 503 | No se pudo leer la configuración de servicio de tu cuenta. Transitorio; details.retry_after está en segundos. |
HISTORY_METER_UNAVAILABLE | 503 | La contabilidad de uso histórico está baja, por lo que no se puede admitir una lectura histórica. Transitorio; lleva details.retry_after. |
HISTORY_FALLBACK_UNAVAILABLE | 503 | Un rango faltante de la tienda en vivo no pudo ser recuperado del archivo en este momento. Transitorio; lleva details.retry_after. |
BARS_LICENCE | 502 | El historial de precios no está licenciado para ese rango. Reduzca la ventana en lugar de reintentar. |
HISTORY_START_RATE_LIMIT | 429 | Esta cuenta ha iniciado tantas consultas históricas como su perfil permite este minuto. Retry-After: 60. |
HISTORY_DELIVERY_LIMIT | 429 | Se ha agotado la asignación de entrega histórica rotatoria de la cuenta. Reintenta después de: 3600. |
TRIAL_DELIVERY_LIMIT | 429 | Se ha agotado la asignación de datos incluida con la prueba gratuita. No es un fallo, y no se soluciona esperando — suscríbete para obtener la asignación completa del plan. |
INTERNAL_ERROR | 500 | Error inesperado del servidor — reintenta, luego contáctanos con el ID de solicitud. |
AUTH_UNAVAILABLE | 503 | Verificación de clave temporalmente no disponible — intente de nuevo en breve. |
UPSTREAM_UNAVAILABLE | 503 | Un servicio de profundidad detrás de la API no respondió (details.retryable = true). Esto es sobre nosotros, no sobre su ticker — vuelva a intentarlo con retroceso en lugar de tratar el mercado como faltante. |
BARS_BUSY | 503 | El servicio de barras está en su techo de concurrencia ahora mismo, no es una interrupción. Lleva detalles.retry_after en segundos — retrocede y reintenta, la misma solicitud generalmente tiene éxito. |
BARS_UNAVAILABLE | 503 | El servicio de barras está caído. Reintenta con retroceso. |
BARS_UPSTREAM | 502 | El proveedor de barras respondió con un error. |
SPORTS_UNAVAILABLE | 503 | La puerta de enlace de deportes no respondió. Sobre nosotros, no tu mercado. |
SPORTS_UPSTREAM | 502 | La puerta de enlace de deportes respondió con un error. |
ISOLATED_ROUTE_UNAVAILABLE | 503 | Solo Desk: el nodo dedicado de historial Desk no está accesible. Reintente con retroceso. |
ISOLATED_ROUTE_FAILED | 502 | Solo Desk: el nodo dedicado de historial Desk respondió con un error. |
403 HISTORY_LIMIT_EXCEEDED lleva details.max_history_days y details.oldest_allowed. 429 también establece Retry-After y el X-RateLimit-* cabeceras.
Los límites son un bucket de tokens por usuario con dos ventanas: una por segundo explosión y un por minuto sostenido límite. Exceder cualquiera devuelve 429 con el código de coincidencia y un Retry-After de 1 segundo.
Explorer es una solicitud por segundo, sin límite separado por minuto. Es un ritmo, no una asignación de ráfaga: un ciclo que se ejecuta tan rápido como puede gastará la mayoría de sus solicitudes en 429. Leer X-RateLimit-Remaining, o simplemente duerma un segundo entre llamadas.
Los valores rps/rpm anunciados son límites generales de admisión REST, no tasas de entrega de archivo. Snapshots históricos, lotes que contienen lecturas de historial y otras rutas pesadas usan controles separados de concurrencia y entrega a nivel de cuenta. Estos controles se aplican independientemente del bucket de tokens general y no cambian la ventana de historial del plan.
Explorer, Quant y Research aceptan actualmente una solicitud histórica en vuelo por cuenta. Desk acepta 6 solicitudes paralelas de snapshots históricos por cuenta a través de su grupo dedicado de consultas Desk. Un solapamiento devuelve 429 HISTORY_CONCURRENCY_LIMIT con Retry-After: 2; vuelva a intentarlo solo después de que se complete una solicitud activa. Los valores generales de rps/rpm no deben usarse para inferir el paralelismo histórico.
Una lectura histórica también puede ser rechazada cuando su cuenta todavía está dentro de su propia asignación, porque el grupo compartido de consulta de archivos está saturado. Ese caso devuelve 429 HISTORY_POOL_BUSY con details.scope = "shared_pool" en lugar de "account". Ramifique en details.scope: encendido account, reduzca su paralelismo; en shared_pool, reducir el paralelismo no ayudará — reintente con retroceso.
/v3/bars tiene su propio techo de concurrencia, independiente de ambos controles anteriores. Más allá de él, una solicitud es rechazada inmediatamente con 503 BARS_BUSY y details.retry_after en segundos, en lugar de estar en cola — un rechazo rápido que puede reintentar es más útil que un éxito lento que no puede presupuestar. Trátelo exactamente como un 429: retrocede y reintenta la misma solicitud. Las barras también tienen dos límites que no son límites de tasa en absoluto — tamaño de lote (402 SYMBOL_LIMIT_EXCEEDED) y el rango por solicitud (400 WINDOW_TOO_WIDE) — ambos corregidos dividiendo la solicitud, no esperando.
| Encabezado | Significado |
|---|---|
X-RateLimit-Limit | Tu límite de ráfaga por segundo (rps). |
X-RateLimit-Remaining | Tokens de ráfaga restantes este segundo. |
Retry-After | Segundos a esperar (establecido en 429). |
X-Request-Id | Eco de meta.request_id. |
Ver Planes y acceso para las rps/rpm por nivel.
Patrón de consulta histórica
Mantenga activas no más de su concurrencia confirmada de historial. Use limitado start_time yend_time, paginación por cursor, y limit=1000; omita include_count y solicita la escalera completa solo cuando es necesario. Añade interval cuando una serie muestreada es suficiente. DepthFeed es un producto de acceso por consulta medido: archivos masivos, entrega de archivo offline, replicación de base de datos y espejado sistemático de archivo no están incluidos.
Los endpoints de lista usan opaco cursores de conjunto de claves — O(1) a cualquier profundidad. Pasar ?cursor= de la página anterior pagination.next_cursor; deténgase cuando has_more es 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
}Parámetros comunes de consulta
| Parámetro | Tipo | Notas |
|---|---|---|
limit | int | Máximo de mercados 100, snapshots/comercios máximo 1000. Valores predeterminados: 50 / 100. |
cursor | cadena | Cursor opaco de conjunto de claves de la página anterior. |
include_count | booleano | Agrega total_count (cuesta un COUNT — opcional). |
start_time | ts | ms-epoch o ISO-8601. Más antiguo que su ventana → 403. |
end_time | ts | ms-epoch o ISO-8601. |
desde | ts | Alias de start_time, aceptado en todas las rutas. |
a | ts | Alias de end_time, aceptado en todas las rutas. |
interval | dur | Solo snapshots. Muestreo a uno por cubeta (el más reciente en cada una): 30s, 1m, 5m, 1h … hasta 1d. Omitir para resolución completa. |
fill | enum | Solo snapshots, y requiere interval. ffill devuelve una fila por cubeta, llevando el último libro a cubetas que no tuvieron captura. Por defecto apagado. |
desde/a y start_time/end_time son la misma ventana. Ambas grafías funcionan en todas partes; si una solicitud lleva ambas, start_time/end_time ganar.
Las marcas de tiempo aceptan cualquiera milisegundos desde epoch (ej. 1780774485780) o ISO-8601 (por ejemplo 2026-06-07T02:27:09Z). Cada valor que llega a la base de datos es validado y seguro contra inyección. La ventana de historial del plan se aplica en cada endpoint de lista/snapshot: un start_time más allá de los retornos de la ventana 403; una omitida se limita al suelo de la ventana.
Downsampling con interval
Por defecto, los endpoints de snapshot devuelven cada cambio grabado del libro — resolución completa basada en eventos. Cuando solo necesitas una muestra periódica (por ejemplo, un libro por minuto para un gráfico o una prueba retrospectiva gruesa), añade ?interval= y el servidor colapsa cada cubo de tiempo a un solo snapshot: el libro más reciente en esa cubeta. Es mucho menos datos por la red que obtener cada tick y filtrar en el cliente.
# 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"Acepta una duración: un número desnudo de segundos, o un valor con una unidad — 30s, 1m, 5m, 15m, 1h, 4h, 1d — desde 1s a 1d. Las cubetas están alineadas con la época, así que 1m se ajusta a los límites de minuto del reloj de pared. Paginación con cursor y include_count se aplican a las filas muestreadas (total_count se convierte en el número de cubetas). Omítalo, pase raw, o pase 0 para resolución completa. Un valor no reconocido devuelve 400 INVALID_INTERVAL. Funciona en cada endpoint de snapshot — Polymarket, Kalshi, Limitless, PredictFun, Binance y deportes.
El intervalo selecciona; no interpola. Un cubo aparece en la respuesta solo si se capturó un libro dentro de él. Dos horas en ?interval=1m abarca 121 límites de minuto pero devuelve solo los minutos que tuvieron captura — comúnmente diez a treinta en un mercado que no se cotiza activamente. Ese es el registro completo para la ventana, no una página truncada.
Llenando las brechas con fill=ffill
Un libro de órdenes mantiene su estado hasta que algo lo cambia, por lo que un minuto sin captura no es dato faltante — el libro del minuto anterior seguía siendo el libro. ?fill=ffill lo indica explícitamente: una fila por cubeta para toda la ventana, con el último libro capturado llevado a las cubetas que no tuvieron captura. Es lo que quieres cuando la serie debe alinearse con un reloj fijo, una barra de precio o otro 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 requiere interval; por sí solo devuelve 400 INVALID_PARAMETER. Los valores aceptados son ffill (también previous, prev, true, 1) y none (también false, 0, el predeterminado). Se soporta en las mismas rutas que interval. El listado, tick, vela y orderbook/latest las rutas no tienen cuadrícula para llenar e ignoran el parámetro en lugar de rechazarlo, así que un cliente que lo envía en todas partes aún recibe un 200 de ellos.
El reloj propio de la fila cambia cuando giras fill encendido. Con interval solo la fila es una captura real, así que id y time/timestamp son el instante en que se grabó — 04:37:59.926 para la cubeta 04:37. Con fill=ffill cada fila representa un cubo, incluidas las capturadas, por lo que esos campos se convierten en el límite del cubo (04:37:00.000) y el instante de captura se mueve a as_of_ts. Nada se pierde en ningún caso, pero un gráfico dibujado desde ambos estará desplazado hasta un intervalo a menos que lea el mismo campo en ambos. Si necesita la cuadrícula y el instante de captura juntos, pida fill=ffill y lee as_of_ts.
Leyendo una fila llena
Las respuestas llenadas añaden tres campos, y solo las respuestas llenadas los tienen. Una solicitud sin fill devuelve exactamente la forma que siempre tuvo.
| Campo | Significado |
|---|---|
filled | 0 cuando la fila es un libro capturado, 1 cuando fue continuado. |
as_of_ts | Cuándo se grabó realmente el libro en esta fila. En una fila trasladada esto es más antiguo que el bucket, y la distancia entre ellos es exactamente cuán obsoleto está el libro. null cuando no había un libro anterior para continuar. |
as_of_ts_ms | El mismo instante que ms-epoch. |
La marca de tiempo del cubo y as_of_ts son cercanos pero no iguales incluso en una captura, porque la captura cayó en algún lugar dentro del cubo y no en su límite: 2026-09-02T00:50:00.000Z con as_of_ts de 2026-09-02T00:50:44.437Z es un minuto real que tuvo un libro real.
La primera fila de una ventana completada suele ser una fila arrastrada. La cuadrícula se siembra con el libro más reciente registrado antes la ventana se abrió, por lo que la serie comienza desde un estado real en lugar de uno vacío. Su as_of_ts puede tener horas de antigüedad respecto al primer cubo, y esa es la respuesta honesta.
Cuando la ventana se abre antes que el mercado, no hay libro anterior para trasladar. Esos buckets iniciales regresan con una escalera vacía y as_of_ts: null — generado, sin nada que poner en ellos. Vinculado start_time al inicio propio del mercado para omitirlos.
The resolution bloquear
Cada respuesta que usó ?interval= lleva un resolution bloquear, para que pueda distinguir un registro de captura disperso de una página truncada sin una segunda solicitud.
"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 cuenta capturas, nunca filas, por lo que significa lo mismo con fill en como con ella apagada. Es el número con el que comparar buckets_in_range al juzgar qué tan bien está cotizado un mercado. Con fill fuera, rows_returned y buckets_filled de acuerdo. Con esto activado, la brecha entre ellos es cuánto de la cuadrícula se llevó. Si buckets_filled está muy por debajo buckets_in_range, pida un intervalo más grueso, o omita interval y lee cada captura.
Cuatro planes fijos. El plan campo devuelto por /v3/whoami es el valor bruto en la columna derecha.
| Plan | plan | Precio | rps general | rpm general | Paralelismo histórico | Historia unificada | Wallet Intelligence | Cripto | Sports REST | Libros de órdenes de mercados deportivos en vivo |
|---|---|---|---|---|---|---|---|---|---|---|
| Explorer | free | $0 | 1 | — | 1 | 7 días | 1 guardados · 3 auditorías | Todos los activos + venues | Todos los venues deportivos | Solo REST |
| Quant ★ | pro | $29/mes | 25 | 1,000 | 1 | 30 días | 5 guardados · 10 auditorías | Todos los activos + venues | Todos los venues deportivos | 1 |
| Research | scale | $99/mes | 50 | 3,000 | 1 | 90 días | 10 guardados · 25 auditorías | Todos los activos + venues | Todos los venues deportivos | 2 |
| Desk | empresa | $249/mes | 100 | 6,000 | 6 paralelo | Archivo completo | 20 guardados · 50 auditorías | Todos; pool dedicado de consultas históricas de Desk | Todos los venues deportivos | 3 |
No hay complementos de Polymarket o Kalshi. Ambos venues deportivos usan la misma clave, esquema, límite de tasa y ventana de historial; actualizar compra más historial, rendimiento y concurrencia de libro en vivo.
Lo que Explorer alcanza
Explorer es una clave real sobre datos reales, no un sandbox: las siete monedas, cada venue, siete días de historial, toda la superficie REST deportiva, barras de precio y el screener. Un venue nunca es algo que un plan compra. Lo que una mejora compra es la ventana histórica, el rendimiento, suscripciones de flujo y datos tick. Cada clave devuelve la escalera completa; el único libro recortado en la API es la demo sin clave, con ocho niveles por lado.
La única familia de rutas que Explorer no puede alcanzar es ticks, que son exclusivos de Desk en cada lugar y devuelven 402 TICKS_NOT_IN_PLAN por debajo de eso. La superficie de demostración anónima — sin clave alguna — está limitada por separado a una muestra de BTC, y es lo único que responde 402 COIN_NOT_IN_PLAN.
Las columnas rps/rpm generales describen la admisión de solicitudes, no escaneos de archivo simultáneos. El paralelismo de consultas históricas y los controles de entrega son independientes. Las lecturas históricas de Desk utilizan un grupo de consultas dedicado solo para Desk, aislado del tráfico de consultas del plan regular, sin eliminar los controles a nivel de cuenta. El grupo se comparte entre las cuentas de Desk y no es una infraestructura propiedad del cliente ni exclusiva de la cuenta.
La restricción se aplica del lado del servidor:
- Mercados — cada plan, incluido Explorer, llega a cada moneda, cada venue y al libro de órdenes completo; los niveles son el rendimiento, el historial y las marcas, no el acceso.
- Historial — una ventana fuera de su plan →
403 HISTORY_LIMIT_EXCEEDED; la actualización amplía la ventana, nunca la lista de mercados. - Deportes — el /v3/sports/* La superficie REST está incluida en todos los planes; la misma ventana de historial del plan aplica a ambos venues.
- Historial —
start_timemás allá de su ventana →403 HISTORY_LIMIT_EXCEEDED. - Barras de precio — /v3/bars obedece la misma ventana histórica que la profundidad, y además limita símbolos por solicitud (3 / 8 / 16 / 32), sobre los cuales devuelve
402 SYMBOL_LIMIT_EXCEEDED. - Streaming — los límites se aplican en el momento de la suscripción en /v3/stream; cada plan transmite cada plataforma — Explorer está limitado a una suscripción concurrente, los niveles de pago aumentan el recuento.
/v3/healthsin autenticaciónPrueba de disponibilidad, sin autenticación. Devuelve { status: "ok", service, time }.
/v3/whoamiTu plan, límites de tasa, ventana histórica unificada, acceso a monedas y acceso deportivo — la forma más rápida de confirmar que una clave funciona.
Mercados al alza/baja de Polymarket por moneda, unidos a referencia de liquidación (precio de apertura/cierre, ganador, volumen). {coin} es uno de btc · eth · sol · xrp · doge · bnb · hype.
/v3/{coin}/marketsFiltros: type (5m/15m/1h/4h/24h), resolved (verdadero/falso), más los parámetros comunes de tiempo + paginación.
/v3/{coin}/markets/{market_id}/v3/{coin}/markets/by-slug/{slug}Un solo mercado por id o slug. Ejemplo de respuesta (las claves de precio por moneda son dinámicas, como la referencia):
{ "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, y final_liquidity — son null hasta que el mercado se liquide y el relleno de referencia (~12–24 h después de la liquidación)./v3/polymarket/marketsThe todo el venue Polymarket, no solo los mercados alcistas/bajistas de criptomonedas. Las rutas arriba abordan mercados por moneda, por lo que solo pueden alcanzar mercados que tengan una — elecciones, geopolítica, acciones y FX no tienen moneda ni URL allí. Esto lista todo.
Filtros: ?q= (búsqueda por slug), ?type=event para todo lo que no es una escalera arriba/abajo, además de ?coin=, ?event= y ?outcome=. Los mercados aquí están claveados por CLOB asset_id (id de token); páselo a /v3/polymarket/{asset_id}/snapshots para historia de profundidad o /v3/polymarket/{asset_id}/ticks para la cinta. Los mercados no criptográficos llevan un base_asset — no tienen moneda, y nosotros no inventamos una.
Cada fila lleva category y tags. Las escaleras de subida/bajada son crypto; cada otro mercado toma su categoría de las etiquetas de eventos de la propia plataforma, en la misma ortografía que Polymarket US (deportes, crypto, politics, geopolitics, finance, macro, technology, science, climate, culture), con las etiquetas crudas en tags y null donde el venue no tiene etiqueta. Filtrar con ?category=politics,macro o ?exclude_category=sports,crypto: separados por comas, insensibles a mayúsculas, combinables; una exclusión mantiene mercados sin etiquetar. ?closed=true|false es la bandera de negociación del venue (una escala se cierra una vez que su end_time ha pasado). Para un espejo, ?updated_since= (ISO-8601, fecha o milisegundos epoch) devuelve solo filas cuyo contenido, etiqueta o estado cerrado cambió desde ese momento; cada fila updated_at es esa marca. resolved no es un filtro en esta ruta y se reporta bajo meta.ignored_params.
/v3/polymarket/{asset_id}/snapshotsHistorial de snapshots del libro de órdenes para cualquier mercado Polymarket — deportes, política, noticias y cripto por igual — limitado por la ventana histórica de tu plan. Misma forma y paginación que las rutas de snapshots por moneda.
/v3/polymarket/{asset_id}/ticksempresaLa cinta a nivel de venue para lo mismo asset_id claves.
La serie temporal de profundidad del libro de órdenes para un mercado, con el precio de la moneda subyacente estampado en cada instantánea.
/v3/{coin}/markets/{market_id}/snapshotsAgregar ?include_orderbook=true para obtener la escalera completa (omitida por defecto para una carga más ligera). Ventana temporal + paginación por cursor. Añadir ?interval=1m (o 5m, 1h, …) para reducir a un libro por cubeta en lugar de la serie almacenada en bruto — vea Paginación y filtros. La respuesta de lista es un arreglo con un pagination bloquear:
{ "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}La instantánea única más cercana a una marca de tiempo (dentro de ±2 s). {timestamp} es ms-epoch o ISO-8601. A diferencia del endpoint de lista, data es un objeto único (la misma forma de fila) con no pagination bloquear; no hay coincidencia dentro de ±2 s devuelve 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": { … } }Los niveles son [price, size]. price_up es el punto medio mejor compra/venta; price_down = 1 − price_up. El orderbook_down el lado se deriva como el complemento binario del libro arriba (down = 1 − up, tamaños preservados). El precio de la moneda es el tick precedente más cercano vía una unión ASOF — exacto para 1h/4h/24h, un proxy etiquetado de Binance para 5m/15m.
Cada fila es un libro completo según su marca de tiempo, nunca un delta contra la fila anterior, por lo que nunca tiene que reconstruir el estado a partir de cambios. Para el flujo de cambios en sí, use ticks.
Las otras rutas de instantáneas del venue
El mismo contrato — ventana, cursor, interval, fill, ventana de historial del plan — se sirve por una ruta por venue. Difieren en el identificador que toman y en cómo se presentan los dos lados de un mercado binario, porque los venues mismos lo hacen.
| Ruta | Identificador | Forma del libro |
|---|---|---|
/v3/{coin}/markets/{market_id}/snapshots | Numérico market_id desde /v3/{coin}/markets | La vista por evento por moneda: price_up/price_down solo, a menos que añadas include_orderbook=true |
/v3/polymarket/{asset_id}/snapshots | ID de token — clob_token_up/clob_token_down, o asset_id desde /v3/polymarket/markets | El libro de un token: bids y asks arreglos, siempre incluidos |
/v3/kalshi/{ticker}/snapshots | ticker desde /v3/kalshi/markets | yes y no escalas |
/v3/limitless/{slug}/snapshots | slug desde /v3/limitless/markets | bids, asks, y un midpoint |
/v3/predictfun/{id}/snapshots | market_id desde /v3/predictfun/markets | Anidado up y down objetos, cada uno con bids/asks |
/v3/{coin}/{venue}/snapshots | venue es spot o futures — no es un nombre de exchange | 20-nivel libro subyacente: bids, asks, price |
La ruta de Polymarket llega a todo el venue, no solo a las escaleras de criptomonedas — elecciones, deportes y todo lo demás que lista Polymarket. La ruta por moneda es la vista de subida/bajada de criptomonedas con el precio subyacente unido.
La cinta cruda: cada cambio individual del libro de órdenes, no una serie de snapshot muestreada. Donde instantáneas le dan el libro en puntos en el tiempo, los ticks le dan cada cambio entre ellos — lo que un flujo de trabajo de creación de mercado o investigación de ejecución necesita para preguntar dónde estaba el libro justo antes de una ejecución, o cuánto tiempo permaneció un nivel antes de ser tomado.
Solo empresarial. Otros planes reciben 402 TICKS_NOT_IN_PLAN.
/v3/{coin}/markets/{market_id}/ticksempresaPolymarket, obtenido del flujo delta CLOB. Ambos tokens de resultado se devuelven por defecto y etiquetan outcome; estreche con ?outcome=up o ?outcome=down.
Historia: la cinta es continua desde 2026-06-25 (verificado 2026-09-02) y sigue acumulándose, por lo que la ventana confiable crece un día cada día. Los días anteriores existen en el archivo pero no son contiguos — faltan 61 entre 2026-04-14 y la serie continua — por lo que una prueba retrospectiva que necesite una serie ininterrumpida debería comenzar no antes de 2026-06-25.
Cobertura: los mercados alcistas/bajistas en el 5m, 15m y 24h ventanas, a través de los siete activos. El 1h y 4h las familias alcista/bajista son no actualmente en la cinta de ticks — usar instantáneas para esos.
{ "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}/ticksempresaNuevo — la captura de ticks de Kalshi comenzó el 2026-08-07. No hay historial de ticks de Kalshi antes de esa fecha; la cinta se acumula hacia adelante desde ella. Kalshi instantáneas permanecen disponibles durante toda la ventana histórica.
La cobertura es un subconjunto rodante, no todos los mercados de Kalshi: los siete activos cripto, priorizados por vencimiento más cercano, con un número limitado de mercados grabados simultáneamente. Contáctenos si necesita que se cubra una serie específica.
Obtenido del autenticado orderbook_delta WebSocket. kind es snapshot para las filas que anclan un libro (para que cualquier ventana que solicite comience desde un estado completo) o delta para un cambio. delta es el cambio de tamaño firmado y size es el tamaño en reposo a ese precio después eso. seq es el propio número de secuencia de Kalshi para la sesión de captura — incrementa exactamente en uno durante la sesión, para que pueda verificar que un tramo de cinta está completo en lugar de confiar en nuestra palabra. Una serie de snapshot las filas marcan una nueva sesión, donde se reinicia. Limita a un lado con ?side=yes o ?side=no.
Reconstruyendo un libro: tratar cada snapshot ejecutar como un reinicio completo del libro de ese mercado, luego aplicar delta filas en seq orden dentro de la sesión. Ordenar por seq, no por time: las marcas de tiempo de la propia plataforma no son monotónicas entre niveles dentro de un milisegundo, mientras que seq es. Cualquier seq un paso distinto de +1 dentro de una sesión es un hueco en la cinta para ese tramo; la captura se reconecta y vuelve a tomar instantáneas por sí sola cada vez que detecta uno, así que el siguiente snapshot la ejecución es el punto desde el cual el libro está completo nuevamente.
{ "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": { … } }Las páginas contienen hasta 10000 filas (por defecto 1000) y están paginados por cursor como cualquier otro endpoint de lista. Muchos ticks comparten rutinariamente un milisegundo, por lo que los cursores llevan una posición dentro de una marca de tiempo — paginar un mercado activo nunca divide ni descarta filas que comparten un instante límite.start_time/end_time y la ventana histórica de tu plan se aplican como de costumbre.
El libro y cinta de operaciones del activo subyacente de Binance. {venue} es spot o futures. El libro tiene 20 niveles por lado.
/v3/{coin}/{venue}/latest/v3/{coin}/{venue}/snapshotsÚltimo libro / historial paginado de libros. Cada instantánea: price (medio), bids, asks, timestamp.
/v3/{coin}/{venue}/trades/v3/{coin}/{venue}/trades/latest1-segundo velas OHLCV con una división agresiva compra/venta — exacto, 1:1 con la referencia:
{ "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": { … } }Barras de precio OHLCV para acciones y ETFs listados en EE.UU., pares spot de Binance y futuros perpetuos. Un minuto es la resolución más fina; los marcos más gruesos se agregan a partir de él.
/v3/barssymbols es una lista separada por comas. timeframe es uno de 1Min, 5Min, 15Min, 1Hour o 1Day (por defecto 1Min). start_time, end_time, limit y cursor comportarse exactamente como lo hacen en todas las demás colecciones aquí.
id es una marca de tiempo, no una clave única. El feed de profundidad llega cada 100 ms y el exchange ocasionalmente marca dos libros diferentes con el mismo milisegundo, por lo que una página puede contener legítimamente dos filas con una id y dos escaleras diferentes. La paginación maneja el empate — el cursor es un conjunto clave, así que un milisegundo compartido nunca se divide en un límite de página — pero un cliente que clave filas por id solo descartará silenciosamente una de las dos. Clave en la fila, o en (id, sequence within the page).
venue es opcional y selecciona el mercado directamente: us-equities, binance (spot) o binance-futures (perpetuos). Déjelo apagado y se resuelve un símbolo simple para usted — primero acciones, luego Binance spot. Nómbralo y obtienes ese mercado o nada, que es lo que quieres cuando una cadena podría ser dos instrumentos.
limit son barras por símbolo. Una solicitud sin uno no se pagina en absoluto, porque la extracción natural de barras es una ventana completa y un tamaño de página predeterminado devolvería silenciosamente una serie corta — indistinguible de una brecha en los datos. Cuando pagina, cada serie se corta en el mismo instante y pagination.next_cursor reanuda exactamente allí: sin superposición, sin hueco.
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": { … } }Cómo deletrear un símbolo
Las acciones y ETFs son sus tickers ordinarios: AAPL, SPY, BRK-B. Un par cripto se escribe como lo hace el lugar, por lo que es BTCUSDT en lugar de BTC. Un futuro perpetuo toma un .P sufijo — BTCUSDT.P, AAPLUSDT.P — porque el par spot y el perp son instrumentos diferentes que cotizan a precios diferentes, y un espacio de símbolos plano que eligió uno silenciosamente para usted estaría eligiendo qué mercado midió su estrategia.
BTCU, ETHU y WLDU. Cada uno se resuelve en el equidad, decidido contra el universo de símbolos en lugar de su rango de fechas — por lo que la respuesta nunca cambia cuando mueve la ventana. El par de criptomonedas sigue accesible bajo su propia ortografía de venue.Cuadros derivados
Las acciones se recopilan en 1Min y 1Day; la cripto se recopila en 1Min. Cualquier otra cosa se agrega al leer, y una serie indica cuál es con derived. Una barra agregada toma la apertura de la primera barra y el cierre de la última, los extremos del máximo y mínimo, y la suma del volumen, sobre cubetas alineadas a UTC.
Límites
Tres límites separados, y fallan con tres códigos diferentes. La ventana histórica de tu plan aplica aquí como en cualquier otro lugar — pasado eso, 403 HISTORY_LIMIT_EXCEEDED. Símbolos por solicitud son 3 en Explorer, 8 en Quant, 16 en Research, 32 en Desk; sobre eso, 402 SYMBOL_LIMIT_EXCEEDED. Y una sola solicitud solo puede abarcar tanto tiempo como permita el recuento de filas del marco — 45 días a 1Min, 180 en 5Min, un año en 15Min y 1Hour, diez años en 1Day — sobre el cual devuelve 400 WINDOW_TOO_WIDE. Página con limit y cursor para recorrer un rango más amplio del que una solicitud puede llevar.
Una cuarta respuesta no es un límite sino un momento: 503 BARS_BUSY significa que el servicio de barras está en su techo de concurrencia ahora mismo. Lleva details.retry_after en segundos, como un rechazo por límite de tasa, y la misma solicitud usualmente tiene éxito en el siguiente intento — trátelo como retroceso y reintento, no como una falla.
403 HISTORY_LIMIT_EXCEEDED, con oldest_allowed en los detalles). El código abierto Constructor de Estrategias lee este punto final exacto con tu propia clave, así que una prueba retrospectiva allí retrocede exactamente tanto como tu plan aquí.attribution cadena y cada serie nombra la suya propia source; ambos tienen que viajar con los datos si los muestra.Los contratos cripto de Kalshi — profundidad completa sí/no que la referencia no tiene. 21 series para todos los 7 activos: 15 minutos KX{ASSET}15M, umbral KX{ASSET}, y direccional KX{ASSET}D. La serie umbral y direccional ejecutan mercados horarios, diarios y semanales concurrentemente — market_type lleva la ventana real de cada mercado.
/v3/kalshi/marketsFiltros: ?coin= (activo base), ?type= (ventana), y exacto ?series= (por ejemplo KXBTC15M). Para descargas históricas, pase start_time y end_time aquí primero y use los tickers nativos del venue devueltos. No genere IDs de ticker Kalshi a partir de marcas de tiempo UTC; la convención del reloj de ticker del venue cambió históricamente.
Por defecto, la lista está limitada a mercados cuyo libro de órdenes fue capturado dentro de la ventana de su plan, por lo que cada fila tiene recuperable /snapshots. Pase ?include_uncaptured=true para todo el catálogo del venue: cada serie que Kalshi lista, incluyendo deportes, política, economía, clima y entretenimiento. Esas filas llevan velas, no libros; depth_captured en cada fila indica qué tipo estás viendo.
Cada fila lleva category, la etiqueta de serie propia del venue (Politics, Deportes, Cripto, Climate and Weather, …). Filtre con ?category=politics,elections o ?exclude_category=sports,crypto; ambos toman listas separadas por comas, comparan sin distinción de mayúsculas y minúsculas, y pueden combinarse. Use category para esto, no base_asset: base_asset se lee desde el prefijo de la serie y solo tiene sentido en filas cripto.
/v3/kalshi/{ticker}/orderbook/latestLibro completo más reciente de sí/no para un ticker. yes/no son [price, size] arreglos (precios en 0–1 dólares).
{ "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}/snapshotsThe histórico series de profundidad sí/no para un mercado descubierto exacto — misma forma de fila, ordenada por tiempo de recepción, ventana temporal + paginación por cursor (include_count opt-in, máximo 1000). El historial del libro Kalshi capturado hacia adelante desde un bucle de sondeo REST pausado. La cadencia efectiva varía con el conjunto de mercados activos y límites de API; usa el mismo patrón de punto final histórico que Polymarket y Limitless /snapshots, así que la profundidad de Kalshi también es testeable retrospectivamente. Pasar una serie como KXBTC15M, o un ticker histórico inventado, devuelve un error explícito de descubrimiento en lugar de una página vacía engañosa.
/v3/kalshi/{ticker}/candlesPor hora OHLC de la oferta de compra sí, la oferta de venta sí y el precio negociado, además de volume y open_interest. Este es el único historial que existe para la mayoría del catálogo Kalshi: Kalshi no ofrece libro de órdenes histórico, por lo que un mercado que cerró antes de que comenzara nuestra captura de libro no tiene /snapshots y no /ticks — pero tiene velas, que se remontan hasta un año.
Ventanas de tiempo y paginación por cursor como /snapshots (máximo 5000 filas), limitado a la ventana de historial de su plan. ?interval= selecciona el período de vela; solo 1h se registra, y cualquier otro valor devuelve un error explícito nombrando lo que existe en lugar de una página vacía. Las velas se almacenan tal como se registraron y nunca se remuestrean, por lo que un período más corto nunca se sintetiza a partir de uno más largo.
price es null cuando no hubo operaciones en el período — alrededor del 95% de ellos. Los lados de la cotización siempre son reales, así que una hora tranquila aún te dice dónde estaba el libro. La cobertura es para mercados de larga duración (abiertos más de 24 horas); las escaleras cripto de corta duración se capturan a resolución completa por /snapshots y /ticks en su lugar, y pedir sus velas devuelve un 404 que así lo indica.
{ "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": { … } }¿Comparando los tres venues a la vez? Comience desde el filtro cross-venue en lugar de unir llamadas por venue.
Polymarket EE.UU. es un mercado de contratos designado por la CFTC y un venue separado de Polymarket: los mercados se identifican por slug, no hay condition_id y no asset_id, y nada aquí se une a las superficies de Polymarket arriba. Solo planes pagos. Este venue está en pruebas en vivo: el catálogo, precios y operaciones se sirven en todas las categorías, y la cobertura del libro aún se está ampliando.
/v3/polymarket-us/marketsEl catálogo de venues, cada categoría, cierre más reciente primero y paginado por cursor. Cada fila lleva el propio category (deportes, crypto, politics, climate, culture, macro, technology, finance, geopolitics, science). Filtrar con ?category=politics,macro o ?exclude_category=sports,crypto: separados por comas, insensibles a mayúsculas, combinables. Otros filtros: ?coin=, ?type= (15m, 1h, futures, …), ?series=, ?closed=, ?resolved=, start_time/end_time en la hora de cierre. Para un espejo, ?updated_since= devuelve solo filas cuyo contenido cambió desde ese momento (una lista, un cierre, un cambio de estado); cada fila updated_at es esa marca. sports_market_type es un campo del venue que el venue también llena fuera de deportes; no es un discriminador deportivo, category es.
/v3/polymarket-us/{slug}/orderbook/latest/v3/polymarket-us/{slug}/snapshotsLibro más reciente, y la serie de libros capturados, para un slug. La profundidad en este venue se registra desde el día que comenzó la captura y se conserva por 14 días; un mercado fuera de esa ventana devuelve 404 aquí incluso cuando existe su fila de catálogo. La cobertura es por mercado: las escalas de compra/venta se capturan continuamente, las categorías de largo plazo solo en parte.
/v3/polymarket-us/{slug}/prices/v3/polymarket-us/{slug}/trades/v3/polymarket-us/{slug}/settlementPrecios de un minuto, la cinta de ejecución del venue y la liquidación por mercado. Precios y operaciones existen para la mayoría de mercados catalogados en cada categoría; las filas de liquidación aparecen una vez que el venue reporta un resultado.
Limitless Exchange — un CLOB en Base que ejecuta mercados recurrentes de criptomonedas al alza/baja en 5m y 15m. La profundidad se captura en vivo a través de su websocket de libro de órdenes (así que incluso los libros rápidos de 5m están registrados). {slug} se ve como btc-up-or-down-15-min-1780798512077.
/v3/limitless/marketsRanuras abiertas actualmente. Filtros: ?coin= y ?type= (5m/15m).
/v3/limitless/{slug}/orderbook/latestProfundidad L2 más reciente para un slug (bids descendentes, asks ascendentes):
{ "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}/snapshotsThe histórico serie de profundidad para un slug — misma forma de fila, ordenada por tiempo de recepción, con ventana temporal + paginación por cursor. Esta es la historia capturada hacia adelante del libro de órdenes.
Mercados predictivos cripto de wallet Binance respaldados por Predict.fun, normalizados en un espacio de nombres dedicado de DepthFeed. El catálogo inicial cubre mercados up/down de BTC, ETH y BNB.
/v3/binance-prediction/marketsFiltrar con ?coin=btc, ?type=5m, o ?status=resolved. Los resultados incluyen los IDs de mercado/tema, metadatos de condición y token, resolución, resultado ganador, volumen, liquidez, conteo de participantes, cadena y contrato de intercambio.
/v3/binance-prediction/{market_id}/orderbook/latest/v3/binance-prediction/{market_id}/snapshotsProfundidad completa L2 última e histórica. El panel estandarizado del ciclo de vida BTC de 15 minutos comienza 26 Junio 2026; la captura estable de un minuto hacia adelante en los mercados en vivo rastreados comienza el 26 de julio. Los libros de descanso anteriores no se pueden reconstruir a partir de los datos de liquidación.
/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}/tradesProbabilidad, precio mostrado y muestras de última operación se mantienen por separado y comienzan el 17 de julio de 2026. La ruta de operaciones está reservada mientras se reconstruyen llenados históricos desde logs de BNB Smart Chain y actualmente devuelve un conjunto de datos histórico vacío.
/v3/predictfun/* las rutas permanecen alias compatibles. Los clientes usan una clave DepthFeed; no se requiere clave Binance ni emparejamiento de billetera.Comience aquí para cualquier cosa entre venues. El screener responde la pregunta central — ¿cómo se cotiza el mismo mercado “arriba o abajo” en Polymarket, Kalshi y Limitless ahora mismo? — en un solicitud única, así que nunca une usted mismo los tres endpoints por venue (con sus tres identificadores diferentes). Cada plan ve los tres venues; la ventana de historial del plan es la única diferencia cuando sigue una celda en su historial.
/v3/screenerLa cuadrícula: una celda por activo con la última probabilidad “al alza” de cada venue, mejor oferta/demanda y referencia de liquidación. Un libro marcador/vacío informa null en lugar de un 0.50 sin sentido.
{ "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}Analizar uno (activo, ventana): el libro L2 completo en cada venue lado a lado (books.polymarket / books.kalshi / books.limitless), más la serie spot subyacente y el asentamiento price_to_beat — la única llamada que necesita una backtest inter-venue o una pantalla de arbitraje.
/v3/overviewsin autenticaciónResumen por activo y venue de series temporales (segmentos de precio por ventana) — lo que impulsa el gráfico de resumen del panel. Público, no se requiere clave; seleccione con ?asset=.
/v3/batchEjecutar hasta 10 GET /v3/ solicitudes en un viaje de ida y vuelta. Cada sub-solicitud se despacha independientemente y obtiene su propio estado.
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 profundidad de un contrato y las barras de precios del subyacente en un viaje de ida y vuelta es el emparejamiento para el que existe esto — /v3/bars es una sub-solicitud como cualquier otra.
Devoluciones { data: [ { id, status, body }, … ] } con un exterior 200. Sobre 10 sub-solicitudes → 400 BATCH_TOO_LARGE; una no GET o no/v3/ la ruta obtiene un por-suscriptor 400 BATCH_INVALID_PATH.
Actualizado septiembre 19, 2026. Ver la guía de integración actual para identificadores, correcciones, paginación y verificaciones de completitud.
Identidades de fixture, candidato y contrato
| Campo | Significado |
|---|---|
game_slug | Identificador de juego específico del venue; no es una clave de unión entre venues. |
cross_venue_key | Mismo fixture o sujeto soportado; no términos equivalentes de pago. |
contract_mapping.candidate_key | Grupo de sujetos contenido en fixture soportado; mutable después de correcciones y potencialmente muchos a muchos. |
contract_mapping.outcomes[].participant_key | Participante canónico para un token de resultado, independiente del orden en el arreglo. |
cross_venue_market_key | Clave de contrato equivalente confirmada; nulo a menos que el estado coincida. |
contract_mapping.outcomes[].cross_venue_outcome_key | Clave de resultado confirmada; nulo sin equivalencia de contrato revisada. |
Existente kind, outcomes y tokens permanecen como cadenas simples nativas del venue; los resultados y tokens se alinean por índice dentro de una fila. fixture_participants suministra participantes canónicos de fixtures independientemente del tipo de mercado. market_family y market_period normaliza etiquetas de tipo soportadas sin afirmar líneas, lados o reglas equivalentes. Etiquetas genéricas Sí/No y Más/Menos no se asignan a un equipo. Un contrato Kalshi YES de un token sigue siendo un token; su complemento NO no es automáticamente el oponente.
Los candidatos a moneyline se evalúan entre ligas cuando se pueden identificar fixture y dos resultados etiquetados por participante. La comparación de spread de media unidad, total y total por equipo vinculada a la fuente ahora usa sports-lines-v1, contract_spec y lado por resultado. Los períodos nativos de media/cuarto anulan etiquetas genéricas. Las proposiciones de conteo nativo explícito pueden normalizarse a límites de media unidad cuando su strike, métrica y sujeto coinciden. Juegos/sets de tenis, juegos/maps de esports, córners, touchdowns, goles de campo y yardas ofensivas mantienen métricas distintas. Los totales de los primeros cinco son carreras combinadas; los alcances de entradas individuales permanecen distintos. Líneas enteras/push y divididas, métricas desconocidas, futuros y props no están soportados; consulte el contrato de mapeo para la semántica de spread firmado. El registro de perfil revisado actual no tiene pares equivalentes aprobados; por lo tanto, las claves confirmadas son nulas. Las claves candidatas soportan agrupación por sujeto con una decisión de liquidación revisada por separado; no sustituyen equivalencia confirmada. No se compromete fecha para un emparejamiento confirmado más amplio.
El nivel superior cross_venue_market_key y contract_mapping.cross_venue_market_key son alias idénticos de un mapeo. Lee la evidencia fuente actual con GET /v3/sports/markets/{condition_id}/contract; la evidencia ausente es nula, y la evidencia caducada o que no coincide con la entrada está marcada explícitamente. GET /v3/sports/market-families devuelve la tabla de equivalencias legible por máquina del tipo.
| Estado | Interpretación |
|---|---|
matched | Una contraparte comparte términos de liquidación revisados; use las claves confirmadas. |
unmatched | Una diferencia conocida, un alcance no admitido o una contraparte faltante impiden una unión. |
needs_review | La disponibilidad de evidencia, identidad o mapeo es insuficiente; no la trate como equivalente. |
Las comparaciones cubren período, tiempo extra, empates, aplazamientos, cancelaciones, fuente del resultado, finalización del resultado, abandono, forfeits, cambios de venue y otras reglas materiales. La extracción diagnóstica no es prueba de equivalencia: los mapeos confirmados requieren terms_verified: true, un hash de evidencia y evidencia fuente fresca.
Para Rams vs. 49ers, la identidad del participante sola no resuelve cláusulas de aplazamiento diferentes. La evidencia y diagnósticos pueden expirar; lea los códigos de razón actuales y la evidencia fuente en lugar de codificar un estado de ejemplo.
Las claves candidatas incluyen la identidad del evento y pueden cambiar o borrarse tras correcciones de identidad, línea, período o familia. Actualizar por condition_id, consumir updated_since deltas y retener versiones previas de filas para uniones históricas. candidate_group expone conteos nativos de venue e IDs de condición; no se selecciona un mercado autoritativo entre múltiples listados nativos.
El spread trimestral, total y total de equipo se clasifican explícitamente. Los candidatos binarios ligados a la fuente usan sports-binary-v1 y un predicado explícito: nunca infieras significado de una etiqueta como nrfi. Los resultados de línea soportados se unen por lado dentro del candidato; los resultados moneyline se unen por participante. Vea la referencia API de deportes para parámetros de endpoint y campos de respuesta antes de persistir uniones.
Granularidad de fila y clasificación de calidad de datos
Una fila es un registro de mercado del catálogo. Algunas filas moneyline de Kalshi agrupan dos contratos YES independientes; otros registros exponen un contrato. Un fixture puede producir resultados moneyline separados, spreads, totales, totales de equipo, props, variantes de línea y registros de condición histórica, por lo que los conteos agrupados por cross_venue_key no se espera que coincidan entre venues. Una gran diferencia es una señal de revisión, no prueba de que filas falten o estén duplicadas.
resolved=false significa que el venue no ha marcado esa condición como final; no significa que el mapeo esté sin resolver. Un mercado puede estar sin resolver con una clave de fixture candidata, o resuelto con un mapeo nulo o revocado. Mantenga resolved, contract_mapping.status y presencia de clave como ejes separados.
Para una auditoría, enumere league, scope y kind con GET /v3/sports/markets, luego compare filas con la misma firma normalizada: partido, periodo, participante, línea, lado, tipo y perfil de liquidación. Use candidate_key para grupos de candidatos y cross_venue_market_key solo para uniones confirmadas. Nunca rellenar una clave nula a partir de un slug, título, posición en matriz o proporción de conteo de filas; conservar reason_codes y estado de evidencia.
Los slugs de venue pueden diferir para el mismo fixture. Por ejemplo, Kalshi kalshi-soccer-ieloak-2026-09-20 y Polymarket uslc-iel-oak-2026-09-20 requieren comprobaciones de fixture, participante, hora de inicio y liquidación antes de cualquier unión.
Correcciones incrementales
/v3/sports/markets?updated_since= acepta milisegundos epoch, ISO-8601 o una fecha. updated_at y updated_ms son tiempos de publicación de catálogo. Identidad, inicio, revocaciones de mapeo y renovaciones de evidencia publican actualizaciones.
- Guardar la hora de inicio de la encuesta y el punto de control previo.
- Mantener
updated_sincey filtros fijos en cada cursor. - Upsert por
condition_id, incluyendo nulos que revocan asignaciones antiguas. - Incluir mercados resueltos durante la consulta de corrección.
- Avanza desde el inicio de la consulta con superposición solo después de que cada página tenga éxito.
Los cambios persistentes en claves de fixture, identidades de participantes, metadatos de familia-tipo y evidencia de contrato se republican mediante deltas de catálogo. La expiración de evidencia en tiempo real es diferente: deja de usar claves confirmadas en evidence_valid_until_ms incluso antes de que llegue un delta de revocación. La expiración retiene identidades de candidatos y participantes. Esto reemplaza la guía anterior que las correcciones de fixture podrían omitir updated_at. Siga el flujo de trabajo de corrección arriba y las reglas de validación de integración al retener o actualizar mapeos.
Validación de respuesta
Inspeccionar meta.partial incluso después de HTTP 200. Preserve precios nulos, siga cursores opacos mientras has_more es verdadero, y no trate los conteos o metadatos de resolución como prueba de completitud en todo el venue. Las filas rellenadas hacia adelante son observaciones llevadas, no nuevas capturas.
En tiempo real deportes datos de mercado predictivo — profundidad en vivo del libro de órdenes en Polymarket y Kalshi, junto con probabilidades de casas deportivas, puntuaciones en vivo y un feed de lesiones en las principales ligas (NBA, NFL, MLB, NHL, fútbol, tenis, UFC, F1 y más). Ambos venues están incluidos juntos en todos los niveles; los planes cambian la ventana de historial compartida, el rendimiento y la concurrencia de libros en vivo. Igual{ data, meta, pagination } sobre, autenticación y paginación por cursor como el resto de la API.
Descubriendo un mercado. Recorrer el embudo: /v3/sports/leagues → /v3/sports/markets?league=… → tome el tokens[] (cada uno es el asset_id) → /v3/sports/books/{asset_id}/latest para el libro en vivo.
/v3/sports/overviewCobertura y estado de cuenta. Los derechos deportivos de tu plan, los venues y ligas rastreados, conteos de mercados y libros, y la ventana histórica retenida, en una llamada. No incluye datos de mercado o libro; el embudo arriba es la ruta a un libro en vivo.
/v3/sports/leaguesLas ligas que rastreamos, cada una con su conteo de juegos y mercados — la cima del embudo de descubrimiento.
/v3/sports/marketsMercados deportivos en Polymarket y Kalshi. Filtrar con ?league= (por ejemplo nba, mlb, soccer); paginación por cursor como cualquier endpoint de lista (?limit=, ?cursor=). Cada mercado lleva su condition_id, market_slug, outcomes, y tokens — el por-resultado asset_ids que entregas al endpoint del libro.
{ "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}/latestLibro completo grabado más reciente para un resultado — el asset_id es un token deltokens[]. La escalera llega como cuatro matrices alineadas por índice (bid_prices con bid_sizes, ask_prices con ask_sizes) en lugar del [price, size] pares que devuelven las rutas cripto; Lo que todos los caminos de libro comparten lista cada diferencia. Para uso en vivo sensible a latencia, Quant y niveles superiores pueden suscribirse a los canales WebSocket deportivos abajo.
condition_id. Un mercado tiene uno condition_id y una entrada en tokens[] por resultado, y el libro pertenece al resultado. En las filas de Kalshi las dos cadenas son iguales, así que el código que lee condition_id funciona en Kalshi y luego devuelve 404 SNAPSHOT_NOT_FOUND en cada mercado de Polymarket. Lea tokens[]./v3/sports/books/{asset_id}/historySnapshots históricos de escalera completa para el resultado. Página con ?limit= y ?cursor=; enlace el tiempo con ?start_time= / ?end_time= (el más corto ?from= / ?to= también se aceptan alias). Añade ?interval=1m para devolver la última instantánea en cada cubeta alineada por época; las unidades soportadas son s, m, h, y d, desde un segundo hasta un día. Omítalo, o useraw / tick, para cada snapshot capturado. La profundidad deportiva se captura hacia adelante: el archivo de Polymarket comienza el 14 de abril de 2026 y el archivo de Kalshi comienza el 12 de junio de 2026.
El intervalo reduce la muestra; no interpola. Un cubo existe en la respuesta solo si el libro fue capturado dentro de él, por lo que una ventana de dos horas en ?interval=1m abarca 120 cubetas pero devuelve solo los minutos que tuvieron captura. Para un resultado que se cotiza con poca frecuencia — un mercado aún a días del inicio — comúnmente son diez a veinte filas, y es la cinta completa para la ventana en lugar de una página truncada. Cada respuesta que usó ?interval= lleva un resolution bloquear para que los dos sean distinguibles:
{ "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á muy por debajo buckets_in_range, el resultado se cotiza con poca frecuencia — pida un intervalo más grueso, o omítalo y lea cada captura. La densidad de captura sigue la actividad comercial: un resultado en un juego en progreso registra cientos a miles de snapshots en dos horas, mientras que el mismo resultado a tres semanas registra unas pocas docenas. Así que ?interval=1m devuelve una serie casi completa por minuto una vez que un juego está en marcha, y una corta para un mercado que aún no se negocia.
Agregar ?fill=ffill junto a interval para la cuadrícula densa en su lugar: una fila por cubeta para toda la ventana, llevando el último libro capturado a los minutos que no tuvieron captura, cada fila marcada filled y sellado as_of_ts con el momento en que ese libro fue registrado. Mismo parámetro, mismo significado, mismos marcadores que en cualquier otra ruta de instantáneas — ver Llenando las brechas.
Juegos y contexto de mercado resuelto
/v3/sports/{league}/gamesJuegos y resultados en vivo para una liga (por ejemplo, nba, nfl, soccer/eng.1), cada uno con sus mercados vinculados de Polymarket y Kalshi.
/v3/sports/games/{game_slug}El documento de juego unido: calendario y marcador final, mercados de predicción y liquidaciones vinculadas, líneas de sportsbook y contexto de lesiones. Usa las rutas complementarias abajo cuando necesites una capa individual de alto volumen.
La lista de mercados incrustada es una vista previa de como máximo 1,000 registros. Consulta markets_returned y markets_truncated, luego siga markets_url y su cursor desde el inicio para la colección completa. Lecturas fallidas de datos devuelven 503 CATALOGUE_UNAVAILABLE; conserve sus registros anteriores y vuelva a intentarlo en lugar de tratar una búsqueda no disponible como un resultado vacío.
/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}/winprobMercados de juegos, movimiento de línea, puntuaciones, jugada a jugada y probabilidad de ganar por jugada.
/markets está vinculado a un evento ESPN, así que un juego que no pudimos emparejar devuelve 404 DATA_NOT_FOUND con “game is not matched to an ESPN event” — el juego en sí y sus mercados de predicción todavía se sirven. Consulte espn en /v3/sports/games/{game_slug}: null significa que las cuatro rutas abajo devolverán 404 para ello. La tasa de coincidencia es una propiedad de la liga, no del juego (medida 2026-09-02): NHL 97%, NBA 91%, NFL 68%, WNBA 67%, EPL 66%, MLB 59%, UFC 56%, CFB 49% — y casi cero para esports, cricket, dardos y rugby, donde ningún feed de ESPN respalda el catálogo. Ordene sus candidatos por liga antes de construir una canalización sobre puntuaciones de caja./v3/sports/markets/{condition_id}Un mercado normalizado con identificadores de venue, resultados, IDs de token, unión de juego y estado de liquidación.
Jugadores, props y lesiones
/v3/sports/{league}/playersBuscar en el directorio de atletas de la liga y recuperar IDs estables usados en uniones de apuestas por jugador.
/v3/sports/players/{athlete_id}/v3/sports/players/{athlete_id}/injuries/v3/sports/players/{athlete_id}/box/v3/sports/players/{athlete_id}/marketsPerfil de jugador, registro de cambios de lesiones, registro de juego con estadísticas y props de mercado predictivo con resolución de entidad.
/v3/sports/{league}/injuriesEl feed en vivo de lesiones por liga — los cambios de estado previos al juego que mueven el mercado.
Cuotas de sportsbook
/v3/sports/odds/linesLíneas en vivo de moneyline, spread, total y prop en libros, normalizadas para comparación con el precio de mercado.
/v3/sports/odds/booksEl catálogo activo de sportsbooks y la frescura de la fuente.
/v3/sports/{league}/odds-historyLíneas históricas de sportsbook para cuatro ligas: nfl (nflverse, temporadas 1999–2026) y epl, la-liga, soccer (football-data.co.uk, desde 2000/01 en adelante). Cualquier otra liga devuelve 404 SPORTS_UNKNOWN_ROUTE nombrando estos cuatro. Una solicitud necesita al menos un filtro: NFL toma season, team, desde, o a; el fútbol toma un código de temporada de football-data (por ejemplo 2324) y/o team. Sin uno obtiene 400 INVALID_PARAMETER indicando cuál.
?season=1999 devuelve 1999 con una clave Explorer. La paginación sigue aplicándose: NFL devuelve hasta 500 filas por página con un cursor, fútbol hasta 1,000./v3/sports/odds/streamEventos enviados por servidor para cambios en líneas de sportsbook. Enviar Accept: text/event-stream; los eventos pasan a medida que llegan y la conexión permanece abierta. Los libros de pedidos deportivos usan el DepthFeed WebSocket principal a continuación.
Webhooks de lesiones
/v3/sports/webhooksplan de pagoRegistrar un receptor HTTPS con filtros de liga y estado de lesión. El secreto de firma se muestra una vez. Las entregas incluyen X-DepthFeed-Event y X-DepthFeed-Signature; verifique la firma HMAC-SHA256 sobre el cuerpo exacto de la solicitud sin procesar antes de analizar 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 de pago/v3/sports/webhooks/{sub_id}/testplan de pago/v3/sports/webhooks/{sub_id}plan de pagoListe suscripciones y estado de entrega, envíe un evento de prueba firmado o revoque una suscripción.
# 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"Datos de mercado FIX 4.4 sobre TLS
Conecte un sistema FIX de datos de mercado existente a libros de órdenes normalizados de Binance, Polymarket, Kalshi, Limitless y canales deportivos soportados. El perfil suministra snapshots iniciales, actualizaciones de nivel de precio nuevas/cambios/eliminaciones, latidos, números de secuencia persistentes y recuperación de huecos seguida de snapshots frescos. Consume el mismo feed que WebSocket.
| Configuración | Contrato |
|---|---|
| Elegibilidad | Solo Desk / empresa; verificaciones en vivo de clave y plan, CompID vinculado a cuenta |
| Sesión | FIX 4.4 sobre TLS verificado 1.2+; SenderCompID y TargetCompID asignados |
| Inicio de sesión | Clave API existente en etiqueta 554 a través de su callback de motor; latido 5–30 segundos |
| Datos de mercado | 35=V solicitudes; 35=W snapshots; 35=X cambios de nivel de precio; 35=Y rechazos de solicitud |
| Recuperación | Estado persistente de secuencia; reenvío de rellenos de brechas; espera de snapshots de reemplazo |
| Límites | Los límites existentes de concesiones REST y conexión/suscripción WebSocket permanecen sin cambios |
REST sigue siendo la interfaz de descubrimiento y datos históricos. Este perfil FIX cubre datos de mercado; no enruta órdenes ni proporciona reproducción histórica de ticks. No añade cobertura independiente ni garantía de latencia. Las marcas de tiempo de fuente y de envío del gateway son distintas de la recepción del cliente.
Leer el perfil FIX completo para símbolos, resultados binarios, campos de solicitud, IDs de nivel determinísticos, límites de recuperación y seguridad. Contacte soporte empresarial para estado de aprovisionamiento. No adivine un nombre de host ni envíe una clave API a un endpoint FIX no verificado.
/v3/streamUn WebSocket que envía libros de órdenes y precios en vivo como cambian. Las cargas de frame son el los mismos objetos JSON que devuelven los endpoints de instantáneas REST, así que el código escrito contra REST se transfiere directamente. Autentíquese al conectar con el X-API-Key encabezado, Authorization: Bearer, o — para navegadores, que no pueden establecer encabezados 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":…}Canales
| Canal | Carga útil | Notas |
|---|---|---|
book:polymarket:<coin>:<market_id> | Objeto snapshot REST (con libros de órdenes) | Nivel tick vía nuestro tap websocket CLOB |
book:kalshi:<coin>:<ticker> | Misma forma que filas /v3/kalshi/…/snapshots | Actualizaciones del ciclo de sondeo medido de Kalshi |
book:limitless:<coin>:<slug> | Misma forma que filas /v3/limitless/…/snapshots | Basado en push (tap socket.io) |
book:binance:<coin>:<spot|futures> | Misma forma que /v3/…/latest | 100ms alimentación de profundidad |
book:sports:polymarket:<token_id> | Escalera completa de deportes | Quant+: flujo CLOB impulsado por eventos de primera parte |
book:sports:kalshi:<ticker> | Escalera completa de deportes | Quant+: websocket delta de libro de órdenes Kalshi con mejor esfuerzo, con retransmisión de respaldo; marcos solo de cambios |
price:<coin> | { coin, price, source, venue, id, time } | Subyacente de Binance, ~4 ticks/s máximo |
Ops: subscribe · unsubscribe (cada uno toma {"channels":[…]}, aplicado atómicamente) y ping → pong. Un seguimiento * segmento de mercado (ej. book:kalshi:btc:*) suscribe un venue/moneda completa — solo plan Desk. Problemas a nivel de operación (canal malo, sobre su límite de suscripción) regresan como {"op":"error","code":…} marcos y nunca caiga la conexión.
Los canales deportivos usan identificadores concretos y no soportan comodines. Quant, Research y Desk permiten uno, dos y tres sportsbooks concurrentes respectivamente. Cada cuadro deportivo incluye la escalera completa, venue, asset_id, marcas de tiempo de intercambio/recepción, full_ladder: true, y undelivery campo que nombra la fuente de cada marco: polymarket_clob_ws,kalshi_orderbook_delta_ws, o scoretape_relay cuando el relevo deportivo está activo. Los libros deportivos Kalshi son impulsados por el websocket delta autenticado del libro de órdenes Kalshi, con el relevo como respaldo, por lo que el tiempo de cuadro sigue la actividad del exchange en lugar de un intervalo fijo de sondeo. Lea la frescura desde las marcas de tiempo de cada observación en lugar de asumir una tasa de actualización.
> {"op":"subscribe","channels":[
"book:sports:polymarket:<token_id>",
"book:sports:kalshi:<market_ticker>"
]}
< {"op":"subscribed","channels":[…],"active":2}Límites por plan
| Plan | Conexiones | Suscripciones | Canales |
|---|---|---|---|
| Explorer | 1 | 1 | Cada venue, todas las monedas; sin sports book |
| Quant | 1 | 5 | Cada venue, todas las monedas; 1 sports book |
| Research | 2 | 25 | Cada venue, todas las monedas; 2 sports books |
| Desk | 5 | 100 | Cada venue, todas las monedas, más comodines; 3 sports books |
La columna de canal es la misma en cada fila por una razón: un plan no compra un venue ni una moneda aquí tampoco. Explorer transmite cualquier libro en cualquiera de los cuatro venues — solo mantiene una suscripción a la vez, por lo que un segundo canal en el mismo subscribe devuelve SUB_LIMIT y no se aplica nada. Los comodines y libros deportivos en vivo son las dos cosas que un límite de suscripción solo no cubre.
Marcos de error de operación
Estos llegan como {"op":"error","code":…,"message":…} y dejan la conexión abierta. Son códigos de frame, no estados HTTP.
| código | Significado |
|---|---|
CHANNEL_INVALID | No es un nombre de canal válido. Las formas son book:<venue>:<coin>:<market> y price:<coin>. |
UNKNOWN_OP | No es uno de subscribe, unsubscribe, ping. |
SUB_LIMIT | La suscripción excedería el límite de suscripción de tu plan. No se suscribió nada — la operación se aplica atómicamente. |
SPORTS_SUB_LIMIT | Lo mismo, para el límite separado concurrente de sportsbook. |
SPORTS_NOT_IN_PLAN | Tu plan no incluye suscripción a libro deportivo de baja latencia. |
VENUE_NOT_IN_PLAN | Devuelto solo en la superficie demo anónima. Cada plan de cuenta transmite todos los venues. |
WILDCARD_NOT_IN_PLAN | Un trailing * segmento de mercado es solo Desk. Nombre los mercados en su lugar. |
SLOW_CONSUMER | Tu conexión se ha retrasado demasiado respecto al feed y se están descartando frames. Lee más rápido o suscríbete a menos canales. |
Cerrar códigos y reconectar
| Código | Significado |
|---|---|
4001 | Autenticación fallida (clave faltante / desconocida / revocada) |
4003 | Límite de conexiones del plan alcanzado |
4029 | Inundación de operaciones — reduce la velocidad |
1013 | Verificación de clave temporalmente no disponible — intente de nuevo en breve |
El servidor envía latidos con pings de protocolo cada 25 s. Los despliegues y failovers caen conexiones por diseño — trata desconectar → reconectar con retroceso exponencial (250ms duplicando hasta ~5s) y reenvíe sus suscripciones como el ciclo normal, no como un camino de error.
Frescura y latencia
La cadencia de captura, el retraso de retransmisión, el tamaño de la carga útil y la ubicación del cliente afectan la entrega de extremo a extremo. El marco ts es tiempo de publicación del gateway; marcas de tiempo dentro de data puede representar un evento de venue, captura o registro almacenado, dependiendo del canal. La antigüedad de la fuente y el tiempo de procesamiento del servidor no son lo mismo que la latencia de recepción del cliente.
Mida un recibo independiente del cliente con un reloj sincronizado, preserve la procedencia de la marca de tiempo e informe cada venue, región, carga útil y ventana de medición por separado. Históricodeploy/stream_freshness.py las observaciones describen esas ejecuciones, en lugar de una garantía actual de latencia para cada suscriptor. Enterprise FIX utiliza el mismo feed subyacente; sus marcas de tiempo de envío y origen se describen en el perfil FIX arriba.
Wallet Intelligence es un espacio de trabajo de investigación de solo lectura para wallets públicas de Polymarket. Guarde una lista de seguimiento, descubra traders del ranking público de Polymarket y revise posiciones públicas, actividad reciente, muestras realizadas y métricas a nivel de portafolio en un solo lugar. Nunca conecta una wallet, firma una transacción ni realiza una orden real.
Auditoría de ejecución del siguiente libro
Para cada operación pública elegible, DepthFeed encuentra el primer libro de Polymarket que registró después de la marca de tiempo de la actividad, recorre la escalera mostrada por el mismo número de acciones y reporta el precio de reproducción, la fracción llenable, el retraso observado y la diferencia de precio con signo respecto a la operación pública. La ventana de búsqueda es de 90 segundos. Una coincidencia faltante se muestra como ausente; nunca se estima.
Las calificaciones son mecánicas: Profundidad restante significa que al menos 95% del tamaño público se mostró dentro de 1¢ del precio del trader; El precio se movió significa que al menos 95% permaneció pero con una diferencia superior a 1¢; Tamaño no disponible significa que menos del 95% del tamaño público se mostró.
Copia hacia adelante
Inicie un espejo simulado desde cualquier cartera inspeccionada. Solo operaciones públicas observadas después de crear el espejo son elegibles: DepthFeed deduplica cada llenado, aplica la proporción de copia configurada y el límite por operación, luego lo llena al siguiente precio en vivo disponible en el libro normal de Trading Simulado. Efectivo, posiciones, P&L, curva de capital, interruptor de circuito e historial de liquidación aparecen bajo Trading en papel.
Una devolución de llamada HTTPS opcional recibe cada llenado copiado exitoso. Su secreto de firma se muestra una vez. Verificar HMAC-SHA256(timestamp.body) contra x-depthfeed-signature; la marca de tiempo se envía en x-depthfeed-timestamp. Se rechazan destinos locales, de red privada, con credenciales, no HTTPS y redireccionamientos.
| Plan | Carteras guardadas | Operaciones auditadas por actualización | Filas de actividad pública |
|---|---|---|---|
| Explorer | 1 | 3 | 30 |
| Quant | 5 | 10 | 100 |
| Research | 10 | 25 | 250 |
| Desk | 20 | 50 | 500 |
Límites de interpretación
- Una dirección pública puede ser solo una billetera en la cartera de un operador y no prueba la identidad ni la propiedad.
- Las marcas de tiempo de actividad pública no son marcas de tiempo privadas de órdenes. La auditoría mide lo que DepthFeed observó después de la publicación, no la latencia original del operador.
- Solo se pueden emparejar operaciones en la cobertura Polymarket grabada por DepthFeed. Los mercados no soportados o no capturados se muestran sin auditoría.
- La reproducción consume el tamaño mostrado matemáticamente; no puede modelar liquidez oculta, prioridad en cola, carreras de cancelación, comisiones o el impacto en el mercado de una orden seguidora real.
- La clasificación, P&L, posiciones y actividad del leaderboard provienen de los servicios públicos de datos de Polymarket y pueden estar retrasados, revisados, incompletos o temporalmente no disponibles.
- Wallet Intelligence y su espejo en papel son herramientas de investigación, no trading en vivo, asesoramiento de inversión, recomendación ni garantía de ejecución.
Guías de investigación de Wallet
Comience con el Guía del rastreador de wallets de Polymarket, luego compare análisis de billetera, investigación de tabla de líderes, y análisis de ejecución de copy-trading.
Abierto Constructor de Estrategias para describir una estrategia al asistente, ejecutar una prueba histórica y examinar los resultados. El lienzo visual está disponible en la vista del constructor. Ambas vistas usan el mismo motor de estrategia.
Construir y ejecutar
- Describa el mercado, condiciones de entrada, salidas y tamaño de posición en el asistente, o conecte nodos en el lienzo.
- Revisar la estrategia generada y configuraciones de ejecución antes de ejecutarla.
- Elija una muestra histórica disponible dentro de la ventana de historial de su cuenta.
- Inspeccionar el registro de operaciones, curva de capital, llenados y advertencias de calidad de datos antes de sacar conclusiones.
Supuestos de ejecución
Los resultados dependen de la muestra seleccionada, configuraciones de llenado, tarifas, deslizamiento y tamaño de posición. Observaciones faltantes y profundidad no disponible afectan lo que puede simularse. Inspecciona los supuestos y advertencias de la ejecución; un resultado histórico no garantiza llenado en vivo ni rendimiento futuro.
Continuar en trading simulado
Revisar la estrategia en el constructor y usar el flujo de despliegue en papel para seguirla con fondos simulados. Paper Trading tiene sus propias posiciones, efectivo y libro de operaciones. No coloca órdenes reales en la bolsa. El uso del asistente y los límites de estrategia en papel dependen de tu plan de cuenta.
Trading en papel ejecuta estrategias hacia adelante en en vivo mercados con dinero virtual. Las ejecuciones, marcas y liquidaciones se valoran desde los libros de órdenes en vivo de DepthFeed — compras al ask, ventas al bid, posiciones se liquidan automáticamente a $0/$1 cuando el mercado se resuelve. Cada estrategia obtiene su propia curva de capital, vista de posiciones y registro completo de operaciones.
Tres formas de operar
| Modo | Cómo funciona |
|---|---|
| Webhook | Tu propio sistema (bot, cron, notebook) envía señales buy/sell a una URL token por estrategia. Tu lógica sigue siendo tuya — nosotros hacemos ejecución, contabilidad y gráficos. |
| Regla del laboratorio | Implemente un preset de Polymarket o Kalshi Backtest Lab (entrada por ventana temporal, cruce de nivel, reversión por caída) con lados nativos del venue, take-profit/stop-loss, un límite máximo abierto y dimensionamiento de posición (fijo / fraccional / Kelly); se evalúa del lado servidor contra cotizaciones en vivo (cadencia ~90s). |
| Copia de cartera | Refleje nuevos fills públicos desde una wallet inspeccionada de Polymarket con una proporción de copia y límite por operación. Los resultados usan el mismo libro contable en papel y pueden opcionalmente emitir webhooks HTTPS firmados de fills. |
Webhook de señal
/paper/hook/{token}sin autenticaciónEl token (mostrado una vez al crear/rotar) es la autenticación. Los llenados siempre se valoran desde el libro en vivo en el momento de la señal — una carga útil nunca puede establecer su propio precio. Los mercados se identifican por venue + market: un ticker de Kalshi, o un id de token CLOB de Polymarket. Puedes comerciar cualquier mercado en el venue, no solo los que DepthFeed registra — si no lo tenemos localmente, el llenado se valora a partir de una lectura en vivo del libro de órdenes propio del 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": "…" } }| Error | Significado |
|---|---|
NO_FRESH_QUOTE | No hay libro en vivo para ese mercado — un id incorrecto, o el mercado ha cerrado / se ha vuelto unilateral en 0/1 (el asentamiento cierra posiciones automáticamente). |
INSUFFICIENT_CASH | La orden excede el efectivo en papel de la estrategia. |
NO_POSITION | vender/cerrar sin lote abierto en ese mercado/lado. |
RATE_LIMITED | Más de 120 señales/min para la estrategia. |
PAUSED | La estrategia está pausada en el panel. |
Interruptor de circuito
Cada estrategia tiene un trailing stop de máxima caída (por defecto 60%, editable; establezca en 0 para desactivar). Si el patrimonio en vivo cae tanto por debajo de su marca máxima, la estrategia se aplana automáticamente a los precios actuales y detenido — una parada forzada contra una estrategia que se negocia a sí misma hacia cero. Reanúdela en cualquier momento; reanudar restablece la marca de agua alta a su capital actual.
Límites
Estrategias concurrentes por plan: Explorer 1 · Quant 5 · Research 15 · Desk 40. Hasta 100 posiciones abiertas por estrategia; saldo inicial $100–$1,000,000 (por defecto $10,000). Las marcas se actualizan con una cadencia de ~90 segundos — este es un rastreador de pruebas hacia adelante, no un venue de ejecución.
Cada ruta de libro de órdenes — seis rutas cripto y de venues más deportes — responde al mismo contrato, por lo que el código escrito para una se puede portar a la siguiente cambiando la ruta y el identificador.
- The
{ data, pagination, meta }sobre ymeta.request_id. - Conjunto de claves
cursorpaginación ylimit. - La ventana, como
start_time/end_timeodesde/a. intervalpara un libro por cubeta, yfill=ffillpara una cuadrícula densa.filled,as_of_ts, yas_of_ts_msen filas completadas.- The
resolutionbloquear en cualquier respuesta que usóinterval. - La ventana de historial del plan, y el
error.codeenum.
Cuatro cosas aún difieren, todas visibles en la respuesta en lugar de ocultas en el comportamiento.
| Rutas cripto y de venue | Historial deportivo | |
|---|---|---|
| Marca de tiempo de fila | time o timestamp como cadena, id como ms-epoch | ts como ISO-8601, ts_ms como ms-epoch |
| Orden | Más antiguo primero | Más reciente primero |
| Escalera | Incluido, excepto la ruta de eventos por moneda, que necesita include_orderbook=true | Siempre incluido |
| Forma de nivel | Pares: bids / asks como [[price, size], …], mejor primero (Kalshi los nombra yes / no) | Arrays paralelos: bid_prices con bid_sizes, ask_prices con ask_sizes, alineado por índice |
Estas son las formas sobre las que se construyen las integraciones existentes, por lo que permanecen tal cual. Ordena por la propia marca de tiempo de la fila en lugar del orden de llegada y la diferencia deja de importar.
La precisión proviene de obtener las mismas fuentes upstream que usan los mercados, por lo que los valores coinciden por construcción.
| Lugar | Capturar | Ventanas | Notas |
|---|---|---|---|
| Polymarket | WebSocket CLOB — cada libro + evento de cambio de precio | 5m · 15m · 1h · 4h · 24h | Profundidad completa, basada en eventos. Apertura/cierre de liquidación desde los metadatos propios de Polymarket. |
| Kalshi | REST público, sondeo completo de profundidad con ritmo | 15m · 1h · 24h · 1w | Libro sí/no, hasta 100 niveles por lado, 7 activos; la cadencia efectiva varía con la carga del mercado y límites API. |
| Limitless | websocket socket.io (orderbookUpdate) | 5m · 15m | CLOB en Base; captura en vivo push los libros rápidos de 5m que REST no puede snapshotear. |
| Binance | spot + futuros @depth20@100ms + @aggTrade | — | Libro subyacente + OHLCV de 1s, el ancla de precisión para los mercados up/down. |
Todos los activos 7 (btc · eth · sol · xrp · doge · bnb · hype) en todos los venues que los listan.
Las marcas de tiempo son epoch-millis. exch_ts_ms = hora de la bolsa, recv_ts_ms = nuestra hora de recepción (la diferencia es la latencia de captura). A continuación se muestran las columnas ALMACENADAS. Las rutas de criptomonedas y de plataforma comprimen los cuatro arreglos de precio/tamaño en bids / asks pares antes de devolverlos; las rutas deportivas los pasan como los cuatro arreglos. Todo lo demás te llega bajo el nombre con que está almacenado.
polymarket_book — instantáneas completas del libro de órdenes
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 para reproducción entre instantáneas
asset_id, condition_id, exch_ts_ms, recv_ts_ms, side, price, size
polymarket_markets — una fila por token
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 — liquidación
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 — libro de 20 niveles (spot y futuros)
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
precios — serie unificada de precios subyacentes
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
Cada ventana de plan se sirve desde la tienda en vivo más el archivo frío, por lo que la ventana completa siempre está disponible. Desk no tiene límite de historial continuo: puede consultar cada instantánea registrada desde el piso de la serie aplicable hasta el feed en vivo. Los pisos difieren porque los contratos y la captura con licencia no comenzaron el mismo día para cada combinación de activo/ventana.
Pisos del archivo de profundidad completa de Polymarket (UTC)
Un suelo es el primer día que se registró una escalera, que no es el primer día de una serie ininterrumpida. El archivo de Polymarket contiene nada antes de 2026-01-03, y enero son cinco días dispersos (2026-01-03 a 01-06, y 01-24). La cobertura diaria continua comienza 2026-02-12. Un backtest que necesita una serie ininterrumpida debe comenzar allí.
| Activos | 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 |
Estos son los primeros días con escaleras completas registradas, no una afirmación de que cada activo/ventana existía antes de su piso. Un snapshot devuelve la escalera completa registrada; legítimamente puede no contener niveles cuando el mercado mismo no tenía órdenes en espera en ese instante.
Pisos de archivo Kalshi (UTC)
Los pisos de Kalshi son separado de los de Polymarket arriba y son posteriores. La escalera Kalshi grabada más antigua de cualquier serie es 2026-01-08. Para la serie cripto de 15 minutos:
| Serie | Escalera registrada más antigua |
|---|---|
| KXBTC15M, KXETH15M | 2026-01-08 |
| KXSOL15M | 2026-01-09 |
| KXXRP15M | 2026-02-11 |
| KXBNB15M, KXDOGE15M | 2026-03-07 |
| KXHYPE15M | 2026-03-18 |
Las series horarias, diarias y semanales de Kalshi tienen sus propios pisos por serie, y BTC, ETH, XRP y DOGE comienzan en 2026-01-08 también allí. En lugar de publicar un piso por serie, trata el descubrimiento como autoritativo: /v3/kalshi/markets?series=KXBTC15M&start_time=…&end_time=… lista exactamente los tickers cuya profundidad es recuperable en ese rango, y los IDs de ticker Kalshi son definidos por el venue, por lo que deben descubrirse en lugar de construirse a partir de marcas de tiempo UTC.
La cadencia y profundidad de captura Kalshi no son constantes en todo el archivo. La captura actual consulta la escalera completa hasta 100 niveles por lado cada pocos segundos; períodos anteriores son más dispersos, y algunos días de primavera 2026 tienen solo unas pocas observaciones por contrato. Las filas de instantáneas se almacenan tal como se grabaron, por lo que una extracción de investigación que abarque el archivo debería remuestrear en una cuadrícula fija y llevar un conteo de observaciones por cubeta en lugar de asumir un intervalo de muestreo constante.
La profundidad del libro de órdenes se captura en vivo y no puede recrearse después. El acceso al archivo se entrega a través de las superficies de consulta medidas documentadas; DepthFeed no proporciona reconstrucción solicitada por el cliente ni entrega masiva de archivos.
Ventas de datos masivos días completos UTC del archivo como archivos Parquet sellados con zstd, un archivo por tabla por día, entregados desde almacenamiento de objetos mediante URL firmadas de corta duración. Está junto a la API REST, no delante de ella: la API aún sirve la ventana caliente y las vías históricas, y los archivos masivos se encargan del trabajo de "recorrer todo el archivo". Prepago, con precio por GiB, y regulado por una licencia de datos que aceptas una vez en el panel.
Productos
| producto | tabla de archivo | día típico de semana |
|---|---|---|
polymarket-book | polymarket_book | 0.35 GiB |
polymarket-us-book | polymarket_us_book | 0.08 GiB |
polymarket-ticks | polymarket_changes | 2.7 GiB |
kalshi-book | kalshi_book | 0.12 GiB |
kalshi-ticks | kalshi_changes | 3.4 GiB |
Los grupos de filas son 5,000 filas en tablas de libros y 25,000 en otros lugares, ordenados primero por mercado, para que un lector pueda leer un rango de un mercado de un archivo diario. Las tablas deportivas siguen una vez que su sellado diario se completa.
Precios
| elemento | valor |
|---|---|
| Precio | $40 por GiB para polymarket-book, polymarket-us-book y polymarket-ticks; $80 por GiB para kalshi-book y kalshi-ticks. Se cobra al hacer el pedido según los tamaños del manifiesto, redondeado hacia arriba una vez en el total del pedido. |
| Mínimo | $5 por pedido |
| Reembolsos | Ninguno. Cada orden es final una vez colocada; los créditos gastados no se devuelven. El panel te pide confirmar esto antes de cada orden. |
| Créditos | Prepago, 100 créditos equivalen a $1, recargas de $25 a $10,000, utilizables por 12 meses |
| Enlaces | 1 hora cada uno, emitido nuevamente sin cargo por 30 días después de la orden |
Sellado
Un día se lista en el catálogo solo una vez sellado: al menos de tres días, exactamente un archivo de datos, y su ETag registrado en el manifiesto. El hash del manifiesto es lo que compras. Si un día se sella nuevamente se convierte en un nueva versión; los enlaces a la versión anterior dejan de emitirse y la fila del catálogo muestra la nueva. El pedido que realizó conserva su versión registrada, y los enlaces marcan esos elementos superseded en lugar de devolver una URL.
Licencia
Cotizaciones y órdenes devuelven 403 DATA_LICENCE_REQUIRED hasta que la cuenta haya aceptado el Licencia de datos: uso interno dentro de su organización, sin redistribución ni reventa, se permiten análisis derivados. Acéptelo desde el panel o con la llamada a continuación. Las cuentas sin el producto habilitado reciben 404 DATA_PRODUCTS_DISABLED en cada ruta aquí.
Rutas
/v3/data/productsLas tablas vendibles con su tasa.
curl https://api.depthfeed.com/v3/data/products -H "Authorization: Bearer df_your_key_here"/v3/data/licenceSi esta cuenta ha aceptado la licencia y qué versión.
curl https://api.depthfeed.com/v3/data/licence -H "Authorization: Bearer df_your_key_here"/v3/data/licence/acceptRegistrar la aceptación de la versión impresa en la página de licencia.
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/balanceSaldo prepago como credits y usd. Las recargas se hacen desde el panel.
curl https://api.depthfeed.com/v3/data/balance -H "Authorization: Bearer df_your_key_here"/v3/data/catalogueDías sellados para un producto entre desde y a (Fechas UTC, inclusivas), cada una con bytes, rows, etag, version y sealed_at. Paginado con cursor como en cada listado.
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/quotesValorar una selección. Devuelve la cotización id, total_bytes, price_credits y expires_at (15 minutos). Una cotización mantiene el precio, no el dinero: no necesita créditos prepagados para solicitarla. Una nueva cotización cancela cotizaciones abiertas anteriores a menos que tengan un pago con tarjeta activo. Pague manualmente con tarjeta usando el endpoint de pago a continuación, o liquide desde su saldo de créditos. Cada cotización y orden lleva 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/checkoutCompre a través de la API y pague manualmente. Envíe el UUID de la cotización a este endpoint y abra el retornadopayment_url (también devuelto como url) en un navegador. Es un pago con tarjeta alojado por Stripe para exactamente esa cotización, no un cargo inmediato. Repetir esta solicitud mientras el pago está activo devuelve el mismo enlace con reused: true. Use su 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
} }Después del pago manual, el webhook verificado de Stripe crea el pedido pagado. SondeaGET /v3/data/orders con retroceso acotado y coincidencia quote_id; la página de retorno del navegador no prueba el pago. Una vez que un pedido está paid, solicite sus enlaces de descarga. También se envía un correo de descarga al correo de la cuenta. Un pago no pagado o expirado no crea una orden pagada. El pago con créditos en la misma cotización está bloqueado mientras un pago con tarjeta está activo.
/v3/data/ordersLiquidar una cotización. Los créditos se cobran ahora; la orden lista cada día que cubre.
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}Tus órdenes, las más recientes primero, y una orden con sus ítems.
curl https://api.depthfeed.com/v3/data/orders -H "Authorization: Bearer df_your_key_here"/v3/data/orders/{id}/linksEmitir URLs firmadas para cada ítem en la orden. Cada URL dura una hora y es un token portador para ese archivo, así que mantenlo dentro de tus propios sistemas. Llama de nuevo cuando necesites un conjunto nuevo, gratis, por 30 días. Un ítem cuyo día fue sellado vuelve con status: "reissued_new_version" y una URL nueva. Un día sin archivo actual es 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" }
] } }Recorrer el historial completo de profundidad de un mercado (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")Profundidad cruzada entre venues para BTC al alza/baja (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á diseñado para ser manejado por agentes: JSON simple sobre HTTPS, una clave Bearer, códigos de error estables y sin necesidad de SDK. Un resumen del producto legible por máquina está disponible en /llms.txt.
Como herramienta de llamada a función / estilo MCP
Envuelve cualquier endpoint como una herramienta — la API se describe lo suficiente para que una definición genérica cubra la mayoría de los flujos de trabajo:
{
"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"]
}
}El cuerpo de la herramienta es un único GET autenticado:
curl "https://api.depthfeed.com{path}" -H "Authorization: Bearer df_your_key"Datos en vivo en agentes
The Flujo WebSocket usa tres operaciones JSON (subscribe / unsubscribe / ping) y se autentica con ?api_key= donde no se pueden establecer encabezados — trivial de manejar desde cualquier entorno de ejecución. Los cuadros llevan los mismos objetos JSON que REST, por lo que el código de análisis de un agente es idéntico para historia y en vivo.
/v3/whoami refleja el plan de la clave, límites de tasa y ventana histórica — llámelo primero y autoconfígurese en lugar de adivinar límites.Lo que está en vivo, lo más nuevo primero:
- Generador de Estrategias. Backtests guiados por asistente y un lienzo visual de estrategia comparten el mismo motor en
/dashboard/backtest. - Barras de precio.
/v3/barssirve OHLCV de acciones, ETFs y cripto dentro de la ventana histórica de tu plan. - Descargas masivas. Días completos UTC de archivos Parquet sellados pueden comprarse por separado del acceso API.
- Transmisión en vivo.
/v3/streamWebSocket — canales de libro de órdenes y precios en cada venue, captura y entrega dependientes del venue, suscripciones con control de plan. - Venue Limitless. Mercados, libro de órdenes más reciente y snapshots históricos de profundidad — con 5m + 15m capturados en vivo por el websocket del libro de órdenes.
- Kalshi ampliado. 21 series para todos los 7 activos (15 minutos, umbral y direccional — los dos últimos ejecutándose simultáneamente por hora/día/semana);
market_typeexpuesto y filtrable. - API v3 completa. Mercados Polymarket + instantáneas, spot/futuros Binance, lote, paginación por cursor, aplicación de historial por plan, uso medido.
- HTTPS público.
https://api.depthfeed.comsobre TLS.
La historia disponible varía según venue y serie. Consulta Historia y cobertura y la respuesta API para confirmar el piso de archivo para tu período solicitado. ¿Preguntas o solicitud de relleno? Contactar.
