39 endpoints · General · Herramientas · Alpha · Datos sin procesar
https://api.blave.orgapi-key + secret-key en cada solicitudAPI plan or Blave Agent planComunes a todos los endpoints cripto get_alpha / get_exposure:
period — tamaño de la vela, {n}min / {n}h / {n}d ({n}m se interpreta como minutos). Los valores documentados son 5min, 15min, 1h, 4h, 8h, 1d; los indicadores con un mínimo más amplio lo indican en su bloque. Un period ausente o imposible de interpretar devuelve 403 {"error": "period is required"} (un 400 en unusual_movement y liquidation).start_date / end_date — YYYY-MM-DD (UTC). end_date es hoy por defecto; start_date es end_date − 365 días por defecto. Un rango de más de 365 días se recorta sin aviso (start_date pasa a end_date − 365 días). Una fecha mal formada no se valida y termina en un 500 — envíe siempre YYYY-MM-DD.symbol — perpetuo USDT-M de Binance, p. ej. BTCUSDT; también se aceptan BTC, btc, BTC/USDT, BTC-USDT (a un token sin sufijo se le añade USDT). Los endpoints get_symbols listan los símbolos cubiertos.{"data": {"timestamp": [...], "alpha": [...], ...}} — arrays paralelos, un elemento por vela. timestamp está en segundos Unix (UTC) y es la etiqueta de la vela.Objeto stat — lo devuelven los indicadores cuyo bloque lo incluye. Es un modelo logístico ajustado con el último año de este indicador para el símbolo frente al movimiento del precio en las 24h siguientes:
| Campo | Tipo | Descripción |
|---|---|---|
up_prob | float | Probabilidad de una subida en 24h dado el último valor del indicador (0–1) |
avg_up_return | float | Rentabilidad media a 24h en las subidas pasadas (decimal, 0.02 = +2%) |
avg_down_return | float | Rentabilidad media a 24h en las bajadas pasadas (decimal, negativo) |
return_ratio | float | -avg_up_return / avg_down_return |
exp_value | float | up_prob × avg_up_return + (1 − up_prob) × avg_down_return |
is_data_sufficient | bool | false cuando el símbolo tiene menos de un año de historial — en ese caso no deben usarse los demás campos |
Cuando no hay datos, el objeto recurre a up_prob 0.5 y ceros.
/price | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Token o par USDT | BTCUSDT o BTC (sin distinguir mayúsculas de minúsculas) |
response = requests.get(f"{BASE_URL}/price" , headers=headers, params={"symbol": "BTCUSDT"}, timeout=30)print(response.json())# {"symbol": "BTC", "price": 75838.2, "change_24h": -0.01739}Un objeto plano.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
symbol | string | — | El token sin USDT (p. ej. BTC, incluso cuando se envió BTCUSDT) |
price | float | USDT | Último precio |
change_24h | float | decimal | Variación en 24h como fracción (0.025 = +2.5%) |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} | Falta symbol |
| 404 | {"error": "symbol <SYMBOL> not found"} | No hay precio para ese token |
change_24h normalmente procede del mismo mercado que price, pero ambos se almacenan en caché por separado (5 s cada uno), así que pueden diferir brevemente./alpha_table Ninguno.
response = requests.get(f"{BASE_URL}/alpha_table" , headers=headers, timeout=60)body = response.json()row = body["data"]["0G"] # one token out of the 716 keys this response carried# {"holder_concentration": {"-": 0.9267}, "holder_concentration_chg": {"15min": -0.0118, "1h": 0.0075, "24h": 0.4723, "3d": -0.1852, "30d": "", ...},# "funding_rate": {"binance": 0.005, "bybit": 0.005, "okx": 0.005, "pionex": "", ...},# "liquidation": {"15min": 0.0, "1h": -0.2665, "24h": -0.5637, "1min": "", ...},# "market_cap": {"-": 42204386.29}, "market_cap_percentile": {"-": 56.55},# "price": {"-": 0.1832}, "price_change": {"15min": -0.00215, "24h": -0.05792, ...},# "statistics": {"up_prob": 0.4277, "exp_value": -0.00478, "is_data_sufficient": false, ...}, ...}# (shape captured from a live response; `""` marks insufficient data){"data": {<TOKEN>: {...}}, "fields": [...], "note": {...}}.
data tiene como clave el token (BTC, 1INCH, …). Cada token asocia nombre del indicador → {param: value} ("-" cuando el indicador no tiene parámetro). "" = datos insuficientes. Además de los indicadores:
| Clave | Descripción |
|---|---|
statistics | up_prob (prob. de una subida en 24h), exp_value (rentabilidad esperada), avg_up_return, avg_down_return, return_ratio, is_data_sufficient |
price | {"-": 70000} — precio actual |
price_change | {"15min": ..., "1h": ..., "24h": ...} — variación % |
market_cap | {"-": 1234567890} — capitalización de mercado en USD |
market_cap_percentile | {"-": 85.3} — percentil entre todas las monedas listadas |
funding_rate | {"binance": -0.01, ...} — por exchange |
oi_imbalance | {"-": 0.12} — desequilibrio de OI (detalle completo: /oi_imbalance/get_overview_data) |
fields — una entrada por indicador: id, name (clave usada en data), param (nombre del parámetro o null), name_en, name_zh.
note — con el id del indicador como clave: una lista de bandas de valores {min, max, note: {en, zh}, direction: {en, zh}, color, background_color} que sirve para etiquetar un valor (p. ej. max: -3 → "Overly Bearish").
Solo errores comunes.
statistics.is_data_sufficient antes de usar statistics./kline Cobertura. Todos los perpetuos USDⓈ-M de Binance cuyo símbolo termina en USDT — 740 contratos en octubre de 2026, incluidos los perpetuos USDT de acciones tokenizadas, materias primas y otros activos TradFi. Los 740 tienen todo su historial de 1 minuto almacenado en el servidor, desde 2020-01-01 o desde la fecha de listado. Un perpetuo recién listado puede consultarse unos 5–10 minutos después de su listado.
Sin cobertura: contratos cotizados en USDC, USD1, U o BTC (p. ej. BTCUSDC, ETHBTC) y contratos trimestrales con entrega — estos devuelven el error 400 unknown symbol or no data indicado más abajo. Los contratos deslistados no están garantizados: pueden responder con el historial que aún esté almacenado o con ese mismo 400 (los deslistados antes de octubre de 2026 no tienen historial de 1min–4min).
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Perpetuo USDⓈ-M USDT de Binance. A un token sin sufijo se le añade USDT; un token sin sufijo que solo existe con un prefijo multiplicador se resuelve a este (PEPE → 1000PEPEUSDT) | BTCUSDT; también BTC, btc, BTC/USDT, BTC-USDT | |
periodstring · queryObligatorio | Tamaño de la vela. Se acepta cualquier tamaño en minutos enteros, no solo los ejemplos indicados | {n}min / {n}h / {n}d, mínimo 1min (p. ej. 1min, 3min, 15min, 2h, 1d, 7d). {n}m se interpreta como minutos (15m = 15min) | |
start_datestring · query | Primer día, inclusive | YYYY-MM-DD (UTC) | end_date − 365 días (period ≥ 5min); end_date − 30 días (period < 5min) |
end_datestring · query | Último día, inclusive (velas hasta el final de ese día UTC) | YYYY-MM-DD (UTC) | ahora |
Ventana por solicitud: period ≥ 5min → como máximo 365 días; un rango más largo se recorta sin aviso (start_date pasa a end_date − 365 días, sin error). Period < 5min → como máximo 30 días; un rango más largo devuelve un 400.
params = {"symbol": "BTCUSDT", "period": "1h", "start_date": "2026-10-01", "end_date": "2026-10-02"}response = requests.get(f"{BASE_URL}/kline" , headers=headers, params=params, timeout=60)data = response.json()# [{"time": 1790812800.0, "open": 83576.8, "high": 83612.6, "low": 83370.0, "close": 83460.0, "volume": 3123.991}, ...]Un array JSON sin envoltorio (no va dentro de {"data": ...}), en orden ascendente por tiempo.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
time | float | Segundos Unix (UTC) | Hora de apertura de la vela |
open / high / low / close | float | moneda de cotización (USDT) | Precios |
volume | float | null | activo base | Volumen negociado; null cuando la fuente no tiene volumen para esa vela |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} | Falta symbol |
| 403 | {"error": "period is required"} | Falta period o no se puede interpretar |
| 400 | {"error": "minimum supported period is 1min"} | period inferior a un minuto |
| 400 | {"error": "periods below 5min must be a whole number of minutes"} | e.g. 90s |
| 400 | {"error": "date range exceeds max 30 days for periods below 5min"} | Period < 5min y rango > 30 días |
| 400 | {"error": "invalid date format, expected YYYY-MM-DD"} | start_date / end_date mal formados |
| 400 | {"error": "unknown symbol or no data: <symbol>"} | Símbolo sin cobertura (véase Sin cobertura) o que no es un contrato real, p. ej. BTCUSDC, ETHBTC, un error tipográfico. <symbol> devuelve el valor enviado. No es transitorio — no reintentar |
200 con [], no un error.1min, todas las velas devueltas están cerradas. Un periodo más largo puede terminar en una vela parcial cuando end_date es hoy — se construye con las velas cerradas hasta el momento (a las 07:09 UTC, la vela 1h de las 07:00 contiene 07:00–07:05); descártela si solo necesita velas cerradas.5min = 3 solicitudes; 1 año de 1min = 13 solicitudes de ≤30 días).1min.1min), 300 s (1h / 4h / 1d), 60 s (cualquier otro periodo); solo 5 s cuando la última vela cerrada aún no ha llegado./market_direction/get_alpha Sin symbol: alpha es una única serie de todo el mercado, no una por moneda. BTCUSDT se usa internamente solo para alinear las velas; no se devuelve y no modifica alpha. Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
periodstring · queryObligatorio | Tamaño de la vela | 1h, 4h, 8h, 1d (mínimo 1h) | |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"period": "1h", "start_date": "2026-09-13", "end_date": "2026-09-15"}response = requests.get(f"{BASE_URL}/market_direction/get_alpha" , headers=headers, params=params, timeout=60)# {"data": {"alpha": [-0.5195979478976323, -0.5223392571665055, -0.5612490182062327, ...],# "timestamp": [1789257600.0, 1789261200.0, 1789264800.0, ...]}} # 72 bars{"data": {"timestamp": [...], "alpha": [...]}}. Sin stat.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Valor de dirección del mercado |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "period is required"} | Falta period o no se puede interpretar |
1d más antigua que se devuelve./screener/get_saved_conditions Ninguno.
response = requests.get(f"{BASE_URL}/screener/get_saved_conditions" , headers=headers, timeout=30)conditions = response.json()["data"]{"data": {<condition_id>: {...}}}, con el id de la condición como clave (una clave de cadena JSON, p. ej. "12"; envíela de vuelta como el entero condition_id). Solo las condiciones propias de esta cuenta.
| Campo | Tipo | Descripción |
|---|---|---|
filters | object[] | Los filtros de la condición, todos combinados con AND: indicator_id (int), indicator_name ({"en", "zh"}), param (string; "-" = el valor por defecto del indicador), operator_id (int), operator_symbol (string, p. ej. >), value (umbral) |
note | string | El nombre que usted le dio a la condición al guardarla |
name_en / name_zh | string | null | Solo se define en las condiciones oficiales / de la comunidad; en las condiciones propias cabe esperar vacío o null, y debe leerse note en su lugar |
description_en / description_zh | string | null | Solo se define en las condiciones oficiales / de la comunidad; puede estar vacío o ser null |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "unsupported api feature"} | Clave no vinculada a una cuenta de usuario |
/screener/get_saved_condition_result | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
condition_idint · queryObligatorio | Condición que se ejecuta | Un id de get_saved_conditions |
response = requests.get(f"{BASE_URL}/screener/get_saved_condition_result" , headers=headers, params={"condition_id": 12}, timeout=60){"data": {"alpha_names": [...], "symbols": [...]}}.
| Campo | Tipo | Descripción |
|---|---|---|
alpha_names | object[] | Uno por cada indicador de filtro distinto, en el orden de los filtros: en / zh (nombre para mostrar, con el parámetro entre paréntesis cuando lo hay), name (clave del indicador), type, url; además de value_format, value_decimals, polarity cuando el indicador los define |
symbols | object[] | Tokens que cumplen todos los filtros |
symbols[].symbol | string | Token sin USDT (p. ej. BTC) |
symbols[].id | int | Id del token (0 cuando se desconoce) |
symbols[].user_selected | bool | El token está en la lista de seguimiento de la cuenta |
symbols[].price | float | Último precio en USDT (el mismo feed que /price; 0 cuando no está disponible) |
symbols[].24h_chg | float | Variación en 24h como fracción (0.025 = +2.5%) |
symbols[].alphas | float[] | El valor del token para cada indicador de filtro, en paralelo a alpha_names |
symbols[].alpha_notes | object[] | Por indicador: indicator_id, color, direction, note (más background_color cuando se cumplió una regla; color null y cadenas vacías cuando no se cumplió ninguna) |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "Missing parameter: condition_id is required."} | Falta |
| 400 | {"error": "Invalid parameter: condition_id must be an integer."} | No es un entero |
| 404 | {"error": "Invalid condition_id: <id> not found for user."} | No es una de las condiciones de esta cuenta |
| 403 | {"error": "unsupported api feature"} | Clave no vinculada a una cuenta de usuario |
/holder_concentration/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/holder_concentration/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
*/get_symbols devuelven la misma lista de símbolos USDT-M de Binance./holder_concentration/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "start_date": "2026-09-13", "end_date": "2026-09-15"}response = requests.get(f"{BASE_URL}/holder_concentration/get_alpha" , headers=headers, params=params, timeout=60)# {"data": {"alpha": [-1.1931909718306861, -1.2035898186867282, -1.2037004015202886, ...],# "timestamp": [1789257600.0, 1789261200.0, 1789264800.0, ...],# "stat": {"up_prob": 0.509739818557561, "exp_value": -0.00051954905018229,# "avg_up_return": 0.015512131150026753, "avg_down_return": -0.017188220228787618,# "return_ratio": 0.9024861762037658, "is_data_sufficient": true}}} # 72 bars{"data": {"timestamp": [...], "alpha": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Z-score del logaritmo del ratio long/short de cuentas frente a su media de 30 días, con el signo invertido — más alto = más concentrado |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
1d de BTCUSDT; otros símbolos pueden empezar más tarde./funding_rate/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo (en formato Binance, sea cual sea el exchange) | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
exchangestring · query | De qué exchange se lee la tasa de financiación del perpetuo; cualquier otro valor devuelve 400 | binance, okx, bingx, bybit | binance |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "start_date": "2026-09-13", "end_date": "2026-09-15"}response = requests.get(f"{BASE_URL}/funding_rate/get_alpha" , headers=headers, params=params, timeout=60)# {"data": {"timestamp": [1789257600.0, 1789261200.0, 1789264800.0, ...],# "alpha": [0.005064, 0.006165, 0.007765, ...],# "close": [77239.5, 77285.5, 77263.9, ...],# "stat": {"up_prob": 0.5009438427095587, "exp_value": -0.0008769555139270298,# "is_data_sufficient": false, ...}}} # 72 bars{"data": {"timestamp": [...], "alpha": [...], "close": [...], "stat": {...}}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
timestamp | float[] | Segundos Unix (UTC) | Etiqueta de la vela |
alpha | float[] | porcentaje | Tasa de financiación × 100 (0.01 = 0.01%); positivo = los largos pagan a los cortos |
close | float[] | USDT | Precio de cierre del perpetuo |
stat | object | — | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
| 400 | {"error": "exchange must be one of binance, okx, bingx, bybit"} | exchange fuera de la lista |
1d de BTCUSDT; otros símbolos pueden empezar más tarde, y exchange=bybit empieza más tarde — lea la primera marca de tiempo./market_sentiment/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/market_sentiment/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
/market_sentiment/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "start_date": "2025-01-01", "end_date": "2025-03-01"}response = requests.get(f"{BASE_URL}/market_sentiment/get_alpha" , headers=headers, params=params, timeout=60){"data": {"timestamp": [...], "alpha": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Valor de sentimiento del mercado |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
1d de BTCUSDT; otros símbolos pueden empezar más tarde./capital_shortage/get_alpha Sin symbol; todo el mercado. Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
periodstring · queryObligatorio | Tamaño de la vela — tanto 5min como 15min devuelven datos | 5min, 15min, 1h, 4h, 8h, 1d | |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"period": "1h", "start_date": "2025-01-01", "end_date": "2025-03-01"}response = requests.get(f"{BASE_URL}/capital_shortage/get_alpha" , headers=headers, params=params, timeout=60){"data": {"timestamp": [...], "alpha": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Valor de escasez de capital |
stat | object | Véase objeto stat (calculado respecto a BTC) |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "period is required"} | Falta un parámetro |
1d./sector_rotation/get_history_data Ninguno.
response = requests.get(f"{BASE_URL}/sector_rotation/get_history_data" , headers=headers, timeout=60)# {"data": {"alpha": {"AI": {"data": [0.0, 0.04377017039444864, 0.04922749428543449, ...],# "name_en": "AI", "name_zh": "人工智能"},# "BNB Eco": {"data": [0.0, 0.008847752133756215, ...],# "name_en": "BNB Eco", "name_zh": "BNB 生態"}, ...},# "timestamp": [1757980800.0, 1758067200.0, 1758153600.0, ...]}} # 51 sectors, 366 points{"data": {"alpha": {<sector>: {"data": [...], "name_en": ..., "name_zh": ...}}, "timestamp": [...]}}. timestamp está junto a alpha en el nivel superior de data, no dentro de cada sector; es el eje temporal común a todas las series de sector.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC), uno por punto — 366 puntos diarios en la respuesta observada |
alpha.<sector>.data | float[] | La serie del sector, con la misma longitud y el mismo orden que timestamp (366); el primer elemento es 0.0 |
alpha.<sector>.name_en / name_zh | string | Nombre para mostrar del sector |
Solo errores comunes.
0.0. No hay parámetros, y cada reconstrucción recalcula solo los últimos 365 días, así que no existe un historial más largo./sector_rotation/get_overview_data Ninguno.
data = requests.get(f"{BASE_URL}/sector_rotation/get_overview_data" , headers=headers, timeout=60).json()["data"]# {"AI": {"name_en": "AI", "name_zh": "人工智能",# "data": {"1h": {"pct_change": 0.0076}, "8h": ..., "90d": ...},# "symbols": {"0G": {"id": 38337, "data": {"1h": {"pct_change": 0.0061}, ...}}, ...}}, ...}{"data": {<sector>: {"name_en", "name_zh", "data", "symbols"}}} (~48 sectores).
| Campo | Descripción |
|---|---|
data | {<timeframe>: {"pct_change": float}} para 1h, 8h, 24h, 3d, 7d, 30d, 90d; pct_change es un decimal (0.0061 = +0.61%) |
symbols | {<token>: {"id": int, "data": {<timeframe>: {"pct_change": float}}}} — desglose por token |
Solo errores comunes.
/oi_imbalance/get_overview_data Ninguno.
data = requests.get(f"{BASE_URL}/oi_imbalance/get_overview_data" , headers=headers, timeout=60).json()["data"]# [{"token": "TSLA", "token_id": 39618, "token_price": 313.33, "token_chg": 0.031,# "market_cap": 40415.98, "oi_total": 59916616.78, "alpha": 1482.5}, ...]{"data": [...]}, ordenado por alpha descendente.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
token | string | — | Token |
token_id | int | — | Id del token en Blave |
token_price | float | USD | Precio |
token_chg | float | decimal | Variación del precio |
market_cap | float | USD | Capitalización de mercado |
oi_total | float | USD | OI de futuros sumado entre Binance / OKX / BingX |
alpha | float | ratio | oi_total / market_cap — alto = OI concentrado en relación con el tamaño (riesgo de squeeze / volatilidad) |
Solo errores comunes.
oi_imbalance de /alpha_table solo lleva el alpha final; este endpoint tiene la tabla completa./whale_hunter/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/whale_hunter/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
/whale_hunter/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Ventana móvil sobre la que se suma el flujo | 15min, 1h, 4h, 8h, 24h, 3d | 24h |
score_typestring · query | Variación del interés abierto o volumen | score_oi, score_volume | score_oi |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "timeframe": "24h", "score_type": "score_oi"}response = requests.get(f"{BASE_URL}/whale_hunter/get_alpha" , headers=headers, params=params, timeout=60){"data": {"timestamp": [...], "alpha": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Z-score de la variación del OI (o del volumen) sumada en timeframe frente a su media de 30 días |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
| 403 | {"error": "Invalid score_type"} | score_type no permitido |
timeframe no se valida en el servidor. Se probó un valor fuera de la lista, 2h, y devolvió 200 con datos. Es una única observación — no demuestra que funcione cualquier {n}h. Use los valores de la lista salvo que verifique el que necesita.1d de BTCUSDT; otros símbolos pueden empezar más tarde./taker_intensity/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/taker_intensity/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
/taker_intensity/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Ventana móvil | 15min, 1h, 4h, 8h, 24h, 3d | 24h |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "timeframe": "24h", "start_date": "2025-01-01", "end_date": "2025-03-01"}response = requests.get(f"{BASE_URL}/taker_intensity/get_alpha" , headers=headers, params=params, timeout=60){"data": {"timestamp": [...], "alpha": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Z-score del volumen (compra taker − venta taker) sumado en timeframe frente a su media de 30 días; positivo = compra neta |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
1d de BTCUSDT; otros símbolos pueden empezar más tarde./unusual_movement/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/unusual_movement/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
/unusual_movement/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Ventana sobre la que se mide el movimiento | 15min, 1h, 4h, 8h, 24h, 3d, 7d | 24h |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "timeframe": "24h"}response = requests.get(f"{BASE_URL}/unusual_movement/get_alpha" , headers=headers, params=params, timeout=60){"data": {"timestamp": [...], "alpha": [...], "close": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Rentabilidad en timeframe dividida por la volatilidad de 365 días escalada a esa ventana — |alpha| grande = valor atípico |
close | float[] | Precio de cierre (USDT) |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
| 500 | error del servidor | timeframe fuera de la lista permitida |
1d de BTCUSDT; otros símbolos pueden empezar más tarde./squeeze_momentum/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/squeeze_momentum/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
/squeeze_momentum/get_alpha Sin period; fijo en 1d. Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "start_date": "2025-01-01", "end_date": "2025-03-01"}response = requests.get(f"{BASE_URL}/squeeze_momentum/get_alpha" , headers=headers, params=params, timeout=60)# {"data": {"alpha": [-0.2256, ...], "scolor": ["black", ...], "timestamp": [...], "stat": {...}}}{"data": {"timestamp": [...], "alpha": [...], "scolor": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC), diario |
alpha | float[] | Valor de momentum |
scolor | string[] | black = squeeze activo (Bandas de Bollinger dentro de los Canales de Keltner), grey = squeeze inactivo |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "symbol is required"} | Falta un parámetro |
alpha es 0.0 hasta 2020-02-09. Una solicitud que empiece antes de la fecha de Datos desde devuelve esas filas de relleno — son relleno, no señal. Descarte los ceros iniciales o empiece en la fecha de Datos desde.alpha distinto de cero de BTCUSDT; otros símbolos pueden empezar más tarde./blave_top_trader/get_exposure Sin symbol: alpha es una única serie de todo el mercado, no una por moneda. BTCUSDT se usa internamente solo para alinear las velas; no se devuelve y no modifica alpha. Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
periodstring · queryObligatorio | Tamaño de la vela | 1h, 4h, 8h, 1d | |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"period": "1h", "start_date": "2025-05-01", "end_date": "2025-07-01"}response = requests.get(f"{BASE_URL}/blave_top_trader/get_exposure" , headers=headers, params=params, timeout=60)# {"data": {"alpha": [34.32, 40.52, ...], "timestamp": [1747130400.0, ...]}}{"data": {"timestamp": [...], "alpha": [...]}}. Sin stat.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Exposición neta de los top traders de Blave (el 10% superior por activos de la cuenta) — la mediana, entre esos traders, de la posición nocional neta de cada trader ÷ sus propios activos, ×100 (positivo = neto largo). Es un ratio sin procesar, no un z-score |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 403 | {"error": "period is required"} | Falta un parámetro |
/liquidation/get_symbols Ninguno.
symbols = requests.get(f"{BASE_URL}/liquidation/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenados.
Solo errores comunes.
/liquidation/get_alpha Véase Convenciones de los indicadores cripto.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
periodstring · queryObligatorio | Tamaño de la vela | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Ventana móvil | 15min, 1h, 4h, 8h, 24h, 3d | 24h |
start_datestring · query | Primer día | YYYY-MM-DD | end_date − 365 días |
end_datestring · query | Último día | YYYY-MM-DD | hoy |
params = {"symbol": "BTCUSDT", "period": "1h", "timeframe": "24h"}response = requests.get(f"{BASE_URL}/liquidation/get_alpha" , headers=headers, params=params, timeout=60){"data": {"timestamp": [...], "alpha": [...], "stat": {...}}}.
| Campo | Tipo | Descripción |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | (liquidaciones de cortos − de largos, en monedas) sumadas en timeframe ÷ su desviación estándar móvil de 30 días; no se resta la media. > 0 = se liquidaron más cortos que largos, < 0 = más largos |
stat | object | Véase objeto stat |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} / {"error": "period is required"} | Falta un parámetro |
alpha es 0.0 hasta 2023-01-01. Una solicitud que empiece antes de la fecha de Datos desde devuelve esas filas de relleno — son relleno, no señal. Descarte los ceros iniciales o empiece en la fecha de Datos desde. Los símbolos distintos de BTC/ETH pasan a ser distintos de cero aún más tarde, así que compruébelo para cada símbolo./liquidation/get_map | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
price_maxfloat · query | Límite superior del eje de precios | precio | rango elegido por el servidor |
price_minfloat · query | Límite inferior del eje de precios | precio | rango elegido por el servidor |
response = requests.get(f"{BASE_URL}/liquidation/get_map" , headers=headers, params={"symbol": "BTCUSDT"}, timeout=60)# {"data": {"price": 77554.1, "labels": [54287.9, ...], "oi_value": [57693.86, ...],# "cumsum": [1543109619.0, ...], "liquidation": {"24h": {"buy_liq": [...], "sell_liq": [...]}}}}{"data": {"price", "labels", "oi_value", "cumsum", "liquidation"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
price | float | USDT | Precio actual |
labels | float[] | USDT | 200 tramos de precio |
oi_value | float[] | USD | Asignación estimada del interés abierto de Binance a cada tramo (estimación del modelo, no posiciones reales) |
cumsum | float[] | USD | Exposición acumulada a liquidaciones a lo largo de los tramos |
liquidation | object | USD | {"24h": {"buy_liq": [...], "sell_liq": [...]}} — liquidaciones reales por órdenes forzosas de Binance en las últimas 24 h por tramo, cada una dividida por un supuesto fijo de cuota de Binance de 0.3: buy_liq = liquidaciones de cortos, sell_liq = liquidaciones de largos |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} | Falta un parámetro |
/liquidation/get_map_change | Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Símbolo | e.g. BTCUSDT | |
price_maxfloat · query | Límite superior del eje de precios | precio | rango elegido por el servidor |
price_minfloat · query | Límite inferior del eje de precios | precio | rango elegido por el servidor |
response = requests.get(f"{BASE_URL}/liquidation/get_map_change" , headers=headers, params={"symbol": "BTCUSDT"}, timeout=60)# {"data": {"price": 77554.1, "labels": [54287.9, ...], "hist_0_1h": [0.0, ...], "hist_1_8h": [...], "hist_8_24h": [...]}}{"data": {"price", "labels", "hist_0_1h", "hist_1_8h", "hist_8_24h"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
price | float | USDT | Precio actual |
labels | float[] | USDT | 200 tramos de precio (límites inferiores) |
hist_0_1h | float[] | USD | Nueva exposición estimada a liquidaciones en las últimas 0–1 h, por tramo: diferencia positiva entre instantáneas del mapa del modelo, no liquidaciones reales |
hist_1_8h | float[] | USD | Últimas 1–8 h |
hist_8_24h | float[] | USD | Últimas 8–24 h |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} | Falta un parámetro |
/liquidation/get_coin Las liquidaciones forzosas de una moneda en todos los feeds de exchanges que recopila Blave: cuatro ventanas móviles con el desglose por exchange, una serie horaria de 24 puntos y las notas de cobertura de cada feed. Es flujo real de liquidaciones (como la entrada de get_alpha), no la estimación del modelo que hay detrás de get_map.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Moneda. Se elimina el sufijo de la moneda de cotización; el symbol de la respuesta es el nombre normalizado de la moneda | BTC, BTCUSDT, btc, BTC-USDT-SWAP, BTC_USDT (≤ 32 caracteres) |
response = requests.get(f"{BASE_URL}/liquidation/get_coin" , headers=headers, params={"symbol": "BTC"}, timeout=30)data = response.json()["data"]day = data["windows"]["24"]print(data["symbol"], data["rank"], day["total_liq_usd"], day["long_pct"])peak = max(data["series"]["points"], key=lambda p: p["long_liq_usd"] + p["short_liq_usd"])# Live capture 2026-09-20 (abridged with ...; same payload the studio page serves):# {"data": {"symbol": "BTC", "rank": 1, "updated_at": "2026-09-20T17:15:00+00:00",# "windows": {"1": {"covered_hours": 1.0, "total_liq_usd": 3429619.97, "long_liq_usd": 129200.73, "short_liq_usd": 3300419.23,# "long_pct": 0.0377, "short_pct": 0.9623, "by_exchange": {...}},# "4": {...}, "12": {...},# "24": {"covered_hours": 24.0, "total_liq_usd": 58723607.89, "long_liq_usd": 38063430.51, "short_liq_usd": 20660177.37,# "long_pct": 0.6482, "short_pct": 0.3518,# "by_exchange": {"binance": {"long_liq_usd": 17075740.21, "short_liq_usd": 6697256.41, "total_liq_usd": 23772996.62}, ...}}},# "exchanges": [{"coverage": "sampled_1s", "exchange": "binance", "last_event_at": "2026-09-20T17:15:00+00:00", "listed": true, "price_basis": "trade_avg", "time_basis": "event"}, ... 6 rows],# "detail_complete": true,# "series": {"bucket_seconds": 3600, "points": [..., {"long_liq_usd": 60660.74, "short_liq_usd": 6129662.69, "ts": "2026-09-20T16:00:00+00:00"}, {"long_liq_usd": 95373.53, "short_liq_usd": 5473.13, "ts": "2026-09-20T17:00:00+00:00"}]}}}{"data": {"symbol", "rank", "updated_at", "windows", "exchanges", "detail_complete", "series"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
symbol | string | — | Nombre normalizado de la moneda, p. ej. BTC |
rank | int / null | — | Posición entre las 50 primeras monedas por total de 24 h entre exchanges; null fuera de las 50 primeras o sin ningún evento |
updated_at | string / null | ISO 8601 UTC | Hora del último tramo de 5 minutos utilizado |
windows | object | — | Las claves son las cadenas "1", "4", "12", "24" (horas). Cada una es una ventana móvil que termina en el último tramo de 5 minutos, con los campos siguientes |
windows.<h>.total_liq_usd / long_liq_usd / short_liq_usd | float | USD | Suma entre exchanges; long = posiciones largas liquidadas (el precio bajó), short = cortos liquidados (el precio subió) |
windows.<h>.long_pct / short_pct | float / null | ratio 0–1 | Proporción del total de la ventana; null cuando el total de la ventana es 0 |
windows.<h>.covered_hours | float | h | Cuántas horas de la ventana tienen realmente tramos (< h justo después de un reinicio del recolector) |
windows.<h>.by_exchange | object | USD | {exchange: {total_liq_usd, long_liq_usd, short_liq_usd}}. Un exchange sin ningún evento en la ventana no tiene clave — lea exchanges[] para distinguir «feed activo, esta moneda sin actividad» de «feed ausente» |
exchanges[] | object[] | — | Una fila por feed (seis actualmente, presentes incluso sin eventos), ordenadas por total de 24 h descendente y luego por el orden de la lista de feeds |
exchanges[].exchange | string | — | binance, bybit, gate, okx, htx, bitfinex |
exchanges[].listed | bool / null | — | Si ese exchange lista un perpetuo con margen en USDT para la moneda; null cuando no se pudo obtener la lista de contratos (Bitfinex siempre null) |
exchanges[].last_event_at | string / null | ISO 8601 UTC | Último tramo recibido de ese feed (cualquier moneda); null si nunca se ha recibido |
exchanges[].price_basis | string | — | Precio usado para la conversión a USD: trade_avg, bankruptcy, unverified |
exchanges[].coverage | string | — | Grado de completitud del feed: full, full_unstated, sampled_1s, aggregated_1s, sampled_undisclosed |
exchanges[].time_basis | string | — | event — agrupado por la marca de tiempo del propio evento |
detail_complete | bool | — | false cuando la moneda puede haber quedado fuera de una lista de detalle completa por tramo (los feeds conservan las 100 primeras monedas por tramo de 5 minutos): en ese caso windows puede contar de menos. Las 50 primeras monedas son casi siempre true |
series.bucket_seconds | int | s | Siempre 3600 |
series.points | object[] | — | Siempre 24 entradas, de la más antigua → a la más reciente, en horas de reloj; la última es la hora en curso hasta updated_at (la instantánea se reconstruye cada 5 min, así que puede ir unos minutos por detrás de la solicitud). Cada una es {ts, long_liq_usd, short_liq_usd}; las horas sin eventos son 0, nunca faltan |
windows["24"] es el mismo marco móvil que la matriz por exchange, así que la misma moneda muestra allí la misma cifra de 24 h. series va en horas de reloj, por lo que Σ points ≠ windows["24"] por diseño: tome los totales de windows y la evolución temporal de series.
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} | Falta symbol, está en blanco, tiene más de 32 caracteres o no queda nada tras eliminar el sufijo de la moneda de cotización (p. ej. symbol=USDT) |
| 404 | {"error": "<SYMBOL> is not a collected symbol"} | Ningún exchange lista la moneda y ningún feed la reportó en las últimas 24 h — es una respuesta, no un fallo transitorio |
| 503 | {"error": "liquidation data unavailable"} | Los tramos del origen de datos no respondieron — reintentar más tarde; nunca debe leerse como «0 liquidaciones» |
start_date / end_date, y nada anterior a 24 h. Para el historial use get_alpha (un desequilibrio long/short normalizado, no importes en USD).get_alpha / get_map necesitan el formato de perpetuo de Binance (BTCUSDT); aquí BTC y BTCUSDT son la misma moneda./liquidation/get_exchanges Liquidaciones forzosas de todo el mercado, agregadas por exchange y como matriz moneda × exchange — el complemento de todo el mercado de /liquidation/get_coin. Usa el mismo marco móvil alineado a 5 minutos, así que el total de 24 h de una moneda es la misma cifra en ambos.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
hoursint · query | Longitud de la ventana. Fuera del rango → 400 (no se recorta); un valor no entero recurre sin aviso al valor por defecto | 1–168 | 24 |
top_nint · query | Cuántas monedas se listan individualmente; el resto va a others. Mismas reglas de rango / valor no entero que hours | 1–50 | 10 |
params = {"hours": 24, "top_n": 10}data = requests.get(f"{BASE_URL}/liquidation/get_exchanges" , headers=headers, params=params, timeout=30).json()["data"]print(data["total"]["total_liq_usd"], data["total"]["short_pct"])print([(e["exchange"], e["total_liq_usd"], e["coverage"]) for e in data["exchanges"]])# Live capture 2026-09-22 (abridged with ...; anonymous studio twin /studio/charts/liquidation/exchanges,# same inner shape — the API-key response wraps it in "data" and allows top_n up to 50):# {"exchanges": [{"exchange": "binance", "total_liq_usd": 390250999.16, "long_liq_usd": 69367041.38,# "short_liq_usd": 320883957.78, "long_pct": 0.1777, "short_pct": 0.8223, "events": 46200,# "last_event_at": "2026-09-22T05:50:00+00:00", "price_basis": "trade_avg",# "coverage": "sampled_1s", "time_basis": "event"}, ... 6 rows],# "coins": [{"token": "BTC", "token_id": 1, "total_liq_usd": 397165128.6, "long_liq_usd": 68908479.16,# "short_liq_usd": 328256649.44,# "by_exchange": {"binance": {"long_liq_usd": 17994806.07, "short_liq_usd": 173732353.71,# "total_liq_usd": 191727159.78}, ... 6 exchanges}}, ... 10 coins],# "others": {"coin_count": 835, "total_liq_usd": 82658628.27, "long_liq_usd": 34622797.57,# "short_liq_usd": 48035830.7, "by_exchange": {...}},# "total": {"total_liq_usd": 743631889.64, "long_liq_usd": 175240866.53, "short_liq_usd": 568391023.1,# "long_pct": 0.2357, "short_pct": 0.7643},# "buckets": 1846, "covered_hours": 24.0, "window_hours": 24,# "window_start": "2026-09-21T05:55:00+00:00", "window_end": "2026-09-22T05:55:00+00:00",# "updated_at": "2026-09-22T05:50:00+00:00"}{"data": {"exchanges", "coins", "others", "total", "buckets", "covered_hours", "window_hours", "window_start", "window_end", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
exchanges[] | object[] | — | Una fila por feed, ordenadas por total descendente: exchange, total_liq_usd, long_liq_usd, short_liq_usd, long_pct, short_pct, events, last_event_at. Siempre se listan todos los feeds: importes null = no se recibieron datos de ese feed en la ventana (se ordenan al final), 0.0 = conectado pero sin liquidaciones |
exchanges[].price_basis / .coverage / .time_basis | string | — | Hasta qué punto es comparable esa fila: trade_avg / bankruptcy / unverified; full, full_unstated, sampled_1s, aggregated_1s, sampled_undisclosed; event. Consérvelos al volver a publicar las cifras — un feed muestreado no es un feed completo |
coins[] | object[] | — | Las top_n primeras por total entre exchanges: token, token_id (0 cuando el símbolo no tiene id de token), total_liq_usd, long_liq_usd, short_liq_usd, by_exchange{name: {total/long/short_liq_usd}}. by_exchange es disperso — un feed sin nada para esa moneda no tiene clave; léalo como 0 cuando el total de ese feed en exchanges[] no es null |
others | object | — | Todo lo que top_n dejó fuera, con los mismos campos más coin_count, de modo que coins[] + others vuelve a sumar el total de cada exchange |
total | object | USD / ratio | total_liq_usd, long_liq_usd, short_liq_usd, long_pct, short_pct |
covered_hours | float | h | Horas de la ventana que tienen realmente tramos (< hours justo después de un reinicio del recolector) |
buckets | int | — | Número de tramos de 5 minutos agregados |
window_hours / window_start / window_end | int / string | h / ISO 8601 UTC | La ventana tal como la resolvió el servidor |
updated_at | string | ISO 8601 UTC | Último tramo utilizado |
long_liq_usd = posiciones largas liquidadas (el precio bajó); short_liq_usd = cortos liquidados (el precio subió).
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "hours must be between 1 and 168"} / {"error": "top_n must be between 1 and 50"} | Parámetro fuera de rango |
200 con la misma estructura y todos los importes en null, buckets: 0 — nunca una tabla de ceros. Compruebe total.total_liq_usd antes de usar las cifras./liquidation/get_coin; una señal normalizada con historial largo, en /liquidation/get_alpha./liquidation/get_coin usa para windows["24"]./long_short_ratio/get_table Todas las monedas recopiladas × todas las fuentes de ratio long/short, en este momento. Diez fuentes: Binance, OKX y Gate.io publican tres tipos cada uno — todas las cuentas, cuentas de top traders, posiciones de top traders — y Bybit publica solo cuentas. Las filas se ordenan por el nocional de interés abierto de Binance. Solo se listan las monedas que corresponden a una entrada de la lista de tokens de Blave; la respuesta con clave API es la tabla completa (full: true); la versión anónima de Studio, solo las filas de su lista blanca de 30 monedas.
Ninguno.
data = requests.get(f"{BASE_URL}/long_short_ratio/get_table" , headers=headers, timeout=30).json()["data"]keys = [s["key"] for s in data["sources"] if not s["stale"]]btc = next(c for c in data["coins"] if c["token"] == "BTC")print({k: btc[k] for k in keys if btc[k] is not None})# Live capture 2026-09-22 via the anonymous studio twin (/studio/charts/long_short_ratio/table) —# same inner shape; the API-key response wraps it in "data" and has full: true with every row.# {"coins": [{"binance_account": 0.8818, "binance_top_account": 1.0149, "binance_top_position": 2.2666,# "bybit_account": 1.0375, "gate_account": 0.7294, "gate_top_account": 0.6944,# "gate_top_position": 1.6436, "okx_account": 0.9084, "okx_top_account": 0.8655,# "okx_top_position": 1.0222, "token": "BTC", "token_id": 1}, ...],# "sources": [{"exchange": "binance", "key": "binance_account", "last_at": "2026-09-22T05:50:00+00:00",# "stale": false, "type": "account"}, ...,# {"exchange": "bybit", "key": "bybit_account", "last_at": "2026-09-22T05:50:00+00:00",# "stale": false, "type": "account"}],# "summary": {"binance_long_majority": 436, "binance_tokens": 509},# "tokens_shown": 30, "tokens_total": 611, "full": false, "updated_at": "2026-09-22T05:50:00+00:00"}Inicio de la recopilación (primer tramo almacenado, medido en BTC el 2026-09-22)
| Clave de la fuente | Recopilación desde |
|---|---|
binance_account | 2021-05-11 |
binance_top_account / binance_top_position | 2026-08-22 |
okx_account / okx_top_account / okx_top_position | 2025-02-18 |
gate_account / gate_top_account / gate_top_position | 2026-08-12 |
bybit_account | 2026-08-12 |
Todas las fuentes tienen ya más antigüedad que los 7 días que sirve este conjunto de datos, así que ninguna limita una consulta — las fechas solo importan si se indica que una fuente «no tiene historial».
{"data": {"coins", "sources", "summary", "tokens_shown", "tokens_total", "full", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
coins[] | object[] | — | Una fila por moneda: token, token_id, más un valor por cada clave de fuente |
coins[].<source key> | float / null | ratio | Cuentas (o posiciones) largas ÷ cortas. null = ese exchange no tiene ese feed para la moneda. Proporción de largos = r / (1 + r) — la API no la precalcula |
sources[] | object[] | — | Los diez feeds, en el orden de las columnas. Lea este campo, nunca una lista de claves escrita a mano en el código |
sources[].key | string | — | <exchange>_<type>, p. ej. binance_top_position — la clave usada en coins[] |
sources[].exchange / .type | string | — | binance / okx / gate / bybit; account / top_account / top_position |
sources[].last_at | string | ISO 8601 UTC | Muestra más reciente de ese feed |
sources[].stale | bool | — | La muestra más reciente de ese feed tiene más de 1 hora (medida respecto al momento actual). El updated_at del nivel superior es el de la fuente más reciente y no dice nada sobre ninguna en particular — evalúe cada fuente por su propio last_at / stale |
summary.binance_tokens / .binance_long_majority | int | — | Monedas con un ratio de cuentas de Binance / de ellas, cuántas están por encima de 1. Se calcula sobre toda la tabla, no sobre las filas mostradas |
tokens_shown / tokens_total | int | — | Filas devueltas / filas de la tabla. Son iguales con una clave API |
full | bool | — | true con una clave API; false en la versión anónima de Studio |
updated_at | string | ISO 8601 UTC | Tramo más reciente entre todas las fuentes |
«Top trader» es una población distinta en cada exchange — no compare los niveles entre exchanges.
| Bolsa | Quién cuenta como top trader (texto oficial original) |
|---|---|
| Binance | "the top 20% users with the highest margin balance" |
| OKX | "the top 5% of traders with the largest open position value" |
| Gate.io | No se ha publicado nunca — la documentación solo nombra los campos |
Por tanto, que binance_top_account esté por encima de okx_top_account no dice nada sobre en qué exchange los grandes traders están más largos. Compare cada fuente con su propio historial.
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 503 | {"error": "long short ratio data unavailable"} | Sin instantánea reciente — reintentar más tarde; nunca debe leerse como un mercado vacío |
/long_short_ratio/get_coin (7 días) — no existe un endpoint de historial largo para este conjunto de datos./long_short_ratio/get_coin Una moneda, las diez fuentes: el último valor de 5 minutos de cada una, una serie horaria de 7 días por fuente y el cierre del perpetuo de Binance en el mismo marco.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Moneda. Se elimina el sufijo de la moneda de cotización; el symbol de la respuesta es el nombre normalizado de la moneda | BTC, BTCUSDT, btc (≤ 32 caracteres) |
params = {"symbol": "BTC"}data = requests.get(f"{BASE_URL}/long_short_ratio/get_coin" , headers=headers, params=params, timeout=30).json()["data"]latest = data["latest"]["binance_top_position"] # null when Binance does not list the coinif latest is not None: r = latest["value"] print("top-trader long share:", round(r / (1 + r), 4))# Live capture 2026-09-22 (abridged with ...; anonymous studio twin, same inner shape):# {"latest": {"binance_account": {"ts": "2026-09-22T05:50:00+00:00", "value": 0.8818},# "binance_top_account": {"ts": "2026-09-22T05:50:00+00:00", "value": 1.0149}, ... 10 keys},# "series": {"bucket_seconds": 3600, "days": 7, "price_symbol": "BTCUSDT", "price_multiplier": 1,# "provisional_from": 1790053200,# "timestamp": [..., 1790049600, 1790053200],# "binance_account": [..., 0.8699, 0.8818], "price": [..., 85424.7, 85495.8], ... one array per source},# "sources": [{"exchange": "binance", "key": "binance_account", "last_at": "2026-09-22T05:50:00+00:00",# "listed": true, "stale": false, "type": "account"}, ... 10 rows],# "symbol": "BTC", "token_id": 1, "updated_at": "2026-09-22T05:50:00+00:00"}{"data": {"latest", "series", "sources", "symbol", "token_id", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
latest.<source key> | object / null | — | {value, ts} — la muestra de 5 minutos más reciente de esa fuente; null cuando la fuente no lista la moneda |
series.bucket_seconds / .days | int | s / d | 3600 / 7 |
series.timestamp | int[] | s epoch | 168 posiciones, de la más antigua → a la más reciente, una por hora |
series.<source key> | float[] / null | ratio | Última muestra de cada hora; null para una hora sin muestra. Todo el campo es un único null (no un array) para una fuente que no lista la moneda |
series.price | float[] / null | USD | Cierre del perpetuo de Binance en el mismo marco. Un único null (con price_symbol / price_multiplier también null) cuando la moneda no tiene perpetuo en Binance |
series.price_symbol / .price_multiplier | string / int | — | De qué perpetuo procede el precio y su multiplicador de contrato (1000PEPEUSDT → 1000; price ÷ price_multiplier = precio por moneda) |
series.provisional_from | int / null | s epoch | Primera posición que aún puede cambiar (las fuentes cierran sus datos hasta ~10 min tarde); null cuando ninguna fuente tiene datos |
sources[] | object[] | — | La lista completa de fuentes, con los mismos campos que la tabla más listed |
sources[].listed | bool | — | false = ese exchange no tiene ese feed para esta moneda; sus entradas latest y series son null |
symbol / token_id / updated_at | — | — | Como en la tabla |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} | Falta symbol, está en blanco, tiene más de 32 caracteres o no queda nada tras eliminar el sufijo de la moneda de cotización |
| 404 | {"error": "<SYMBOL> is not a collected symbol"} | Ninguna fuente recopila la moneda — es una respuesta, no un fallo transitorio |
| 503 | {"error": "long short ratio data unavailable"} | No se pudo leer una fuente listada. null solo significa «ese exchange no la lista» |
/long_short_ratio/get_table se aplica también aquí.start_date / end_date./studio/charts/...) sirven el mismo payload, generado por el mismo código, sin clave, y de ahí se tomaron estos ejemplos. No sustituyen a los endpoints con clave API: las tablas se recortan a 30 monedas (full: false), y una moneda fuera de la lista blanca de Studio responde 403 {"error_code": "ERR001", ..., "anon_whitelist": [...]} en lugar de datos. Los endpoints con clave API documentados aquí no tienen lista blanca ni recorte de filas./oi_imbalance/get_table Todas las monedas recopiladas × cinco exchanges, en nocional USD. Base: solo perpetuos con margen en USDT, nocional en USD, un solo lado. Un exchange que reporta ambos lados se divide a la mitad (exchanges[].side_factor, Gate.io = 0.5). Como todos los valores ya son nocional en USD, los contratos con multiplicador (1000PEPE y similares) se suman entre exchanges sin reescalar.
Ninguno.
data = requests.get(f"{BASE_URL}/oi_imbalance/get_table" , headers=headers, timeout=30).json()["data"]crowded = sorted((c for c in data["coins"] if c["oi_mcap"] is not None), key=lambda c: -c["oi_mcap"])[:10]print(data["total"]["oi"], [(c["token"], round(c["oi_mcap"], 4)) for c in crowded])# Live capture 2026-09-22 (abridged with ...; anonymous studio twin, same inner shape):# {"coins": [{"token": "BTC", "token_id": 1, "oi_total": 18645450917.48, "chg_1h": -0.001775,# "chg_4h": -0.001046, "chg_24h": 0.128725, "market_cap": 1629947967503.241, "oi_mcap": 0.011439,# "by_exchange": {"binance": {"oi": 9417422808.02, "chg_1h": 2e-05, "chg_4h": 0.010203, "chg_24h": 0.067527},# "bingx": {"oi": 1328003926.8, ...},# "bybit": {"oi": 2569097877.96, "chg_1h": -0.008636, "chg_4h": -0.030159, "chg_24h": null},# "gate": {...}, "okx": {"oi": 2575361192.92, ..., "chg_24h": null}}}, ...],# "exchanges": [{"key": "binance", "oi": 24712717530.01, "side_factor": 1.0, "since": null, "full_7d": true,# "last_at": "2026-09-22T05:25:00+00:00", "stale": false}, ... 5 rows],# "total": {"oi": 47428938620.05, "chg_1h": -0.008919, "chg_4h": -0.010508, "chg_24h": 0.073881,# "n_exchanges": 5, "n_full_7d": 3},# "summary": {"oi_mcap_leader": "SAGA", "oi_mcap_leader_value": 1.718336},# "tokens_shown": 30, "tokens_total": 622, "full": false, "updated_at": "2026-09-22T05:30:00+00:00"}Inicio de la recopilación (primer tramo almacenado, medido en BTC el 2026-09-22)
| Bolsa | Recopilación desde |
|---|---|
binance | 2021-12-01 |
bingx | 2025-04-15 |
gate | 2026-08-12 |
okx | 2026-09-21 |
bybit | 2026-09-21 |
OKX y Bybit son la razón de que n_full_7d sea 3 de 5 y de que su chg_24h siguiera siendo null el 2026-09-22 — lea exchanges[].since / full_7d en lugar de estas fechas, que pierden vigencia.
{"data": {"coins", "exchanges", "total", "summary", "tokens_shown", "tokens_total", "full", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
coins[].token / .token_id | string / int | — | Moneda |
coins[].oi_total | float | USD | Suma de los cinco exchanges |
coins[].chg_1h / .chg_4h / .chg_24h | float / null | fracción | Variación decimal (0.0675 = +6.75 %). Cada ventana cuenta solo los exchanges que tienen una referencia al inicio de esa ventana, con numerador y denominador sobre el mismo conjunto; null cuando ninguno la tiene |
coins[].market_cap | float / null | USD | Capitalización de mercado; null cuando no hay ninguna utilizable |
coins[].oi_mcap | float / null | ratio | oi_total ÷ market_cap; null cuando el token no tiene capitalización de mercado |
coins[].by_exchange | object | — | {exchange: {oi, chg_1h, chg_4h, chg_24h}}, una clave por exchange; null cuando la moneda no está listada allí. Un null en una ventana concreta significa que ese exchange no tenía una referencia tan antigua — un feed más reciente que la ventana |
exchanges[] | object[] | — | binance, okx, bingx, bybit, gate — oi de todo el mercado, side_factor, since, full_7d, last_at, stale |
exchanges[].since / .full_7d | string / bool | fecha | El primer día del feed cuando tiene menos de 7 días de historial (full_7d: false); si no, null / true. Es informativo en esta tabla (no tiene ventana de 7 días); en /oi_imbalance/get_coin, un feed así no tiene referencia de 7 d y queda fuera de series.total |
total | object | — | oi de todo el mercado, chg_1h/4h/24h, n_exchanges, n_full_7d |
summary.oi_mcap_leader / _value | string / float | — | El mayor OI ÷ capitalización de mercado entre las 100 primeras monedas por OI |
tokens_shown / tokens_total / full / updated_at | — | — | Como en la tabla de ratio long/short |
No es la misma cifra que el indicador OI 失衡. /oi_imbalance/get_overview_data (y el alpha oi_imbalance que hay detrás de las condiciones del screener y de las alertas) es un agregado de tres exchanges — Binance + OKX + BingX. Esta tabla abarca cinco exchanges con la base indicada arriba. Los dos valores de oi_total difieren, así que un umbral ajustado con uno no sirve para el otro.
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 503 | {"error": "open interest data unavailable"} | La tarea no tiene un resultado reciente (falta o tiene más de una hora) — nunca una tabla de ceros |
chg_24h: null en OKX / Bybit en la captura anterior es la regla del feed reciente, no un hueco en el mercado: esos dos empezaron el 2026-09-21, así que aún no tenían referencia de 24 h./oi_imbalance/get_coin; un historial de longitud suficiente para backtests de una moneda en un exchange, en /oi_imbalance/get_history./oi_imbalance/get_coin El interés abierto de una moneda por exchange, con la misma base que la tabla: valor actual y proporción, cuatro ventanas de variación con los exchanges contados en cada una, y una línea de total horario de 7 días.
symbol, exactamente igual que en /long_short_ratio/get_coin.
data = requests.get(f"{BASE_URL}/oi_imbalance/get_coin" , headers=headers, params={"symbol": "BTC"}, timeout=30).json()["data"]day = data["windows"]["24h"]print(data["oi_total"], day["chg"], "counted:", day["exchanges"])# Live capture 2026-09-22 (abridged with ...; anonymous studio twin, same inner shape):# {"exchanges": [{"key": "binance", "oi": 9454606424.48, "share": 0.5055, "chg_1h": 0.00037, "chg_4h": 0.014471,# "chg_24h": 0.064607, "chg_7d": 0.17205, "side_factor": 1.0, "listed": true, "since": null,# "full_7d": true, "last_at": "2026-09-22T05:50:00+00:00", "stale": false},# {"key": "okx", ..., "since": "2026-09-21", "full_7d": false}, ... 5 rows],# "windows": {"1h": {"chg": -0.000462, "chg_usd": -8636171.48, "exchanges": ["binance", "okx", "bingx", "bybit", "gate"]},# "4h": {...},# "24h": {"chg": 0.12231, "chg_usd": 1474912315.85, "exchanges": ["binance", "bingx", "gate"]},# "7d": {"chg": 0.212184, "chg_usd": 2368974857.56, "exchanges": ["binance", "bingx", "gate"]}},# "series": {"bucket_seconds": 3600, "days": 7, "timestamp": [1789452000, 1789455600, ...],# "total": [11171863169.89, 11167043101.84, ...], "total_exchanges": ["binance", "bingx", "gate"],# "price": [...], "price_symbol": "BTCUSDT", "price_multiplier": 1, "provisional_from": 1790053200},# "oi_total": 18704068031.08, "market_cap": 1629947967503.241, "oi_mcap": 0.011475, "oi_mcap_rank": 580,# "tokens_total": 622, "symbol": "BTC", "token_id": 1, "updated_at": "2026-09-22T05:55:00+00:00"}{"data": {"exchanges", "windows", "series", "oi_total", "market_cap", "oi_mcap", "oi_mcap_rank", "tokens_total", "symbol", "token_id", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
exchanges[] | object[] | — | La lista completa de los cinco exchanges: key, oi (USD), share (de oi_total), chg_1h/4h/24h/7d, side_factor, listed, since, full_7d, last_at, stale |
exchanges[].listed | bool | — | false = la moneda no está listada allí; sus valores son null |
oi_total / market_cap / oi_mcap | float | USD / ratio | Como en la tabla |
oi_mcap_rank / tokens_total | int / null | — | Posición por oi_mcap en la última ronda de la tarea de la tabla; null cuando esa tarea no tiene un resultado reciente |
windows.<1h|4h|24h|7d>.chg / .chg_usd | float / null | fracción / USD | Variación del total de los exchanges contados |
windows.<w>.exchanges | string[] | — | Qué exchanges se contaron en esa ventana — un feed reciente no aparece, así que 24 h / 7 d pueden contar menos exchanges que 1 h |
series.timestamp | int[] | s epoch | 168 posiciones horarias, de la más antigua → a la más reciente |
series.total | float[] / null | USD | OI total por posición — en esta línea solo están los series.total_exchanges (los feeds full_7d), así que no es comparable en nivel con oi_total. Una posición es null cuando alguno de esos exchanges no tiene muestra en esa hora; todo el campo es null cuando ningún exchange es full_7d para la moneda |
series.total_exchanges | string[] | — | Qué exchanges suma la línea |
series.price / .price_symbol / .price_multiplier / .provisional_from | — | — | Como en /long_short_ratio/get_coin |
400 / 404 / 503 exactamente igual que en /long_short_ratio/get_coin, con {"error": "open interest data unavailable"} en el 503.
windows["1h"]["exchanges"] tenga cinco entradas mientras windows["24h"] tiene tres es la regla del feed reciente, no datos faltantes — lea esa lista antes de comparar ventanas./oi_imbalance/get_table se aplica también a este oi_total./oi_imbalance/get_history (un exchange, en monedas en lugar de USD — una base distinta de oi_total)./oi_imbalance/get_history El interés abierto de una moneda en un solo exchange, como serie temporal apta para backtests — la misma base que la tarjeta 未平倉量 del panel de Studio. alpha es interés abierto de un solo lado en monedas, no en USD. Los contratos con multiplicador se convierten de nuevo a monedas (1000PEPE devuelve un número de PEPE). Cada tramo es la última lectura de su periodo — el interés abierto es un saldo, nunca se suma.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
symbolstring · queryObligatorio | Moneda, con la misma regla que /oi_imbalance/get_coin | BTC, BTCUSDT, btc | |
periodstring · queryObligatorio | Tamaño del tramo. 1w devuelve un 400 (unidad no admitida); 1m se interpreta como 1min, así que devuelve un 400 por ser inferior a 5min | {n}min / {n}h / {n}d, mínimo 5min (p. ej. 5min, 1h, 4h, 1d) | |
start_datestring · query | Primer día, inclusive | YYYY-MM-DD (UTC) | end_date − 365 días |
end_datestring · query | Último día, inclusive | YYYY-MM-DD (UTC) | hoy |
oi_exchangestring · query | De qué exchange se lee el interés abierto | binance, bybit, gate (sin distinguir mayúsculas de minúsculas) | binance |
Ventana por solicitud: como máximo 365 días; un rango más largo se recorta sin aviso (start_date pasa a end_date − 365 días, sin error), como en /kline.
params = {"symbol": "BTC", "period": "1d", "start_date": "2022-01-01", "end_date": "2022-01-03"}data = requests.get(f"{BASE_URL}/oi_imbalance/get_history" , headers=headers, params=params, timeout=120).json()["data"]# Live capture 2026-10-02:# {"data": {"alpha": [72913.725, 73310.482, 79515.424], "close": [47704.35, 47280.0, 46445.81],# "exchanges": ["binance"], "timestamp": [1640995200.0, 1641081600.0, 1641168000.0]}}params = {"symbol": "SOL", "period": "4h", "oi_exchange": "bybit", "start_date": "2026-09-30", "end_date": "2026-09-30"}# {"data": {"alpha": [3443506.2, 3344470.1, 3269534.6, 3108222.6, 3082040.9, 3042368.1],# "close": [119.08, 118.41, 119.47, 119.25, 117.17, 118.05], "exchanges": ["bybit"],# "timestamp": [1790726400.0, 1790740800.0, 1790755200.0, 1790769600.0, 1790784000.0, 1790798400.0]}}params = {"symbol": "1000PEPE", "period": "1d", "start_date": "2026-09-01", "end_date": "2026-09-02"}# alpha is PEPE coins; close is per 1000 PEPE, so USD OI = alpha × close / 1000# {"data": {"alpha": [19073240707000.0, 17615934147000.0], "close": [0.0034752, 0.0034306],# "exchanges": ["binance"], "timestamp": [1788220800.0, 1788307200.0]}}{"data": {"timestamp", "alpha", "close", "exchanges"}}, arrays paralelos, del más antiguo → al más reciente.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
timestamp | float[] | Segundos Unix (UTC) | Inicio del tramo |
alpha | float[] | monedas | Interés abierto de un solo lado en oi_exchange, última lectura del tramo |
close | float[] | USDT | Precio del perpetuo USDT-M de Binance — por unidad de contrato, es decir, por 1000 monedas en 1000PEPE |
exchanges | string[] | — | El exchange realmente leído, p. ej. ["binance"] |
alpha × close no es el interés abierto en USD en un contrato con multiplicador. Ahí close es el precio por unidad de contrato (por 1000 monedas en 1000PEPE), mientras que alpha está en monedas individuales — divida antes close por el multiplicador. En los contratos sin multiplicador, como BTC, alpha × close ≈ interés abierto en USD.
Gate.io: envíe siempre start_date ≥ 2026-03-28 — la ventana por defecto (end_date − 365 días) empieza antes del historial de Gate y devuelve un 400.
No es la misma cifra que /oi_imbalance/get_table / get_coin (cinco exchanges sumados, en USD) ni que el indicador OI 失衡 (/oi_imbalance/get_overview_data).
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "symbol is required"} / {"error": "period is required"} | Falta (aquí es un 400, no el 403 de los endpoints de indicadores) |
| 400 | {"error": "period must be at least 5min, in min / h / d units"} | period inferior a 5min (incluido 1m, que se interpreta como 1min) o en una unidad distinta de min / h / d (1w) |
| 400 | {"error": "invalid date format, expected YYYY-MM-DD"} | start_date / end_date mal formados |
| 400 | {"error": "start_date must not be after end_date"} | start_date > end_date |
| 400 | {"error": "oi_exchange must be one of binance, bybit, gate"} | oi_exchange fuera de la lista |
| 400 | {"error": "no <exchange> open interest for <TOKEN> at start_date; this exchange's history may start later — try a later start_date"} | La ventana empieza antes del historial de ese exchange (véase Datos desde). Sin start_date, oi_exchange=gate siempre cae en este caso hasta que su historial supere los 365 días (≈ 2027-03) — para Gate envíe siempre start_date ≥ 2026-03-28 |
| 404 | {"error": "<TOKEN> is not a collected symbol on <exchange>"} | Ese exchange no lista la moneda, la moneda no tiene perpetuo en Binance o está deslistada — es una respuesta, no un fallo transitorio |
| 503 | {"error": "<exchange> open interest data unavailable for <TOKEN>"} | Los datos no se pudieron leer en este momento — reintentar |
close es el precio del perpetuo USDT-M de Binance.200 con arrays vacíos significa que no hay ningún tramo en esa ventana (p. ej. la moneda se listó después) — no lo almacene en caché como un «sin datos» permanente.end_date es hoy, el último tramo sigue cambiando hasta que se cierra su periodo./taker_intensity/get_cvd_table Importe negociado de compra y venta taker (órdenes a mercado) por moneda, en USD, en tres exchanges: Binance a partir del volumen de compra taker en moneda de cotización de la vela de 5 minutos (venta = el total de la vela menos ese volumen), OKX a partir de su volumen taker en USD, Gate.io a partir de los contratos taker × el multiplicador y el precio mark de la misma fila. Solo perpetuos — sin spot — y agregado a partir de velas de 5 minutos, no de operaciones individuales. Se usa el importe negociado que reporta cada exchange; el volumen nunca se multiplica por un precio tomado de otro exchange.
Ninguno.
data = requests.get(f"{BASE_URL}/taker_intensity/get_cvd_table" , headers=headers, timeout=30).json()["data"]buying = sorted((c for c in data["coins"] if c["net_24h"] is not None), key=lambda c: -c["net_24h"])[:10]print(data["total"]["net_24h"], [(c["token"], c["net_24h"]) for c in buying])# Live capture 2026-09-22 (abridged with ...; anonymous studio twin, same inner shape):# {"coins": [{"token": "BTC", "token_id": 1, "buy_24h": 24607245298.03, "sell_24h": 23128502231.73,# "net_1h": -212647361.27, "net_4h": -207128163.51, "net_24h": 1478743066.31,# "by_exchange": {"binance": {"buy_24h": 12663681424.94, "sell_24h": 12135756153.44,# "net_1h": -191133129.94, "net_4h": -217337267.5, "net_24h": 527925271.5},# "gate": {...}, "okx": {...}}}, ...],# "exchanges": [{"key": "binance", "buy_24h": 34978603608.55, "sell_24h": 35112588381.38,# "net_24h": -133984772.74, "last_at": "2026-09-22T05:25:00+00:00", "stale": false}, ... 3 rows],# "total": {"buy_24h": 63543431942.93, "sell_24h": 62491177680.21, "net_24h": 1052254262.8},# "tokens_shown": 30, "tokens_total": 591, "full": false, "updated_at": "2026-09-22T05:25:00+00:00"}Inicio de la recopilación (primer tramo almacenado, medido en BTC el 2026-09-22)
| Bolsa | Campo de origen | Recopilación desde |
|---|---|---|
binance | kline de 5 minutos (importe negociado de compra taker) | 2020-01-01 |
gate | contract_stats | 2026-08-12 |
okx | taker_volume_usd | 2026-09-21 |
OKX tiene además el límite de que el exchange conserva solo 5 días, así que sigue en full_7d: false hasta una semana después de esa fecha. Esta tabla no incluye since / full_7d (no tiene ventana de 7 días) — léalos por moneda en exchanges[] de /taker_intensity/get_cvd_coin, no en estas fechas.
{"data": {"coins", "exchanges", "total", "tokens_shown", "tokens_total", "full", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
coins[].token / .token_id | string / int | — | Moneda |
coins[].buy_24h / .sell_24h | float / null | USD | Importe negociado de compra / venta taker en las 24 h móviles, sumado entre los exchanges de la moneda que no están desfasados; null cuando todos lo están |
coins[].net_1h / .net_4h / .net_24h | float / null | USD | buy − sell en cada ventana móvil (misma regla de null) |
coins[].by_exchange | object | — | {exchange: {buy_24h, sell_24h, net_1h, net_4h, net_24h}}, una clave por exchange; null cuando la moneda no está listada allí o los datos de ese exchange para ella están desfasados |
exchanges[] | object[] | — | binance, okx, gate — buy_24h, sell_24h, net_24h de todo el mercado, last_at, stale |
exchanges[].stale | bool | — | La última vela de ese feed tiene más de una hora: sus ventanas se devuelven como null y el feed queda fuera de los totales, en lugar de aportar una suma que, sin aviso, cubre menos que la ventana |
total | object | USD | buy_24h, sell_24h, net_24h de todo el mercado sobre los exchanges con datos recientes |
tokens_shown / tokens_total / full / updated_at | — | — | Como en las demás tablas de datos sin procesar |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 503 | {"error": "cvd data unavailable"} | La tarea no tiene un resultado reciente — nunca ceros |
taker_intensity (/taker_intensity/get_alpha), que es una señal normalizada de tipo z-score con años de historial. Esto es importe negociado en USD sin procesar, en este momento.net_24h no es un día natural./taker_intensity/get_cvd_coin Compra / venta / neto taker de una moneda por exchange (misma base que la tabla), más un neto horario de 7 días y su acumulado — la propia línea de CVD.
symbol, exactamente igual que en /long_short_ratio/get_coin.
data = requests.get(f"{BASE_URL}/taker_intensity/get_cvd_coin" , headers=headers, params={"symbol": "BTC"}, timeout=30).json()["data"]print(data["windows"]["24h"]["net"], "line covers:", data["series"]["exchanges"], "last cvd:", data["series"]["cvd"][-1])# Live capture 2026-09-22 (abridged with ...; anonymous studio twin, same inner shape):# {"exchanges": [{"key": "binance", "listed": true, "since": null, "full_7d": true, "stale": false,# "last_at": "2026-09-22T05:50:00+00:00",# "windows": {"1h": {"buy": 334079345.8, "sell": 432484304.99, "net": -98404959.2},# "4h": {...}, "24h": {"buy": 12764594401.23, "sell": 12156150828.71, "net": 608443572.52},# "7d": {"buy": 48395824125.78, "sell": 48033568140.24, "net": 362255985.54}}},# {"key": "okx", "full_7d": false, "since": "2026-09-21", ...}, {"key": "gate", ...}],# "windows": {"1h": {"buy": 661443769.03, "sell": 760343818.66, "net": -98900049.65}, "4h": {...},# "24h": {"buy": 24795988390.84, "sell": 23206873390.07, "net": 1589115000.77},# "7d": {"buy": 69832361511.62, "sell": 68794205279.31, "net": 1038156232.31}},# "series": {"bucket_seconds": 3600, "days": 7, "timestamp": [1789452000, 1789455600, ...],# "net": [-53629060.26, -75636445.35, ...], "cvd": [0.0, -75636445.35, ...],# "exchanges": ["binance", "gate"], "price": [...], "price_symbol": "BTCUSDT",# "price_multiplier": 1, "provisional_from": 1790053200},# "symbol": "BTC", "token_id": 1, "updated_at": "2026-09-22T05:50:00+00:00"}{"data": {"exchanges", "windows", "series", "symbol", "token_id", "updated_at"}}.
| Campo | Tipo | Unidad | Descripción |
|---|---|---|---|
windows.<1h|4h|24h|7d> | object | USD | {buy, sell, net} sumados entre los exchanges con datos recientes |
exchanges[] | object[] | — | La lista completa: key, listed, windows (las mismas cuatro, por exchange), since, full_7d, last_at, stale |
exchanges[].full_7d | bool | — | false = menos de 7 días de historial para esta moneda allí: su ventana de 7 d es null y queda excluido del total de 7 d y de la serie. OKX conserva solo 5 días, así que es false hasta una semana después del inicio del feed |
series.timestamp | int[] | s epoch | 168 posiciones horarias, de la más antigua → a la más reciente |
series.net | float[] | USD | Flujo taker neto por hora de reloj, sumado entre series.exchanges; null para una hora sin datos. Cuando series.exchanges está vacío, todas las posiciones son null y cvd se mantiene plano en 0 — en ese caso la línea no aporta información |
series.cvd | float[] | USD | Total acumulado de net; cvd[0] = 0 — la línea es una forma, no un nivel absoluto |
series.exchanges | string[] | — | Qué exchanges suma la línea |
series.price / .price_symbol / .price_multiplier / .provisional_from | — | — | Como en /long_short_ratio/get_coin |
400 / 404 / 503 exactamente igual que en /long_short_ratio/get_coin, con {"error": "cvd data unavailable"} en el 503.
series.exchanges sea más corto que exchanges[] es la regla de full_7d — compare la serie consigo misma, no con windows["24h"], que cuenta más exchanges.cvd[0] = 0 por construcción: solo la pendiente y los puntos de giro aportan información./cme_cot/get_latest La última fila semanal de la CFTC para cada uno de los cuatro futuros cripto de CME, más la suma de estándar + micro en monedas por activo. Misma estructura que una fila de /cme_cot/get_history, sin price.
Ninguno.
data = requests.get(f"{BASE_URL}/cme_cot/get_latest" , headers=headers, timeout=60).json()["data"]btc = next(c for c in data["contracts"] if c["key"] == "btc")# Live capture 2026-10-07 (abridged):# {"key": "btc", "name": "Bitcoin Futures (CME)", "cftc_code": "133741", "coin": "BTC", "coin_per_contract": 5,# "latest": {"date": "2026-09-29", "open_interest": 19596, "open_interest_change": -2719,# "tff": {"leveraged_funds": {"long": 4980, "short": 11836, "spread": 538, "net": -6856,# "long_change": 235, "short_change": -862, "spread_change": -2187, "net_change": 1097},# "asset_manager": {"long": 5069, "short": 1483, "spread": 297, "net": 3586, ...}, ...},# "legacy": {"non_commercial": {...}, "commercial": {...}, "nonreportable": {...}}}}# data["source_updated"] == "Fri, 02 Oct 2026 19:30:08 GMT", data["stale"] == False{"data": {"contracts": [...], "combined": [...], "report", "units", "source", "source_updated", "fetched_at", "stale"}}
| Campo | Descripción |
|---|---|
contracts[] | Uno por contrato: key (btc, micro_btc, eth, micro_eth), name, cftc_code, coin, coin_per_contract (5 / 0.1 / 50 / 0.1), latest (una fila, véase get_history; null si el contrato no tiene filas) |
combined[] | btc_combined, eth_combined: name, coin, components, units, micro_since, note, latest (una fila combinada, en monedas) |
report | futures_only |
units | Unidad de las posiciones de contracts[].latest: contratos (× coin_per_contract para obtener monedas) |
source | Línea de atribución de la CFTC — muéstrela junto a cualquier cifra que publique |
source_updated | Cuándo actualizó la CFTC el conjunto de datos por última vez |
fetched_at | Cuándo lo obtuvo Blave (UTC) |
stale | true = no se pudo acceder a la CFTC y se sirve la última copia almacenada |
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 503 | {"error": "CFTC data unavailable. Please retry shortly."} | No se pudo acceder a la CFTC y no hay copia almacenada |
/cme_cot/get_history./cme_cot/get_history El posicionamiento semanal de un contrato por categoría de trader. Las filas llevan la fecha del informe — el día al que corresponden las posiciones, normalmente un martes (un lunes cuando el martes es festivo en EE. UU.). Los datos se hicieron públicos más tarde: normalmente el viernes de esa semana a las 15:30 ET; un festivo federal entre miércoles y viernes traslada la publicación al siguiente día hábil, y un cierre del Gobierno la retrasa semanas (los informes de 2018-12-24 … 2019-02-26 salieron el 2019-02-01 … 03-05; los informes de 2025-09-30 … 2026-01-20, el 2025-11-19 … 2026-01-23 — CFTC Releases 7864-19 y 9138-25). Un backtest no debe actuar sobre una fila antes de su publicación.
| Nombre | Descripción | Valores permitidos | Predeterminado |
|---|---|---|---|
contractstring · query | Los contratos individuales están en contratos; *_combined = estándar + micro sumados en monedas | btc, micro_btc, eth, micro_eth, btc_combined, eth_combined (sin distinguir mayúsculas de minúsculas) | btc |
start_datestring · query | Primera fecha de informe, inclusive. Si se omite = solo el último año — indique una fecha temprana (p. ej. 2018-01-01) para el historial completo | YYYY-MM-DD | hoy (UTC) − 365 días |
end_datestring · query | Última fecha de informe, inclusive | YYYY-MM-DD | la más reciente |
data = requests.get(f"{BASE_URL}/cme_cot/get_history" , headers=headers, params={"contract": "btc_combined", "start_date": "2026-09-01"}, timeout=60).json()["data"]lev_net = {r["date"]: r["tff"]["leveraged_funds"]["net"] for r in data["rows"]} # BTC# Live capture 2026-10-07 (abridged): 5 rows 2026-09-01 … 2026-09-29# {"contract": {"key": "btc_combined", "name": "Bitcoin + Micro Bitcoin Futures (CME), in BTC", "coin": "BTC",# "components": ["btc", "micro_btc"], "micro_since": "2021-05-04", "units": "coins (...)", "note": "..."},# "rows": [..., {"date": "2026-09-29", "included": ["btc", "micro_btc"], "price": 83663.66,# "open_interest": 100612.0, "open_interest_change": -14522.7,# "tff": {"leveraged_funds": {"long": 25889.6, "short": 61305.6, "spread": 2742.4, "net": -35416.0,# "long_change": 680.4, "short_change": -4283.9,# "spread_change": -11214.8, "net_change": 4964.3},# "asset_manager": {"long": 25570.8, "short": 7421.7, "net": 18149.1, ...},# "dealer": {"net": 13483.9, ...}, "other_reportables": {...}, "nonreportable": {...}},# "legacy": {"non_commercial": {"net": 11754.9, ...}, "commercial": {"net": -13695.5, ...},# "nonreportable": {...}}}],# "price_source": "Binance spot BTCUSDT, UTC daily close on the report date (Tuesday)",# "report": "futures_only", "source": "Source: U.S. Commodity Futures Trading Commission (CFTC), ...",# "source_updated": "Fri, 02 Oct 2026 19:30:08 GMT", "fetched_at": "2026-10-07T09:16:35Z", "stale": false}{"data": {"contract": {...}, "rows": [...], "price_source", "report", "units", "source", "source_updated", "fetched_at", "stale"}}, filas de la más antigua → a la más reciente.
contract: key, name, coin, y cftc_code + coin_per_contract (contrato individual) o components + micro_since + note (combinado).
Cada fila:
| Campo | Tipo | Descripción |
|---|---|---|
date | string | Fecha del informe — normalmente un martes, un lunes cuando el martes es festivo en EE. UU. |
open_interest / open_interest_change | number | Interés abierto total y su variación semanal |
tff | object | Grupos dealer, asset_manager, leveraged_funds, other_reportables, nonreportable |
legacy | object | null | Grupos non_commercial, commercial, nonreportable; null si la CFTC no tiene fila Legacy para esa semana |
price | float | null | Cierre diario UTC del spot BTCUSDT / ETHUSDT de Binance en la fecha del informe; null cuando no está disponible |
included | string[] | Solo contratos combinados: qué contratos suma esta fila (["btc"] antes de micro_since) |
Cada grupo: long, short, spread (no en nonreportable / commercial), net (= long − short), y long_change, short_change, spread_change, net_change. Unidades: contratos para un contrato individual, monedas para uno combinado. Los campos *_change son las cifras semanales de la propia CFTC, no diferencias entre filas — la CFTC se salta semanas (p. ej. cierres del Gobierno), así que nunca calcule diferencias entre filas por su cuenta.
| Estado | Cuerpo | Cuándo |
|---|---|---|
| 400 | {"error": "contract must be one of btc, micro_btc, eth, micro_eth, btc_combined, eth_combined"} | Contrato desconocido |
| 400 | {"error": "Invalid start_date, expected YYYY-MM-DD"} (o end_date) / {"error": "start_date must not be after end_date"} | Fecha no válida / rango invertido |
| 503 | {"error": "CFTC data unavailable. Please retry shortly."} | No se pudo acceder a la CFTC y no hay copia almacenada |
*_combined tiene una discontinuidad en micro_since: la semana en que se incorpora el micro, los totales dan un salto y el *_change de esa semana incluye toda la primera posición del micro. Empiece un backtest combinado después de micro_since, o use el contrato individual btc / eth.source junto a cualquier cifra que muestre. Sin respaldo de la CFTC.btc 2018-04-10, micro_btc 2021-05-04, eth 2021-04-06, micro_eth 2021-12-14. Los futuros de BTC propios de CME entran en el COT el 2018-04-10, no en su lanzamiento de 2017-12.price es el cierre diario UTC del spot de Binance.