39 endpoints · Geral · Ferramenta · Alpha · Dados brutos
https://api.blave.orgapi-key + secret-key em toda requisiçãoAPI plan or Blave Agent planComum a todos os endpoints get_alpha / get_exposure de cripto:
period — tamanho da barra, {n}min / {n}h / {n}d ({n}m é lido como minutos). Os valores documentados são 5min, 15min, 1h, 4h, 8h, 1d; os indicadores com um mínimo maior informam isso no próprio bloco. Um period ausente ou que não pode ser interpretado resulta em 403 {"error": "period is required"} (400 em unusual_movement e liquidation).start_date / end_date — YYYY-MM-DD (UTC). O padrão de end_date é hoje; o de start_date é end_date − 365 dias. Um intervalo maior que 365 dias é limitado silenciosamente (start_date é movido para end_date − 365 dias). Uma data malformada não é validada e termina em 500 — envie sempre YYYY-MM-DD.symbol — perpétuo USDT-M da Binance, p. ex. BTCUSDT; BTC, btc, BTC/USDT, BTC-USDT também são aceitos (um token sem sufixo recebe USDT no final). Os endpoints get_symbols listam os símbolos cobertos.{"data": {"timestamp": [...], "alpha": [...], ...}} — arrays paralelos, um elemento por barra. timestamp é em segundos Unix (UTC), o rótulo da barra.Objeto stat — retornado pelos indicadores cujo bloco o lista. Um modelo logístico ajustado com o último ano deste indicador para o símbolo contra o movimento de preço das 24h seguintes:
| Campo | Tipo | Descrição |
|---|---|---|
up_prob | float | Probabilidade de alta em 24h dado o valor mais recente do indicador (0–1) |
avg_up_return | float | Retorno médio de 24h nos movimentos de alta passados (decimal, 0.02 = +2%) |
avg_down_return | float | Retorno médio de 24h nos movimentos de baixa passados (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 quando o símbolo tem menos de um ano de histórico — nesse caso, não confie nos outros campos |
Quando não há dados, o objeto recai em up_prob 0.5 e zeros.
/price | Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Token ou par USDT | BTCUSDT ou BTC (sem diferenciar maiú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}Um objeto plano.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
symbol | string | — | O token sem USDT (p. ex. BTC, mesmo quando BTCUSDT foi enviado) |
price | float | USDT | Preço mais recente |
change_24h | float | decimal | Variação de 24h como fração (0.025 = +2.5%) |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} | symbol ausente |
| 404 | {"error": "symbol <SYMBOL> not found"} | Sem preço para esse token |
change_24h normalmente vem da mesma exchange que price, mas os dois ficam em caches separados (5 s cada), então podem divergir por um instante./alpha_table Nenhum.
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 é indexado por token (BTC, 1INCH, …). Cada token mapeia nome do indicador → {param: value} ("-" quando o indicador não tem parâmetro). "" = dados insuficientes. Além dos indicadores:
| Chave | Descrição |
|---|---|
statistics | up_prob (prob. de alta em 24h), exp_value (retorno esperado), avg_up_return, avg_down_return, return_ratio, is_data_sufficient |
price | {"-": 70000} — preço atual |
price_change | {"15min": ..., "1h": ..., "24h": ...} — variação em % |
market_cap | {"-": 1234567890} — capitalização de mercado em USD |
market_cap_percentile | {"-": 85.3} — percentil entre todas as moedas listadas |
funding_rate | {"binance": -0.01, ...} — por exchange |
oi_imbalance | {"-": 0.12} — desequilíbrio de OI (detalhe completo: /oi_imbalance/get_overview_data) |
fields — uma entrada por indicador: id, name (chave usada em data), param (nome do parâmetro ou null), name_en, name_zh.
note — indexado pelo id do indicador: uma lista de faixas de valor {min, max, note: {en, zh}, direction: {en, zh}, color, background_color} usada para rotular um valor (p. ex. max: -3 → "Overly Bearish").
Apenas os erros comuns.
statistics.is_data_sufficient antes de usar statistics./kline Cobertura. Todos os perpétuos USDⓈ-M da Binance cujo símbolo termina em USDT — 740 contratos em outubro de 2026, incluindo ações tokenizadas, commodities e outros perpétuos USDT de TradFi. Todos os 740 têm o histórico completo de 1 minuto armazenado no servidor, desde 2020-01-01 ou desde a data de listagem. Um perpétuo recém-listado fica consultável cerca de 5–10 minutos depois da listagem.
Sem cobertura: contratos cotados em USDC, USD1, U ou BTC (p. ex. BTCUSDC, ETHBTC) e contratos trimestrais com entrega — estes retornam o erro 400 unknown symbol or no data abaixo. Contratos deslistados não são garantidos: um deles pode responder com o histórico que ainda estiver armazenado ou com esse mesmo 400 (os deslistados antes de outubro de 2026 não têm histórico de 1min–4min).
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Perpétuo USDT USDⓈ-M da Binance. Um token sem sufixo recebe USDT no final; um token sem sufixo que só existe com um prefixo multiplicador é resolvido para ele (PEPE → 1000PEPEUSDT) | BTCUSDT; também BTC, btc, BTC/USDT, BTC-USDT | |
periodstring · queryObrigatório | Tamanho da barra. Qualquer tamanho em minutos inteiros é aceito, não apenas os exemplos listados | {n}min / {n}h / {n}d, mínimo 1min (p. ex. 1min, 3min, 15min, 2h, 1d, 7d). {n}m é lido como minutos (15m = 15min) | |
start_datestring · query | Primeiro dia, inclusive | YYYY-MM-DD (UTC) | end_date − 365 dias (period ≥ 5min); end_date − 30 dias (period < 5min) |
end_datestring · query | Último dia, inclusive (barras até o fim desse dia UTC) | YYYY-MM-DD (UTC) | agora |
Janela por requisição: period ≥ 5min → no máximo 365 dias; um intervalo maior é limitado silenciosamente (start_date é movido para end_date − 365 dias, sem erro). Period < 5min → no máximo 30 dias; um intervalo maior resulta em 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}, ...]Um array JSON simples (não envolvido em {"data": ...}), em ordem crescente de tempo.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
time | float | Segundos Unix (UTC) | Horário de abertura da barra |
open / high / low / close | float | moeda de cotação (USDT) | Preços |
volume | float | null | ativo base | Volume negociado; null quando a fonte não tem volume para aquela barra |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} | symbol ausente |
| 403 | {"error": "period is required"} | period ausente ou impossível de interpretar |
| 400 | {"error": "minimum supported period is 1min"} | period abaixo de um 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 e intervalo > 30 dias |
| 400 | {"error": "invalid date format, expected YYYY-MM-DD"} | start_date / end_date malformados |
| 400 | {"error": "unknown symbol or no data: <symbol>"} | Símbolo sem cobertura (veja Sem cobertura) ou que não é um contrato real, p. ex. BTCUSDC, ETHBTC, um erro de digitação. <symbol> repete o valor que você enviou. Não é transitório — não tente novamente |
200 com [], não um erro.1min, toda barra retornada está fechada. Um período maior pode terminar em uma barra parcial quando end_date é hoje — ela é montada com as barras fechadas até o momento (às 07:09 UTC, a barra 1h das 07:00 contém 07:00–07:05); descarte-a se precisar apenas de barras fechadas.5min = 3 requisições; 1 ano de 1min = 13 requisições de ≤30 dias).1min.1min), 300 s (1h / 4h / 1d), 60 s (todos os outros períodos); apenas 5 s quando a última barra fechada ainda não chegou./market_direction/get_alpha Sem symbol: alpha é uma única série do mercado inteiro, não uma por moeda. BTCUSDT é usado internamente apenas para alinhar as barras; não é retornado e não altera alpha. Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
periodstring · queryObrigatório | Tamanho da barra | 1h, 4h, 8h, 1d (mínimo 1h) | |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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": [...]}}. Sem stat.
| Campo | Tipo | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Valor da direção do mercado |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "period is required"} | period ausente ou impossível de interpretar |
1d mais antiga retornada./screener/get_saved_conditions Nenhum.
response = requests.get(f"{BASE_URL}/screener/get_saved_conditions" , headers=headers, timeout=30)conditions = response.json()["data"]{"data": {<condition_id>: {...}}}, indexado pelo id da condição (uma chave string do JSON, p. ex. "12"; envie-o de volta como o inteiro condition_id). Apenas as condições da própria conta.
| Campo | Tipo | Descrição |
|---|---|---|
filters | object[] | Os filtros da condição, todos combinados com AND: indicator_id (int), indicator_name ({"en", "zh"}), param (string; "-" = o padrão do indicador), operator_id (int), operator_symbol (string, p. ex. >), value (limiar) |
note | string | O nome que você deu à condição ao salvá-la |
name_en / name_zh | string | null | Definido apenas em condições oficiais / da comunidade; nas suas próprias condições, espere vazio ou null e leia note no lugar |
description_en / description_zh | string | null | Definido apenas em condições oficiais / da comunidade; pode ser vazio ou null |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "unsupported api feature"} | Chave não vinculada a uma conta de usuário |
/screener/get_saved_condition_result | Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
condition_idint · queryObrigatório | Condição a executar | Um 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 | Descrição |
|---|---|---|
alpha_names | object[] | Um por indicador de filtro distinto, na ordem dos filtros: en / zh (nome de exibição, com o parâmetro entre parênteses quando houver), name (chave do indicador), type, url; mais value_format, value_decimals, polarity quando o indicador os define |
symbols | object[] | Tokens que atendem a todos os filtros |
symbols[].symbol | string | Token sem USDT (p. ex. BTC) |
symbols[].id | int | Id do token (0 quando desconhecido) |
symbols[].user_selected | bool | O token está na Watchlist da conta |
symbols[].price | float | Preço mais recente em USDT (mesmo feed de /price; 0 quando indisponível) |
symbols[].24h_chg | float | Variação de 24h como fração (0.025 = +2.5%) |
symbols[].alphas | float[] | O valor do token para cada indicador de filtro, em paralelo com alpha_names |
symbols[].alpha_notes | object[] | Por indicador: indicator_id, color, direction, note (mais background_color quando uma regra foi atendida; color null e strings vazias quando nenhuma foi) |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "Missing parameter: condition_id is required."} | Ausente |
| 400 | {"error": "Invalid parameter: condition_id must be an integer."} | Não é um inteiro |
| 404 | {"error": "Invalid condition_id: <id> not found for user."} | Não é uma das condições desta conta |
| 403 | {"error": "unsupported api feature"} | Chave não vinculada a uma conta de usuário |
/holder_concentration/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/holder_concentration/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
*/get_symbols de cripto retornam a mesma lista de símbolos USDT-M da Binance./holder_concentration/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Z-score do log do ratio long/short de contas contra a sua média de 30 dias, com sinal invertido — maior = mais concentrado |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
1d de BTCUSDT; outros símbolos podem começar depois./funding_rate/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo (no formato da Binance, qualquer que seja a exchange) | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
exchangestring · query | De qual exchange ler a taxa de financiamento do perpétuo; qualquer outro valor resulta em 400 | binance, okx, bingx, bybit | binance |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Unidade | Descrição |
|---|---|---|---|
timestamp | float[] | Segundos Unix (UTC) | Rótulo da barra |
alpha | float[] | percentual | Taxa de financiamento × 100 (0.01 = 0.01%); positivo = comprados pagam aos vendidos |
close | float[] | USDT | Preço de fechamento do perpétuo |
stat | object | — | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
| 400 | {"error": "exchange must be one of binance, okx, bingx, bybit"} | exchange fora da lista |
1d de BTCUSDT; outros símbolos podem começar depois, e exchange=bybit começa depois — leia o primeiro timestamp./market_sentiment/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/market_sentiment/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
/market_sentiment/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Valor do sentimento do mercado |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
1d de BTCUSDT; outros símbolos podem começar depois./capital_shortage/get_alpha Sem symbol; mercado inteiro. Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
periodstring · queryObrigatório | Tamanho da barra — 5min e 15min retornam dados | 5min, 15min, 1h, 4h, 8h, 1d | |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Valor da escassez de capital |
stat | object | Veja objeto stat (calculado em relação ao BTC) |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "period is required"} | Parâmetro ausente |
1d./sector_rotation/get_history_data Nenhum.
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 fica ao lado de alpha no topo de data, não dentro de cada setor; é o eixo de tempo comum às séries de todos os setores.
| Campo | Tipo | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC), um por ponto — 366 pontos diários na resposta observada |
alpha.<sector>.data | float[] | A série do setor, com o mesmo tamanho e a mesma ordem de timestamp (366); o primeiro elemento é 0.0 |
alpha.<sector>.name_en / name_zh | string | Nome de exibição do setor |
Apenas os erros comuns.
0.0. Não há parâmetros, e cada reconstrução recalcula apenas os últimos 365 dias, então não existe histórico mais longo./sector_rotation/get_overview_data Nenhum.
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 setores).
| Campo | Descrição |
|---|---|
data | {<timeframe>: {"pct_change": float}} para 1h, 8h, 24h, 3d, 7d, 30d, 90d; pct_change é um decimal (0.0061 = +0.61%) |
symbols | {<token>: {"id": int, "data": {<timeframe>: {"pct_change": float}}}} — detalhamento por token |
Apenas os erros comuns.
/oi_imbalance/get_overview_data Nenhum.
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": [...]}, em ordem decrescente de alpha.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
token | string | — | Token |
token_id | int | — | Id do token na Blave |
token_price | float | USD | Preço |
token_chg | float | decimal | Variação de preço |
market_cap | float | USD | Capitalização de mercado |
oi_total | float | USD | OI de futuros somado entre Binance / OKX / BingX |
alpha | float | razão | oi_total / market_cap — alto = OI concentrado em relação ao tamanho (risco de squeeze / volatilidade) |
Apenas os erros comuns.
oi_imbalance de /alpha_table traz apenas o alpha final; este endpoint tem a tabela completa./whale_hunter/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/whale_hunter/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
/whale_hunter/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Janela móvel em que o fluxo é somado | 15min, 1h, 4h, 8h, 24h, 3d | 24h |
score_typestring · query | Variação de open interest ou volume | score_oi, score_volume | score_oi |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Z-score da variação de OI (ou do volume) somada em timeframe contra a sua média de 30 dias |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
| 403 | {"error": "Invalid score_type"} | score_type não permitido |
timeframe não é validado no servidor. Um valor fora da lista foi testado, 2h, e retornou 200 com dados. Essa é uma única observação — ela não estabelece que qualquer {n}h funciona. Fique nos valores listados, a menos que você verifique o que precisa.1d de BTCUSDT; outros símbolos podem começar depois./taker_intensity/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/taker_intensity/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
/taker_intensity/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Janela móvel | 15min, 1h, 4h, 8h, 24h, 3d | 24h |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Z-score do volume (compra taker − venda taker) somado em timeframe contra a sua média de 30 dias; positivo = compra líquida |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
1d de BTCUSDT; outros símbolos podem começar depois./unusual_movement/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/unusual_movement/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
/unusual_movement/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Janela em que o movimento é medido | 15min, 1h, 4h, 8h, 24h, 3d, 7d | 24h |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Retorno em timeframe dividido pela volatilidade de 365 dias escalada para essa janela — |alpha| grande = valor atípico |
close | float[] | Preço de fechamento (USDT) |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
| 500 | erro do servidor | timeframe fora da lista permitida |
1d de BTCUSDT; outros símbolos podem começar depois./squeeze_momentum/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/squeeze_momentum/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
/squeeze_momentum/get_alpha Sem period; fixo em 1d. Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC), diário |
alpha | float[] | Valor do momentum |
scolor | string[] | black = squeeze ativo (Bandas de Bollinger dentro dos Canais de Keltner), grey = squeeze inativo |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "symbol is required"} | Parâmetro ausente |
alpha é 0.0 até 2020-02-09. Uma requisição que começa antes da data de Dados desde retorna essas linhas de preenchimento — elas são enchimento, não sinal. Descarte os zeros iniciais ou comece na data de Dados desde.alpha diferente de zero de BTCUSDT; outros símbolos podem começar depois./blave_top_trader/get_exposure Sem symbol: alpha é uma única série do mercado inteiro, não uma por moeda. BTCUSDT é usado internamente apenas para alinhar as barras; não é retornado e não altera alpha. Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
periodstring · queryObrigatório | Tamanho da barra | 1h, 4h, 8h, 1d | |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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": [...]}}. Sem stat.
| Campo | Tipo | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | Exposição líquida dos top traders da Blave (os 10% maiores por ativos da conta) — a mediana, entre esses traders, da posição nocional líquida de cada trader ÷ seus próprios ativos, ×100 (positivo = líquido comprado). Uma razão bruta, não um z-score |
| Status | Corpo | Quando |
|---|---|---|
| 403 | {"error": "period is required"} | Parâmetro ausente |
/liquidation/get_symbols Nenhum.
symbols = requests.get(f"{BASE_URL}/liquidation/get_symbols" , headers=headers, timeout=30).json()["data"]{"data": ["BNBUSDT", "BTCUSDT", ...]}, ordenado.
Apenas os erros comuns.
/liquidation/get_alpha Veja Convenções dos indicadores de cripto.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
periodstring · queryObrigatório | Tamanho da barra | 5min, 15min, 1h, 4h, 8h, 1d | |
timeframestring · query | Janela móvel | 15min, 1h, 4h, 8h, 24h, 3d | 24h |
start_datestring · query | Primeiro dia | YYYY-MM-DD | end_date − 365 dias |
end_datestring · query | Último dia | YYYY-MM-DD | hoje |
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 | Descrição |
|---|---|---|
timestamp | float[] | Segundos Unix (UTC) |
alpha | float[] | (liquidações de vendidos − de comprados, em moedas) somadas em timeframe ÷ o seu desvio padrão móvel de 30 dias; a média não é subtraída. > 0 = mais vendidos do que comprados liquidados, < 0 = mais comprados |
stat | object | Veja objeto stat |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} / {"error": "period is required"} | Parâmetro ausente |
alpha é 0.0 até 2023-01-01. Uma requisição que começa antes da data de Dados desde retorna essas linhas de preenchimento — elas são enchimento, não sinal. Descarte os zeros iniciais ou comece na data de Dados desde. Os símbolos que não são BTC/ETH passam a ter valores diferentes de zero ainda mais tarde, então verifique símbolo a símbolo./liquidation/get_map | Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
price_maxfloat · query | Limite superior do eixo de preço | preço | intervalo escolhido pelo servidor |
price_minfloat · query | Limite inferior do eixo de preço | preço | intervalo escolhido pelo 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 | Unidade | Descrição |
|---|---|---|---|
price | float | USDT | Preço atual |
labels | float[] | USDT | 200 buckets de preço |
oi_value | float[] | USD | Alocação estimada do open interest da Binance em cada bucket (estimativa do modelo, não posições reais) |
cumsum | float[] | USD | Exposição acumulada a liquidações entre os buckets |
liquidation | object | USD | {"24h": {"buy_liq": [...], "sell_liq": [...]}} — liquidações reais de ordens forçadas da Binance nas últimas 24 h por bucket, cada uma dividida por uma premissa fixa de 0.3 de participação da Binance: buy_liq = liquidações de vendidos, sell_liq = liquidações de comprados |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} | Parâmetro ausente |
/liquidation/get_map_change | Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Símbolo | e.g. BTCUSDT | |
price_maxfloat · query | Limite superior do eixo de preço | preço | intervalo escolhido pelo servidor |
price_minfloat · query | Limite inferior do eixo de preço | preço | intervalo escolhido pelo 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 | Unidade | Descrição |
|---|---|---|---|
price | float | USDT | Preço atual |
labels | float[] | USDT | 200 buckets de preço (limites inferiores) |
hist_0_1h | float[] | USD | Nova exposição estimada a liquidações nas últimas 0–1 h, por bucket: diferença positiva entre snapshots do mapa do modelo, não liquidações reais |
hist_1_8h | float[] | USD | Últimas 1–8 h |
hist_8_24h | float[] | USD | Últimas 8–24 h |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} | Parâmetro ausente |
/liquidation/get_coin As liquidações forçadas de uma moeda em todos os feeds de exchanges que a Blave coleta: quatro janelas móveis com a divisão por exchange, uma série horária de 24 pontos e as observações de cobertura de cada feed. Este é o fluxo real de liquidações (como a entrada de get_alpha), não a estimativa do modelo por trás de get_map.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Moeda. O sufixo de cotação é removido; o symbol da resposta é o nome normalizado da moeda | 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 | Unidade | Descrição |
|---|---|---|---|
symbol | string | — | Nome normalizado da moeda, p. ex. BTC |
rank | int / null | — | Posição entre as 50 maiores moedas pelo total de 24 h entre as exchanges; null fora das 50 maiores ou sem evento |
updated_at | string / null | ISO 8601 UTC | Horário do último bucket de 5 minutos usado |
windows | object | — | As chaves são as strings "1", "4", "12", "24" (horas). Cada uma é uma janela móvel que termina no último bucket de 5 minutos, com os campos abaixo |
windows.<h>.total_liq_usd / long_liq_usd / short_liq_usd | float | USD | Somado entre as exchanges; long = posições compradas liquidadas (o preço caiu), short = vendidas liquidadas (o preço subiu) |
windows.<h>.long_pct / short_pct | float / null | razão 0–1 | Participação no total da janela; null quando o total da janela é 0 |
windows.<h>.covered_hours | float | h | Quantas horas da janela realmente têm buckets (< h logo depois de um reinício do coletor) |
windows.<h>.by_exchange | object | USD | {exchange: {total_liq_usd, long_liq_usd, short_liq_usd}}. Uma exchange sem evento na janela não tem chave — leia exchanges[] para distinguir "feed ativo, esta moeda sem movimento" de "feed ausente" |
exchanges[] | object[] | — | Uma linha por feed (seis hoje, presentes mesmo sem evento), ordenadas pelo total de 24 h decrescente e depois pela ordem da lista de feeds |
exchanges[].exchange | string | — | binance, bybit, gate, okx, htx, bitfinex |
exchanges[].listed | bool / null | — | Se essa exchange lista um perpétuo com margem em USDT para a moeda; null quando a lista de contratos não pôde ser obtida (Bitfinex sempre null) |
exchanges[].last_event_at | string / null | ISO 8601 UTC | Último bucket visto desse feed (qualquer moeda); null se nunca foi visto |
exchanges[].price_basis | string | — | Preço usado na conversão para USD: trade_avg, bankruptcy, unverified |
exchanges[].coverage | string | — | Completude do feed: full, full_unstated, sampled_1s, aggregated_1s, sampled_undisclosed |
exchanges[].time_basis | string | — | event — agrupado em buckets pelo timestamp do próprio evento |
detail_complete | bool | — | false quando a moeda pode ter sido cortada de uma lista de detalhes completa por bucket (os feeds mantêm as 100 maiores moedas por bucket de 5 minutos): nesse caso, windows pode contar a menos. As 50 maiores moedas são quase sempre true |
series.bucket_seconds | int | s | Sempre 3600 |
series.points | object[] | — | Sempre 24 entradas, da mais antiga → para a mais recente, em horas cheias; a última é a hora corrente até updated_at (o snapshot é reconstruído a cada 5 min, então pode ficar alguns minutos atrás da requisição). Cada uma é {ts, long_liq_usd, short_liq_usd}; horas sem evento são 0, nunca ausentes |
windows["24"] é a mesma janela móvel da matriz de exchanges, então a mesma moeda mostra lá o mesmo número de 24 h. series está em horas cheias, então Σ points ≠ windows["24"] por construção: tire os totais de windows e a distribuição no tempo de series.
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} | symbol ausente, em branco, com mais de 32 caracteres, ou sem nada restante depois que o sufixo de cotação é removido (p. ex. symbol=USDT) |
| 404 | {"error": "<SYMBOL> is not a collected symbol"} | Nenhuma exchange lista a moeda e nenhum feed a reportou nas últimas 24 h — uma resposta, não uma falha transitória |
| 503 | {"error": "liquidation data unavailable"} | Os buckets do upstream não responderam — tente novamente mais tarde; nunca leia isso como "0 liquidações" |
start_date / end_date, e nada com mais de 24 h. Para histórico, use get_alpha (um desequilíbrio long/short normalizado, não valores em USD).get_alpha / get_map precisam do formato do perpétuo da Binance (BTCUSDT); aqui, BTC e BTCUSDT são a mesma moeda./liquidation/get_exchanges Liquidações forçadas do mercado inteiro, agregadas por exchange e como uma matriz moeda × exchange — o complemento, para o mercado inteiro, de /liquidation/get_coin. Mesma janela móvel alinhada a 5 minutos, então o total de 24 h de uma moeda é o mesmo número nos dois.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
hoursint · query | Tamanho da janela. Fora do intervalo → 400 (não é limitado); um valor não inteiro recai silenciosamente no padrão | 1–168 | 24 |
top_nint · query | Quantas moedas listar individualmente; as demais vão para others. Mesmas regras de intervalo / valor não inteiro de 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 | Unidade | Descrição |
|---|---|---|---|
exchanges[] | object[] | — | Uma linha por feed, em ordem decrescente de total: exchange, total_liq_usd, long_liq_usd, short_liq_usd, long_pct, short_pct, events, last_event_at. Todos os feeds são sempre listados: valores null = nenhum dado recebido desse feed na janela (ordenados por último), 0.0 = conectado, mas sem liquidações |
exchanges[].price_basis / .coverage / .time_basis | string | — | Quão comparável é essa linha: trade_avg / bankruptcy / unverified; full, full_unstated, sampled_1s, aggregated_1s, sampled_undisclosed; event. Mantenha esses campos ao republicar os números — um feed amostrado não é um feed completo |
coins[] | object[] | — | As top_n maiores pelo total entre exchanges: token, token_id (0 quando o símbolo não tem id de token), total_liq_usd, long_liq_usd, short_liq_usd, by_exchange{name: {total/long/short_liq_usd}}. by_exchange é esparso — um feed sem nada para aquela moeda não tem chave; leia como 0 quando o total desse feed em exchanges[] não for null |
others | object | — | Tudo o que top_n cortou, com os mesmos campos mais coin_count, de modo que coins[] + others volta a somar o total de cada exchange |
total | object | USD / razão | total_liq_usd, long_liq_usd, short_liq_usd, long_pct, short_pct |
covered_hours | float | h | Horas da janela que realmente têm buckets (< hours logo depois de um reinício do coletor) |
buckets | int | — | Número de buckets de 5 minutos agregados |
window_hours / window_start / window_end | int / string | h / ISO 8601 UTC | A janela conforme resolvida pelo servidor |
updated_at | string | ISO 8601 UTC | Último bucket usado |
long_liq_usd = posições compradas liquidadas (o preço caiu); short_liq_usd = vendidas liquidadas (o preço subiu).
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "hours must be between 1 and 168"} / {"error": "top_n must be between 1 and 50"} | Parâmetro fora do intervalo |
200 com a mesma estrutura e todos os valores null, buckets: 0 — nunca uma tabela de zeros. Verifique total.total_liq_usd antes de usar os números./liquidation/get_coin; um sinal normalizado com histórico longo está em /liquidation/get_alpha./liquidation/get_coin usa em windows["24"]./long_short_ratio/get_table Todas as moedas coletadas × todas as fontes de ratio long/short, no momento atual. Dez fontes: Binance, OKX e Gate.io publicam três tipos cada — todas as contas, contas de top traders, posições de top traders — e a Bybit publica apenas contas. As linhas são ordenadas pelo nocional de open interest da Binance. Apenas as moedas que correspondem a uma entrada na lista de tokens da Blave são listadas; a resposta com chave de API é a tabela completa (full: true), e a versão anônima do Studio traz apenas as linhas da sua whitelist de 30 moedas.
Nenhum.
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"}Início da coleta (primeiro bucket armazenado, medido no BTC em 2026-09-22)
| Chave da fonte | Coletando 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 as fontes já são mais antigas do que os 7 dias que este dataset fornece, então nenhuma delas limita uma consulta — as datas só importam se lhe disserem que uma fonte "não tem histórico".
{"data": {"coins", "sources", "summary", "tokens_shown", "tokens_total", "full", "updated_at"}}.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
coins[] | object[] | — | Uma linha por moeda: token, token_id, mais um valor por chave de fonte |
coins[].<source key> | float / null | razão | Contas (ou posições) compradas ÷ vendidas. null = essa exchange não tem esse feed para a moeda. Participação comprada = r / (1 + r) — a API não a calcula previamente |
sources[] | object[] | — | Os dez feeds, na ordem das colunas. Leia este campo, nunca uma lista de chaves fixa no código |
sources[].key | string | — | <exchange>_<type>, p. ex. binance_top_position — a chave usada em coins[] |
sources[].exchange / .type | string | — | binance / okx / gate / bybit; account / top_account / top_position |
sources[].last_at | string | ISO 8601 UTC | Amostra mais nova desse feed |
sources[].stale | bool | — | A amostra mais nova desse feed tem mais de 1 hora (medida em relação a agora). O updated_at de nível superior é o da fonte mais nova e não diz nada sobre nenhuma fonte isolada — avalie uma fonte pelo seu próprio last_at / stale |
summary.binance_tokens / .binance_long_majority | int | — | Moedas com um ratio de contas da Binance / dessas, quantas estão acima de 1. Calculado sobre a tabela inteira, não sobre as linhas exibidas |
tokens_shown / tokens_total | int | — | Linhas retornadas / linhas na tabela. Iguais com uma chave de API |
full | bool | — | true com uma chave de API; false na versão anônima do Studio |
updated_at | string | ISO 8601 UTC | Bucket mais novo entre as fontes |
"Top trader" é uma população diferente em cada exchange — não compare os níveis entre exchanges.
| Exchange | Quem conta 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 | Nunca publicado — a documentação apenas nomeia os campos |
Portanto, binance_top_account acima de okx_top_account não diz nada sobre em qual exchange os grandes traders estão mais comprados. Compare cada fonte com o seu próprio histórico.
| Status | Corpo | Quando |
|---|---|---|
| 503 | {"error": "long short ratio data unavailable"} | Sem snapshot recente — tente novamente mais tarde; nunca leia isso como um mercado vazio |
/long_short_ratio/get_coin (7 dias) — não há endpoint de histórico longo para este dataset./long_short_ratio/get_coin Uma moeda, todas as dez fontes: o valor de 5 minutos mais recente de cada uma, uma série horária de 7 dias por fonte e o fechamento do perpétuo da Binance na mesma janela.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Moeda. O sufixo de cotação é removido; o symbol da resposta é o nome normalizado da moeda | 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 | Unidade | Descrição |
|---|---|---|---|
latest.<source key> | object / null | — | {value, ts} — a amostra de 5 minutos mais nova dessa fonte; null quando a fonte não lista a moeda |
series.bucket_seconds / .days | int | s / d | 3600 / 7 |
series.timestamp | int[] | epoch s | 168 slots, do mais antigo → para o mais recente, um por hora |
series.<source key> | float[] / null | razão | Última amostra de cada hora; null para uma hora sem amostra. O campo inteiro é um único null (não um array) para uma fonte que não lista a moeda |
series.price | float[] / null | USD | Fechamento do perpétuo da Binance na mesma janela. Um único null (com price_symbol / price_multiplier também null) quando a moeda não tem perpétuo na Binance |
series.price_symbol / .price_multiplier | string / int | — | De qual perpétuo veio o preço e o seu multiplicador de contrato (1000PEPEUSDT → 1000; price ÷ price_multiplier = preço por moeda) |
series.provisional_from | int / null | epoch s | Primeiro slot que ainda pode mudar (as fontes finalizam com até ~10 min de atraso); null quando nenhuma fonte tem dados |
sources[] | object[] | — | A lista completa de fontes, com os mesmos campos da tabela mais listed |
sources[].listed | bool | — | false = essa exchange não tem esse feed para esta moeda; suas entradas em latest e series são null |
symbol / token_id / updated_at | — | — | Como na tabela |
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} | symbol ausente, em branco, com mais de 32 caracteres, ou sem nada restante depois que o sufixo de cotação é removido |
| 404 | {"error": "<SYMBOL> is not a collected symbol"} | Nenhuma fonte coleta a moeda — uma resposta, não uma falha transitória |
| 503 | {"error": "long short ratio data unavailable"} | Uma fonte listada não pôde ser lida. null sempre significa apenas "essa exchange não lista a moeda" |
/long_short_ratio/get_table vale aqui também.start_date / end_date./studio/charts/...) servem o mesmo payload, do mesmo construtor, sem chave, e foi delas que estes exemplos foram tirados. Elas não substituem os endpoints com chave de API: as tabelas são cortadas em 30 moedas (full: false), e uma moeda fora da whitelist do Studio responde 403 {"error_code": "ERR001", ..., "anon_whitelist": [...]} em vez de dados. Os endpoints com chave de API documentados aqui não têm whitelist nem corte de linhas./oi_imbalance/get_table Todas as moedas coletadas × cinco exchanges, em nocional USD. Base: apenas perpétuos com margem em USDT, nocional em USD, um lado. Uma exchange que reporta os dois lados é dividida pela metade (exchanges[].side_factor, Gate.io = 0.5). Como todo valor já é nocional em USD, os contratos com multiplicador (1000PEPE e similares) se somam entre exchanges sem reescala.
Nenhum.
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"}Início da coleta (primeiro bucket armazenado, medido no BTC em 2026-09-22)
| Exchange | Coletando desde |
|---|---|
binance | 2021-12-01 |
bingx | 2025-04-15 |
gate | 2026-08-12 |
okx | 2026-09-21 |
bybit | 2026-09-21 |
OKX e Bybit são o motivo de n_full_7d ser 3 de 5 e de o chg_24h delas ainda ser null em 2026-09-22 — leia exchanges[].since / full_7d em vez destas datas, que ficam desatualizadas.
{"data": {"coins", "exchanges", "total", "summary", "tokens_shown", "tokens_total", "full", "updated_at"}}.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
coins[].token / .token_id | string / int | — | Moeda |
coins[].oi_total | float | USD | Somado entre as cinco exchanges |
coins[].chg_1h / .chg_4h / .chg_24h | float / null | fração | Variação decimal (0.0675 = +6.75 %). Cada janela conta apenas as exchanges que têm uma linha de base no início dessa janela, com numerador e denominador sobre o mesmo conjunto; null quando nenhuma tem |
coins[].market_cap | float / null | USD | Capitalização de mercado; null quando não há uma utilizável |
coins[].oi_mcap | float / null | razão | oi_total ÷ market_cap; null quando o token não tem capitalização de mercado |
coins[].by_exchange | object | — | {exchange: {oi, chg_1h, chg_4h, chg_24h}}, uma chave por exchange; null quando a moeda não é listada lá. Um null em uma janela significa que essa exchange não tinha linha de base tão antiga — um feed mais novo do que a janela |
exchanges[] | object[] | — | binance, okx, bingx, bybit, gate — oi do mercado inteiro, side_factor, since, full_7d, last_at, stale |
exchanges[].since / .full_7d | string / bool | data | O primeiro dia do feed quando ele tem menos de 7 dias de histórico (full_7d: false); caso contrário, null / true. Apenas informativo nesta tabela (ela não tem janela de 7 dias); em /oi_imbalance/get_coin, um feed assim não tem linha de base de 7 d e fica fora de series.total |
total | object | — | oi, chg_1h/4h/24h, n_exchanges, n_full_7d do mercado inteiro |
summary.oi_mcap_leader / _value | string / float | — | Maior OI ÷ capitalização de mercado entre as 100 maiores moedas por OI |
tokens_shown / tokens_total / full / updated_at | — | — | Como na tabela de ratio long/short |
Não é o mesmo número do indicador OI 失衡. /oi_imbalance/get_overview_data (e o alpha oi_imbalance por trás das condições do Screener e dos alertas) é um agregado de três exchanges — Binance + OKX + BingX. Esta tabela é de cinco exchanges, na base descrita acima. Os dois valores de oi_total diferem, então um limiar ajustado em um não vale para o outro.
| Status | Corpo | Quando |
|---|---|---|
| 503 | {"error": "open interest data unavailable"} | O job não tem resultado recente (ausente ou com mais de uma hora) — nunca uma tabela de zeros |
chg_24h: null em OKX / Bybit na captura acima é a regra do feed novo, não uma lacuna no mercado: as duas começaram em 2026-09-21, então ainda não tinham linha de base de 24 h./oi_imbalance/get_coin; o histórico com extensão para backtest de uma moeda em uma exchange está em /oi_imbalance/get_history./oi_imbalance/get_coin O open interest de uma moeda por exchange, na mesma base da tabela: valor atual e participação, quatro janelas de variação com as exchanges contadas em cada uma, e uma linha de total horário de 7 dias.
symbol, exatamente como em /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 | Unidade | Descrição |
|---|---|---|---|
exchanges[] | object[] | — | A lista completa das 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 = a moeda não é listada lá; seus valores são null |
oi_total / market_cap / oi_mcap | float | USD / razão | Como na tabela |
oi_mcap_rank / tokens_total | int / null | — | Posição por oi_mcap na última rodada do job da tabela; null quando esse job não tem resultado recente |
windows.<1h|4h|24h|7d>.chg / .chg_usd | float / null | fração / USD | Variação do total das exchanges contadas |
windows.<w>.exchanges | string[] | — | Quais exchanges foram contadas nessa janela — um feed novo fica ausente, então 24 h / 7 d podem contar menos exchanges do que 1 h |
series.timestamp | int[] | epoch s | 168 slots horários, do mais antigo → para o mais recente |
series.total | float[] / null | USD | OI total por slot — apenas as series.total_exchanges (os feeds full_7d) entram nesta linha, então ela não é comparável em nível com oi_total. Um slot é null quando alguma dessas exchanges não tem amostra naquela hora; o campo inteiro é null quando nenhuma exchange é full_7d para a moeda |
series.total_exchanges | string[] | — | Quais exchanges a linha soma |
series.price / .price_symbol / .price_multiplier / .provisional_from | — | — | Como em /long_short_ratio/get_coin |
400 / 404 / 503 exatamente como em /long_short_ratio/get_coin, com {"error": "open interest data unavailable"} no 503.
windows["1h"]["exchanges"] ter cinco entradas enquanto windows["24h"] tem três é a regra do feed novo, não dados faltando — leia essa lista antes de comparar janelas./oi_imbalance/get_table vale também para este oi_total./oi_imbalance/get_history (uma exchange, em moedas em vez de USD — uma base diferente da de oi_total)./oi_imbalance/get_history O open interest de uma moeda em uma exchange, como uma série temporal que pode ser usada em backtest — a mesma base do card 未平倉量 do dashboard do Studio. alpha é o open interest de um lado, em moedas, não em USD. Os contratos com multiplicador são convertidos de volta para moedas (1000PEPE retorna uma quantidade de PEPE). Cada bucket é a última leitura do seu período — o open interest é um estoque, nunca é somado.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
symbolstring · queryObrigatório | Moeda, mesma regra de /oi_imbalance/get_coin | BTC, BTCUSDT, btc | |
periodstring · queryObrigatório | Tamanho do bucket. 1w resulta em 400 (unidade não suportada); 1m é lido como 1min, então resulta em 400 por estar abaixo de 5min | {n}min / {n}h / {n}d, mínimo 5min (p. ex. 5min, 1h, 4h, 1d) | |
start_datestring · query | Primeiro dia, inclusive | YYYY-MM-DD (UTC) | end_date − 365 dias |
end_datestring · query | Último dia, inclusive | YYYY-MM-DD (UTC) | hoje |
oi_exchangestring · query | De qual exchange ler o open interest | binance, bybit, gate (sem diferenciar maiúsculas de minúsculas) | binance |
Janela por requisição: no máximo 365 dias; um intervalo maior é limitado silenciosamente (start_date é movido para end_date − 365 dias, sem erro), como em /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, do mais antigo → para o mais recente.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
timestamp | float[] | Segundos Unix (UTC) | Início do bucket |
alpha | float[] | moedas | Open interest de um lado em oi_exchange, última leitura do bucket |
close | float[] | USDT | Preço do perpétuo USDT-M da Binance — por unidade de contrato, ou seja, por 1000 moedas no caso de 1000PEPE |
exchanges | string[] | — | A exchange efetivamente lida, p. ex. ["binance"] |
alpha × close não é o open interest em USD em um contrato com multiplicador. Nesse caso, close é o preço por unidade de contrato (por 1000 moedas no caso de 1000PEPE), enquanto alpha está em moedas unitárias — divida close pelo multiplicador primeiro. Para contratos sem multiplicador, como BTC, alpha × close ≈ open interest em USD.
Gate.io: envie sempre start_date ≥ 2026-03-28 — a janela padrão (end_date − 365 dias) começa antes do histórico da Gate e resulta em 400.
Não é o mesmo número de /oi_imbalance/get_table / get_coin (cinco exchanges somadas, em USD) nem o indicador OI 失衡 (/oi_imbalance/get_overview_data).
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "symbol is required"} / {"error": "period is required"} | Ausente (aqui um 400, não o 403 dos endpoints de indicadores) |
| 400 | {"error": "period must be at least 5min, in min / h / d units"} | period abaixo de 5min (incluindo 1m, lido como 1min) ou em uma unidade que não seja min / h / d (1w) |
| 400 | {"error": "invalid date format, expected YYYY-MM-DD"} | start_date / end_date malformados |
| 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 fora da lista |
| 400 | {"error": "no <exchange> open interest for <TOKEN> at start_date; this exchange's history may start later — try a later start_date"} | A janela começa antes do histórico dessa exchange (veja Dados desde). Sem start_date, oi_exchange=gate sempre cai neste erro até que o seu histórico passe de 365 dias (≈ 2027-03) — para a Gate, envie sempre start_date ≥ 2026-03-28 |
| 404 | {"error": "<TOKEN> is not a collected symbol on <exchange>"} | Essa exchange não lista a moeda, a moeda não tem perpétuo na Binance, ou foi deslistada — uma resposta, não uma falha transitória |
| 503 | {"error": "<exchange> open interest data unavailable for <TOKEN>"} | Os dados não puderam ser lidos agora — tente novamente |
close é o preço do perpétuo USDT-M da Binance.200 com arrays vazios significa que não há bucket nessa janela (p. ex. a moeda foi listada depois dela) — não guarde isso em cache como um "sem dados" permanente.end_date é hoje./taker_intensity/get_cvd_table Volume financeiro de compra e venda taker (ordens a mercado) por moeda, em USD, em três exchanges: Binance, a partir do volume de cotação de compra taker do kline de 5 minutos (venda = o total da barra menos ele); OKX, a partir do seu volume taker em USD; Gate.io, a partir dos contratos taker × o multiplicador e o preço de marcação da mesma linha. Apenas perpétuos — sem spot — e agregado a partir de barras de 5 minutos, não de negócio a negócio. É usado o volume financeiro reportado por cada exchange; o volume nunca é multiplicado por um preço emprestado de outra exchange.
Nenhum.
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"}Início da coleta (primeiro bucket armazenado, medido no BTC em 2026-09-22)
| Exchange | Campo de origem | Coletando desde |
|---|---|---|
binance | kline de 5 minutos (volume financeiro de compra taker) | 2020-01-01 |
gate | contract_stats | 2026-08-12 |
okx | taker_volume_usd | 2026-09-21 |
A OKX tem ainda o limite de a exchange manter apenas 5 dias, então fica full_7d: false até uma semana depois dessa data. Esta tabela não traz since / full_7d (ela não tem janela de 7 dias) — leia-os por moeda no exchanges[] de /taker_intensity/get_cvd_coin, não a partir destas datas.
{"data": {"coins", "exchanges", "total", "tokens_shown", "tokens_total", "full", "updated_at"}}.
| Campo | Tipo | Unidade | Descrição |
|---|---|---|---|
coins[].token / .token_id | string / int | — | Moeda |
coins[].buy_24h / .sell_24h | float / null | USD | Volume financeiro de compra / venda taker nas 24 h móveis, somado entre as exchanges não desatualizadas da moeda; null quando todas estão desatualizadas |
coins[].net_1h / .net_4h / .net_24h | float / null | USD | buy − sell em cada janela móvel (mesma regra de null) |
coins[].by_exchange | object | — | {exchange: {buy_24h, sell_24h, net_1h, net_4h, net_24h}}, uma chave por exchange; null quando a moeda não é listada lá ou quando os dados dessa exchange para ela estão desatualizados |
exchanges[] | object[] | — | binance, okx, gate — buy_24h, sell_24h, net_24h do mercado inteiro, last_at, stale |
exchanges[].stale | bool | — | A última barra desse feed tem mais de uma hora: suas janelas voltam null e ele fica fora dos totais, em vez de contribuir com uma soma que, silenciosamente, cobre menos do que a janela |
total | object | USD | buy_24h, sell_24h, net_24h do mercado inteiro, sobre as exchanges com dados recentes |
tokens_shown / tokens_total / full / updated_at | — | — | Como nas outras tabelas de dados brutos |
| Status | Corpo | Quando |
|---|---|---|
| 503 | {"error": "cvd data unavailable"} | O job não tem resultado recente — nunca zeros |
taker_intensity (/taker_intensity/get_alpha), que é um sinal normalizado, do tipo z-score, com anos de histórico. Este é o volume financeiro bruto em USD, agora.net_24h não é um dia civil./taker_intensity/get_cvd_coin Compra / venda / líquido taker de uma moeda por exchange (mesma base da tabela), mais um líquido horário de 7 dias e o seu acumulado corrente — a própria linha do CVD.
symbol, exatamente como em /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 | Unidade | Descrição |
|---|---|---|---|
windows.<1h|4h|24h|7d> | object | USD | {buy, sell, net} somados sobre as exchanges com dados recentes |
exchanges[] | object[] | — | A lista completa: key, listed, windows (as mesmas quatro, por exchange), since, full_7d, last_at, stale |
exchanges[].full_7d | bool | — | false = menos de 7 dias de histórico para esta moeda lá: sua janela de 7 d é null e ela é excluída do total de 7 d e da série. A OKX mantém apenas 5 dias, então fica false até uma semana depois do início do feed |
series.timestamp | int[] | epoch s | 168 slots horários, do mais antigo → para o mais recente |
series.net | float[] | USD | Fluxo taker líquido por hora cheia, somado sobre series.exchanges; null para uma hora sem dados. Quando series.exchanges está vazio, todo slot é null e cvd fica parado em 0 — nesse caso, a linha não traz informação |
series.cvd | float[] | USD | Total acumulado de net; cvd[0] = 0 — a linha é uma forma, não um nível absoluto |
series.exchanges | string[] | — | Quais exchanges a linha soma |
series.price / .price_symbol / .price_multiplier / .provisional_from | — | — | Como em /long_short_ratio/get_coin |
400 / 404 / 503 exatamente como em /long_short_ratio/get_coin, com {"error": "cvd data unavailable"} no 503.
series.exchanges ser mais curto do que exchanges[] é a regra de full_7d — compare a série com ela mesma, não com windows["24h"], que conta mais exchanges.cvd[0] = 0 por construção: apenas a inclinação e os pontos de virada trazem informação./cme_cot/get_latest A linha semanal mais recente da CFTC para cada um dos quatro futuros de cripto da CME, mais a soma de standard + micro em moedas por ativo. Mesma estrutura de uma linha de /cme_cot/get_history, sem price.
Nenhum.
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 | Descrição |
|---|---|
contracts[] | Um por contrato: key (btc, micro_btc, eth, micro_eth), name, cftc_code, coin, coin_per_contract (5 / 0.1 / 50 / 0.1), latest (uma linha, veja get_history; null se o contrato não tem linhas) |
combined[] | btc_combined, eth_combined: name, coin, components, units, micro_since, note, latest (uma linha combinada, em moedas) |
report | futures_only |
units | Unidade das posições em contracts[].latest: contratos (× coin_per_contract para obter moedas) |
source | Linha de atribuição à CFTC — exiba-a com qualquer número que você publicar |
source_updated | Quando a CFTC atualizou o dataset pela última vez |
fetched_at | Quando a Blave o buscou (UTC) |
stale | true = a CFTC estava inacessível e a última cópia armazenada é servida |
| Status | Corpo | Quando |
|---|---|---|
| 503 | {"error": "CFTC data unavailable. Please retry shortly."} | CFTC inacessível e sem cópia armazenada |
/cme_cot/get_history./cme_cot/get_history O posicionamento semanal de um contrato por categoria de trader. As linhas são datadas pela data do relatório — o dia a que as posições se referem, normalmente uma terça-feira (uma segunda-feira quando a terça é feriado nos EUA). Os dados se tornaram públicos depois: normalmente na sexta-feira da mesma semana, às 15:30 ET; um feriado federal entre quarta e sexta-feira adia a divulgação para o dia útil seguinte, e uma paralisação do governo a atrasa em semanas (os relatórios de 2018-12-24 … 2019-02-26 saíram em 2019-02-01 … 03-05; os relatórios de 2025-09-30 … 2026-01-20, em 2025-11-19 … 2026-01-23 — CFTC Releases 7864-19 e 9138-25). Um backtest não deve agir sobre uma linha antes da sua divulgação.
| Nome | Descrição | Valores permitidos | Padrão |
|---|---|---|---|
contractstring · query | Contratos individuais são em contratos; *_combined = standard + micro somados em moedas | btc, micro_btc, eth, micro_eth, btc_combined, eth_combined (sem diferenciar maiúsculas de minúsculas) | btc |
start_datestring · query | Primeira data de relatório, inclusive. Omitido = apenas o último ano — passe uma data antiga (p. ex. 2018-01-01) para obter o histórico completo | YYYY-MM-DD | hoje (UTC) − 365 dias |
end_datestring · query | Última data de relatório, inclusive | YYYY-MM-DD | mais recente |
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"}}, linhas da mais antiga → para a mais recente.
contract: key, name, coin, e cftc_code + coin_per_contract (contrato individual) ou components + micro_since + note (combinado).
Cada linha:
| Campo | Tipo | Descrição |
|---|---|---|
date | string | Data do relatório — normalmente uma terça-feira; uma segunda-feira quando a terça é feriado nos EUA |
open_interest / open_interest_change | number | Open interest total e a sua variação semanal |
tff | object | Grupos dealer, asset_manager, leveraged_funds, other_reportables, nonreportable |
legacy | object | null | Grupos non_commercial, commercial, nonreportable; null se a CFTC não tem linha Legacy para aquela semana |
price | float | null | Fechamento diário UTC do spot BTCUSDT / ETHUSDT da Binance na data do relatório; null quando indisponível |
included | string[] | Apenas contratos combinados: quais contratos esta linha soma (["btc"] antes de micro_since) |
Cada grupo: long, short, spread (não existe para nonreportable / commercial), net (= long − short), e long_change, short_change, spread_change, net_change. Unidades: contratos para um contrato individual, moedas para um combinado. Os campos *_change são os números de variação semanal da própria CFTC, não diferenças entre linhas — a CFTC pula semanas (p. ex. paralisações do governo), então nunca calcule você mesmo a diferença entre linhas.
| Status | Corpo | Quando |
|---|---|---|
| 400 | {"error": "contract must be one of btc, micro_btc, eth, micro_eth, btc_combined, eth_combined"} | Contrato desconhecido |
| 400 | {"error": "Invalid start_date, expected YYYY-MM-DD"} (ou end_date) / {"error": "start_date must not be after end_date"} | Data inválida / intervalo invertido |
| 503 | {"error": "CFTC data unavailable. Please retry shortly."} | CFTC inacessível e sem cópia armazenada |
*_combined tem uma quebra em micro_since: na semana em que o micro entra, os totais dão um salto e o *_change daquela semana inclui toda a primeira posição do micro. Comece um backtest combinado depois de micro_since, ou use o contrato individual btc / eth.source junto a qualquer número que você exibir. Não é endossado pela CFTC.btc 2018-04-10, micro_btc 2021-05-04, eth 2021-04-06, micro_eth 2021-12-14. Os futuros de BTC da própria CME entram no COT em 2018-04-10, não no lançamento, em 2017-12.price é o fechamento diário UTC do spot da Binance.