betfair-exchange-api
TypeScript icon, indicating that this package has built-in type declarations

1.0.3 • Public • Published

Betfair Exchange API Client

A comprehensive TypeScript library for interfacing with the Betfair Exchange API, including betting, accounts, heartbeat, and streaming functionality.

Features

  • Complete typing for all Betfair API requests and responses
  • Support for the Betting API, Accounts API, and Heartbeat API
  • Stream API client for real-time market and order data
  • Authentication via interactive and non-interactive methods
  • Comprehensive error handling
  • Machine Comprehensible Project (MCP) file for enhanced IDE support

Installation

npm install betfair-exchange-api

MCP Support

This package includes a Machine Comprehensible Project (MCP) file that provides enhanced IDE support and documentation. Upon installation, the MCP file is automatically copied to your project root directory.

The MCP file contains:

  • Detailed API documentation
  • Type definitions
  • Method signatures and parameters
  • Event documentation for the Stream API
  • Component relationships and architecture

If you're using an MCP-compatible IDE (like Cursor), you'll get enhanced:

  • Code completion
  • Documentation
  • Type inference
  • Method suggestions

The MCP file is automatically installed via the package's postinstall script. If you need to manually copy it:

cp node_modules/betfair-exchange-api/betfair-exchange-api.mcp ./

Authentication

Before using the API, you need to authenticate with your Betfair credentials:

import { BetfairClient } from 'betfair-exchange-api';

// Initialize with your application key
const client = new BetfairClient('YOUR_APP_KEY');

// Interactive authentication (username/password)
await client.authenticateInteractive('username', 'password');

// OR Non-interactive (certificate) authentication
await client.authenticateNonInteractive(
  'username', 
  'password', 
  'path/to/certificate.crt', 
  'path/to/private.key'
);

Betting API Examples

List all available sports (event types)

const eventTypes = await client.betting.listEventTypes({});
console.log(eventTypes);

List soccer events for today

const now = new Date();
const tomorrow = new Date();
tomorrow.setDate(now.getDate() + 1);

const soccerFilter = {
  eventTypeIds: ['1'], // 1 = Soccer
  marketStartTime: {
    from: now.toISOString(),
    to: tomorrow.toISOString()
  }
};

const events = await client.betting.listEvents(soccerFilter);
console.log(events);

Get market catalog for an event

const marketFilter = {
  eventIds: ['31520581'] // Replace with your event ID
};

const markets = await client.betting.listMarketCatalogue(
  marketFilter,
  ['MARKET_DESCRIPTION', 'RUNNER_DESCRIPTION', 'RUNNER_METADATA'],
  undefined,
  25 // Maximum 1000 results
);

console.log(markets);

Get market prices

const priceProjection = {
  priceData: ['EX_BEST_OFFERS', 'EX_TRADED'],
  virtualise: true
};

const marketBooks = await client.betting.listMarketBook(
  ['1.179082418'], // Replace with your market ID
  priceProjection
);

console.log(marketBooks);

Place a bet

const placeInstruction = {
  orderType: 'LIMIT',
  selectionId: 12345678, // Replace with your selection ID
  side: 'BACK',
  limitOrder: {
    size: 2.0,
    price: 3.0,
    persistenceType: 'LAPSE'
  }
};

const response = await client.betting.placeOrders(
  '1.179082418', // Replace with your market ID
  [placeInstruction],
  'my_customer_ref' // Optional customer reference
);

console.log(response);

List current orders

const currentOrders = await client.betting.listCurrentOrders();
console.log(currentOrders);

Accounts API Examples

Get account details

const accountDetails = await client.accounts.getAccountDetails();
console.log(accountDetails);

Get account funds

const accountFunds = await client.accounts.getAccountFunds();
console.log(accountFunds);

Get account statement

const statement = await client.accounts.getAccountStatement(
  undefined, // locale
  0, // fromRecord
  100, // recordCount
  {
    from: '2023-01-01T00:00:00Z',
    to: '2023-01-31T23:59:59Z'
  } // itemDateRange
);

console.log(statement);

Heartbeat API Example

// Set up the heartbeat with a 60 second timeout
const heartbeatReport = await client.heartbeat.heartbeat(60);
console.log(heartbeatReport);

Stream API Examples

The Stream API provides real-time updates for markets and orders.

import { BetfairStreamClient } from 'betfair-exchange-api';

// Create stream client with your credentials
const streamClient = new BetfairStreamClient('YOUR_APP_KEY', 'YOUR_SESSION_TOKEN');

// Set up event handlers
streamClient.on('connected', () => {
  console.log('Connected to Betfair Stream API');
});

streamClient.on('disconnected', () => {
  console.log('Disconnected from Betfair Stream API');
});

streamClient.on('marketChange', (marketChange) => {
  console.log('Market data update:', marketChange);
});

streamClient.on('orderChange', (orderChange) => {
  console.log('Order data update:', orderChange);
});

// Connect to the stream
streamClient.connect();

// After authentication succeeds, subscribe to markets
streamClient.subscribeToMarkets(
  {
    eventTypeIds: ['1'], // Soccer
    marketTypes: ['MATCH_ODDS']
  },
  {
    fields: ['EX_BEST_OFFERS', 'EX_TRADED'],
    ladderLevels: 3
  }
);

// Subscribe to orders
streamClient.subscribeToOrders({
  includeOverallPosition: true
});

// When finished
streamClient.disconnect();

Session Management

// Keep your session alive
const keepAliveResult = await client.keepAlive();

// Logout when done
const logoutResult = await client.logout();

Error Handling

All API methods throw exceptions when they fail. It's recommended to use try/catch blocks to handle errors appropriately:

try {
  const markets = await client.betting.listMarketCatalogue(marketFilter);
  // Process markets
} catch (error) {
  console.error('API Error:', error.message);
}

Notes

  • Remember to manage your session with keepAlive to prevent it from expiring
  • Be aware of API request limits to avoid getting rate limited
  • The Stream API requires an active and valid session token

License

MIT

Credits

This library is an unofficial implementation of the Betfair Exchange API. Betfair and all related trademarks are the property of The Sporting Exchange Limited.

Package Sidebar

Install

npm i betfair-exchange-api

Weekly Downloads

4

Version

1.0.3

License

MIT

Unpacked Size

100 kB

Total Files

14

Last publish

Collaborators

  • darrenrogan