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/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.
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 por tier
Os intervalos de datas são limitados à janela de lookback do seu tier (refletida em meta.tier_window_days):
| Tier | Janela |
|---|---|
| Free | 7 dias |
| Hobby | 30 dias |
| Pro | 90 dias |
| Sharp | 365 dias |
| Enterprise | Ilimitada |
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/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/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/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": 262,
"losses": 200,
"win_rate": 0.5670995670995671,
"avg_clv_percent": 0.673342797764432,
"avg_ev_percent": 1.613983921390446,
"total_predictions": 1555
},
{
"group_key": "prophetx",
"total_graded": 964,
"wins": 191,
"losses": 214,
"win_rate": 0.47160493827160493,
"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 o subconjunto tipicamente menor cujo resultado do jogo também está liquidado — e win_rate é calculado apenas sobre esse subconjunto. Um grupo pode legitimamente exibir total_graded: 1294 ao lado de wins + losses: 462. 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 avaliadas cujo resultado do jogo liquidou como vitória |
losses | integer | Previsões avaliadas cujo resultado do jogo liquidou como derrota |
win_rate | number | null | wins / (wins + losses). Calculado apenas sobre o subconjunto liquidado; 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. - 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