Divisões de Apostas
Obtenha divisões públicas de apostas (handle % e bet %) do DraftKings, Circa Sports e BetMGM.
GET /api/v1/splitsAutenticação
Requer API key. Requer tier Pro ($229/mês) ou superior.
O que são divisões de apostas?
Handle % é a porcentagem do dinheiro total apostado em cada lado. Bet % é a porcentagem dos tickets totais (apostas realizadas) em cada lado.
A diferença entre bet % e handle % revela o dinheiro inteligente (sharp money). Se 30% dos tickets carregam 60% do dinheiro, apostadores sharp estão nesse lado.
Fontes de Dados
| Fonte | Tipo | O que traz | Frequência de Atualização |
|---|---|---|---|
| DraftKings | Casa recreativa (~35% de participação no mercado dos EUA) | Handle % e bet % | A cada 5 minutos |
| Circa Sports | Casa amigável a sharps (atrai profissionais) | Handle % e bet % | A cada 5 minutos |
| BetMGM | Casa recreativa — derivada do seu próprio campo de porcentagem de apostas públicas | Somente bet % — os valores de handle_pct são null | Intermitente |
Comparar as divisões do DraftKings (recreativo) vs Circa (sharp) revela onde o dinheiro profissional diverge do público.
A cobertura é fixa nessas três casas. Ela não cresce com a cota de casas de apostas do seu plano — selecionar mais casas, ou subir de plano, não acrescenta fontes de divisões. Nenhuma outra casa publica divisões de apostas e não há novas previstas. Como a BetMGM fornece apenas uma porcentagem de bilhetes, a diferença entre bet % e handle % que revela o dinheiro inteligente só pode ser calculada nas linhas de DraftKings e Circa. O histórico inclui amostras de DraftKings, Circa e BetMGM capturadas durante a janela de retenção de 48 horas. A BetMGM publica apenas porcentagens de tickets; as porcentagens de dinheiro continuam null.
consensus é um rótulo, não uma casa de apostas. Quando todas as fontes que cobrem um evento publicam números idênticos, essas linhas são mescladas em uma única com "sportsbook": "consensus". A API aplica esse rótulo de forma sintética — ele nunca aparece em /api/v1/sportsbooks, embora /splits?sportsbook=consensus filtre por ele. Linhas mescladas não são retornadas por um filtro sportsbook=draftkings.
Parâmetros de Consulta
| Parâmetro | Tipo | Descrição |
|---|---|---|
sport | string | Filtrar por esporte (separado por vírgula). Exemplo: basketball |
league | string | Filtrar por liga (separado por vírgula). Exemplo: nba,ncaab |
sportsbook | string | Filtrar pela fonte das divisões. Exemplo: draftkings,circa. Também aceita o valor sintético consensus. |
event_id | string | Filtrar pelo ID canônico do evento (separado por vírgula) |
market | string | Filtrar para eventos que possuem um determinado mercado de divisão (separado por vírgula). Um ou mais de spread, total, moneyline. |
limit | integer | Máximo de resultados (padrão 100, máximo 200) |
offset | integer | Deslocamento de paginação (padrão 0) |
Resposta
{
"data": [
{
"event_id": "mlb_guardians_orioles_2026-04-16",
"sport": "baseball",
"league": "mlb",
"sportsbook": "draftkings",
"away_team": "Baltimore Orioles",
"home_team": "Cleveland Guardians",
"spread": {
"away_odds": -1.5,
"home_odds": 1.5,
"handle_pct": { "away": 0.22, "home": 0.78 },
"bets_pct": { "away": 0.20, "home": 0.80 }
},
"total": {
"line": 8,
"handle_pct": { "over": 0.53, "under": 0.47 },
"bets_pct": { "over": 0.57, "under": 0.43 }
},
"moneyline": {
"away_odds": 104,
"home_odds": -126,
"handle_pct": { "away": 0.28, "home": 0.72 },
"bets_pct": { "away": 0.33, "home": 0.67 }
},
"fetched_at": "2026-04-16T19:25:28.363825+00:00",
"available_metrics": ["bets_pct", "handle_pct"]
}
],
"pagination": {
"limit": 100,
"offset": 0,
"count": 1,
"total": 41,
"has_more": false,
"next_offset": null
},
"updated_at": "2026-04-16T19:29:38.920698424Z"
}Na resposta de /splits, o spread carrega valores de linha dentro das chaves away_odds/home_odds (ex.: -1.5 / +1.5) — a nomenclatura do campo é uma inconsistência conhecida. O endpoint histórico utiliza away_line/home_line para os mesmos dados.
Campos da Resposta
| Campo | Tipo | Descrição |
|---|---|---|
event_id | string | ID canônico do evento — use isto para juntar com dados de /odds |
sport | string | Nome do esporte normalizado pelo Atlas |
league | string | Nome da liga normalizado pelo Atlas |
sportsbook | string | Casa de apostas fonte dos dados de divisões (draftkings, circa, betmgm ou o valor sintético consensus) |
away_team | string | Nome do time visitante |
home_team | string | Nome do time da casa |
spread.away_odds | number | Valor da linha do spread visitante (ex.: -1.5) — veja o aviso acima |
spread.home_odds | number | Valor da linha do spread da casa (ex.: +1.5) |
spread.handle_pct | object | % do dinheiro em cada lado (away, home; 0.0-1.0) |
spread.bets_pct | object | % de tickets em cada lado (away, home; 0.0-1.0) |
total.line | number | Linha de over/under (ex.: 225.5) |
total.handle_pct | object | % do dinheiro (over, under; 0.0-1.0) |
total.bets_pct | object | % de tickets (over, under; 0.0-1.0) |
moneyline.away_odds | number | Odds da moneyline visitante (formato americano) |
moneyline.home_odds | number | Odds da moneyline da casa (formato americano) |
moneyline.handle_pct | object | % do dinheiro em cada lado (away, home; 0.0-1.0) |
moneyline.bets_pct | object | % de tickets em cada lado (away, home; 0.0-1.0) |
fetched_at | string | Timestamp ISO 8601 de quando os dados foram coletados pela última vez |
available_metrics | array | Quais métricas de divisão a casa de apostas desta linha chega a publicar — bets_pct, handle_pct ou ambas, sempre nessa ordem. É uma afirmação sobre a casa, não sobre os valores desta linha. Omitido quando a casa não está declarada — veja abaixo. |
Quais valores podem ser null — e quais chaves podem estar ausentes. As chaves de porcentagem e de odds acima estão sempre presentes, embora algumas tragam null em vez de um número. Duas chaves podem estar ausentes em vez de trazer null: total.line é omitida em um evento para o qual a casa não publicou um total, e available_metrics é omitido para uma casa que a SharpAPI não declarou — leia ambas com um valor padrão em vez de presumir que a chave existe.
handle_pct.away / .home (e .over / .under nos totais) são null em toda linha betmgm, porque a BetMGM publica apenas uma porcentagem de tickets — não há valor de handle a informar. Os valores de bets_pct são null quando a fonte ainda não publicou uma porcentagem para aquele mercado; o feed da BetMGM é intermitente, então é ali que isso aparece. moneyline.away_odds / .home_odds são null quando uma casa retirou a moneyline de um evento mas continua publicando suas porcentagens de splits — isso também ocorre em linhas da DraftKings e da Circa, não só da BetMGM. A especificação OpenAPI declara tudo isso como nullable, então um cliente gerado vai aceitá-los.
O campo event_id usa o mesmo formato de ID canônico que o endpoint /odds, então você pode juntar divisões com dados de odds diretamente.
Por exemplo, busque odds para um jogo específico e compare com suas divisões:
GET /api/v1/odds?event_id=nba_thunder_timberwolves_2026-03-15
GET /api/v1/splits?event_id=nba_thunder_timberwolves_2026-03-15/odds não inclui bet % público por linha.
Divisões de apostas (% de dinheiro e % de tickets) estão disponíveis apenas neste endpoint (/splits) e na sua versão histórica (/splits/history). O campo public_bet_pct não existe nas linhas de /odds.
Como ler available_metrics
Uma linha de divisões pode carregar available_metrics, um array que nomeia as métricas de divisão que a casa de apostas daquela linha chega a publicar. Ele descreve a casa, não a linha: uma casa que publica o percentual de dinheiro continua listando handle_pct mesmo quando os membros handle_pct daquela linha são null.
Apenas dois nomes podem aparecer, sempre nesta ordem, e cada um é exatamente uma chave dentro dos objetos spread, total e moneyline — portanto um nome aqui aponta para um campo que você pode consultar:
bets_pct— percentual de tickets (apostas feitas), 0.0-1.0handle_pct— percentual de dinheiro (handle), 0.0-1.0
O campo é omitido por completo quando a SharpAPI não declarou o que uma casa publica. Ausente significa não declarado — nunca não publica nada.
Leia a lista junto com o valor. Tomando handle_pct como exemplo:
available_metrics | Membros de handle_pct | O que significa |
|---|---|---|
presente, lista handle_pct | números | A casa publica o percentual de dinheiro e nós o temos. |
presente, lista handle_pct | null | A casa publica o percentual de dinheiro e ele está faltando do nosso lado — não é uma limitação da casa. |
presente, não lista handle_pct | null | A casa não publica o percentual de dinheiro. Nada está quebrado. |
presente, não lista handle_pct | números | Não deveria ocorrer; trate como uma declaração desatualizada e confie no valor. |
| ausente | números ou null | Nada é declarado sobre essa casa. Não deduza em nenhuma direção — leia os valores por si mesmos e não registre a casa como não publicando nada. |
Uma linha consensus carrega a interseção. Uma linha mesclada com "sportsbook": "consensus" agrupa várias casas, então sua afirmação precisa valer para cada uma delas: ela lista apenas as métricas que todas as casas contribuintes declaram e omite o campo por completo se alguma delas não estiver declarada.
Exemplos
Todas as Divisões NBA
curl "https://api.sharpapi.io/api/v1/splits?league=nba" \
-H "X-API-Key: YOUR_API_KEY"Histórico de Divisões
Acompanhe como as divisões se alteram ao longo do tempo para um evento específico.
GET /api/v1/splits/history?event_id={event_id}Parâmetros de Consulta
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
event_id | string | Sim | ID canônico do evento |
sportsbook | string | Não | Filtra por casa (separadas por vírgulas), antes da paginação. |
start_time | string | Não | Limite inferior. RFC 3339 (2026-04-16T13:00:00Z) ou segundos Unix (1776344602). |
end_time | string | Não | Limite superior, mesmos formatos. |
limit | integer | Não | Máximo de entradas (padrão 100, máximo 200). |
cursor | string | Não | Token de continuação de meta.next_cursor; mantenha os filtros de evento, casa e tempo. |
A retenção é de apenas 48 horas. Não há arquivo de longo prazo nem recuperação de amostras fora dessa janela. Siga meta.next_cursor enquanto meta.has_more for true. meta.total, books, oldest e newest descrevem a página atual; meta.limit é o tamanho efetivo (padrão 100, máximo 200; valores maiores são limitados a 200). Use o mesmo end_time em todas as páginas para um intervalo fixo. Datas inválidas ou cursores incompatíveis retornam 400; falhas temporárias do armazenamento retornam 503.
Resposta
As entradas são ordenadas das mais antigas para as mais recentes. Este endpoint emite o envelope de sucesso (success/data/meta) — distinto de /splits que emite data/pagination/updated_at.
O payload do histórico utiliza book (não sportsbook) e o spread carrega away_line/home_line (não away_odds/home_odds). Ambas são inconsistências conhecidas vs /splits. Cada entrada também carrega available_metrics, com o mesmo significado de /splits: as métricas que a casa daquela entrada chega a publicar. É omitido para uma casa que a SharpAPI não declarou.
Os valores do histórico podem estar indisponíveis. As porcentagens podem ser null; a BetMGM nunca publica porcentagens de dinheiro. Linhas e odds podem estar ausentes ou ser null. Consulte available_metrics para saber quais métricas a casa publica e trate valores ausentes ou nulos em cada mercado.
{
"success": true,
"data": [
{
"available_metrics": ["bets_pct", "handle_pct"],
"book": "circa",
"ts": "2026-04-16T13:03:21.071966+00:00",
"timestamp": 1776344602.36,
"spread": {
"away_line": -1.5,
"home_line": 1.5,
"handle_pct": { "away": 0.37, "home": 0.63 },
"bets_pct": { "away": 0.27, "home": 0.73 }
},
"total": {
"line": 8,
"handle_pct": { "over": 0.43, "under": 0.57 },
"bets_pct": { "over": 0.55, "under": 0.45 }
},
"moneyline": {
"away_odds": 104,
"home_odds": -126,
"handle_pct": { "away": 0.35, "home": 0.65 },
"bets_pct": { "away": 0.35, "home": 0.65 }
}
}
],
"meta": {
"event_id": "mlb_guardians_orioles_2026-04-16",
"total": 1,
"books": ["circa"],
"limit": 100,
"has_more": false,
"next_cursor": "",
"oldest": "2026-04-16T13:03:22.360588312Z",
"newest": "2026-04-16T13:03:22.360588312Z",
"updated_at": "2026-04-16T19:28:50.525875452Z"
}
}Os dados são coletados a cada ~5 minutos e retidos por 48 horas através de um sorted set do Valkey (splits_history:{event_id}) pontuado pelo timestamp Unix.
Histórico Completo
curl "https://api.sharpapi.io/api/v1/splits/history?event_id=nba_thunder_timberwolves_2026-03-15" \
-H "X-API-Key: YOUR_API_KEY"Interpretando Divisões
| Sinal | O que significa |
|---|---|
| Bet % alto, Handle % baixo | Lado público — muitas apostas pequenas |
| Bet % baixo, Handle % alto | Lado sharp — menos apostas, porém maiores |
| DK e Circa concordam | Consenso de mercado — público e sharp alinhados |
| DK e Circa divergem | Divisão sharp-público — Circa (sharp) discorda do DK (público) |
As divisões vêm de apenas três casas — DraftKings e BetMGM (recreativas) e Circa (adjacente a sharps). Nenhuma casa verdadeiramente sharp publica divisões, e não há novas fontes previstas. Use as divisões como um sinal junto com a movimentação de linhas e análise de +EV, não isoladamente.