Skip to Content
Referência da APIClosing Line Value (CLV)

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/clv

Tier 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 é calculadoPermalink for this section

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) × 100

onde 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 QueryPermalink for this section

ParâmetroTipoPadrãoDescrição
fromstring7 dias atrásData inicial (YYYY-MM-DD ou ISO 8601). Limitada à janela de histórico do seu tier.
tostringhojeData final (YYYY-MM-DD ou ISO 8601).
group_bystringsportsbookDimensão de agregação. Uma de: sportsbook, sport, league, market, day, devig_book.
sportstringtodosFiltra por esporte(s), separados por vírgula (ex.: basketball,baseball).
leaguestringtodasFiltra por liga(s), separadas por vírgula (ex.: nba,mlb).
sportsbookstringtodosFiltra por sportsbook(s), separados por vírgula.
devig_bookstringtodasFiltra pela referência sharp contra a qual o palpite foi precificado (ex.: pinnacle).

Janela de históricoPermalink for this section

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çõesPermalink for this section

# 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"

RespostaPermalink for this section

Sucesso (200)Permalink for this section

{ "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 ErroPermalink for this section

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 RespostaPermalink for this section

Objeto dataPermalink for this section

CampoTipoDescrição
date_rangeobjectValores from/to efetivamente usados após o ajuste de tier
group_bystringA dimensão usada para agregação
groupsarrayArray de linhas de grupo

Campos da linha de grupoPermalink for this section

CampoTipoDescrição
group_keystringO identificador do grupo (nome do sportsbook, esporte, liga, tipo de mercado, data YYYY-MM-DD ou devig book)
total_gradedintegerPrevisões lógicas com nota de CLV (linha de fechamento capturada e comparada)
winsintegerPrevisões cujo resultado do jogo liquidou como vitória. Contadas sobre todas as previsões liquidadas, não apenas as avaliadas por CLV
lossesintegerPrevisões cujo resultado do jogo liquidou como derrota. Contadas sobre todas as previsões liquidadas, não apenas as avaliadas por CLV
win_ratenumber | nullwins / (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_percentnumber | nullCLV% 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_percentnumber | nullValor esperado % médio no momento da detecção para as previsões do grupo. null quando não computável
total_predictionsintegerTodas as previsões rastreadas no grupo, incluindo as ainda não avaliadas

Objeto metaPermalink for this section

CampoTipoDescrição
filtersobjectEco dos filtros aplicados (sport, league, sportsbook, devig_book, group_by); null para filtros não usados
sourcestring"clickhouse" — o armazenamento de análises históricas
tier_window_daysinteger | stringLookback máximo para o seu tier (ex.: 90), ou "unlimited"
updated_atstringTimestamp ISO 8601 da resposta

Interpretando o CLVPermalink for this section

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_rate junto com avg_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_percent cobre os palpites com nota de CLV enquanto win_rate cobre todos os palpites liquidados, portanto os dois são calculados sobre populações diferentes.
  • Atenção ao tamanho da amostra. Grupos com total_graded pequeno 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 RelacionadosPermalink for this section

Last updated on