The same prices, in your own tools
Everything on the odds screen is also available as a live feed. Connect once and every price change streams in by itself, so your spreadsheet, bot or model always has the latest numbers. API access is included with the team plan: one plan covers the website and the API. Free trial, then $50 a week.
Spreadsheets
Pull the latest prices into your own sheet and work them your way.
Bots and alerts
Get a ping when a price you’re watching moves.
Models
Feed your ratings or form model live prices instead of copy-and-paste.
Three steps to live prices
Log in, open Settings, create a key (it starts with opa_ and is shown once), then run the quickstart code. Below: that code, and real price moves arriving the way your script would get them.
- 1Log inSame login as the odds screen.
- 2Settings → API keysGive the key a name and press:
- 3ConnectPaste the key into the code below and run it. Prices start arriving straight away.
// npm install centrifuge ws (Node 22+ has a global WebSocket; ws is for older Node)
import { Centrifuge } from 'centrifuge';
const WS_URL = 'wss://api.oddsfather.com.au/connection/websocket'; // set at build time from PUBLIC_WS_URL
const API_KEY = process.env.ODDS_API_KEY; // opa_...
const races = new Map();
const apply = (payload) => { for (const race of payload.events ?? []) races.set(race.key, race); };
const client = new Centrifuge(WS_URL, {
headers: { Authorization: `Bearer ${API_KEY}` }, // sent as emulated headers
data: { key: API_KEY },
});
client.on('connected', async (ctx) => {
console.log('connected', ctx.client);
try {
apply((await client.rpc('snapshot', {})).data);
} catch {
const hist = await client.history('odds:v2:snapshot', { limit: 1 });
if (hist.publications.length) apply(hist.publications[0].data);
}
console.log(races.size, 'races loaded');
});
client.on('subscribed', (ctx) => console.log('granted', ctx.channel));
client.on('publication', (ctx) => apply(ctx.data)); // server-side subscriptions
client.on('disconnected', (ctx) => console.log('disconnected', ctx.code, ctx.reason));
client.connect();- 14:03:406. Joey The MockBetfair back4.70 → 4.40
- 14:03:404. Ake's JourneyBetfair back15.50 → 15.00
- 14:03:403. Integrity CookieBetfair back4.80 → 4.50
- 14:03:402. Stoke And SmokeBetfair back2.62 → 2.52
- 14:03:401. Denni NorrisBetfair lay8.40 → 12.00
- 14:02:478. Bundock BonnieHotbet9.50 → 10.00
- 14:02:474. Ake's JourneyHotbet17.00 → 16.00
Recorded on 26 Oct 2026, 14:02 AEDT, real price moves from one race, played back at 2×. The code is the developer quickstart, word for word.
Good to know
- What you get
- Every race on the odds screen: Australian and international thoroughbreds, harness and greyhounds, with every licensed Australian bookie’s price and Betfair’s.
- How it arrives
- One websocket connection. You get the full card first, then only what changes. Python, Node and browser examples are in the docs.
- Keys
- Create, rename and revoke keys yourself in Settings. Keys belong to your team, not one person.
- The fine print
- Prices can change at any moment; always check with the bookie before you bet. Full details in the developer docs.