tkTickOdds

Arbitrage betting API

Build an arbitrage bot with sub-second bet365 odds

For: Arb bots, surebet aggregators, multi-book comparison tools

The problem

Arbitrage opportunities exist for seconds. A stale feed — even 30 seconds old — means you're pricing on numbers that the market has already moved past. You need rate limits that let you re-poll every market, every few seconds, without credit-metering anxiety.

How TickOdds helps

TickOdds delivers bet365 odds as fast as they change, via WebSocket (sub-100ms) or HTTP polling at 2,000 req/min on the Pro tier. Flat rate — poll as hard as you want. Combine with any multi-book feed to compute surebet opportunities, or pair TickOdds with a Pinnacle/Betfair feed for classic bet365-vs-Pinnacle arbs.

Recommended: Pro tier

Based on the throughput this workload needs.

See pricing →

Workflow

  1. 1Connect to the WebSocket at /ws/live?apiKey=YOUR_KEY
  2. 2Subscribe to the sports you care about (e.g. soccer, tennis)
  3. 3Receive push updates every time a bet365 line changes
  4. 4Cross-reference with your second feed to compute surebet %
  5. 5Flag opportunities >1% to your Telegram / dashboard / bot

Code example

python

import asyncio
import websockets
import json

async def arbitrage_bot():
    uri = "wss://api.tickodds.com/ws/live?apiKey=YOUR_KEY"
    async with websockets.connect(uri) as ws:
        # Subscribe to soccer and tennis
        await ws.send(json.dumps({
            "action": "subscribe",
            "sports": ["soccer", "tennis"]
        }))

        async for message in ws:
            event = json.loads(message)
            if event.get("type") == "odds_update":
                # event.data has the updated markets
                for market in event["data"]["markets"]:
                    # Compare with your other book's price
                    surebet_pct = compute_surebet(
                        market, fetch_pinnacle_price(market["id"])
                    )
                    if surebet_pct > 1.0:
                        alert(f"{surebet_pct:.2f}% arb on {market['name']}")

asyncio.run(arbitrage_bot())

Related endpoints

  • WS /ws/live
  • GET /api/v1/matches
  • GET /api/v1/live/events

Full API reference →