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

Closing Line Value (CLV)

Analise o quão bem as odds de fechamento de um sportsbook se comparam com a probabilidade devigada (no-vig) da Pinnacle. CLV positivo significa que o book fechou mais frouxo que a Pinnacle — um proxy histórico para vantagem (edge).

GET /api/v1/historical/clv

Tier Sharp ou superior obrigatório. Os tiers Pro e inferiores recebem um erro 403 tier_restricted. Este endpoint é controlado pela feature closing_lines.

Janela de dados da Fase 1: As linhas de fechamento são capturadas em tempo real conforme os jogos entram ao vivo. O armazenamento Valkey retém os dados por 30 dias. Dados históricos além de 30 dias ainda não estão disponíveis.

Como as Linhas de Fechamento São Capturadas

Quando um jogo passa de pré-partida para ao vivo, o servidor captura as últimas odds de pré-partida de cada book como a linha de fechamento daquele evento. O preço de fechamento é devigado usando o método Power (o mesmo do cálculo de EV) para produzir uma probabilidade no-vig por seleção.

O CLV é então calculado como:

CLV% = (pin_no_vig_prob - book_no_vig_prob) / book_no_vig_prob × 100

Onde pin_no_vig_prob é a probabilidade devigada da Pinnacle (a referência sharp) e book_no_vig_prob é a probabilidade devigada do book recreativo (soft book). Um CLV% positivo significa que o book recreativo fechou em um preço mais favorável do que a linha justa da Pinnacle.

Autenticação

Requer API key. Tier Sharp ou superior obrigatório (feature closing_lines).

Parâmetros de Query

ParâmetroTipoPadrãoDescrição
fromstring7 dias atrásData inicial (YYYY-MM-DD ou ISO 8601). Limitada à janela de 30 dias.
tostringhojeData final (YYYY-MM-DD ou ISO 8601).
group_bystringsportsbookDimensão de agregação. Uma de: sportsbook, sport, league, market, day.
sportstringtodosFiltra por esporte(s), separados por vírgula (ex.: basketball,football).
leaguestringtodasFiltra por liga(s), separadas por vírgula (ex.: nba,nfl).
sportsbookstringtodosFiltra por sportsbook(s), separados por vírgula.

Janela de Datas

O tier Sharp permite até 30 dias de histórico (a janela atual de retenção para dados de linha de fechamento). Solicitar datas fora dessa janela é silenciosamente ajustado para a data mais antiga disponível.

Exemplos de Requisições

# CLV por sportsbook nos últimos 7 dias curl -X GET "https://api.sharpapi.io/api/v1/historical/clv?from=2026-04-10&to=2026-04-17&group_by=sportsbook" \ -H "X-API-Key: YOUR_API_KEY" # CLV agrupado por esporte, apenas NBA curl -X GET "https://api.sharpapi.io/api/v1/historical/clv?league=nba&group_by=sport" \ -H "X-API-Key: YOUR_API_KEY" # CLV agrupado por dia para a DraftKings curl -X GET "https://api.sharpapi.io/api/v1/historical/clv?sportsbook=draftkings&group_by=day" \ -H "X-API-Key: YOUR_API_KEY"

Resposta

Sucesso (200)

{ "success": true, "data": { "group_by": "sportsbook", "groups": [ { "group_key": "draftkings", "samples": 312, "avg_clv_percent": 1.42, "avg_abs_clv_percent": 2.18, "distinct_books": 1, "distinct_sports": 4 }, { "group_key": "fanduel", "samples": 289, "avg_clv_percent": 0.87, "avg_abs_clv_percent": 1.95, "distinct_books": 1, "distinct_sports": 4 }, { "group_key": "betmgm", "samples": 201, "avg_clv_percent": -0.21, "avg_abs_clv_percent": 1.74, "distinct_books": 1, "distinct_sports": 3 } ], "date_range": { "from": "2026-04-10T00:00:00.000", "to": "2026-04-17T00:00:00.000" }, "total_events": 58, "comparable_events": 51, "sharp_reference": "pinnacle" }, "meta": { "source": "valkey:closing_line", "tier_window_days": 30, "phase": "1", "filters": { "sport": null, "league": null, "sportsbook": null, "group_by": "sportsbook" }, "updated_at": "2026-04-17T20:00:00.000000000Z" } }

Resultado vazio (sem dados de linha de fechamento ainda):

{ "success": true, "data": { "group_by": "sportsbook", "groups": [], "date_range": { "from": "...", "to": "..." }, "total_events": 0, "comparable_events": 0, "sharp_reference": "pinnacle" }, "meta": { "source": "valkey:closing_line", "phase": "1", ... } }

Um array groups vazio é uma resposta válida quando nenhum dado de linha de fechamento foi capturado para o intervalo de datas solicitado — não é um erro.

Respostas de Erro

403 Tier Restricted

{ "error": { "code": "tier_restricted", "message": "The 'closing_lines' feature requires Sharp or higher.", "required_tier": "sharp", "docs": "https://docs.sharpapi.io/en/pricing" } }

400 Validation Error

{ "error": { "code": "validation_error", "message": "Invalid group_by. Must be one of: day, league, market, sport, sportsbook" } }

Campos da Resposta

Objeto data

CampoTipoDescrição
group_bystringA dimensão usada para agregação
groupsarrayArray de linhas de grupo, ordenadas por samples em ordem decrescente
date_rangeobjectValores from/to efetivamente usados após o ajuste de tier
total_eventsintegerTotal de eventos encontrados no intervalo de datas (antes do filtro da Pinnacle)
comparable_eventsintegerEventos com uma linha de fechamento da Pinnacle disponível para comparação
sharp_referencestringSharp book usado como referência de odds justas ("pinnacle")

Campos da linha de grupo

CampoTipoDescrição
group_keystringO identificador do grupo (nome do sportsbook, esporte, liga, tipo de mercado ou data YYYY-MM-DD)
samplesintegerNúmero de comparações de linha de fechamento neste grupo
avg_clv_percentnumberCLV% médio entre todas as amostras. Positivo = book fechou mais frouxo que a Pinnacle.
avg_abs_clv_percentnumberCLV% absoluto médio (medida de eficiência de mercado independente de direção)
distinct_booksintegerNúmero de books distintos neste grupo
distinct_sportsintegerNúmero de esportes distintos neste grupo

Objeto meta

CampoTipoDescrição
sourcestringSempre "valkey:closing_line" (backend da Fase 1)
tier_window_daysintegerMáximo de dias de lookback para o seu tier (Sharp = 30)
phasestring"1" — captura em tempo real a partir das transições para ao vivo. Backfill via ClickHouse planejado para a Fase 2.
updated_atstringTimestamp ISO 8601 da resposta

Interpretando o CLV

CLV%Interpretação
> +2%Book fechou consistentemente muito mais frouxo que linhas sharp — alto valor capturado
+0,5% a +2%Book fechou ligeiramente frouxo — típico de books recreativos
-0,5% a +0,5%Fechamento próximo ao mercado — eficiente ou misto
< -0,5%Book apertou no fechamento — pode indicar steam chasing ou ação do lado sharp

Um CLV médio positivo nas suas apostas é o indicador mais forte de que você está apostando em preços ineficientes. Em uma amostra grande, CLV positivo prevê fortemente ROI positivo.

Endpoints Relacionados

Last updated on