Pinnacle API

Summary

Pinnacle (formerly Pinnacle Sports) is a sharp bookmaker known for offering the most efficient odds in the industry, particularly for football, American sports, and tennis. Their business model is high-volume, low-margin — they accept professional bettors and maintain sharp lines through market forces rather than promotional pricing. This makes Pinnacle's closing odds the most reliable benchmark for market efficiency and CLV validation.

Pinnacle offers a public REST API for accessing pre-game and live odds. The API is free to access but requires a funded Pinnacle account and API approval. Documentation is available on the official GitHub repository. The API uses HTTP Basic authentication and requires HTTPS.

The key value of Pinnacle data in sports modeling is using their closing odds as the "true market price" against which to validate model predictions. Their low margin (typically 2–3% on major markets vs. 5–7% for soft books) means the closing line is closer to the true probability.

API Requirements

  • Funded account: You must have an active, funded Pinnacle account
  • API approval: Pinnacle reviews API access requests; approval is not guaranteed
  • HTTP Basic Auth: Username and password from your API credentials
  • Rate limits: Check the documentation for specific limits

Key Endpoints

Endpoint Purpose
GET /v1/sports List available sports and sport IDs
GET /v1/sports/{sport_id}/feed Get available events for a sport
GET /v1/events/{event_id} Get odds for a specific event
GET /v1/markets Get available market types

Data Available

Data Available Notes
Pre-game odds Moneyline, spread, totals, props
Live odds Real-time updates
Closing odds Available historically via data providers
Match results Not provided
Statistics Not provided

Using Pinnacle Closing Odds for CLV

import pandas as pd

def calculate_clv(model_prob, pinnacle_close_odds, bet_odds):
    """
    Calculate closing line value using Pinnacle as the benchmark.

    Args:
        model_prob: Model's predicted probability
        pinnacle_close_odds: Pinnacle closing decimal odds
        bet_odds: Odds when the bet was placed
    """
    prob_close = 1 / pinnacle_close_odds
    clv = model_prob - prob_close
    return clv

# Example: Model says 55% win probability, bet at 1.85, Pinnacle closed at 1.80
model_prob = 0.55
pinnacle_close = 1.80
bet_odds = 1.85

clv = calculate_clv(model_prob, pinnacle_close, bet_odds)
print(f"CLV: {clv:.2%}")  # Positive = beating the sharp line

# Compare model probability to Pinnacle's implied probability
prob_close = 1 / pinnacle_close
print(f"Pinnacle implied: {prob_close:.1%}, Model: {model_prob:.1%}")
print(f"Edge: {model_prob - prob_close:.2%}")

Notes

  • Pinnacle's API access is not guaranteed — approval is at their discretion, and they may deny access to automated betting operations
  • Their closing lines are the gold standard for CLV measurement; however, Football-Data.co.uk notes that as of mid-2025, Pinnacle's public API data has become unreliable (systematically out of date)
  • Use Football-Data.co.uk Pinnacle closing odds columns as a fallback for historical CLV analysis
  • Pinnacle is known for limiting successful bettors (low maximum stakes for those who consistently win) — this is why their odds are sharp: sharp bettors self-select in
  • For market efficiency analysis, comparing your model's predictions to Pinnacle's line is more meaningful than comparing to Bet365 or soft books