Closing Line Value (CLV)
Estatísticas agregadas de Closing Line Value para as previsões +EV avaliadas (graded) da SharpAPI. Para cada oportunidade +EV que o engine sinaliza, o sistema captura posteriormente a linha de fechamento da referência sharp e avalia o palpite contra ela — este endpoint serve essas avaliações, agregadas pela dimensão que você escolher (group_by), junto com os resultados realizados de vitória/derrota quando o resultado do jogo é conhecido.
GET /api/v1/historical/odds/clvTier Enterprise obrigatório. Os endpoints agregados /api/v1/historical/* são controlados pela feature history. Tiers inferiores recebem 403 tier_restricted. Se você está no Pro ou Sharp e quer dados de linha de fechamento, use Closing Odds — preços de fechamento brutos por evento, disponíveis no seu tier.
A URL mudou. Este endpoint era servido anteriormente em /api/v1/historical/clv. O caminho antigo ainda funciona, mas está descontinuado — as respostas nele carregam Deprecation: true, Sunset: Wed, 30 Sep 2026 00:00:00 GMT e um header Link: </api/v1/historical/odds/clv>; rel="successor-version". Migre para /api/v1/historical/odds/clv antes da data de sunset.
Alterado em 2026-09-19 — win_rate agora cobre todas as apostas liquidadas. Até esta versão, wins, losses e win_rate contavam apenas os palpites liquidados que também tinham uma linha de fechamento capturada. Agora contam todos os palpites liquidados, tendo ou não uma linha de fechamento capturada. Duas consequências: como liquidar uma aposta não exige uma linha de fechamento capturada, wins + losses excede rotineiramente total_graded, e a própria win_rate se move — no conjunto da série +EV recente ela fica cerca de dois pontos abaixo, embora um grupo específico possa se mover em qualquer direção. total_graded, avg_clv_percent e avg_ev_percent não mudam, e nenhum campo foi adicionado, removido ou renomeado. Se você usou a win_rate antiga como referência, refaça sua linha de base a partir desta data.
Como o CLV é calculado
Quando um evento passa de pré-partida para ao vivo, a plataforma captura o último preço pré-partida de cada book como a linha de fechamento daquele evento. O preço de fechamento da referência sharp (devig_book — tipicamente a Pinnacle) é devigado com o método Power para uma probabilidade de fechamento no-vig, e cada previsão avaliada recebe a pontuação:
CLV% = (closing_no_vig_prob × entry_decimal_odds − 1) × 100onde entry_decimal_odds é o preço no momento em que a SharpAPI sinalizou a oportunidade. CLV positivo significa que o preço sinalizado venceu o fechamento — você poderia ter apostado em odds melhores do que o valor justo final implícito pelo mercado.
Os dados são servidos a partir do armazenamento histórico em ClickHouse. As agregações são calculadas sobre previsões lógicas — snapshots de preço repetidos do mesmo palpite (mesmo evento, mercado, seleção, book, linha) são colapsados em uma única linha antes da contagem, de modo que um palpite reobservado em vários preços não é contado múltiplas vezes.
Parâmetros de Query
| Parâmetro | Tipo | Padrão | Descrição |
|---|---|---|---|
from | string | 7 dias atrás | Data inicial (YYYY-MM-DD ou ISO 8601). Limitada à janela de histórico do seu tier. |
to | string | hoje | Data final (YYYY-MM-DD ou ISO 8601). |
group_by | string | sportsbook | Dimensão de agregação. Uma de: sportsbook, sport, league, market, day, devig_book. |
sport | string | todos | Filtra por esporte(s), separados por vírgula (ex.: basketball,baseball). |
league | string | todas | Filtra por liga(s), separadas por vírgula (ex.: nba,mlb). |
sportsbook | string | todos | Filtra por sportsbook(s), separados por vírgula. |
devig_book | string | todas | Filtra pela referência sharp contra a qual o palpite foi precificado (ex.: pinnacle). |
Janela de histórico
Este endpoint é exclusivo do tier Enterprise, e a janela de histórico do Enterprise é ilimitada (meta.tier_window_days = "unlimited"). from assume 7 dias atrás quando omitido; não há limite superior imposto para quão longe você pode consultar no passado.
Filtre por devig_book=pinnacle para obter o sinal que importa. A validade do CLV é dominada pela referência sharp contra a qual o palpite foi precificado. O CLV referenciado na Pinnacle é a série preditiva; palpites precificados contra referências de fallback (ex.: bookmaker) carregam CLV estruturalmente negativo e não devem ser lidos como vantagem (edge). Agrupe por devig_book para ver a separação.
Exemplos de Requisições
cURL
# CLV por sportsbook nos últimos 7 dias
curl -X GET "https://api.sharpapi.io/api/v1/historical/odds/clv?group_by=sportsbook" \
-H "X-API-Key: YOUR_API_KEY"
# Apenas CLV referenciado na Pinnacle, agrupado por esporte
curl -X GET "https://api.sharpapi.io/api/v1/historical/odds/clv?devig_book=pinnacle&group_by=sport" \
-H "X-API-Key: YOUR_API_KEY"
# CLV dia a dia para palpites na DraftKings em um intervalo de datas
curl -X GET "https://api.sharpapi.io/api/v1/historical/odds/clv?sportsbook=draftkings&group_by=day&from=2026-06-01&to=2026-06-08" \
-H "X-API-Key: YOUR_API_KEY"Resposta
Sucesso (200)
{
"success": true,
"data": {
"date_range": {
"from": "2026-06-03T14:12:30.437",
"to": "2026-06-10T14:12:30.437"
},
"group_by": "sportsbook",
"groups": [
{
"group_key": "novig",
"total_graded": 1294,
"wins": 767,
"losses": 635,
"win_rate": 0.5470756062767475,
"avg_clv_percent": 0.673342797764432,
"avg_ev_percent": 1.613983921390446,
"total_predictions": 1555
},
{
"group_key": "prophetx",
"total_graded": 964,
"wins": 500,
"losses": 608,
"win_rate": 0.45126353790613716,
"avg_clv_percent": 0.07641414602522267,
"avg_ev_percent": 1.4343012769214647,
"total_predictions": 1331
}
]
},
"meta": {
"filters": {
"devig_book": null,
"group_by": "sportsbook",
"league": null,
"sport": null,
"sportsbook": null
},
"source": "clickhouse",
"tier_window_days": "unlimited",
"updated_at": "2026-06-10T14:12:58.75061216Z"
}
}Um array groups vazio é uma resposta válida quando não existem previsões avaliadas para os filtros e o intervalo de datas solicitados — não é um erro.
Três contagens diferentes — não misture denominadores. total_predictions conta cada palpite rastreado (incluindo os que nunca foram avaliados). total_graded conta palpites com uma nota de CLV (uma linha de fechamento foi capturada e comparada). wins + losses conta todos os palpites cujo resultado do jogo está liquidado, tendo ou não uma linha de fechamento capturada — e win_rate é calculado sobre essa população. As duas são independentes, não aninhadas: liquidar não exige linha de fechamento, e um palpite com nota de CLV pode ainda não ter liquidado. Nenhuma das duas é um subconjunto da outra, e wins + losses excede rotineiramente total_graded. Um grupo pode legitimamente exibir total_graded: 1294 ao lado de wins + losses: 1402. win_rate é null quando um grupo não tem apostas liquidadas.
Respostas de Erro
403 Tier Restricted
{
"error": {
"code": "tier_restricted",
"message": "This endpoint requires Enterprise tier or higher",
"docs": "https://sharpapi.io/pricing",
"tier": "pro",
"required_tier": "enterprise"
}
}400 Validation Error
{
"error": {
"code": "validation_error",
"message": "Invalid group_by. Must be one of: day, devig_book, league, market, sport, sportsbook"
}
}Campos da Resposta
Objeto data
| Campo | Tipo | Descrição |
|---|---|---|
date_range | object | Valores from/to efetivamente usados após o ajuste de tier |
group_by | string | A dimensão usada para agregação |
groups | array | Array de linhas de grupo |
Campos da linha de grupo
| Campo | Tipo | Descrição |
|---|---|---|
group_key | string | O identificador do grupo (nome do sportsbook, esporte, liga, tipo de mercado, data YYYY-MM-DD ou devig book) |
total_graded | integer | Previsões lógicas com nota de CLV (linha de fechamento capturada e comparada) |
wins | integer | Previsões cujo resultado do jogo liquidou como vitória. Contadas sobre todas as previsões liquidadas, não apenas as avaliadas por CLV |
losses | integer | Previsões cujo resultado do jogo liquidou como derrota. Contadas sobre todas as previsões liquidadas, não apenas as avaliadas por CLV |
win_rate | number | null | wins / (wins + losses). Calculado sobre todas as previsões liquidadas — uma população diferente da de total_graded, com a qual não compartilha denominador; null quando não há apostas liquidadas no grupo |
avg_clv_percent | number | null | CLV% médio entre as previsões avaliadas. Positivo = os preços sinalizados venceram o fechamento em média. null quando não computável |
avg_ev_percent | number | null | Valor esperado % médio no momento da detecção para as previsões do grupo. null quando não computável |
total_predictions | integer | Todas as previsões rastreadas no grupo, incluindo as ainda não avaliadas |
Objeto meta
| Campo | Tipo | Descrição |
|---|---|---|
filters | object | Eco dos filtros aplicados (sport, league, sportsbook, devig_book, group_by); null para filtros não usados |
source | string | "clickhouse" — o armazenamento de análises históricas |
tier_window_days | integer | string | Lookback máximo para o seu tier (ex.: 90), ou "unlimited" |
updated_at | string | Timestamp ISO 8601 da resposta |
Interpretando o CLV
| CLV% | Interpretação |
|---|---|
| > +2% | Os preços sinalizados venceram o fechamento consistentemente por margem ampla — forte valor capturado |
| +0,5% a +2% | Os preços venceram o fechamento modestamente — típico de books recreativos contra uma referência sharp |
| -0,5% a +0,5% | Próximo ao mercado — precificação eficiente ou resultados mistos |
| < -0,5% | Os preços apertaram rumo ao fechamento — steam tardio ou ação do lado sharp |
CLV não é ROI — leia-o com as ressalvas certas.
- A eficiência de mercado varia. Nos mercados mais sharp e líquidos (por exemplo, spreads e totais da NBA, e player props das ligas principais), vencer o fechamento não se converte de forma confiável em lucro realizado — vitórias sobre a linha de fechamento nesses mercados frequentemente refletem ruído em um mercado eficiente, e não vantagem. Em mercados mais soft, CLV positivo continua sendo o melhor indicador antecedente de lucratividade no longo prazo.
- Use
win_ratejunto comavg_clv_percent. O endpoint retorna resultados realizados exatamente por isso: um grupo com CLV positivo mas com histórico liquidado abaixo do breakeven em uma amostra grande está dizendo que o CLV ali não está se convertendo. Leia o pareamento como uma direção, não como uma comparação equivalente:avg_clv_percentcobre os palpites com nota de CLV enquantowin_ratecobre todos os palpites liquidados, portanto os dois são calculados sobre populações diferentes. - Atenção ao tamanho da amostra. Grupos com
total_gradedpequeno ou poucas apostas liquidadas (wins + losses) são ruído — compare grupos apenas em volume significativo. - A referência sharp importa. Apenas o CLV referenciado em book sharp (filtro
devig_book=pinnacle) carrega esse significado; linhas referenciadas em fallback, não.
Endpoints Relacionados
- Closing Odds — Preços de fechamento brutos por evento (tier Pro ou superior)
- Closing Odds por Data — Preços de fechamento históricos por evento para uma data específica
- Oportunidades +EV — Apostas de valor esperado positivo em tempo real
- Snapshot de Odds — Odds atuais pré-partida e ao vivo