tkTickOdds

Sports trading model API

Feed a quant model with closing-line bet365 data for every market

For: Quant bettors, sports-trading model builders, algo-betting developers

The problem

Training a profitable sports-betting model needs thousands of observations of the closing line — the single best predictor of true probability. Without a consistent historical feed, you're guessing. Without low-latency live data, you can't actually place bets when your model fires.

How TickOdds helps

TickOdds' Pro tier gives you 30 days of match history (for back-testing) plus 2,000 req/min and 100 concurrent WebSockets (for production). Run your model against historical closes, deploy the same model against the live feed, and place bets when edge appears.

Recommended: Pro tier

Based on the throughput this workload needs.

See pricing →

Workflow

  1. 1Pull 30 days of match history for back-testing via /api/v1/matches/{fixtureId}/history
  2. 2Train your model on closing-line-implied probabilities vs. observed outcomes
  3. 3In production, subscribe to the WebSocket for the sports you care about
  4. 4When your model's predicted probability diverges enough from the current bet365 price, fire a bet through your book or Betfair account

Code example

python

import pandas as pd
import requests

API = "https://api.tickodds.com/api/v1"
HEADERS = {"X-API-Key": "YOUR_KEY"}

# Historical training: pull 30 days of closing lines
def load_training_data(sport: str):
    matches = requests.get(
        f"{API}/matches?sport={sport}&status=settled&limit=2000",
        headers=HEADERS,
    ).json()["data"]
    rows = []
    for m in matches:
        history = requests.get(
            f"{API}/matches/{m['fixtureId']}/history",
            headers=HEADERS,
        ).json()["data"]
        closing = history[-1]
        rows.append({
            "home": m["home"],
            "away": m["away"],
            "close_home": closing["odds"]["home"],
            "close_away": closing["odds"]["away"],
            "winner": m["result"]["winner"],
        })
    return pd.DataFrame(rows)

df = load_training_data("soccer")
# ... train your model on df ...

Related endpoints

  • GET /api/v1/matches/{fixtureId}/history
  • GET /api/v1/matches
  • WS /ws/live

Full API reference →