APIReference Guide Offline
APIReferenceGuide-Offline
betfair-api-reference-guide
APIReferenceGuide-Offline-checkpoint
User Manual:
Open the PDF directly: View PDF .
Page Count: 208
Download | |
Open PDF In Browser | View PDF |
1. API Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Getting Started . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.1 Application Keys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2 Login & Session Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2.1 Non-Interactive (bot) login . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2.1.1 Certificate Generation With XCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2.2 Interactive Login - Desktop Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.2.3 Interactive Login - API Endpoint . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.3 Best Practice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.4 API Demo Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.5 Market Data Request Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1.6 Understanding Market Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Reference Guide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Navigation Data For Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2 Betting API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1 Betting Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.1 listCompetitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.2 listCountries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.3 listCurrentOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.4 listClearedOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.5 listEvents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.6 listEventTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.7 listMarketBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.8 listRunnerBook . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.9 listMarketCatalogue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.10 listMarketProfitAndLoss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.11 listMarketTypes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.12 listTimeRanges . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.13 listVenues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.14 placeOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.15 cancelOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.16 replaceOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.1.17 updateOrders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.2 Betfair Starting Price Betting (BSP) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.3 Betting Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.4 Betting Enums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.2.5 Betting Type Definitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3 Accounts API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1 Accounts Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.1 createDeveloperAppKeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.2 getAccountDetails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.3 getAccountFunds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.4 getDeveloperAppKeys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.5 getAccountStatement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.6 listCurrencyRates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.1.7 transferFunds . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.2 Accounts Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.3 Accounts Enums . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.3.4 Accounts TypeDefinitions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.4 Heartbeat API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.5 Race Status API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.6 Interface Definition Documents . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Additional Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Betfair Price Increments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Currency Parameters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Racecourse Abbreviations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.4 Runner Metadata Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.5 Time Zones & Time Format . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.6 Common Error Codes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.7 Virtual Bets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.8 Locale Specification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 3 67 68 72 80 89 92 97 98 99 100 102 104 108 109 110 111 111 114 116 117 117 122 123 125 126 127 127 128 137 137 138 139 139 141 152 175 176 177 177 178 178 179 179 180 180 181 184 191 195 201 201 201 202 202 202 204 205 205 207 API Overview The Exchange API is for developers looking to create automated betting systems or custom betting interfaces for themselves or for Betfair customers. The Exchange API is available for the Global, Spanish and Italian Betfair Exchange The API contains a powerful set of features that enable advanced market navigation, search, odds retrieval, bet placement and sports related data retrieval. The Exchange API is made up of the following key components: Betting API - Contains navigation, odds retrieval and bet placement operations. Accounts API - Contains account related operations such as the ability to retrieve your available account balance as well as Vendor Services operations that are available to licensed Software Vendors Heartbeat API - allows you to automatically cancel unmatched bets in the event of your API client/s losing connectivity. Race Status API - allows you to establish the status of a horse race or greyhound market both prior to and after the start of the race. Exchange Stream API - allows you to subscribe to market changes (both price and definitions) and orders. Documentation There are a number of documentation resources available: Getting Started Guide - provides all the information required regarding licensing, login and making your first requests via the Betfair API. Reference Guide - the latest documentation for the Betfair API. Sample Code - code samples are available in a number of programming languages. Demo Tools - allow you to quickly test API operations via an easy to use interface. Developers Forum - discuss the Betfair API, share your knowledge and ask questions of the developer community. Benefits & Features The main benefits and features of the Exchange API include: Access to the Exchange API is free of charge for development purposes*# to all developers for personal use only. No data request charges for requests made via the Exchange API Lightweight protocol (JSON/JSON-RPC). Configure the depth of the best prices returned to you. Rollup available prices - you can configure the rollup amount and type. Retrieve data from multiple markets in one request. Retrieve matched and unmatched bets and prices available via a single request. Search by MarketType (MATCH_ODDS, WIN, PLACE etc.) flags which remain the same, regardless of language. Search for in-play markets. View ‘result’ by selection after settlement. View virtual prices. * does not apply to commercial access. Please see Commercial Opportunities for details of commercial licensing # You should use your Delayed Application key for development purposes. To apply for a Live Application key please click here and select Exchange API > For My Personal Betting and complete the application form at the bottom of the page. A one-off activation fee of £2 99 applies; this is debited directly from your Betfair account once access is approved. Recently Updated Interactive Login - API Endpoint about 5 hours ago • updated by built In User • view change Non-Interactive (bot) login about 5 hours ago • updated by built In User • view change Exchange Stream API Navigate space Apr 21, 2017 • updated by built In User • view change Betting Enums Apr 13, 2017 • updated by built In User • view change API Roadmap Apr 12, 2017 • updated by built In User • view change Betting Type Definitions Apr 11, 2017 • updated by built In User • view change Navigation Data For Applications Apr 10, 2017 • updated by built In User • view change listRunnerBook Apr 06, 2017 • updated by built In User • view change Betfair Price Increments Apr 06, 2017 • updated by built In User • view change Best Practice Apr 06, 2017 • updated by built In User • view change Application Keys Apr 06, 2017 • updated by built In User • view change Development Life Cycle Apr 06, 2017 • created by built In User Heartbeat API Apr 06, 2017 • updated by built In User • view change Interface Definition Documents Apr 04, 2017 • updated by built In User • view change Release Notes Mar 28, 2017 • updated by built In User • view change Getting Started How Do I Get Started? Login Making a Request to the API API Endpoints JSON JSON-RPC Example Requests Request A List Of Available Event Types Request a List of Events for an Event Type Request the Market Information for an Event Horse Racing - Today's Win & Place Markets Football Competitions Market Prices Placing a Bet Placing a Betfair SP Bet Retrieving Details of Bet/s Placed on a Market/s Retrieving the Result of a Settled Market How Do I Get Started? To use the Exchange API you require the following: 1. A Betfair account. you can open a Betfair account here 2. An Application Key - you can create an Application Key by following the instructions here 3. A sessionToken - you can create a session token by using either of the API login methods or by following the instructions here Login The Betfair API offers three login flows for developers, depending on the use case of your application:. Non-Interactive login - if you are building an application which will run autonomously, there is a separate login flow to follow to ensure your account remains secure. Interactive login - if you are building an application which will be used interactively, then this is the flow for you. This flow has two variants: Interactive login - API method - This flow makes use of a JSON API Endpoint and is the simplest way to get started if you are looking to create your own login form. Interactive login - Desktop Application- This login flow makes use of Betfair's login pages and allows your app to gracefully handle all errors and re-directions in the same way as the Betfair website Making a Request to the API All requests must include a HTTP header named "X-Application" containing the Application Key assigned to you. All requests must include a HTTP header "X-Authentication" containing your sessionToken. Please note: The only exceptions to the above are some of the Account Operations (Vendor API ) which require the X-Authenti cation HTTP header only. You can call the API at one of two endpoints, depending on which style of request you want to use. API Endpoints You can make requests and place bets on UK & international markets by accessing the Global Exchange via the following endpoints. Please find the details for the current Betting API endpoints: Global Exchange Interface Endpoint JSON-RPC PrefixExample JSON-RPC https://api.betfair.com/exchange/betting/json-rpc/v1 SportsAPING/v1.0/listMarketBook JSON REST https://api.betfair.com/exchange/betting/rest/v1.0/ listMarketBook/ You can make requests for your UK Exchange wallet information by accessing the Global Exchange via the following endpoints. Global Exchange Interface Endpoint JSON-RPC Prefix Example JSON-RPC https://api.betfair.com/exchange/account/json-rpc/v1 AccountAPING/v1.0/getAccountFunds JSON REST https://api.betfair.com/exchange/account/rest/v1.0 getAccountFunds/ Please see separate documentation for the Spanish & Italian Exchange JSON You can POST a request to the API at: https://api.betfair.com/exchange/betting/rest/v1.0/ . So, to call the listEventTypes method, you would POST to: https://api.betfair.com/exchange/betting/rest/v1.0/listEventTypes/ The POST data contains the request parameters. For listEventTypes, the only required parameter is a filter to select markets. You can pass an empty filter to select all markets, in which case listEventTypes returns the EventTypes associated with all available markets. JSON POST Data { "filter" : { } } Python Example JSON Request import requests import json endpoint = "https://api.betfair.com/exchange/betting/rest/v1.0/" header = { 'X-Application' : 'APP_KEY_HERE', 'X-Authentication' : 'SESSION_TOKEN_HERE' ,'content-type' : 'application/json' } json_req='{"filter":{ }}' url = endpoint + "listEventTypes/" response = requests.post(url, data=json_req, headers=header) print json.dumps(json.loads(response.text), indent=3) JSON-RPC You can POST a request to the API using JSON-RPC at: https://api.betfair.com/exchange/betting/json-rpc/v1 The POST data should contain a valid JSON-RPC formatted request where the "params" field contains the request parameters and the "method" field contains the API method you are calling, specified like "SportsAPING/v1.0/ . For example, if you were calling the listCompetitions operation and passing in a filter to find all markets with a corresponding event type id of 1 (i.e., all Football markets), the POST data for the JSON-RPC endpoint would be: Example JSON-RPC POST data { "params": { "filter": { "eventTypeIds": [1] } }, "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listCompetitions", "id": 1 } Here's a quick example Python program that uses JSON-RPC and returns the list of EventTypes (Sports) available: JSON-RPC Python Example import requests import json url="https://api.betfair.com/exchange/betting/json-rpc/v1" header = { 'X-Application' : 'APP_KEY_HERE', 'X-Authentication' : 'SESSION_TOKEN' ,'content-type' : 'application/json' } jsonrpc_req='{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listEventTypes", "params": {"filter":{ }}, "id": 1}' response = requests.post(url, data=jsonrpc_req, headers=header) print json.dumps(json.loads(response.text), indent=3) And the response from the above: EventTypeResult { "jsonrpc": "2.0", "result": [ { "eventType": { "id": "468328", "name": "Handball" }, "marketCount": 59 }, { "eventType": { "id": "1", "name": "Soccer" }, "marketCount": 14792 }, { "eventType": { "id": "2", "name": "Tennis" }, "marketCount": 51 }, { "eventType": { "id": "3", "name": "Golf" }, "marketCount": 12 }, { "eventType": { "id": "4", "name": "Cricket" }, "marketCount": 139 }, { "eventType": { "id": "5", "name": "Rugby Union" }, "marketCount": 100 }, { "eventType": { "id": "6", "name": "Boxing" }, "marketCount": 12 }, { "eventType": { "id": "7", "name": "Horse Racing" }, "marketCount": 187 }, { "eventType": { "id": "8", "name": "Motor Sport" }, "marketCount": 3 }, { "eventType": { "id": "7524", "name": "Ice Hockey" }, "marketCount": 8 }, { "eventType": { "id": "10", "name": "Special Bets" }, "marketCount": 30 }, { "eventType": { "id": "451485", "name": "Winter Sports" }, "marketCount": 7 }, { "eventType": { "id": "7522", "name": "Basketball" }, "marketCount": 559 }, { "eventType": { "id": "1477", "name": "Rugby League" }, "marketCount": 3 }, { "eventType": { "id": "4339", "name": "Greyhound Racing" }, "marketCount": 269 }, { "eventType": { "id": "2378961", "name": "Politics" }, "marketCount": 19 }, { "eventType": { "id": "6231", "name": "Financial Bets" }, "marketCount": 51 }, { "eventType": { "id": "998917", "name": "Volleyball" }, "marketCount": 69 }, { "eventType": { "id": "998919", "name": "Bandy" }, "marketCount": 2 }, { "eventType": { "id": "998918", "name": "Bowls" }, "marketCount": 10 }, { "eventType": { "id": "3503", "name": "Darts" }, "marketCount": 446 }, { "eventType": { "id": "72382", "name": "Pool" }, "marketCount": 1 }, { "eventType": { "id": "6422", "name": "Snooker" }, "marketCount": 3 }, { "eventType": { "id": "6423", "name": "American Football" }, "marketCount": 86 }, { "eventType": { "id": "7511", "name": "Baseball" }, "marketCount": 1 } ], "id": 1 } Example Requests This section shows how you might call the Betting API to retrieve information. This section includes examples of how to request the following information in jsonrpc format: Request a List Of Available Event Types Request a List of Events for an Event Type Request the Market Information for an Event Football Competitions Market Prices Placing a Bet Placing a SP Bet Retrieving Details of Bet/s Placed on a Market/s Retrieving the Result of a Settled Market Request A List Of Available Event Types You can make a request using the listEventTypes service which will return a response containing the eventTypes (e.g. Soccer, Horse Racing etc.) that are currently available on Betfair. listEventTypes Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listEventTypes", "params": { "filter": {} }, "id": 1 } ] listEventTypes Response [ { "jsonrpc": "2.0", "result": [ { "eventType": { "id": "468328", "name": "Handball" }, "marketCount": 11 }, { "eventType": { "id": "1", "name": "Soccer" }, "marketCount": 25388 }, { "eventType": { "id": "2", "name": "Tennis" }, "marketCount": 402 }, { "eventType": { "id": "3", "name": "Golf" }, "marketCount": 79 }, { "eventType": { "id": "4", "name": "Cricket" }, "marketCount": 192 }, { "eventType": { "id": "5", "name": "Rugby Union" }, "marketCount": 233 }, { "eventType": { "id": "6", "name": "Boxing" }, "marketCount": 18 }, { "eventType": { "id": "7", "name": "Horse Racing" }, "marketCount": 398 }, { "eventType": { "id": "8", "name": "Motor Sport" }, "marketCount": 50 }, { "eventType": { "id": "7524", "name": "Ice Hockey" }, "marketCount": 521 }, { "eventType": { "id": "10", "name": "Special Bets" }, "marketCount": 39 }, { "eventType": { "id": "451485", "name": "Winter Sports" }, "marketCount": 7 }, { "eventType": { "id": "11", "name": "Cycling" }, "marketCount": 1 }, { "eventType": { "id": "136332", "name": "Chess" }, "marketCount": 1 }, { "eventType": { "id": "7522", "name": "Basketball" }, "marketCount": 617 }, { "eventType": { "id": "1477", "name": "Rugby League" }, "marketCount": 91 }, { "eventType": { "id": "4339", "name": "Greyhound Racing" }, "marketCount": 298 }, { "eventType": { "id": "6231", "name": "Financial Bets" }, "marketCount": 44 }, { "eventType": { "id": "2378961", "name": "Politics" }, "marketCount": 23 }, { "eventType": { "id": "998917", "name": "Volleyball" }, "marketCount": 66 }, { "eventType": { "id": "998919", "name": "Bandy" }, "marketCount": 4 }, { "eventType": { "id": "998918", "name": "Bowls" }, "marketCount": 17 }, { "eventType": { "id": "26420387", "name": "Mixed Martial Arts" }, "marketCount": 52 }, { "eventType": { "id": "3503", "name": "Darts" }, "marketCount": 21 }, { "eventType": { "id": "2152880", "name": "Gaelic Games" }, "marketCount": 2 }, { "eventType": { "id": "6422", "name": "Snooker" }, "marketCount": 22 }, { "eventType": { "id": "6423", "name": "American Football" }, "marketCount": 171 }, { "eventType": { "id": "315220", "name": "Poker" }, "marketCount": 2 }, { "eventType": { "id": "7511", "name": "Baseball" }, "marketCount": 7 } ], "id": 1 } ] Request a List of Events for an Event Type The below example demonstrates how to retrieve a list of events (eventIds) for a specific event type. The request shows how to retrieve all Soccer events that are taking place in a single day. listEvents Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listEvents", "params": { "filter": { "eventTypeIds": [ "1" ], "marketStartTime": { "from": "2014-03-13T00:00:00Z", "to": "2014-03-13T23:59:00Z" } } }, "id": 1 } ] listEvents Response [ { "jsonrpc": "2.0", "result": [ { "event": { "id": "27165668", "name": "Al-Wahda (KSA) v Hajer (KSA)", "countryCode": "SA", "timezone": "GMT", "openDate": "2014-03-13T13:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165665", "name": "Al Hussein v Mansheyat Bani Hasan", "countryCode": "JO", "timezone": "GMT", "openDate": "2014-03-13T15:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165425", "name": "Daily Goals", "countryCode": "GB", "timezone": "Europe/London", "openDate": "2014-03-13T18:00:00.000Z" }, "marketCount": 1 }, { "event": { "id": "27165667", "name": "Al Jeel v Al Draih", "countryCode": "SA", "timezone": "GMT", "openDate": "2014-03-13T12:45:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165677", "name": "Daventry Town v Kettering", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27160160", "name": "Porto v Napoli", "countryCode": "PT", "timezone": "GMT", "openDate": "2014-03-13T18:00:00.000Z" }, "marketCount": 84 }, { "event": { "id": "27162435", "name": "Bishops Stortford v Hayes And Yeading", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 2 }, { "event": { "id": "27166333", "name": "Bosnia U19 v Serbia U19", "timezone": "GMT", "openDate": "2014-03-13T12:30:00.000Z" }, "marketCount": 25 }, { "event": { "id": "27162436", "name": "Maidenhead v Gosport Borough", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165673", "name": "ASA Tel Aviv Uni (W) v FC Ramat Hasharon (W)", "countryCode": "IL", "timezone": "GMT", "openDate": "2014-03-13T17:15:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27164435", "name": "Forest Green v Braintree", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165684", "name": "FC Lokomotivi Tbilisi v FC Saburtalo Tbilisi", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165686", "name": "FC Sasco Tbilisi v Matchak Khelvachauri", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" }, "marketCount": 18 }, { "event": { "id": "27165680", "name": "FAR Rabat v Maghreb Fes", "countryCode": "MA", "timezone": "GMT", "openDate": "2014-03-13T15:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165683", "name": "FC Kolkheti Khobi v Samgurali Tskaltubo", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165682", "name": "FC Dila Gori II v FC Dinamo Batumi", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165693", "name": "Tilbury FC v Redbridge", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165688", "name": "HUJK Emmaste v Kohtla-Jarve JK Jarve", "countryCode": "EE", "timezone": "GMT", "openDate": "2014-03-13T17:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165690", "name": "M Kishronot Hadera (W) v Maccabi Holon FC (W)", "countryCode": "IL", "timezone": "GMT", "openDate": "2014-03-13T17:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27166225", "name": "Litex Lovech v Cherno More", "countryCode": "BG", "timezone": "GMT", "openDate": "2014-03-13T15:30:00.000Z" }, "marketCount": 27 }, { "event": { "id": "27162412", "name": "KR Reykjavik v IA Akranes", "countryCode": "IS", "timezone": "GMT", "openDate": "2014-03-13T19:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27162473", "name": "Atletico Huila v Tolima", "countryCode": "CO", "timezone": "GMT", "openDate": "2014-03-13T23:00:00.000Z" }, "marketCount": 27 }, { "event": { "id": "27162413", "name": "KV v Selfoss", "countryCode": "IS", "timezone": "GMT", "openDate": "2014-03-13T21:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165159", "name": "August Town FC v Boys Town FC", "countryCode": "JM", "timezone": "GMT", "openDate": "2014-03-13T20:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27165161", "name": "Bogota v CD Barranquilla", "countryCode": "CO", "timezone": "GMT", "openDate": "2014-03-13T20:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27166474", "name": "Brasilia FC v Formosa", "countryCode": "BR", "timezone": "GMT", "openDate": "2014-03-13T19:00:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27162538", "name": "Arsenal FC v Penarol", "countryCode": "AR", "timezone": "GMT", "openDate": "2014-03-13T22:00:00.000Z" }, "marketCount": 40 }, { "event": { "id": "27166478", "name": "Ware FC v AFC Sudbury", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27165505", "name": "Tomsk v Tyumen", "countryCode": "RU", "timezone": "GMT", "openDate": "2014-03-13T11:30:00.000Z" }, "marketCount": 28 }, { "event": { "id": "27166477", "name": "Needham Market FC v Thurrock", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27160154", "name": "Lyon v Plzen", "countryCode": "FR", "timezone": "GMT", "openDate": "2014-03-13T20:05:00.000Z" }, "marketCount": 41 }, { "event": { "id": "27160155", "name": "Ludogorets v Valencia", "countryCode": "BG", "timezone": "GMT", "openDate": "2014-03-13T18:00:00.000Z" }, "marketCount": 84 }, { "event": { "id": "27160152", "name": "Tottenham v Benfica", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T20:05:00.000Z" }, "marketCount": 84 }, { "event": { "id": "27162428", "name": "Wadi Degla v El Shorta", "countryCode": "EG", "timezone": "GMT", "openDate": "2014-03-13T13:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27160158", "name": "FC Basel v Red Bull Salzburg", "countryCode": "CH", "timezone": "GMT", "openDate": "2014-03-13T18:00:00.000Z" }, "marketCount": 84 }, { "event": { "id": "27162427", "name": "Ismaily v El Qanah", "countryCode": "EG", "timezone": "GMT", "openDate": "2014-03-13T13:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27160159", "name": "AZ Alkmaar v Anzhi Makhachkala", "countryCode": "NL", "timezone": "GMT", "openDate": "2014-03-13T20:05:00.000Z" }, "marketCount": 41 }, { "event": { "id": "27162426", "name": "Al Ahly v El Entag El Harby", "countryCode": "EG", "timezone": "GMT", "openDate": "2014-03-13T15:30:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27160156", "name": "Sevilla v Betis", "countryCode": "ES", "timezone": "GMT", "openDate": "2014-03-13T20:05:00.000Z" }, "marketCount": 84 }, { "event": { "id": "27160157", "name": "Juventus v Fiorentina", "countryCode": "IT", "timezone": "GMT", "openDate": "2014-03-13T20:05:00.000Z" }, "marketCount": 84 }, { "event": { "id": "27166336", "name": "Becamex Binh Duong U19 v Khanh Hoa U19", "countryCode": "VN", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27163800", "name": "Lokomotiv Sofia v Chernomorets Burgas", "countryCode": "BG", "timezone": "GMT", "openDate": "2014-03-13T12:00:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27162481", "name": "Ljungskile v Torslanda", "countryCode": "SE", "timezone": "GMT", "openDate": "2014-03-13T18:00:00.000Z" }, "marketCount": 27 }, { "event": { "id": "27166338", "name": "H Ironi Petah Tikva (W) v Maccabi Beer Sheva (W)", "countryCode": "IL", "timezone": "GMT", "openDate": "2014-03-13T18:15:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27163801", "name": "Concord Rangers v Havant and W", "countryCode": "GB", "timezone": "GMT", "openDate": "2014-03-13T19:45:00.000Z" }, "marketCount": 2 }, { "event": { "id": "27166340", "name": "Maccabi Ironi Bat Yam v Hapoel Mahane Yehuda", "countryCode": "IL", "timezone": "GMT", "openDate": "2014-03-13T17:00:00.000Z" }, "marketCount": 15 }, { "event": { "id": "27162418", "name": "Courts Young Lions v Woodlands Wellington", "countryCode": "SG", "timezone": "GMT", "openDate": "2014-03-13T11:30:00.000Z" }, "marketCount": 20 }, { "event": { "id": "27162417", "name": "Balestier Khalsa v Tanjong Pagar Utd", "countryCode": "SG", "timezone": "GMT", "openDate": "2014-03-13T11:30:00.000Z" }, "marketCount": 20 } ], "id": 1 } ] Request the Market Information for an Event The below example demonstrates how to retrieve all the market information that belongs to an event (excluding price data). You can include one or more eventId's in the requests provide that you stay within the Market Data Limits listMarketCatalogue Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listMarketCatalogue", "params": { "filter": { "eventIds": [ "27165685" ] }, "maxResults": "200", "marketProjection": [ "COMPETITION", "EVENT", "EVENT_TYPE", "RUNNER_DESCRIPTION", "RUNNER_METADATA", "MARKET_START_TIME" ] }, "id": 1 } ] listMarketCatalogue Response [ { "jsonrpc": "2.0", "result": [ { "marketId": "1.113197547", "marketName": "FC Betlemi Keda +1", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 12, "runners": [ { "selectionId": 6843871, "runnerName": "FC Betlemi Keda +1", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123618" } }, { "selectionId": 6830600, "runnerName": "FC Samtredia -1", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123619" } }, { "selectionId": 151478, "runnerName": "Draw", "handicap": 0, "sortPriority": 3, "metadata": { "runnerId": "63123620" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197546", "marketName": "FC Samtredia +1", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 0, "runners": [ { "selectionId": 6830597, "runnerName": "FC Samtredia +1", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123615" } }, { "selectionId": 6843874, "runnerName": "FC Betlemi Keda -1", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123616" } }, { "selectionId": 151478, "runnerName": "Draw", "handicap": 0, "sortPriority": 3, "metadata": { "runnerId": "63123617" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197492", "marketName": "Total Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 246.82, "runners": [ { "selectionId": 285469, "runnerName": "1 goals or more", "handicap": -1, "sortPriority": 1, "metadata": { "runnerId": "63123486" } }, { "selectionId": 285470, "runnerName": "2 goals or more", "handicap": -2, "sortPriority": 2, "metadata": { "runnerId": "63123487" } }, { "selectionId": 285471, "runnerName": "3 goals or more", "handicap": -3, "sortPriority": 3, "metadata": { "runnerId": "63123488" } }, { "selectionId": 2795170, "runnerName": "4 goals or more", "handicap": -4, "sortPriority": 4, "metadata": { "runnerId": "63123489" } }, { "selectionId": 285473, "runnerName": "5 goals or more", "handicap": -5, "sortPriority": 5, "metadata": { "runnerId": "63123490" } }, { "selectionId": 285474, "runnerName": "6 goals or more", "handicap": -6, "sortPriority": 6, "metadata": { "runnerId": "63123491" } }, { "selectionId": 8215951, "runnerName": "7 goals or more", "handicap": -7, "sortPriority": 7, "metadata": { "runnerId": "63123492" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197491", "marketName": "Match Odds", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 7707.52, "runners": [ { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123483" } }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123484" } }, { "selectionId": 58805, "runnerName": "The Draw", "handicap": 0, "sortPriority": 3, "metadata": { "runnerId": "63123485" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197550", "marketName": "Both teams to Score?", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 14.78, "runners": [ { "selectionId": 30246, "runnerName": "Yes", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123625" } }, { "selectionId": 30247, "runnerName": "No", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123626" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197501", "marketName": "Next Goal", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 3.34, "runners": [ { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123495" } }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123496" } }, { "selectionId": 69852, "runnerName": "No Goal", "handicap": 0, "sortPriority": 3, "metadata": { "runnerId": "63123497" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197502", "marketName": "Over/Under 6.5 Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 1255.79, "runners": [ { "selectionId": 2542448, "runnerName": "Under 6.5 Goals", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123498" } }, { "selectionId": 2542449, "runnerName": "Over 6.5 Goals", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123499" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197505", "marketName": "Correct Score", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 2380.92, "runners": [ { "selectionId": 1, "runnerName": "0 - 0", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123505" } }, { "selectionId": 4, "runnerName": "0 - 1", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123506" } }, { "selectionId": 9, "runnerName": "0 - 2", "handicap": 0, "sortPriority": 3, "metadata": { "runnerId": "63123507" } }, { "selectionId": 16, "runnerName": "0 - 3", "handicap": 0, "sortPriority": 4, "metadata": { "runnerId": "63123508" } }, { "selectionId": 2, "runnerName": "1 - 0", "handicap": 0, "sortPriority": 5, "metadata": { "runnerId": "63123509" } }, { "selectionId": 3, "runnerName": "1 - 1", "handicap": 0, "sortPriority": 6, "metadata": { "runnerId": "63123510" } }, { "selectionId": 8, "runnerName": "1 - 2", "handicap": 0, "sortPriority": 7, "metadata": { "runnerId": "63123511" } }, { "selectionId": 15, "runnerName": "1 - 3", "handicap": 0, "sortPriority": 8, "metadata": { "runnerId": "63123512" } }, { "selectionId": 5, "runnerName": "2 - 0", "handicap": 0, "sortPriority": 9, "metadata": { "runnerId": "63123513" } }, { "selectionId": 6, "runnerName": "2 - 1", "handicap": 0, "sortPriority": 10, "metadata": { "runnerId": "63123514" } }, { "selectionId": 7, "runnerName": "2 - 2", "handicap": 0, "sortPriority": 11, "metadata": { "runnerId": "63123515" } }, { "selectionId": 14, "runnerName": "2 - 3", "handicap": 0, "sortPriority": 12, "metadata": { "runnerId": "63123516" } }, { "selectionId": 10, "runnerName": "3 - 0", "handicap": 0, "sortPriority": 13, "metadata": { "runnerId": "63123517" } }, { "selectionId": 11, "runnerName": "3 - 1", "handicap": 0, "sortPriority": 14, "metadata": { "runnerId": "63123518" } }, { "selectionId": 12, "runnerName": "3 - 2", "handicap": 0, "sortPriority": 15, "metadata": { "runnerId": "63123519" } }, { "selectionId": 13, "runnerName": "3 - 3", "handicap": 0, "sortPriority": 16, "metadata": { "runnerId": "63123520" } }, { "selectionId": 4506345, "runnerName": "Any Unquoted ", "handicap": 0, "sortPriority": 17, "metadata": { "runnerId": "63123521" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197506", "marketName": "Over/Under 2.5 Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 4149.36, "runners": [ { "selectionId": 47972, "runnerName": "Under 2.5 Goals", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123522" } }, { "selectionId": 47973, "runnerName": "Over 2.5 Goals", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123523" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197504", "marketName": "Over/Under 5.5 Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 2216.24, "runners": [ { "selectionId": 1485567, "runnerName": "Under 5.5 Goals", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123503" } }, { "selectionId": 1485568, "runnerName": "Over 5.5 Goals", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123504" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197509", "marketName": "Half Time/Full Time", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 97.3, "runners": [ { "selectionId": 6830596, "runnerName": "FC Samtredia/FC Samtredia", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123536" } }, { "selectionId": 6830599, "runnerName": "FC Samtredia/Draw", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123537" } }, { "selectionId": 8380726, "runnerName": "FC Samtredia/FC Betlemi Ked", "handicap": 0, "sortPriority": 3, "metadata": { "runnerId": "63123538" } }, { "selectionId": 6830595, "runnerName": "Draw/FC Samtredia", "handicap": 0, "sortPriority": 4, "metadata": { "runnerId": "63123539" } }, { "selectionId": 3710152, "runnerName": "Draw/Draw", "handicap": 0, "sortPriority": 5, "metadata": { "runnerId": "63123540" } }, { "selectionId": 6843869, "runnerName": "Draw/FC Betlemi Ked", "handicap": 0, "sortPriority": 6, "metadata": { "runnerId": "63123541" } }, { "selectionId": 8380727, "runnerName": "FC Betlemi Ked/FC Samtredia", "handicap": 0, "sortPriority": 7, "metadata": { "runnerId": "63123542" } }, { "selectionId": 6843873, "runnerName": "FC Betlemi Ked/Draw", "handicap": 0, "sortPriority": 8, "metadata": { "runnerId": "63123543" } }, { "selectionId": 6843870, "runnerName": "FC Betlemi Ked/FC Betlemi Ked", "handicap": 0, "sortPriority": 9, "metadata": { "runnerId": "63123544" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197510", "marketName": "Over/Under 1.5 Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 1879.69, "runners": [ { "selectionId": 1221385, "runnerName": "Under 1.5 Goals", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123545" } }, { "selectionId": 1221386, "runnerName": "Over 1.5 Goals", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123546" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197507", "marketName": "Over/Under 4.5 Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 3189.28, "runners": [ { "selectionId": 1222347, "runnerName": "Under 4.5 Goals", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123524" } }, { "selectionId": 1222346, "runnerName": "Over 4.5 Goals", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123525" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197511", "marketName": "Over/Under 3.5 Goals", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 3934.41, "runners": [ { "selectionId": 1222344, "runnerName": "Under 3.5 Goals", "handicap": 0, "sortPriority": 1, "metadata": { "runnerId": "63123547" } }, { "selectionId": 1222345, "runnerName": "Over 3.5 Goals", "handicap": 0, "sortPriority": 2, "metadata": { "runnerId": "63123548" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } }, { "marketId": "1.113197512", "marketName": "Asian Handicap", "marketStartTime": "2014-03-13T11:00:00.000Z", "totalMatched": 1599.38, "runners": [ { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -4, "sortPriority": 1 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 4, "sortPriority": 2 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -3.75, "sortPriority": 3 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 3.75, "sortPriority": 4 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -3.5, "sortPriority": 5 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 3.5, "sortPriority": 6 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -3.25, "sortPriority": 7 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 3.25, "sortPriority": 8 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -3, "sortPriority": 9 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 3, "sortPriority": 10 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -2.75, "sortPriority": 11 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 2.75, "sortPriority": 12 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -2.5, "sortPriority": 13 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 2.5, "sortPriority": 14 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -2.25, "sortPriority": 15 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 2.25, "sortPriority": 16 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -2, "sortPriority": 17 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 2, "sortPriority": 18 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -1.75, "sortPriority": 19 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 1.75, "sortPriority": 20 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -1.5, "sortPriority": 21 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 1.5, "sortPriority": 22 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -1.25, "sortPriority": 23 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 1.25, "sortPriority": 24 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -1, "sortPriority": 25 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 1, "sortPriority": 26 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -0.75, "sortPriority": 27 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 0.75, "sortPriority": 28 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -0.5, "sortPriority": 29 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 0.5, "sortPriority": 30 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": -0.25, "sortPriority": 31 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 0.25, "sortPriority": 32 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 0, "sortPriority": 33 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": 0, "sortPriority": 34 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 0.25, "sortPriority": 35 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -0.25, "sortPriority": 36 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 0.5, "sortPriority": 37 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -0.5, "sortPriority": 38 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 0.75, "sortPriority": 39 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -0.75, "sortPriority": 40 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 1, "sortPriority": 41 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -1, "sortPriority": 42 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 1.25, "sortPriority": 43 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -1.25, "sortPriority": 44 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 1.5, "sortPriority": 45 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -1.5, "sortPriority": 46 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 1.75, "sortPriority": 47 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -1.75, "sortPriority": 48 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 2, "sortPriority": 49 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -2, "sortPriority": 50 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 2.25, "sortPriority": 51 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -2.25, "sortPriority": 52 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 2.5, "sortPriority": 53 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -2.5, "sortPriority": 54 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 2.75, "sortPriority": 55 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -2.75, "sortPriority": 56 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 3, "sortPriority": 57 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -3, "sortPriority": 58 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 3.25, "sortPriority": 59 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -3.25, "sortPriority": 60 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 3.5, "sortPriority": 61 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -3.5, "sortPriority": 62 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 3.75, "sortPriority": 63 }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -3.75, "sortPriority": 64 }, { "selectionId": 6830593, "runnerName": "FC Samtredia", "handicap": 4, "sortPriority": 65, "metadata": { "runnerId": "63123613" } }, { "selectionId": 6843866, "runnerName": "FC Betlemi Keda", "handicap": -4, "sortPriority": 66, "metadata": { "runnerId": "63123614" } } ], "eventType": { "id": "1", "name": "Soccer" }, "competition": { "id": "2356065", "name": "Pirveli Liga" }, "event": { "id": "27165685", "name": "FC Samtredia v FC Betlemi Keda", "countryCode": "GE", "timezone": "GMT", "openDate": "2014-03-13T11:00:00.000Z" } } ], "id": 1 } ] Horse Racing - Today's Win & Place Markets The below request is an example of retrieving the available win/place horse racing markets for a specific day. The marketStartTime (from & to) should be updated accordingly. listMarketCatalogue Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listMarketCatalogue", "params": { "filter": { "eventTypeIds": [ "7" ], "marketTypeCodes": [ "WIN", "PLACE" ], "marketStartTime": { "from": "2013-10-16T00:00:00Z", "to": "2013-10-16T23:59:00Z" } }, "maxResults": "200", "marketProjection": [ "MARKET_START_TIME", "RUNNER_METADATA", "RUNNER_DESCRIPTION", "EVENT_TYPE", "EVENT", "COMPETITION" ] }, "id": 1 } ] Football Competitions To retrieve all football competitions, you call the eventTypeId; operation with the following market filter: listCompetitions Request { "params": { "filter": { "eventTypeIds": [1] } }, "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listCompetitions", "id": 1 } The "filter" selects all markets that have an eventTypeId of 1 (which is the event type for Football). Then returns a list of Competitions and their Ids and how many markets are in each competition which are associated with those markets: listCompetitions Response { "jsonrpc": "2.0", "result": [ { "marketCount": 16, "competition": { "id": "833222", "name": "Turkish Division 2" } }, { "marketCount": 127, "competition": { "id": "5", "name": "A-League 2012/13" } }, { "marketCount": 212, "competition": { "id": "7", "name": "Austrian Bundesliga" } }, { "marketCount": 243, "competition": { "id": "11", "name": "Dutch Jupiler League" } }, { "marketCount": 206, "competition": { "id": "26207", "name": "Greek Cup" } }, { "marketCount": 117, "competition": { "id": "2129602", "name": "Professional Development League" } }, { "marketCount": 68, "competition": { "id": "803237", "name": "Argentinian Primera B" } }, { "marketCount": 1, "competition": { "id": "1842928", "name": "OTB Bank Liga" } } ], "id": 1 } Python Example import requests import json url="https://api.betfair.com/betting/json-rpc" header = { 'X-Application' : "APP_KEY_HERE", 'X-Authentication : 'SESSION_TOKEN', 'content-type' : 'application/json' } jsonrpc_req='{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listCompetitions", "params": {"filter":{ "eventTypeIds" : [1] }}, "id": 1}' print json.dumps(json.loads(jsonrpc_req), indent=3) print " " response = requests.post(url, data=jsonrpc_req, headers=header) print json.dumps(json.loads(response.text), indent=3) Market Prices Once you have identified the market (marketId) that your interested in using the listMarketCatalogue service, you can request prices for that market using the listMarketBook API call. This is an example showing a request for the best prices (back and lay) and trading volume including virtual bets. listMarketBook Request [{ "jsonrpc": "2.0", "method": "SportsAPING/v1.0/listMarketBook", "params": { "marketIds": ["1.127771425"], "priceProjection": { "priceData": ["EX_BEST_OFFERS", "EX_TRADED"], "virtualise": "true" } }, "id": 1 }][{ "jsonrpc": "2.0", "result": [{ "marketId": "1.127771425", "isMarketDataDelayed": false, "status": "OPEN", "betDelay": 0, "bspReconciled": false, "complete": true, "inplay": false, "numberOfWinners": 1, "numberOfRunners": 3, "numberOfActiveRunners": 3, "lastMatchTime": "2016-10-28T12:25:30.235Z", "totalMatched": 188959.22, "totalAvailable": 172932.96, "crossMatching": true, "runnersVoidable": false, "version": 1469071410, "runners": [{ "selectionId": 44790, "handicap": 0.0, "status": "ACTIVE", "lastPriceTraded": 7.0, "totalMatched": 12835.46, "ex": { "availableToBack": [{ "price": 7.0, "size": 75.53 }, { "price": 6.8, "size": 538.6 }, { "price": 6.6, "size": 612.2 }], "availableToLay": [{ "price": 7.2, "size": 152.12 }, { "price": 7.4, "size": 1446.28 }, { "price": 7.6, "size": 1250.26 }], "tradedVolume": [{ "price": 6.4, "size": 3.0 }, { "price": 6.6, "size": 3.59 }, { "price": 6.8, "size": 1.42 }, { "price": 7.0, "size": 1736.55 }, { "price": 7.2, "size": 1601.31 }, { "price": 7.4, "size": 3580.1 }, { "price": 7.6, "size": 4236.59 }, { "price": 7.8, "size": 1367.18 }, { "price": 8.0, "size": 305.29 }, { "price": 8.2, "size": 0.39 }] } }, { "selectionId": 489720, "handicap": 0.0, "status": "ACTIVE", "lastPriceTraded": 1.63, "totalMatched": 163020.94, "ex": { "availableToBack": [{ "price": 1.62, "size": 4921.06 }, { "price": 1.61, "size": 3230.34 }, { "price": 1.6, "size": 2237.71 }], "availableToLay": [{ "price": 1.63, "size": 1001.76 }, { "price": 1.64, "size": 6737.59 }, { "price": 1.65, "size": 1701.27 }], "tradedVolume": [{ "price": 1.53, "size": 31.38 }, { "price": 1.54, "size": 3.77 }, { "price": 1.57, "size": 3582.76 }, { "price": 1.58, "size": 12037.21 }, { "price": 1.59, "size": 16530.57 }, { "price": 1.6, "size": 54607.84 }, { "price": 1.61, "size": 36015.53 }, { "price": 1.62, "size": 21108.23 }, { "price": 1.63, "size": 17575.94 }, { "price": 1.64, "size": 1527.67 }] } }, { "selectionId": 58805, "handicap": 0.0, "status": "ACTIVE", "lastPriceTraded": 4.2, "totalMatched": 13102.81, "ex": { "availableToBack": [{ "price": 4.1, "size": 3243.85 }, { "price": 4.0, "size": 1158.17 }, { "price": 3.95, "size": 254.04 }], "availableToLay": [{ "price": 4.2, "size": 1701.15 }, { "price": 4.3, "size": 3072.55 }, { "price": 4.4, "size": 2365.76 }], "tradedVolume": [{ "price": 4.0, "size": 457.79 }, { "price": 4.1, "size": 4434.67 }, { "price": 4.2, "size": 7845.01 }, { "price": 4.3, "size": 354.7 }, { "price": 4.4, "size": 6.6 }, { "price": 4.9, "size": 4.0 }] } }] }], "id": 1 }] Placing a Bet To place a bet you require the marketId and selectionId parameters from the listMarketCatalogue API call. The below parameters will place a normal Exchange bet at odds of 3.0 for a stake of £2.0. If the bet is placed successfully, a betId is returned in the placeOrders response placeOrders Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": { "marketId": "1.109850906", "instructions": [ { "selectionId": "237486", "handicap": "0", "side": "LAY", "orderType": "LIMIT", "limitOrder": { "size": "2", "price": "3", "persistenceType": "LAPSE" } } ] }, "id": 1 } ] placeOrder Response [ { "jsonrpc": "2.0", "result": { "marketId": "1.109850906", "instructionReports": [ { "instruction": { "selectionId": 237486, "handicap": 0, "limitOrder": { "size": 2, "price": 3, "persistenceType": "LAPSE" }, "orderType": "LIMIT", "side": "LAY" }, "betId": "31242604945", "placedDate": "2013-10-30T14:22:47.000Z", "averagePriceMatched": 0, "sizeMatched": 0, "status": "SUCCESS" } ], "status": "SUCCESS" }, "id": 1 } ] Placing a Betfair SP Bet To place a bet on a selection at Betfair SP, you need to specify the parameters below in the placeOrders request. The below example would place a Betfair SP back bet on the required selection for a stake of £2.00. Request placeOrders Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": { "marketId": "1.111836557", "instructions": [ { "selectionId": "5404312", "handicap": "0", "side": "BACK", "orderType": "MARKET_ON_CLOSE", "marketOnCloseOrder": { "liability": "2" } } ] }, "id": 1 } ] placeOrders Response [ { "jsonrpc": "2.0", "result": { "marketId": "1.111836557", "instructionReports": [ { "instruction": { "selectionId": 5404312, "handicap": 0, "marketOnCloseOrder": { "liability": 2 }, "orderType": "MARKET_ON_CLOSE", "side": "BACK" }, "betId": "31645233727", "placedDate": "2013-11-12T12:07:29.000Z", "status": "SUCCESS" } ], "status": "SUCCESS" }, "id": 1 } ] Retrieving Details of Bet/s Placed on a Market/s You can use the listCurrentOrders request to retrieve of a bet/s placed on a specific market/s. listCurrentOrders request [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listCurrentOrders", "params": {"marketIds":["1.117020524"],"orderProjection":"ALL","dateRange":{}}, "id": 1}] [{"jsonrpc":"2.0","result":{"currentOrders":[{"betId":"45496907354","marke tId":"1.117020524","selectionId":9170340,"handicap":0.0,"priceSize":{"pric e":10.0,"size":5.0},"bspLiability":0.0,"side":"BACK","status":"EXECUTABLE" ,"persistenceType":"LAPSE","orderType":"LIMIT","placedDate":"2015-01-22T13 :01:53.000Z","averagePriceMatched":0.0,"sizeMatched":0.0,"sizeRemaining":5 .0,"sizeLapsed":0.0,"sizeCancelled":0.0,"sizeVoided":0.0,"regulatorCode":" GIBRALTAR REGULATOR"}],"moreAvailable":false},"id":1}] Retrieving the Result of a Settled Market To retrieve the result of a settled market simply make a request to listMarketBook after the market has been settled. The response will indicate whether the selection was settled as a 'WINNER' or 'LOSER' in the runners 'status' field. Settled market information is available for 90 days after settlement. listMarketBook Request to a Settled market [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/listMarketBook", "params": {"marketIds":["1.114363660"],"priceProjection":{"priceData":["EX_BEST_OFFE RS"]}}, "id": 1}] listMarketBook Response [ { "jsonrpc": "2.0", "result": [ { "marketId": "1.114363660", "isMarketDataDelayed": false, "status": "CLOSED", "betDelay": 0, "bspReconciled": false, "complete": true, "inplay": false, "numberOfWinners": 1, "numberOfRunners": 14, "numberOfActiveRunners": 0, "totalMatched": 0, "totalAvailable": 0, "crossMatching": false, "runnersVoidable": false, "version": 767398001, "runners": [ { "selectionId": 8611526, "handicap": 0, "status": "REMOVED", "adjustmentFactor": 9.1, "removalDate": "2014-06-13T08:44:17.000Z", "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 8611527, "handicap": 0, "status": "REMOVED", "adjustmentFactor": 3.5, "removalDate": "2014-06-13T08:44:29.000Z", "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7920154, "handicap": 0, "status": "WINNER", "adjustmentFactor": 17.5, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 1231425, "handicap": 0, "status": "LOSER", "adjustmentFactor": 4.3, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7533866, "handicap": 0, "status": "LOSER", "adjustmentFactor": 11.4, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 8220841, "handicap": 0, "status": "LOSER", "adjustmentFactor": 5.4, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7533883, "handicap": 0, "status": "LOSER", "adjustmentFactor": 8.7, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 8476712, "handicap": 0, "status": "LOSER", "adjustmentFactor": 8.7, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7012263, "handicap": 0, "status": "LOSER", "adjustmentFactor": 5.4, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7374225, "handicap": 0, "status": "LOSER", "adjustmentFactor": 8.7, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 8611525, "handicap": 0, "status": "LOSER", "adjustmentFactor": 0.7, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7659121, "handicap": 0, "status": "LOSER", "adjustmentFactor": 26.8, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 6996332, "handicap": 0, "status": "LOSER", "adjustmentFactor": 0.7, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } }, { "selectionId": 7137541, "handicap": 0, "status": "LOSER", "adjustmentFactor": 1.7, "ex": { "availableToBack": [], "availableToLay": [], "tradedVolume": [] } } ] } ], "id": 1 } ] Application Keys What is an Application Key? How to Create An Application Key Live & Delayed Application Keys Personal Betting Access - Application Key Overview What is an Application Key? In order to use the Betting & Accounts API, you need to have an Application Key. The Application Key identifies your API client. Two App Keys are assigned to a single Betfair account, one live App Key and one delayed App Key for testing. You must pass the Application Key with every HTTP request. You do this by setting the HTTP header with the value of the key assigned by Betfair. X-Application: APP_KEY_ASSIGNED Commercial Usage Please note: App Key generation is for personal betting purposes only. All data/API usage in any commercial context must be approved by Betfair. Please see the following licensing information for further details (https://developer.betfair.com/get-started/) Unauthorised commercial usage will be identified & blocked. How to Create An Application Key You can create an Application Key for your Betfair account using the Accounts API Visualiser and createDeveloperAppKeys operation 1. Click on the Accounts API Visualiser link & ensure the the Endpoint "PROD"/"UK" is selected. 2. Select the createDeveloperAppKeys operation from the list of Operations on the top left hand side of the visualiser. 3. Enter a sessionToken in the 'Session Token (ssoid)' text box. You can find instructions on how to find your sessionToken via your browser here. 4. Enter your Application Name (this must be unique) in the 'Request' column. The Application Name can be any name of your choice, but like your Betfair username, must be unique. 5. Press Execute at the bottom of the 'Request' column. Two Application Keys will then be created and displayed in the Developer Apps column of the demo tool Please note: The X-Application header is not required when using the createDeveloperAppKeys or the getDeveloperAppKeys service. The Application Name must be unique. We are aware that when using some browser versions to create App Keys the Visualiser throws an UNEXPECTED_ERROR when requesting createDeveloperAppKeys. Using an alternative browser/s should resolve this problem. You should also ensure that your Application Name is unique as attempts to create a duplicate Application Name will return an UNEXPECTED_ERROR response. Live & Delayed Application Keys The createDeveloperAppKeys service will assign two Application Keys (App Keys) to your Betfair account. One 'live' App Key and one 'delayed' App Key. A delayed App Key is displayed as 'Version 1.0-DELAY' via createDeveloperAppKeys/getDevelope rAppKeys Upon creation, the Live Application Key will be inactive. To apply for a Live Application key please click here and select Exchange API > For My Personal Betting and complete the application form at the bottom of the page. A one-off activation fee of £299 applies; this is debited directly from your Betfair account once access is approved The Delayed App Key operates on the live Betfair Exchange and not a testbed/sandbox environment. The Delayed App Key should be use for development purposes and any functional testing and provides delayed Betfair price data (EX_BEST_OFFERS only). The delay is variable between 1-60 second snapshots. The Delayed App Key must also be used in simulation/practice applications where the facility to bet into live Betfair markets is not available. The delayed App Key does not return traded volume data 'totalMatched' or EX_ALL_OFFERS via listMarketBook. The Stream API is only available via the Live Application Key subject to approval. * Historical Data is additionally made available for testing and analysis purposes. Please see the App Directory for further information on these services. Personal Betting Access - Application Key Overview Please see below table for a summary of the data/services available to Delayed & Live Application Keys. Delayed Application Key Live Application Key Use For Development Live betting applications Activation Fee None £299 Live Price Data Delayed* Yes Bet Placement (Live Exchange) Yes Yes Stream API Yes (contact Developer Support) Yes (on application) Price Levels 3 All Total Matched by Selection Not Available Yes Total Matched by Market Yes No *Delay is variable between 1-60 seconds Login & Session Management Login Non-Interactive login Interactive login Interactive login - Desktop Application Interactive login - API method Login Request Limits Keep Alive Headers URL Definition Response structure Status values Error values Call sample Keep Alive success Logout URL Definition Headers Response structure Status values Error values Call sample Login FAQ's When should I use the non-interactive login? Why is the redirect URL required for the interactive login? Why isn’t there a non-interactive endpoint that accepts only a username and a password? Why does my session time out, even though I’ve been retrieving prices? Why is my interactive login/logout request failing with errorCode=FORBIDDEN? Login The Betfair API offers three login flows for developers, depending on the use case of your application:. Non-Interactive login if you are building an application which will run autonomously, there is a separate login flow to follow to ensure your account remains secure. Interactive login if you are building an application which will be used interactively, then this is the flow for you. This flow has two variants: Interactive login - Desktop Application This login flow makes use of Betfair's login pages and allows your app to gracefully handle all errors and re-directions in the same way as the Betfair website Interactive login - API method This flow makes use of a JSON API Endpoint and is the simplest way to get started if you are looking to create your own login form. If you're looking for the quickest way to get started, try the curl example in the Interactive login - API Method. Login Request Limits Successful login requests are restricted to 100 request per minute.. In the event of a breach of the login limit the account will be prevented from creating new login session for a 20 minute period. The error TEMPORARY_BAN_TOO_MANY_REQUESTS will be returned in these circumstances. All existing sessions will continue to be valid. Keep Alive You can use Keep Alive to extend the session timeout period. The minimum session time is currently 20 minutes (Italian Exchange). On the inte rnational (.com) Exchange the current session time is 4 hours. Therefore, you should request Keep Alive within this time to prevent session expiry. If you don't call Keep Alive within the specified timeout period, the session will expire. Please note: Session times aren't determined or extended based on API activity. Headers Name Description Sample Accept (mandatory) Header that signals that the response should be returned as JSON application/json X-Authentication (mandatory) Header that represents the session token that needs to be keep alive Session Token X-Application (optional) Header the Application Key used by the customer to identify the product. App Key The presence of the "Accept: application/json" header will signal that the service should respond with JSON and not an HTML page URL Definition International jurisdictions: https://identitysso.betfair.com/api/keepAlive Spanish jurisdiction https://identitysso.betfair.es/api/keepAlive Romania jurisdiction: https://identitysso.betfair.ro/api/keepAlive Parameters - NONE Response structure { "token":" ", "product":"product_passed_as_header", "status":" ", "error":" " } Status values SUCCESS FAIL Error values INPUT_VALIDATION_ERROR INTERNAL_ERROR NO_SESSION Call sample # full request curl -k -i -H "Accept: application/json" -H "X-Application: AppKey" -H "X-Authentication: " https:// identitysso.betfair.com/api/keepAlive You can use Keep Alive to extend the session timeout period. The minimum session time is currently 20 minutes (Italian Exchange). On the international (.com) Exchange the current session time is 4 hours. Therefore, you should request Keep Alive within this time to prevent session expiry. If you don't call Keep Alive within the specified timeout period, the session will expire. Session times aren't determined or extended based on API activity. Keep Alive success curl -k -i -H "Accept: application/json" -H "X-Application: AppKey" -H "X-Authentication: SESSIONTOKEN" htt ps://identitysso.betfair.com/api/keepAlive { "token":"SESSIONTOKEN", "product":"AppKey", "status":"SUCCESS", "error":"" } Logout You can use Logout to terminate your existing session. URL Definition https://identitysso.betfair.com/api/logout The presence of the "Accept: application/json" header will signal that the service should respond with JSON and not an HTML page Headers Name Description Sample Accept (mandatory) Header that signals that the response should be returned as JSON application/json X-Authentication (mandatory) Header that represents the session token created at login. Session Token X-Application (optional) Header the Application Key used by the customer to identify the product. App Key Response structure { "token":" ", "product":"product_passed_as_header", "status":" ", "error":" " } Status values SUCCESS FAIL Error values INPUT_VALIDATION_ERROR INTERNAL_ERROR NO_SESSION Call sample # full request curl -k -i -H "Accept: application/json" -H "X-Application: AppKey" -H "X-Authentication: " https:// identitysso.betfair.com/api/logout Login FAQ's When should I use the non-interactive login? You should use the non-interactive login when the user will not be present to log into the application themselves. An example of this is an automated bot that might need to login without the user triggering a login. 3rd Party interfaces to Betfair, used by multiple users, and which act as a direct proxy of a user request should use the interactive login instead. Why is the redirect URL required for the interactive login? The redirect URL is required in order to post the session token to the application at the end of the login process. For further details of how to handle the session token please see Interactive Login from a Desktop Why isn’t there a non-interactive endpoint that accepts only a username and a password? Betfair take user security very seriously and have made many enhancements to the login process alongside additional changes which have been made at the request of some of our regulators. This means that you cannot rely upon a username and password being the only pieces of information that may be required at login. Some examples of workflows currently in use are 2 factor authorisation codes, additional National Identifiers for a region or requests for additional account information or account migration. Why does my session time out, even though I’ve been retrieving prices? For security reasons, we require that the application using the API explicitly calls the Keep Alive operation no more than once within every 4 hours in a response to user activity. In the case of non-interactive applications, these should call the keep-alive operation within every 4 hours whilst they are active. Why is my interactive login/logout request failing with errorCode=FORBIDDEN? Your Application Key App Key is not using the correct redirect URL. By default only https://www.betfair.com will be allowed as the redirect URL. Non-Interactive (bot) login Getting Started Creating a Self Signed Certificate Linking the Certificate to Your Betfair Account Note on File Formats Details of a Login Request Certificate Login Interface Details URL Definition Request headers Request Parameters Response Sample Code for Non-Interactive Login Sample C# code using PKCS#12 key store Sample Java code using Apache http client library and PKCS#12 key store Sample Python code The non-interactive login method for API-NG requires that you create and upload a self-signed certificate which will be used, alongside your username and password to authenticate your credentials and generate a session token. For the purposes of this guide, we have used openssl to generate this client, details of which can be found at http://www.openssl.org/ Getting Started There are a couple of steps required before we can actually log in: 1. Create a self-signed certificate 2. Link the certificate to your Betfair account Creating a Self Signed Certificate API-NG requires that a 1024-bit or 2048-bit RSA certificate be used. There are various tutorials available on the Internet but be aware that the certificate needs to be for client authentication (most tutorials only cover server authentication). Create a public/private RSA key pair using openssl openssl genrsa -out client-2048.key 2048 Update or Create the openssl configuration file (openssl.cnf) for OpenSSL to override some of the default settings: [ ssl_client ] basicConstraints = CA:FALSE nsCertType = client keyUsage = digitalSignature, keyEncipherment extendedKeyUsage = clientAuth In Windows, the config file is located in the installation directory of OpenSSL In Linux distributions, the config file is located at /usr/lib/ssl/openssl.cnf or /etc/ssl/openssl.cnf Create a certificate signing request (CSR). openssl req -new -config openssl.cnf -key client-2048.key -out client-2048.csr Country Name (2 letter code) [AU]:GB State or Province Name (full name) [Some-State]:London Locality Name (eg, city) []:London Organization Name (eg, company) [Internet Widgits Pty Ltd]:yourcompany.com Organizational Unit Name (eg, section) []:Security Team Common Name (e.g. server FQDN or YOUR name) []:Test API-NG Certificate Email Address []:my.name@mydomain.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: Self-sign the certificate request to create a certificate openssl x509 -req -days 365 -in client-2048.csr -signkey client-2048.key -out client-2048.crt -extfile openssl.cnf -extensions ssl_client In Windows, using any text editor, copy the contents of the .crt file and the .key file into a new file. Save this new file as client-2048.pem. Linking the Certificate to Your Betfair Account The previous steps should have created the following files: File name Description client-2048.key The private key. This file is needed in order to use the certificate and should be protected and shouldn’t be shared with anyone. client-2048.csr A certificate signing request. This file is no longer needed and can be deleted. client-2048.crt The certificate. This file is not sensitive in security terms and can be shared with anyone. Before you login using the certificate, it must be attached to your Betfair account, as follows: 1. Log in to your Betfair account through betfair.comPaste the following URL into the address bar of your browser 2. Navigate to https://myaccount.betfair.com/accountdetails/mysecurity?showAPI=1 - Note: Please use https://myaccount.betfair.it/accoun tdetails/mysecurity?showAPI=1 for the Italian Exchange or the endpoint relevant to your own jusristiction. See the URL Definition section for more details 3. Scroll to the section titled “Automated Betting Program Access” and click 'Edit' 4. Click on “Browse” and then locate and select the file client-2048.crt (client-2048.pem if applicable) created above. 5. Click on the “Upload Certificate” button. Scroll down to the “Automated Betting Program Access” section if required and the certificate details should be shown. You should now be able to log in to your Betfair account using the API-NG endpoint. Note on File Formats Some systems require that client certificates are in a different format to the ones we’ve created. The two most common formats are (a) PEM format key and certificate in a single file and (b) PKCS#12 format file. .NET applications require a PKCS#12 format file. To create a PEM format file that contains both the private key and the certificate you can use the following command: Linux cat client-2048.crt client-2048.key > client-2048.pem Create the PKCS#12 format using crt and key openssl pkcs12 -export -in client-2048.crt -inkey client-2048.key -out client-2048.p12 Don't circulate the key, PEM file or PCKS#12 format files as these files are security sensitive Details of a Login Request A login request can now be made as follows: 1. Submit a HTTP “POST” request to: https://identitysso.betfair.com/api/certlogin 2. As part of the SSL connection, the certificate created previously must be supplied. 3. Include a custom Header called “X-Application” with a value that identifies your application. The value is not validated and is only used to help with troubleshooting and diagnosing any problems. 4. Ensure the POST’s Content-Type is “application/x-www-form-urlencoded” rather than MIME attachment encoded. 5. As part of the POST body include two parameters “username” and “password” which should have the relevant username/password for your account. Certificate Login Interface Details URL Definition Certificate Endpoint https://identitysso.betfair.com/api/certlogin This endpoint is also available under the following: identitysso.betfair.com identitysso.betfair.es identitysso.betfair.it idenititysso.betfair.ro identitysso.w-con.betfair.com identitysso.betfaironline.eu Please note: Danish residents cannot use the Non-Interactive (bot) login method due to the NEMID requirement which is only supported by the Interactive Login - Desktop Application method Request headers X-Application - You must set the X-Application header to your application key. Request Parameters username (mandatory) - The username of the user logging in. password (mandatory) - The password of the user logging in. Please note: The username and password values should be encoded when making the login request. All method names are case sensitive, this includes login, keepAlive and logout. Response The response returned is a json string. If the response is successful then the loginStatus key will contain SUCCESS, for example: { sessionToken: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; loginStatus: SUCCESS; } Should a failure or exception be returned, the response will be structured as below and loginStatus will contain a failure reason: { loginStatus: INVALID_USERNAME_OR_PASSWORD; } The possible failure and exceptional return codes are: loginStatus Description INVALID_USERNAME_OR_PASSWORD the username or password are invalid ACCOUNT_NOW_LOCKED the account was just locked ACCOUNT_ALREADY_LOCKED the account is already locked PENDING_AUTH pending authentication TELBET_TERMS_CONDITIONS_NA Telbet terms and conditions rejected DUPLICATE_CARDS duplicate cards SECURITY_QUESTION_WRONG_3X the user has entered wrong the security answer 3 times KYC_SUSPEND KYC suspended SUSPENDED the account is suspended CLOSED the account is closed SELF_EXCLUDED the account has been self-excluded INVALID_CONNECTIVITY_TO_REGULATOR_DK the DK regulator cannot be accessed due to some internal problems in the system behind or in at regulator; timeout cases included. NOT_AUTHORIZED_BY_REGULATOR_DK the user identified by the given credentials is not authorized in the DK's jurisdictions due to the regulators' policies. Ex: the user for which this session should be created is not allowed to act(play, bet) in the DK's jurisdiction. INVALID_CONNECTIVITY_TO_REGULATOR_IT the IT regulator cannot be accessed due to some internal problems in the system behind or in at regulator; timeout cases included. NOT_AUTHORIZED_BY_REGULATOR_IT the user identified by the given credentials is not authorized in the IT's jurisdictions due to the regulators' policies. Ex: the user for which this session should be created is not allowed to act(play, bet) in the IT's jurisdiction. SECURITY_RESTRICTED_LOCATION the account is restricted due to security concerns BETTING_RESTRICTED_LOCATION the account is accessed from a location where betting is restricted TRADING_MASTER Trading Master Account TRADING_MASTER_SUSPENDED Suspended Trading Master Account AGENT_CLIENT_MASTER Agent Client Master AGENT_CLIENT_MASTER_SUSPENDED Suspended Agent Client Master DANISH_AUTHORIZATION_REQUIRED Danish authorization required SPAIN_MIGRATION_REQUIRED Spain migration required DENMARK_MIGRATION_REQUIRED Denmark migration required SPANISH_TERMS_ACCEPTANCE_REQUIRED The latest Spanish terms and conditions version must be accepted. You must login to the website to accept the new conditions. ITALIAN_CONTRACT_ACCEPTANCE_REQUIRED The latest Italian contract version must be accepted. You must login to the website to accept the new conditions. CERT_AUTH_REQUIRED Certificate required or certificate present but could not authenticate with it CHANGE_PASSWORD_REQUIRED Change password required PERSONAL_MESSAGE_REQUIRED Personal message required for the user INTERNATIONAL_TERMS_ACCEPTANCE_REQUIRED The latest international terms and conditions must be accepted prior to logging in. EMAIL_LOGIN_NOT_ALLOWED This account has not opted in to log in with the email MULTIPLE_USERS_WITH_SAME_CREDENTIAL There is more than one account with the same credential ACCOUNT_PENDING_PASSWORD_CHANGE The account must undergo password recovery to reactivate via https://identitysso.b etfair.com/view/recoverpassword TEMPORARY_BAN_TOO_MANY_REQUESTS The limit for successful login requests per minute has been exceeded. New login attempts will be banned for 20 minutes ITALIAN_PROFILING_ACCEPTANCE_REQUIRED You must login to the website to accept the new conditions Sample curl command to quickly check the certificate based login curl -q -k --cert client-2048.crt --key client-2048.key https://identitysso.betfair.com/api/certlogin -d "username=testuser&password=testpassword" -H "X-Application: curlCommandLineTest" Response should be {"sessionToken":"Zx8i4oigut5nc+l4L8qFb0DSxG+mwLn2t0AMGFxjrMJI=","loginStat us":"SUCCESS"} Sample Code for Non-Interactive Login Sample C# code using PKCS#12 key store Please see code sample via https://github.com/betfair/API-NG-sample-code/tree/master/loginCode/Non-interactive-cSharp Sample Java code using Apache http client library and PKCS#12 key store Java API-NG login package com.test.aping.client; import import import import import import import import import import import import org.apache.http.HttpEntity; org.apache.http.HttpResponse; org.apache.http.NameValuePair; org.apache.http.client.entity.UrlEncodedFormEntity; org.apache.http.client.methods.HttpPost; org.apache.http.conn.ClientConnectionManager; org.apache.http.conn.scheme.Scheme; org.apache.http.conn.ssl.SSLSocketFactory; org.apache.http.conn.ssl.StrictHostnameVerifier; org.apache.http.impl.client.DefaultHttpClient; org.apache.http.message.BasicNameValuePair; org.apache.http.util.EntityUtils; import import import import import import import import import import javax.net.ssl.KeyManager; javax.net.ssl.KeyManagerFactory; javax.net.ssl.SSLContext; java.io.File; java.io.FileInputStream; java.io.InputStream; java.security.KeyStore; java.security.SecureRandom; java.util.ArrayList; java.util.List; public class HttpClientSSO { private static int port = 443; public static void main(String[] args) throws Exception { DefaultHttpClient httpClient = new DefaultHttpClient(); try { SSLContext ctx = SSLContext.getInstance("TLS"); KeyManager[] keyManagers = getKeyManagers("pkcs12", new FileInputStream(new File("C:\\sslcerts\\client-2048.p12")), "password"); ctx.init(keyManagers, null, new SecureRandom()); SSLSocketFactory factory = new SSLSocketFactory(ctx, new StrictHostnameVerifier()); ClientConnectionManager manager = httpClient.getConnectionManager(); manager.getSchemeRegistry().register(new Scheme("https", port, factory)); HttpPost httpPost = new HttpPost("https://identitysso.betfair.com/api/certlogin"); List nvps = new ArrayList (); nvps.add(new BasicNameValuePair("username", "testuser")); nvps.add(new BasicNameValuePair("password", "testpassword")); httpPost.setEntity(new UrlEncodedFormEntity(nvps)); httpPost.setHeader("X-Application","appkey"); System.out.println("executing request" + httpPost.getRequestLine()); HttpResponse response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity(); System.out.println("----------------------------------------"); System.out.println(response.getStatusLine()); if (entity != null) { String responseString = EntityUtils.toString(entity); //extract the session token from responsestring System.out.println("responseString" + responseString); } } finally { httpClient.getConnectionManager().shutdown(); } } private static KeyManager[] getKeyManagers(String keyStoreType, InputStream keyStoreFile, String keyStorePassword) throws Exception { KeyStore keyStore = KeyStore.getInstance(keyStoreType); keyStore.load(keyStoreFile, keyStorePassword.toCharArray()); KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); kmf.init(keyStore, keyStorePassword.toCharArray()); return kmf.getKeyManagers(); } } Sample Python code #!/usr/bin/env python import requests #openssl x509 -x509toreq -in certificate.crt -out CSR.csr -signkey privateKey.key payload = 'username=myusername&password=password' headers = {'X-Application': 'SomeKey', 'Content-Type': 'application/x-www-form-urlencoded'} resp = requests.post('https://identitysso.betfair.com/api/certlogin', data=payload, cert=('client-2048.crt', 'client-2048.key'), headers=headers) if resp.status_code == 200: resp_json = resp.json() print resp_json['loginStatus'] print resp_json['sessionToken'] else: print "Request failed." ITALIAN_PROFILING_ACCEPTANCE_REQUIRED Certificate Generation With XCA If you aren't able (or willing) to setup openssl on your windows machine, there are various GUI wrappers around the toolset which you might be able to use instead. XCA is an open source wrapper around the OpenSSL toolset which allows you to create keys, csrs and certificates via a GUI and stores all of the generated items in a database file. First you need to download XCA, which is an open source wrapper around the openssl toolset from: http://sourceforge.net/projects/xca/ Step by Step Guide 1. 2. 3. 4. Install XCA and run it. Create a new Database, Name it something sensible Save it somewhere appropriate. This proprietary database is useful for the xca tool only and helps you store your keys, csrs, and certificates, the database file is not used in any part of the process with Betfair. Equivalent Open SSL Command - Create a public/private RSA key pair using openssl openssl genrsa -out client-2048.key 2048 Create a public/private RSA key pair using xca: Equivalent Open SSL Command - Create a certificate signing request (CSR). openssl req -new -config openssl.cnf -key client-2048.key -out client-2048.csr Select the Certificate signing requests tab and click New Request Select the CA template and click the Apply Extensions button. Click on the Subject tab and enter the name etc. The key that you generated in the first step must be selected (if the key doesn't appear, check the "Used keys tool" box) Click on the Extensions tab Ensure that Certification Authority is selected as the type. Click OK. Equivalent Open SSL Command - Self-sign the certificate request to create a certificate openssl x509 -req -days 365 -in client-2048.csr -signkey client-2048.key -out client-2048.crt -extfile openssl.cnf -extensions ssl_client We will now create and sign a certificate from the first two steps: Click the Certificates Tab and click New Certificate Click on the Subject tab and enter the name etc. The key that you generated in the first step must be selected (if the key doesn't appear, check the "Used keys tool" box) Click on the Source tab and select the parameters shown below: You should make sure that your CSR is selected but that “Copy extensions from the request” is unticked and that you have selected the [default] HTTPS_client and pressed the “Apply extensions” button. You can then press OK to create the self-signed certificate. Next we need to export the key and the certificate for use in our application. Export the private key and Certificate. These files should be used in the authentication process and should be referred to in your code where the private key (the .pem file) and certificate file (the .crt file) are mentioned. You can also export to other formats such as PKCS 12 depending upon the format expected by your language/library of choice. You should upload the .crt file exported to the My Security page on Betfair.com to allow this certificate access to your account. Interactive Login - Desktop Application Overview Obtaining the sessionToken from the POST data URL Definition (Global) URL Definition - Other Jurisdictions Parameters Overview Interactive login is to be used when the user is present to login (for example, 3rd Party Desktop Applications) and will manage any additional information required at login depending upon a customer's account (such as 2 Factor Authentication codes or National Identifiers). This is achieved by embedding the Betfair IdentitySSO login page in your application and then obtaining a successful session token upon login. The Keep Alive operation should be called within session expiry time if the user is still actively using your application. The embedded login page initially looks like this: The interactive login sequence looks like this: Obtaining the sessionToken from the POST data Once a login has been successfully made, the Javascript in the page will POST the session token ( ssoid) to the URL provided as a redirect URL. For a desktop application, this is not required to be a real page as the desktop application can intercept the POST request as it happens via the embedded browser container. A Windows based application can embed a web browser into the application and use the BeforeNavigate2 event to catch the post data sent to the redirect URL and there are platform specific alternatives. The POST request body will contain two URL encoded parameters (which you will need to URL Decode): ssoid - This is your session token and should be attached to requests made to API-NG in the X-Authentication header. errorCode - This is returned in a URL by Betfair and provides the reason for the login failure. This flow protects the implementing application from user login complexities, such as 2 factor auth, requiring national identifiers or jurisdictional migrations. The Interactive Login is the same login flow used by the Betfair website and therefore, any message's will be returned directly by Betfair & handled in the same way. errorCode ACCOUNT_ALREADY_LOCKED the account is already locked ACCOUNT_NOW_LOCKED the account was just locked ACCOUNT_PENDING_PASSWORD_CHANGE the account must undergo password recovery to reactivate via https://identitysso.betfair. com/view/recoverpassword AGENT_CLIENT_MASTER Agent Client Master AGENT_CLIENT_MASTER_SUSPENDED Suspended Agent Client Master BETTING_RESTRICTED_LOCATION the account is accessed from a location where betting is restricted CERT_AUTH_REQUIRED Certificate required or certificate present but could not authenticate with it CHANGE_PASSWORD_REQUIRED change password required CLOSED the account is closed DANISH_AUTHORIZATION_REQUIRED danish authorization required DENMARK_MIGRATION_REQUIRED denmark migration required DUPLICATE_CARDS duplicate cards EMAIL_LOGIN_NOT_ALLOWED This account has not opted in to log in with the email INVALID_CONNECTIVITY_TO_REGULATOR_DK the DK regulator cannot be accessed due to some internal problems in the system behind or in at regulator; timeout cases included. INVALID_CONNECTIVITY_TO_REGULATOR_IT the IT regulator cannot be accessed due to some internal problems in the system behind or in at regulator; timeout cases included. INVALID_USERNAME_OR_PASSWORD the username or password are invalid ITALIAN_CONTRACT_ACCEPTANCE_REQUIRED The latest italian contract version must be accepted KYC_SUSPEND KYC suspended NOT_AUTHORIZED_BY_REGULATOR_DK the user identified by the given credentials is not authorized in the DK's jurisdictions due to the regulators' policies. Ex: the user for which this session should be created is not allowed to act(play, bet) in the DK's jurisdiction. NOT_AUTHORIZED_BY_REGULATOR_IT the user identified by the given credentials is not authorized in the IT's jurisdictions due to the regulators' policies. Ex: the user for which this session should be created is not allowed to act(play, bet) in the IT's jurisdiction. MULTIPLE_USERS_WITH_SAME_CREDENTIAL There is more than one account with the same credential PENDING_AUTH pending authentication PERSONAL_MESSAGE_REQUIRED personal message required for the user SECURITY_QUESTION_WRONG_3X the user has entered wrong the security question 3 times SECURITY_RESTRICTED_LOCATION the account is restricted due to security concerns SELF_EXCLUDED the account has been self excluded SPAIN_MIGRATION_REQUIRED spain migration required SPANISH_TERMS_ACCEPTANCE_REQUIRED The latest spanish terms and conditions version must be accepted SUSPENDED the account is suspended TELBET_TERMS_CONDITIONS_NA Telbet terms and conditions rejected TRADING_MASTER Trading Master Account TRADING_MASTER_SUSPENDED Suspended Trading Master Account TEMPORARY_BAN_TOO_MANY_REQUESTS The limit for successful login requests per minute has been exceeded. New login attempts will be banned for 20 minutes URL Definition (Global) https://identitysso.betfair.com/view/login?product= &url= URL Definition - Other Jurisdictions Australian jurisdiction users: https://identitysso.betfair.com.au/view/login?product= &url= &url= Spanish jurisdiction users: https://identitysso.betfair.es/view/login?product= &url= Romania jurisdiction users: https://identitysso.betfair.ro/view/login?product= &url= Parameters Name Description Sample product(mandat ory) The product for which the login page is used and on which the user will do the login; This should be your application key. "IhDSui3ODdsdwo" url (mandatory) The url to which the the browser should be redirected in case of a successful login. By default only https://www.betfair.com will be allowed https://www.betfair.com Please note that all method names are case sensitive, this includes login, keepAlive and logout. Interactive Login - API Endpoint Overview and limitations URL Definition (Global) Other Jurisdictions Parameters (POST) Headers POST Example Payload Curl call sample Example of a successful login: Response Structure Status Values Status Codes & Error values Possible failure and exceptional return codes Overview and limitations The API login endpoint is the simplest method of integration for most applications in terms of expected development time but comes at the cost of being less flexible to edge-cases than the embedded Betfair embedded login page. It will allow a user to provide a username and password or a username and (password + 2 factor auth code) if they have strong authentication enabled. Customers who writing bots are for their own use are strongly recommended to use the non-interactive endpoint with an SSL certificate. We recommend that 3rd party applications which will be exposed to a wide range of users use the Interactive Login method of embedding the Betfair embedded login page as this will allow your application to handle additional workflows, such as terms and conditions updates as well as additional jurisdictional specific identifiers. The Keep alive and logout methods remain the same with this method of login. URL Definition (Global) API Login Endpoint https://identitysso.betfair.com/api/login Other Jurisdictions Italian jurisdiction users: https://identitysso.betfair.it/api/login Spanish jurisdiction users: https://identitysso.betfair.es/api/login Romania jurisdiction users: https://identitysso.betfair.ro/api/login Parameters (POST) Name Description Sample username (man datory) The username to be used for the login password (man datory) The password to be used for the login. For strong auth customers, this should be their password with a 2 factor auth code appended to the password string. Headers Name Description Sample Accept (mandatory) Signals that the response should be returned as JSON application/json X-Application (mandatory) AppKey used by the customer to identify the product. The presence of the "Accept: application/json" will signal SSO that it should respond with JSON and not with a HTML page. POST Example Accept: application/json X-Application: Content-Type: application/x-www-form-urlencoded URL endpoint: https://identitysso.betfair.com/api/login Payload username=username&password=password Curl call sample curl -k -i -H "Accept: application/json" -H "X-Application: " -X POST -d 'username= &password= ' https://identitysso.betfair.com/api/login Example of a successful login: curl -k -i -H "Accept: application/json" -H "X-Application: " -X POST -d 'username= &password= ' https://identitysso.betfair.com/api/login { "token":"SESSION_TOKEN", "product":"APP_KEY", "status":"SUCCESS", "error":"" } Response Structure { "token":" ", "product":"product_passed_as_header", "status":" ", "error":" " } Status Values SUCCESS LIMITED_ACCESS LOGIN_RESTRICTED FAIL Status Codes & Error values The below describes the status codes that can be returned and the associated error values: LIMITED_ACCESS - Access is limited (e.g. accounts can login but can't bet due to account suspension), product session will be provided. { "token": product_token, "product": product, "status": LIMITED_ACCESS, "error": error } error = {PENDING_AUTH | SECURITY_QUESTION_WRONG_3X | KYC_SUSPEND | SUSPENDED} LOGIN_RESTRICTED - login is restricted (in case of indirection point this is what will be returned), product session will not be provided: { "token": "", "product": product, "status": LOGIN_RESTRICTED, "error": error } error = {STRONG_AUTH_CODE_REQUIRED | DENMARK_MIGRATION_REQUIRED | DANISH_AUTHORIZATION_REQUIRED | SPAIN_MIGRATION_REQUIRED | SPANISH_TERMS_ACCEPTANCE_REQUIRED | ITALY_MIGRATION_REQUIRED | ITALIAN_CONTRACT_ACCEPTANCE_REQUIRED | CHANGE_PASSWORD_REQUIRED | PERSONAL_MESSAGE_REQUIRED} FAIL - All other cases are treated as errors, product session will not be provided: { "token": "", "product": product, "status": FAIL, "error": error } error = {TRADING_MASTER | TRADING_MASTER_SUSPENDED | AGENT_CLIENT_MASTER | AGENT_CLIENT_MASTER_SUSPENDED | DENMARK_MIGRATION_REQUIRED | INVALID_PIN | INVALID_USERNAME_OR_PASSWORD | PIN_DELETED_ON_FAILED_COUNT_EXCEEDED | UNRECOGNIZED_DEVICE | DUPLICATE_CARDS | ACCOUNT_NOW_LOCKED | ACCOUNT_ALREADY_LOCKED | SECURITY_RESTRICTED_LOCATION | BETTING_RESTRICTED_LOCATION | INVALID_CONNECTIVITY_TO_REGULATOR | INVALID_CONNECTIVITY_TO_REGULATOR | INVALID_CONNECTIVITY_TO_REGULATOR_IT | INVALID_CONNECTIVITY_TO_REGULATOR_DK| NOT_AUTHORIZED_BY_REGULATOR | NOT_AUTHORIZED_BY_REGULATOR | NOT_AUTHORIZED_BY_REGULATOR_DK | NOT_AUTHORIZED_BY_REGULATOR_IT | TELBET_TERMS_CONDITIONS_NA | CLOSED | SELF_EXCLUDED | NOT_AUTHORIZED_FOR_DOMAIN_ES | NOT_AUTHORIZED_FOR_DOMAIN_IT | NOT_AUTHORIZED_FOR_DOMAIN_COM | AUTHORIZED_ONLY_FOR_DOMAIN_ES} Please note that master account access is restricted for API/JSON requests. { "token": "", "product": "APP_KEY", "status": FAIL, "error": error } error = {INPUT_VALIDATION_ERROR | FORBIDDEN | INVALID_USERNAME_OR_PASSWORD | NO_SESSION | INVALID_PIN | INVALID_PIN_LOGIN_REQUEST | INVALID_PIN_LOGIN_REQUEST} Possible failure and exceptional return codes loginStatus Description TRADING_MASTER_SUSPENDED Suspended Trading Master Account TRADING_MASTER Trading Master Account TELBET_TERMS_CONDITIONS_NA Telbet terms and conditions rejected SUSPENDED the account is suspended SPANISH_TERMS_ACCEPTANCE_REQUIRED The latest Spanish terms and conditions version must be accepted SPAIN_MIGRATION_REQUIRED Spain migration required SELF_EXCLUDED the account has been self excluded SECURITY_RESTRICTED_LOCATION the account is restricted due to security concerns SECURITY_QUESTION_WRONG_3X the user has entered wrong the security question 3 times PERSONAL_MESSAGE_REQUIRED personal message required for the user PENDING_AUTH pending authentication NOT_AUTHORIZED_BY_REGULATOR_IT the user identified by the given credentials is not authorized in the IT's jurisdictions due to the regulators' policies. Ex: the user for which this session should be created is not allowed to act(play, bet) in the IT's jurisdiction. NOT_AUTHORIZED_BY_REGULATOR_DK the user identified by the given credentials is not authorized in the DK's jurisdictions due to the regulators' policies. Ex: the user for which this session should be created is not allowed to act(play, bet) in the DK's jurisdiction. KYC_SUSPEND KYC suspended ITALIAN_CONTRACT_ACCEPTANCE_REQUIRED The latest Italian contract version must be accepted INVALID_USERNAME_OR_PASSWORD the username or password are invalid INVALID_CONNECTIVITY_TO_REGULATOR_IT the IT regulator cannot be accessed due to some internal problems in the system behind or in at regulator; timeout cases included. INVALID_CONNECTIVITY_TO_REGULATOR_DK the DK regulator cannot be accessed due to some internal problems in the system behind or in at regulator; timeout cases included. DUPLICATE_CARDS duplicate cards DENMARK_MIGRATION_REQUIRED Denmark migration required DANISH_AUTHORIZATION_REQUIRED Danish authorization required CLOSED the account is closed CHANGE_PASSWORD_REQUIRED change password required CERT_AUTH_REQUIRED Certificate required or certificate present but could not authenticate with it BETTING_RESTRICTED_LOCATION the account is accessed from a location where betting is restricted AGENT_CLIENT_MASTER_SUSPENDED Suspended Agent Client Master AGENT_CLIENT_MASTER Agent Client Master ACCOUNT_NOW_LOCKED the account was just locked ACCOUNT_ALREADY_LOCKED the account is already locked TEMPORARY_BAN_TOO_MANY_REQUESTS The limit for successful login requests per minute has been exceeded. New login attempts will be banned for 20 minutes ACCOUNT_PENDING_PASSWORD_CHANGE the account must undergo password recovery to reactivate via https://identitysso.betfair. com/view/recoverpassword ITALIAN_PROFILING_ACCEPTANCE_REQUIRED You must login to the website to accept the new conditions Best Practice Development & Testing Session Management Expect: 100 - Continue Header Enabling HTTP compression HTTP Persistent connection Other performance tips To optimize performance and ensure that your application is interacting with the Betfair API correctly & as efficiently as possible, we strongly recommend the following as best practice guidelines. Development & Testing You should use the Delayed Application Key for any initial development and functional testing. Only apply for Live Application Key access once you are ready to start transacting on the Exchange using your Live Application Key. Please see the personal betting access overview for more details regarding the difference between Delayed an Live Application Keys Session Management Use Login to create a new session and Keep Alive to extend the session beyond the stated session expiry time. A single session can be used across multiple API calls/threads simultaneously. You should ensure that you handle the INVALID_SESSION_TOKEN error within your code by creating a new session token via the API login met hod. Expect: 100 - Continue Header Sending this header will result in the error: "The remote server returned an error: (417) Expectation Failed." You should be aware that if using the .Net Framework you will need to set the relevant property in the ServicePointManager which then prevents the "Expect" header from being added: System.Net.ServicePointManager.Expect100Continue = false; Enabling HTTP compression HTTP compression is a capability built into both web servers and web clients to reduce the number of bytes transmitted in an HTTP response. This makes better use of available bandwidth and increases performance while reducing download time. When enabled, HTTP protocol data is compressed before it is sent from the server. Clients capable of receiving compressed HTTP data announce that they support compression in the HTTP header. Almost all modern web browsers support HTTP Compression by default. The Betfair API uses HTTP to handle communication between API clients and servers. Therefore, the JSON messages can be compressed using the same HTTP compression used by web browsers. Custom API applications may need some modification before they can take advantage of this feature. Specifically, they need to send an additional HTTP header to indicate they support receipt of compressed responses from the API. In addition, some environments require you to explicitly decompress the response. We would therefore recommend that all Betfair API request are sent with the ‘Accept-Encoding: gzip, deflate’ request header. HTTP Persistent connection We recommend that Connection: keep-alive header is set for all requests to guarantee a persistent connection and therefore reducing latency. Other performance tips Additional advice regarding optimizing HTTPClient performance can be found via http://hc.apache.org/httpclient-3.x/performance.html API Demo Tools Demo tools are available for API-NG for both the Betting and Accounts API. quick experimentation with the API. The Demo Tools can be used by developers to allow Why Use Demo Tools? All existing API operations are available You can easily experiment with the parameters for your API queries. You can build sample requests and interact with the API directly requests and responses are output to the JavaScript debug console. For example, using Google Chrome, you can open the Javascript console using the shortcut Ctrl+Shift+J. The same shortcut can also be used with Mozilla Firefox. Please note that the Demo Tools are provided as-is, and is intended solely as a testing resource. Obtaining a Session Token for the Demo Tools There are several ways that you can obtain a session token for the visualiser: 1. Using the pre-populated session token from the website The Demo Tools will populate the session token field with the value of a session token found in your browsers cookie store for the Betfair.com Login to www.betfair.com (via a seperate browser tab) and refresh the demo tools page to automatically input the Session Token field website. 2. Manually adding the ssoid (session token) from the website cookie. Using Google Chrome you can inspect and copy the session directly from the browser by doing the following: 1, Press Ctrl+Shif+J 2. Selection Resource > Cookies > www.betfair.com 3. Copy the value for the cookie with name ssoid and paste this into the Demo Tool 3. Using the API-NG Interactive login sample Download SampleAPI.exe which is a compiled version of the sample interactive login code which is described in the documentation here, with the source from the API-NG Sample code github repo. Enter your application key and follow the login instructions; your session token with be extracted from your session and presented to you via the application. Market Data Request Limits Although you can request multiple markets from listMarketBook, listMarketCatalogue and listMarketProfitandLoss, there are limits on the amount of data requested in one request. sum(Weight) * number market ids must not exceed 200 points per request The following tables explain the "weighting" of data for each MarketProjection or PriceProjection. If you exceed the maximum weighting of 200 points, the API will return a TOO_MUCH_DATA error. listMarketCatalogue MarketProjection Weight MARKET_DESCRIPTION 1 RUNNER_DESCRIPTION 0 EVENT 0 EVENT_TYPE 0 COMPETITION 0 RUNNER_METADATA 1 MARKET_START_TIME 0 listMarketBook PriceProjection Weight Null (No PriceProjection set) 2 SP_AVAILABLE 3 SP_TRADED 7 EX_BEST_OFFERS 5 EX_ALL_OFFERS 17 EX_TRADED 17 Please note: specific combinations of priceProjections will carry different weights that aren't the sum of their individual weights. Please see a summary of these below: PriceProjection Weight EX_BEST_OFFERS + EX_TRADED 20 EX_ALL_OFFERS + EX_TRADED 32 If exBestOffersOverrides is used the weight is is calculated by weight * (requestedDepth/3). listMarketProfitandLoss PriceProjection Weight Not applicable 4 Understanding Market Navigation Recreating Website Navigation? Please note: if you want to recreate the exact navigation hierarchy used by the Betfair website, please use the Navigation Data for Applications service. In API-NG, navigating markets uses the concepts of faceted search. You've probably seen faceted search used on sites like eBay or Amazon where you pick a category, for example "Shoes" and then you see a list of shoes. Then, you can narrow your search by facets. For example, by colour or price. In a similar way, the new Sports API lets you find markets you're interested in and then get data back about a facet of those markets. The way to think of the API Navigation operations is to imagine a single table that lists every market, along with various metadata about the market. The columns of the table are the Facets (and the Nav Operations in API return some of them in combination): As you can see, the table has four markets along with some of the metadata associated with that market. Of course, the actual table would have tens of thousands of markets and more columns. Along the top, you can see three of the navigation operations. Each of those operations takes a "MarketFilter". The MarketFilter filters the table of markets and selects the ones that match. The MarketFilter can contain things like "going in play" or "eventId 7", etc. So, if you called "listCompetitions" and passed in a filter that looked like: Code: { "filter": {"turnsInPlay" : true }} The selected markets would look like: In the example, the 1001, 2355, and the 5621 market are the ones that match the filter. As you called "listCompetitions" with that filter, then the data returned is the columns containing competition information: In this example, you'd get a list of competitions like so: Code: {"competitionId" : "23", "competitionName" : "World Cup 2013"} Notice that the competition "Final 2013" was not returned. This is because the market was not selected by the MarketFilter. Also, notice that although the market 2355 was selected by the MarketFilter, it is not associated with a competition, so no competition id and name were returned for that market. As a further example, suppose that you used the same MarketFilter as before while calling listEvents. In that case, the data returned is the columns containing eventId and eventName for the markets that match the filter (i.e., turnsInPlay = True): In this example, you'd get a list of events like so: Code: [{"eventId" : "24", "eventName" : "Arsenal Vs. Reading"}, {"eventId" : "124", "eventName" : "Ascot 16th September"}, {"eventId" : "23", "eventName" : "Cheltenham 17th September"}] Again, notice that the event "Celtics vs Nicks" was not returned because it was not selected by the MarketFilter. One further example. Suppose you were only interested in Line markets and you want to find all of the Sports (EventTypes) that contain Line markets. You would create a MarketFilter like this: Code: { "filter": {"MarketBettingType" : "LINE" }} And call listEventTypes with that filter. The markets selected by that MarketFilter would be: and the data returned would be: Code: {"eventTypeId" : "4", "EventTypeName" : "Basketball"} Using the set of navigation operations, you can easily create a menu tree of markets in whatever hierarchy you want. You can can listEventTypes to get the Sports as the top of your menu. Or, you could call "listCountries" and use markets in a country as the root of the tree. There is also listMarketCatalogue so if you didn't care about creating a visual navigation, you could simply call listMarketCatalogue with a MarketF ilter defining the markets you're interested in and get back information about those markets. Reference Guide Navigation Data For Applications Betting API Betting Operations listCompetitions listCountries listCurrentOrders listClearedOrders listClearedOrders - Roll-up Fields Available listEvents listEventTypes listMarketBook listRunnerBook listMarketCatalogue listMarketProfitAndLoss listMarketTypes listTimeRanges listVenues placeOrders cancelOrders replaceOrders updateOrders Betfair Starting Price Betting (BSP) Betting On Italian Exchange Betting on Spanish Exchange Betting Exceptions Betting Enums Betting Type Definitions Accounts API Accounts Operations createDeveloperAppKeys getAccountDetails getAccountFunds getDeveloperAppKeys getAccountStatement listCurrencyRates transferFunds Accounts Exceptions Accounts Enums Accounts TypeDefinitions activateApplicationSubscription cancelApplicationSubscription getAffiliateRelation getApplicationSubscriptionHistory getApplicationSubscriptionToken getVendorClientId getVendorDetails isAccountSubscribedToWebApp listAccountSubscriptionTokens listApplicationSubscriptionTokens revokeAccessToWebApp token updateApplicationSubscription Heartbeat API Race Status API Vendor Services in API-NG Interface Definition Documents Reference Guide (Offline Copy) Documentation Versions The below log details any major updates to the API-NG Reference Guide. Version Description Date V 2.3 Update to include Race Status API with listRaceDetails operations 26-10-2015 V 2.2 Updated to include eachWayDivisor field in listMarketCatalogue response 21-04-2015 V 2.1 Updated to include additional country field in getAccountDetails response 09-01-2015 V 2.0 Updated to include transferFunds, updateApplicationSubscription operation and updates to getAccountfunds 29-09-2014 V 1.9 Updated to include Navigation Data For Applications 26-08-2014 V.1.8 Updated to include changes to error handing in listCurrentOrders 14-07-2014 V.1.7 Updated to include changes to getAccountFunds & Vendor Services API 16-06-2014 V.1.6 Updated to include getAccountStatement and listCurrencyRates 29-04-2014 V.1.5 Updated to include the Heartbeat API 09-04-2014 V.1.4 Updated to include changes to listClearedOrders and listMarketCatalogue. 24-02-2014 V.1.3 Introduced the listMarketProfitAndLoss functionality to the Betting API. 03-02-2014 V.1.2 Introduced the listClearedOrders functionality to the Betting API. 17-12-2013 V.1.1 Updates to the Vendor API, listCurrentOrders and addition of endpoint for Australian Exchange 07-10-2013 V1.0 Introduced login and vendor services functionality, moved to final endpoints. 29-07-2013 V0.4 Introduced additional Account functionality (getAccountFunds and getAccountDetails) 01-07-2013 V0.3 Introduced Account API-NG 03-06-2013 V0.2 Introduced betting functionality and listCurrentOrders 20-05-2013 V0.1 Initial release 09-12-2012 Navigation Data For Applications Endpoint & Required Headers ExampleExample Request Supported Locales Navigation Data File Structure JSON Model Structure ROOT EVENT_TYPE GROUP EVENT RACE MARKET Endpoint & Required Headers This Navigation Data for Applications service allows the retrieval of the full Betfair market navigation menu from a compressed file. Exchange HTTP Method Endpoint UK GET https://api.betfair.com/exchange/betting/rest/v1/en/navigation/menu.json ITALY GET https://api.betfair.it/exchange/betting/rest/v1/en/navigation/menu.json SPAIN GET https://api.betfair.es/exchange/betting/rest/v1/en/navigation/menu.json Best Practice The file data is cached and new request for the file once an hour should be suitable for those looking to accurately recreate the Betfair navigation menu. The following request headers are required: X-Application - Your Application Key X-Authentication - Your session token, obtained from the API login response. Example Request GET https://api.betfair.com/exchange/betting/rest/v1/en/navigation/menu.json Connection: keep-alive X-Application: X-Authentication: Accept: application/json Accept-Encoding: gzip,deflate Supported Locales The following languages are supported by the navigation file: en | en_GB | bg | da | de | el | es | it | pt | ru | sv English - en Spanish - es Italian - it German - de Swedish - sv Portuguese -pt Russian - ru Greek - el Bulgarian – bg Danish - da Navigation Data File Structure This is a diagram showing how the Navigation Data File is structured. In plain English: A ROOT group node has one or many EVENT_TYPE nodes An EVENT_TYPE node has zero, one or many GROUP nodes An EVENT_TYPE node has zero, one or many EVENT nodes A Horse Racing EVENT_TYPE node has zero, one or many RACE nodes A RACE node has one or many MARKET nodes A GROUP node has zero, one or many EVENT nodes A GROUP node has zero, one or many GROUP nodes An EVENT node has zero, one or many MARKET nodes An EVENT node has zero, one or many GROUP nodes An EVENT node has zero, one or many EVENT nodes JSON Model Structure ROOT { "children": [ { EVENT_TYPE1 }, { EVENT_TYPE2 }, ... ], "id": 0, // always 0 "name": "ROOT", // always ROOT "type": "GROUP" // always GROUP } EVENT_TYPE { "children": [ { GROUP or EVENT or RACE (RACE only if Greyhounds/Horse Racing) }, ... ], "id": "1", // Betfair specific eventTypeId "name": "Soccer", "type": "EVENT_TYPE" } GROUP { "children": [ { GROUP or EVENT }, ... ], "id": "74568202414", // Not a Betfair specific id, different for every GROUP "name": "Womens Soccer", "type": "GROUP" } EVENT { "children": [ { GROUP, MARKET or EVENT }, ... ], "id": "27244118", // Betfair specific eventId "name": "South Korea U20 (W) v Mexico U20 (W)", "countryCode": "GB", "type": "EVENT" } RACE { "children": [ { MARKET }, ... ], "id": "27247020.1115", // Betfair specific raceId "name": "1300m 3yo", "startTime": "2014-08-12T11:15:00.000Z", "type": "RACE", "venue": "Deauville", "raceNumber" : "R1", // US specific information about race numbers "countryCode": "GB" } MARKET { "exchangeId": "1", // Betfair specific exchangeId "id": "1.114881860", // Betfair specific marketId "marketStartTime": "2014-08-14T00:00:00.000Z", // Betfair specific marketStartTime "marketType": "WIN", // Betfair specific marketType (e.g. PLACE, WIN, FORECAST etc.) "numberOfWinners": "2", // Betfair specific number of winners "name": "Over/Under 6.5 Goals", "type": "MARKET" } Betting API Endpoints Please find the details for the current Betting API endpoints. If you have an Italian or Spanish Exchange account please see further details via the links below: Global Exchange Interface Endpoint JSON-RPC Prefix Example JSON-RPC https://api.betfair.com/exchange/betting/json-rpc/v1 JSON REST https://api.betfair.com/exchange/betting/rest/v1.0/ SportsAPING/v1.0/listMarketBook listMarketBook/ Betting on Spanish Exchange Betting On Italian Exchange Betting Operations Operation summary Type Operation Description List< EventTypeResult > listEventTypes ( MarketFilter filter ,Stringlocale ) Returns a list of Event Types (i.e. Sports) associated with the markets selected by the MarketFilter. List< CompetitionResult > listCompetitions ( MarketFilter filter ,Stringlocale ) Returns a list of Competitions (i.e., World Cup 2013) associated with the markets selected by the MarketFilter. Currently only Football markets have an associated competition. List< TimeRangeResult > listTimeRanges ( MarketFilter filter , TimeGranularity granularity ) Returns a list of time ranges in the granularity specified in the request (i.e. 3PM to 4PM, Aug 14th to Aug 15th) associated with the markets selected by the MarketFilter. List< EventResult > listEvents ( MarketFilter filter ,Stringlocale ) Returns a list of Events (i.e, Reading vs. Man United) associated with the markets selected by the MarketFilter. List< MarketTypeResult > listMarketTypes ( MarketFilter filter ,Stringlocale ) Returns a list of market types (i.e. MATCH_ODDS, NEXT_GOAL) associated with the markets selected by the MarketFilter. The market types are always the same, regardless of locale. List< CountryCodeResult > listCountries ( MarketFilter filter ,Stringlocale ) Returns a list of Countries associated with the markets selected by the MarketFilter. List< VenueResult > listVenues ( MarketFilter filter ,Stringlocale ) Returns a list of Venues (i.e. Cheltenham, Ascot) associated with the markets selected by the MarketFilter. Currently, only Horse Racing markets are associated with a Venue. List< MarketCatalogue > listMarketCatalogue ( MarketFilter filter ,Set< MarketProjection >m arketProjection, MarketSort sort, int maxResults, Stringlocale ) Returns a list of information about published (ACTIVE/SUSPENDED) markets that does not change (or changes very rarely). List< MarketBook > listMarketBook ( List marketIds , PriceProjection priceProj ection, OrderProjection orderProjection, MatchProjection matchProjec tion,StringcurrencyCode,Stringlocale, Date matchedSince, Set betIds ) Returns a list of dynamic data about markets. Dynamic data includes prices, the status of the market, the status of selections, the traded volume, and the status of any orders you have placed in the market List List listRunnerBook ( MarketId marketId, Selection Id selectionId, double handicap, PriceProjection priceProjection, Ord erProjection orderProjection, MatchProjection matchProjection, boolean includeOverallPosition, boolean partitionMatchedByStrategyRef, Set customerStrategyRefs, StringcurrencyCode,Stringlocale, Date matchedSince, Set betIds) throws APINGException Returns a list of dynamic data about a market and a specified runner. Dynamic data includes prices, the status of the market, the status of selections, the traded volume, and the status of any orders you have placed in the market.. List listMarketProfitAndLoss ( Set marketIds, boolean includeSettledBets, boolean includeBspBets, boolean netOfCommission ) Retrieve profit and loss for a given list of OPEN markets. The values are calculated using matched bets and optionally settled bets CurrentOrderSummaryReport listCurrentOrders ( Set betIds,Set marketIds, Order Projection orderProjection, TimeRange placedDateRange, OrderBy or derBy, SortDir sortDir,intfromRecord,intrecordCount ) Returns a list of your current orders. ClearedOrderSummaryReport listClearedOrders ( BetStatus betStatus, Set eventTypeIds, Set eventIds, Set marketIds, Set runnerIds, Set betIds, Side side, TimeRange settledDateRange, GroupBy groupBy, boolean includeItemDescription, String locale, int fromRecord, int recordCount ) Returns a list of settled bets based on the bet status, ordered by settled date PlaceExecutionReport placeOrders ( StringmarketId, List instructions, StringcustomerRef, MarketVersion marketVersion, String customerStrategyRef, boolean async) Place new orders into market. CancelExecutionReport cancelOrders ( StringmarketId, List instructio ns, StringcustomerRef ) Cancel all bets OR cancel all bets on a market OR fully or partially cancel particular orders on a market ReplaceExecutionReport replaceOrders ( StringmarketId, List< ReplaceInstruction> instructions, StringcustomerRef, MarketVersion marketVersion, boolean async) This operation is logically a bulk cancel followed by a bulk place. The cancel is completed first then the new orders are placed. UpdateExecutionReport updateOrders ( StringmarketId, List< UpdateInstruction> instructions, StringcustomerRef ) Update non-exposure changing fields listCompetitions Operation listCompetitions List< CompetitionResult > listCompetitions ( MarketFilter filter ,Stringlocale ) throws APINGExcepti on Returns a list of Competitions (i.e., World Cup 2013) associated with the markets selected by the MarketFilter. Currently only Football markets have an associated competition. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. locale String The language used for the response. If not specified, the default is returned. Return type Required Description Description List< CompetitionResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listCountries Operation listCountries List< CountryCodeResult > listCountries ( MarketFilter filter ,Stringlocale ) throws APINGException Returns a list of Countries associated with the markets selected by the MarketFilter. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. locale String The language used for the response. If not specified, the default is returned. Return type Required Description Description List< CountryCodeResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listCurrentOrders Operation listCurrentOrders CurrentOrderSummaryReport listCurrentOrders ( Set betIds,Set marketIds, OrderProj ection orderProjection, TimeRange placedDateRange, TimeRange dateRange, OrderBy orderBy, SortDir sortDir,intfromRecord,intrecordCount ) throws APINGException Returns a list of your current orders. Optionally you can filter and sort your current orders using the various parameters, setting none of the parameters will return all of your current orders up to a maximum of 1000 bets, ordered BY_BET and sorted EARLIEST_TO_LATEST. To retrieve more than 1000 orders, you need to make use of the fromRecord and recordCount parameters. Best Practice To efficiently track new bet matches from a specific time, customers should use a combination of the dateRange, orderB y "BY_MATCH_TIME" and orderProjection “ALL” to filter fully/partially matched orders from the list of returned bets. The response will then filter out any bet records that have no matched date and provide a list of betIds in the order which they are fully/partially matched from the date and time specified in the dateRange field. Parameter name Type Required Description betIds Set Optionally restricts the results to the specified bet IDs. A maximum of 250 betId's, or a combination of 250 betId's & marketId's are permitted. marketIds Set Optionally restricts the results to the specified market IDs. A maximum of 250 marketId's, or a combination of 250 marketId's & betId's are permitted. orderProjection OrderProjection Optionally restricts the results to the specified order status. customerOrderRefs Set Optionally restricts the results to the specified customer order references. customerStrategyRefs Set Optionally restricts the results to the specified customer strategy references. dateRange TimeRange Optionally restricts the results to be from/to the specified date, these dates are contextual to the orders being returned and therefore the dates used to filter on will change to placed, matched, voided or settled dates depending on the orderBy. This date is inclusive, i.e. if an order was placed on exactly this date (to the millisecond) then it will be included in the results. If the from is later than the to, no results will be returned. orderBy OrderBy Specifies how the results will be ordered. If no value is passed in, it defaults to BY_BET. Also acts as a filter such that only orders with a valid value in the field being ordered by will be returned (i.e. BY_VOID_TIME returns only voided orders, BY_SETTLED_TIME (applies to partially settled markets) returns only settled orders and BY_MATCH_TIME returns only orders with a matched date (voided, settled, matched orders)). Note that specifying an orderBy parameter defines the context of the date filter applied by the dateRange parameter (placed, matched, voided or settled date) - see the dateRange parameter description (above) for more information. See also the OrderBy type definition. sortDir SortDir Specifies the direction the results will be sorted in. If no value is passed in, it defaults to EARLIEST_TO_LATEST. fromRecord int Specifies the first record that will be returned. Records start at index zero, not at index one. recordCount int Specifies how many records will be returned from the index position 'fromRecord'. Note that there is a page size limit of 1000. A value of zero indicates that you would like all records (including and from 'fromRecord') up to the limit. Return type Description CurrentOrderSummaryReport Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listClearedOrders Operation listClearedOrders ClearedOrderSummaryReport listClearedOrders ( BetStatus betStatus, Set eventTypeIds, Set eventIds, Set marketIds, Set runnerIds, Set betIds, Side side, TimeRange settledDateRange, Group By groupBy, boolean includeItemDescription, String locale, int fromRecord, int recordCount ) throws APINGException Returns a list of settled bets based on the bet status, ordered by settled date. To retrieve more than 1000 records, you need to make use of the fromRecord and recordCount parameters. By default the service will return all available data for the last 90 days (see Best Practice note below). The fields available at each roll-up are available here Best Practice You should specify a settledDateRange "from" date when making requests for data. This reduces the amount of data that requires downloading & improves the speed of the response. Specifying a "from" date of the last call will ensure that only new data is returned. Parameter name Type Required Description betStatus BetStatus Restricts the results to the specified status. eventTypeIds Set Optionally restricts the results to the specified Event Type IDs. eventIds Set Optionally restricts the results to the specified Event IDs. marketIds Set Optionally restricts the results to the specified market IDs. runnerIds Set Optionally restricts the results to the specified Runners. betIds Set Optionally restricts the results to the specified bet IDs. customerOrderRefs Set Optionally restricts the results to the specified customer order references. customerStrategyRefs Set Optionally restricts the results to the specified customer strategy references. side Side Optionally restricts the results to the specified side. settledDateRange TimeRange Optionally restricts the results to be from/to the specified settled date. This date is inclusive, i.e. if an order was cleared on exactly this date (to the millisecond) then it will be included in the results. If the from is later than the to, no results will be returned. groupBy GroupBy How to aggregate the lines, if not supplied then the lowest level is returned, i.e. bet by bet This is only applicable to SETTLED BetStatus. includeItemDescription boolean If true then an ItemDescription object is included in the response. locale String The language used for the itemDescription. If not specified, the customer account default is returned. fromRecord int Specifies the first record that will be returned. Records start at index zero. recordCount int Specifies how many records will be returned, from the index position 'fromRecord'. Note that there is a page size limit of 1000. A value of zero indicates that you would like all records (including and from 'fromRecord') up to the limit. Return type Description ClearedOrderSummaryReport Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listClearedOrders - Roll-up Fields Available The below table indicates fields will be available at each roll-up when making requests to listClearedOrders using the groupBy parameter. Rollup level: BET SIDE MARKET EVENT EVENT_TYPE EXCHANGE Settled As Y Y Y Y Y Y Settled Date Y MAX MAX MAX MAX MAX Bet Count Y Y Y Y Y Y Profit Y SUM SUM SUM SUM SUM Exchange Id Y Y Y Y Y Y Event Type Id Y Y Y Y Y N Event Id Y Y Y Y N N Market Id Y Y Y N N N Selection Id Y Y N N N N Handicap Y Y N N N N Side Y Y N N N N Price Requested Y AVG N(AVG) N N N Price Matched Y AVG N(AVG) N N N Size Settled Y SUM N(SUM) N N N Price Reduced Y Y Y N N N Commission N N Y SUM SUM SUM Bet Id Y N N N N N Placed Date Y MAX MAX N N N Persistence Type Y Y Y N N N Order Type Y Y Y N N N Regulator Code Y Y Y N N N Regulator Auth Code Y Y Y N N N Y MAX MAX N N N Y N N N N N Voided Date(where BetOutcome listEvents Operation applicable) listEvents List< EventResult > listEvents ( MarketFilter filter ,Stringlocale ) throws APINGException Returns a list of Events (i.e, Reading vs. Man United) associated with the markets selected by the MarketFilter. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. locale String The language used for the response. If not specified, the default is returned. Return type Required Description Description List< EventResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listEventTypes Operation listEventTypes List< EventTypeResult > listEventTypes ( MarketFilter filter ,Stringlocale ) throws APINGException Returns a list of Event Types (i.e. Sports) associated with the markets selected by the MarketFilter. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. locale String The language used for the response. If not specified, the default is returned. Return type Required Description Description List< EventTypeResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listMarketBook Operation listMarketBook List< MarketBook > listMarketBook ( List marketIds , PriceProjection priceProjection, OrderP rojection orderProjection, MatchProjection matchProjection, boolean includeOverallPosition, boolean partitionMatchedByStrategyRef, Set customerStrategyRefs, StringcurrencyCode,Stringlocale, Date matchedSince, Set betIds) throws APINGException Returns a list of dynamic data about markets. Dynamic data includes prices, the status of the market, the status of selections, the traded volume, and the status of any orders you have placed in the market. Please note: Separate requests should be made for OPEN & CLOSED markets. Request that include both OPEN & CLOSED markets will only return those markets that are OPEN. Market Data Request Limits apply to requests made to listMarketBook that include price or order projections. Calls to listMarketBook should be made up to a maximum of 5 times per second to a single marketId. Best Practice Customers seeking to use listMarketBook to obtain price, volume, unmatched (EXECUTABLE) orders and matched position in a single operation should provide an OrderProjectionof “EXECUTABLE” in their listMarketBook request and receive all unmatched (EXECUTABLE) orders and the aggregated matched volume from all orders irrespective of whether they are partially or fully matched. The level of matched volume aggregation (MatchProjection) requested should be ROLLED_UP_BY_AVG_PRICE or ROLLED_UP_BY_PRICE, the former being preferred. This provides a single call in which you can track prices, traded volume, unmatched orders and your evolving matched position with a reasonably fixed, minimally sized response. Parameter name Type Required Description marketIds List One or more market ids. The number of markets returned depends on the amount of data you request via the price projection. priceProjection PriceProjection The projection of price data you want to receive in the response. orderProjection OrderProjection The orders you want to receive in the response. matchProjection MatchProjection If you ask for orders, specifies the representation of matches. includeOverallPosition boolean If you ask for orders, returns matches for each selection. Defaults to true if unspecified. partitionMatchedByStrategyRef boolean If you ask for orders, returns the breakdown of matches by strategy for each selection. Defaults to false if unspecified. customerStrategyRefs Set If you ask for orders, restricts the results to orders matching any of the specified set of customer defined strategies. Also filters which matches by strategy for selections are returned, if partitionMatchedByStrategyRef is true. An empty set will be treated as if the parameter has been omitted (or null passed). currencyCode String A Betfair standard currency code. If not specified, the default currency code is used. locale String The language used for the response. If not specified, the default is returned. matchedSince Date If you ask for orders, restricts the results to orders that have at least one fragment matched since the specified date (all matched fragments of such an order will be returned even if some were matched before the specified date). All EXECUTABLE orders will be returned regardless of matched date. betIds Set If you ask for orders, restricts the results to orders with the specified bet IDs. Return type Description List< MarketBook > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 Virtual Bets The Betfair Exchange uses a 'cross matching' algorithm to display the best possible prices (bets) available by taking into account the back and lay offers (unmatched bets) across all selections. You can return virtual bets in the response when using API-NG by including the virtualise":"true" in the listMarketBook request e.g. [{"jso nrpc": "2.0", "method": "SportsAPING/v1.0/listMarketBook", "params": {"marketIds":["1.114101556"],"priceProjection":{"priceData":["EX_BEST_OFFERS"],"virtualise":"true"}}, "id": 1}] One of the easiest ways to understand how we generate virtual bets for cross matching is to work through a couple of examples. Consider the following market and what would happen if we placed a very large back bet at 1.01 on The Draw: Without cross matching, this bet would be matched in three portions; 1) £150 at 5.0, 2) £250 at 3.0, and £999 at 1.01 with anything remaining being left unmatched. With cross matching we can do better. We have a back bet on Newcastle for £120 at 2.0 and a back bet on Chelsea for £150 at 3.0 (shown in pink on the available to lay side of the market). These two bets can be matched against a back bet on The Draw at a price of 6.0, since 2.0, 3.0, and 6.0 form a 100% book. To ensure that the book is balanced, we choose the stakes to be inversely proportional to the prices. This means that we take the full £120 at 2.0 on Newcastle, only £80 at 3.0 on Chelsea, and £40 at 6.0 on The Draw, which is the first virtual bet We now have a back bet on Newcastle for £75 at 2.5 and a back bet on Chelsea for £70 at 3.0 (again shown in pink on the available to lay side of the market). These two bets can be matched against a back bet on The Draw at a price of 3.75, since 2.5, 3.0, and 3.75 also form a 100% book. Balancing the stakes means that we need to take the full £75 at 2.5 on Newcastle, only £62.50 at 3.0 on Chelsea, and £50 at 3.75 on The Draw, which is the second virtual bet. Since 3.75 is less than 5.0, the £150 at 5.0 would be matched first followed by £50 at 3.75. If we continued this process we would get further matching at 1.50 and 1.05, but for the purposes of displaying the market view we have the best 3 prices for the available to back bets on The Draw, and so we can stop calculating the virtual bets. The virtual bets are just the bets that would have been matched had we received a sufficiently large back bet at 1.01; in this example, £40 at 6.0 and £50 at 3.75. We take these virtual bets and merge them with the existing bets on the market to generate the following market view (with the virtual bets shown in green) The process is repeated to obtain the virtual lay bets (available to back bets) for Newcastle and Chelsea. Here we have a slightly different market (as before, chosen to make the numbers nice) and consider what would happen if we placed a very large lay bet at 1000 on The Draw. Without cross matching, this bet would be matched in three portions; 1) £100 at 10.0, 2) £50 at 50.0, and £2 at 1000 with anything remaining being left unmatched. With cross matching we can do better. We have a lay bet on Newcastle for £300 at 2.0 and a lay bet on Chelsea for £150 at 3.0 (shown in blue on the available to back side of the market). These two bets can be matched against a lay bet on The Draw at a price of 6.0, since 2.0, 3.0, and 6.0 form a 100% book. To ensure that the book is balanced, we choose the stakes to be inversely proportional to the prices. This means that we take only £225 at 2.0 on Newcastle, the full £150 at 3.0 on Chelsea, and £75 at 6.0 on The Draw, which is the first virtual bet. Assuming these bets got matched, the market would look like this: We now have a lay bet on Newcastle for £75 at 2.0 and a lay bet on Chelsea for £250 at 2.4 (again shown in blue on the available to back side of the market). These two bets can be matched against a lay bet on The Draw at a price of 12.0, since 2.0, 2.4, and 12.0 also form a 100% book. Balancing the stakes means that we need to take the full £75 at 2.0 on Newcastle, only £62.50 at 2.4 on Chelsea, and £12.50 at 12.0 on The Draw, which is the second virtual bet. This leaves the following market: This time we can't continue the process since there is no valid price for a virtual bet on The Draw that would result in a 100% book, and so we can stop calculating the virtual bets. Again, the virtual bets are just the bets that would have been matched had we received a sufficiently large lay bet at 1000; in this example, £75 at 6.0 and £12.50 at 12.0. We take these virtual bets and merge them with the existing bets on the market to generate the following market view (with the virtual bets shown in orange): listRunnerBook List listRunnerBook ( MarketId marketId, SelectionId selectionId, double handicap, PriceProjection priceProjection, OrderProj ection orderProjection, MatchProjection matchProjection, boolean includeOverallPosition, boolean partitionMatchedByStrategyRef, Set customerStrategyRefs, StringcurrencyCode,Stringlocale, Date matchedSince, Set betIds) throws APINGException Returns a list of dynamic data about a market and a specified runner. Dynamic data includes prices, the status of the market, the status of selections, the traded volume, and the status of any orders you have placed in the market.. listRunnerBook behaviour You can only pass in one marketId and one selectionId in that market per request. If the selectionId being passed in is not a valid one / doesn’t belong in that market then the call will still work but only the market data is returned Parameter name Type Required Description marketId MarketId The unique id for the market.. selectionId SelectionId The unique id for the selection in the market. handicap double The projection of price data you want to receive in the response. priceProjection PriceProjection The projection of price data you want to receive in the response. orderProjection OrderProjection The orders you want to receive in the response. matchProjection MatchProjection If you ask for orders, specifies the representation of matches. includeOverallPosition boolean If you ask for orders, returns matches for each selection. Defaults to true if unspecified. partitionMatchedByStrategyRef boolean If you ask for orders, returns the breakdown of matches by strategy for each selection. Defaults to false if unspecified. customerStrategyRefs Set If you ask for orders, restricts the results to orders matching any of the specified set of customer defined strategies. Also filters which matches by strategy for selections are returned, if partitionMatchedByStrategyRef is true. An empty set will be treated as if the parameter has been omitted (or null passed). currencyCode String A Betfair standard currency code. If not specified, the default currency code is used. locale String The language used for the response. If not specified, the default is returned. matchedSince Date If you ask for orders, restricts the results to orders that have at least one fragment matched since the specified date (all matched fragments of such an order will be returned even if some were matched before the specified date). All EXECUTABLE orders will be returned regardless of matched date. betIds Set If you ask for orders, restricts the results to orders with the specified bet IDs. Return type Description List< MarketBook > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listMarketCatalogue Operation listMarketCatalogue List< MarketCatalogue > listMarketCatalogue ( MarketFilter filter ,Set< MarketProjection >marketProj ection, MarketSort sort, intmaxResults ,Stringlocale ) throws APINGException Returns a list of information about published (ACTIVE/SUSPENDED) markets that does not change (or changes very rarely). You use listMarketCatalogue to retrieve the name of the market, the names of selections and other information about markets. Market Data Request Limits apply to requests made to listMarketCatalogue. Please note: listMarketCatalogue does not return markets that are CLOSED. Parameter name Type Required filter MarketFilter Description The filter to select desired markets. All markets that match the criteria in the filter are selected. marketProjection Set< MarketProj ection > The type and amount of data returned about the market. sort MarketSort The order of the results. Will default to RANK if not passed. RA NK is an assigned priority that is determined by our Market Operations team in our back-end system. A result's overall rank is derived from the ranking given to the flowing attributes for the result. EventType, Competition, StartTime, MarketType, MarketId. For example, EventType is ranked by the most popular sports types and marketTypes are ranked in the following order: ODDS ASIAN LINE RANGE If all other dimensions of the result are equal, then the results are ranked in MarketId order. maxResults int limit on the total number of results returned, must be greater than 0 and less than or equal to 1000 locale String The language used for the response. If not specified, the default is returned. Return type Description List< MarketCatalogue > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 RUNNER_METADATA Description The RUNNER_METADATA returned by listMarketCatalogue for Horse Racing (when available) is described in the table below. Parameter Description Example WEIGHT_UNITS The unit of weight used pounds ADJUSTED_RATING Adjusted ratings are race-specific ratings which reflect weights allocated in the race and, in some circumstances, the age of the horse. Collectively they represent the chance each runner has on form. https://www.timeform.com/Racing/Articles/How_the_ ratings_for_a_race_are_calculated 79 DAM_YEAR_BORN The year the horse’s mother's birth 1997 DAYS_SINCE_LAST_RUN The number of days since the horse last ran 66 WEARING Any extra equipment the horse is wearing tongue strap DAMSIRE_YEAR_BORN The year in which the horse's grandfather was born on its mothers side 1988 SIRE_BRED The country were the horse's father was bred IRE TRAINER_NAME The name of the horse's trainer Fergal O'Brien STALL_DRAW The stall number the horse is starting from 10 SEX_TYPE The sex of the horse f OWNER_NAME The owner of the horse Mr M. C. Fahy SIRE_NAME The name of the horse's father Revoque FORECASTPRICE_NUMERATOR The forecast price numerator 13 FORECASTPRICE_DENOMINATOR The forecast price denominator 8 JOCKEY_CLAIM The reduction in the weight that the horse carries for a particular jockey 5 WEIGHT_VALUE The weight of the horse 163 DAM_NAME The name of the horse's mother Rare Gesture AGE The age of the horse 7 COLOUR_TYPE The colour of the horse b DAMSIRE_BRED The country were the horse's grandfather was born IRE DAMSIRE_NAME The name of the horse's grandfather Shalford SIRE_YEAR_BORN The year the horse's father was born 1994 OFFICIAL_RATING The horses official rating 97 FORM The horses recent form 212246 BRED The country in which the horse was born IRE runnerId The runnerId for the horse 62434983 JOCKEY_NAME The name of the jockey. Please note: This field will contain 'Reserve' in the event that the horse has been entered into the market as a reserve runner. Any reserve runners will be withdrawn from the market once it has been confirmed that they will not run. Paddy Brennan DAM_BRED The country where the horse's mother was born IRE COLOURS_DESCRIPTION The textual description of the jockey silk Royal blue and black check, white sleeves and cap COLOURS_FILENAME A relative URL to an image file corresponding to the jockey silk. You must add the value of this field to the base URL: http://content-cache.betfair.com/feeds_images/Hors es/SilkColours/ c20140225lei/00058836.jpg CLOTH_NUMBER The number on the saddle-cloth 5 CLOTH_NUMBER ALPHA The number on the saddle-cloth. For US Racing were the runner is paired, this field will display the cloth number of the paired runner e.g. "1A" listMarketProfitAndLoss listMarketProfitAndLoss List listMarketProfitAndLoss ( Set marketIds, boolean includeSettledBets, boolean includeBspBets, boolean netOfCommission ) throws APINGException Retrieve profit and loss for a given list of OPEN markets. The values are calculated using matched bets and optionally settled bets. Only odds (MarketBettingType = ODDS) markets are implemented, markets of other types are silently ignored. To retrieve your profit and loss for CLOSED markets, please use the listClearedOrders request. Please note: Market Data Request Limits apply to requests made to listMarketProfitAndLoss Parameter name Type marketIds Set Required Description List of markets to calculate profit and loss includeSettledBets boolean Option to include settled bets (partially settled markets only). Defaults to false if not specified. includeBspBets boolean Option to include BSP bets. Defaults to false if not specified. netOfCommission boolean Option to return profit and loss net of users current commission rate for this market including any special tariffs. Defaults to false if not specified. Return type Description List Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listMarketTypes Operation listMarketTypes List< MarketTypeResult > listMarketTypes ( MarketFilter filter ,Stringlocale ) throws APINGExceptio n Returns a list of market types (i.e. MATCH_ODDS, NEXT_GOAL) associated with the markets selected by the MarketFilter. The market types are always the same, regardless of locale. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. locale String The language used for the response. If not specified, the default is returned. Return type Required Description Description List< MarketTypeResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listTimeRanges Operation listTimeRanges List< TimeRangeResult > listTimeRanges ( MarketFilter filter , TimeGranularity granularity ) throw s APINGException Returns a list of time ranges in the granularity specified in the request (i.e. 3PM to 4PM, Aug 14th to Aug 15th) associated with the markets selected by the MarketFilter. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. granularity TimeGranularity The granularity of time periods that correspond to markets selected by the market filter. Return type Required Description Description List< TimeRangeResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 listVenues Operation listVenues List< VenueResult > listVenues ( MarketFilter filter ,Stringlocale ) throws APINGException Returns a list of Venues (i.e. Cheltenham, Ascot) associated with the markets selected by the MarketFilter. Currently, only Horse Racing markets are associated with a Venue. Parameter name Type filter MarketFilter The filter to select desired markets. All markets that match the criteria in the filter are selected. locale String The language used for the response. If not specified, the default is returned. Return type Required Description Description List< VenueResult > output data Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 placeOrders Operation Placing a Bet Placing a Betfair SP Bet Fill or Kill bets Examples Market version parameter Bet to Payout or Profit/Liability Examples Ability to place lower minimum stakes at larger prices Each Way Betting Betfair Price Increments Currency Parameters Operation placeOrders PlaceExecutionReport placeOrders ( StringmarketId , List< PlaceInstruction >instructions, String customerRef, MarketVersion marketVersion, String customerStrategyRef, boolean async ) throws APINGException Place new orders into market. This operation is atomic in that all orders will be placed or none will be placed. Please note that additional bet sizing rules apply to bets placed into the Italian Exchange. Parameter name Type Required Description marketId String The market id these orders are to be placed on instructions List< PlaceInstr uction > The number of place instructions. The limit of place instructions per request is 200 for the UK/AUS Exchange and 50 for the Italian Exchange. customerRef String Optional parameter allowing the client to pass a unique string (up to 32 chars) that is used to de-dupe mistaken re-submissions. CustomerRef can contain: upper/lower chars, digits, chars : - . _ + * : ; ~ only. Please note: There is a time window associated with the de-duplication of duplic ate submissions which is 60 seconds. marketVersion MarketVersion Optional parameter allowing the client to specify which version of the market the orders should be placed on. If the current market version is higher than that sent on an order, the bet will be lapsed. customerStrategyRef String An optional reference customers can use to specify which strategy has sent the order. The reference will be returned on order change messages through the stream API. The string is limited to 15 characters. If an empty string is provided it will be treated as null. async An optional flag (not setting equates to false) which specifies if the orders should be placed asynchronously. Orders can be tracked via the Exchange Stream API or or the API-NG by providing a customerOrderRef for each place order. An order's status will be PENDING and no bet ID will be returned. boolean This functionality is available for all bet types - including Market on Close and Limit on Close Return type Description PlaceExecutionReport Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 Placing a Bet To place a bet you require the marketId and selectionId parameters from the listMarketCatalogue API call. The below parameters will place a normal Exchange bet at odds of 3.0 for a stake of £2.0. If the bet is placed successfully, a betId is returned in the placeOrders response placeOrders Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": { "marketId": "1.109850906", "instructions": [ { "selectionId": "237486", "handicap": "0", "side": "LAY", "orderType": "LIMIT", "limitOrder": { "size": "2", "price": "3", "persistenceType": "LAPSE" } } ] }, "id": 1 } ] placeOrder Response [ { "jsonrpc": "2.0", "result": { "marketId": "1.109850906", "instructionReports": [ { "instruction": { "selectionId": 237486, "handicap": 0, "limitOrder": { "size": 2, "price": 3, "persistenceType": "LAPSE" }, "orderType": "LIMIT", "side": "LAY" }, "betId": "31242604945", "placedDate": "2013-10-30T14:22:47.000Z", "averagePriceMatched": 0, "sizeMatched": 0, "status": "SUCCESS" } ], "status": "SUCCESS" }, "id": 1 } ] Placing a Betfair SP Bet To place a bet on a selection at Betfair SP, you need to specify the parameters below in the placeOrders request. The below example would place a Betfair SP back bet on the required selection for a stake of £2.00. placeOrders Request [ { "jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": { "marketId": "1.111836557", "instructions": [ { "selectionId": "5404312", "handicap": "0", "side": "BACK", "orderType": "MARKET_ON_CLOSE", "marketOnCloseOrder": { "liability": "2" } } ] }, "id": 1 } ] placeOrders Response [ { "jsonrpc": "2.0", "result": { "marketId": "1.111836557", "instructionReports": [ { "instruction": { "selectionId": 5404312, "handicap": 0, "marketOnCloseOrder": { "liability": 2 }, "orderType": "MARKET_ON_CLOSE", "side": "BACK" }, "betId": "31645233727", "placedDate": "2013-11-12T12:07:29.000Z", "status": "SUCCESS" } ], "status": "SUCCESS" }, "id": 1 } ] Fill or Kill bets By setting the optional parameter ‘TimeInForce’ on a limitOrder submission to the value ‘FILL_OR_KILL’ and optionally passing a minFillSize v alue, the Exchange will only match the order if at least the specified minFillSize can be matched (if passed) or the whole order matched (if not). Any order which cannot be so matched, and any remaining unmatched part of the order (if minFillSize is specified) will be immediately cancelled. Please note: the matching algorithm for Fill or Kill orders behaves slightly differently to that for standard limit orders. Whereas the price on a limit order represents the lowest price at which any fragment should be matched, the price on a Fill or Kill order represents the lower limit of the Volume Weighted Average Price (“VWAP”) for the entire volume matched. So, for instance, a Fill or Kill order with price = 5.4 and size = 10 might be matched as £2 @ 5.5, £6 @ 5.4 and £2 @ 5.3. Examples FILL_OR_KILL order which was lapsed: Request [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.126124422","instructions":[{"selectionId":"10590221","handicap":"0","side":"BACK","orderT ype":"LIMIT","limitOrder":{"size":"5","price":"21","persistenceType":"LAPSE","timeInForce":"FILL_OR_KIL L","minFillSize":"5"}}]}, "id": 1}] Response [{"jsonrpc":"2.0","result":{"status":"SUCCESS","marketId":"1.126124422","instructionReports":[{"status":" SUCCESS","instruction":{"selectionId":10590221,"handicap":0.0,"limitOrder":{"size":5.0,"price":21.0,"min FillSize":5.0,"timeInForce":"FILL_OR_KILL"},"orderType":"LIMIT","side":"BACK"},"betId":"72666364933", "placedDate":"2016-08-12T10:45:15.000Z","averagePriceMatched":0.0,"sizeMatched":0.0}]},"id":1}] FILL_AND_KILL request a minimum fill size of 3.00: Request [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.126124422","instructions":[{"selectionId":"10590221","handicap":"0","side":"BACK","orderT ype":"LIMIT","limitOrder":{"size":"5","price":"21","persistenceType":"LAPSE","timeInForce":"FILL_OR_KIL L","minFillSize":"3"}}]}, "id": 1}] Response [{"jsonrpc":"2.0","result":{"status":"SUCCESS","marketId":"1.126124422","instructionReports":[{"status":" SUCCESS","instruction":{"selectionId":10590221,"handicap":0.0,"limitOrder":{"size":5.0,"price":21.0,"min FillSize":3.0,"timeInForce":"FILL_OR_KILL"},"orderType":"LIMIT","side":"BACK"},"betId":"72666433304", "placedDate":"2016-08-12T10:47:42.000Z","averagePriceMatched":21.32267441860465,"sizeMatched": 3.4400000000000004}]},"id":1}] Market version parameter We have added an additional optional parameter ‘marketVersion’ to the ‘placeOrders’ and ‘replaceOrders’ operations. The MarketBook data item, which contains the dynamic data on a market, including its prices, has always returned an integer market ‘version’. This ‘version’ is incremented when significant events – runner removal, turn in-play etc. – occur. Now, by passing that version as ‘marketVersion’ with your orders, you can specify that if the market version has been incremented beyond that value, your orders should lapse and not be submitted for matching. This functionality should be of use to those who want to bet right up to the actual ‘off’ of a horse race or sporting event but be confident that you’re not inadvertently bet into the first seconds of in-play after the off. Similarly, in managed football markets, you can avoid your bets reaching the Exchange after the market has reformed following a goal being scored etc. Notes on 'version' behavior The ‘market version’ value (on listMarketBook and on ESA) is incremented for any and all changes to the market. However, to prevent falsely blocking bets we keep track of the last material change (which we define as one performed under suspension**) and will only accept bets placed with that version or later. Market Version Minimum version to not be rejected Expected behaviour Market Activated 1234 1234 Start time updated (market not suspended) 1235 1234 Non-material change, bets placed before change but received after will be processed normally Runner removed (under suspension) 1236 1236 Material change, bets placed before change but received after will be rejected. Market turned in-play 1237 1237 As above ** this includes: - Runner removal and addition - Turn in-play - Lapsing or voiding bets (eg on goals being scored in managed Football market) But not (e.g.) updating Tennis court times or Golf tee times as they become more accurately known on the day. Example of a request including market version: [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.126086207","instructions":[{"selectionId":"63908","handicap":"0","side":"BACK","orderType":"LIMIT","limitOrder":{"siz e":"2","price":"30"}}],"marketVersion":{"version":"123456789"}}, "id": 1}] Bet to Payout or Profit/Liability Place a bet specifying your target payout, profit or liability, instead of the backers stake ('size'). Currently, best execution, which guarantees that you’ll receive the best possible price, means that you receive a greater potential payout to the same stakes (or risk a smaller potential payout to the same backer’s stakes, for layers). If you wish to benefit by receiving the same potential payout as you originally requested, but to smaller stakes, you can now specify on a LimitOrder (placeOrders) an optional ‘betTargetType’ of ‘PAYOUT’ or ‘BACKERS_PROFIT’ (the latter being identical to layers’ liability) and a ‘betTargetSize’ representing the value of that payout or profit, together with the usual ‘price’ parameter to represent their limit price. Your bet will then be matched to achieve that payout or profit at the specified price or better. Should all or any of the order be unmatched after first reaching the Exchange, the unmatched portion will be expressed in standard price and backers’ stake terms (by dividing the remaining unmatched payout by the price, or unmatched profit by the price – 1, and placed on the unmatched queue), after this point the bet behaves like any other. Examples Placing a back bet targeting a £2 profit Request [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.126124417","instructions":[{"selectionId":"11166583","handicap":"0","side":"BACK","orderT ype":"LIMIT","limitOrder":{"price":"2","betTargetType":"BACKERS_PROFIT","betTargetSize":"2"}}]}, "id": 1}] Response [{"jsonrpc":"2.0","result":{"status":"SUCCESS","marketId":"1.126124417","instructionReports":[{"status":"SUCCESS","instruction":{" selectionId":11166583,"handicap":0.0,"limitOrder":{"price":2.0,"betTargetSize":2.0,"persistenceType":"LAPSE","betTargetType":"BA CKERS_PROFIT"},"orderType":"LIMIT","side":"BACK"},"betId":"72671225671","placedDate":"2016-08-12T13:00:23.000Z","averag ePriceMatched":6.3999999999999995,"sizeMatched":0.37}]},"id":1}] Placing a lay bet targeting a £10 Payout Request [{"jsonrpc": "2.0", "method": "SportsAPING/v1.0/placeOrders", "params": {"marketId":"1.126122473","instructions":[{"selectionId":"11576316","handicap":"0","side":"LAY","orderTy pe":"LIMIT","limitOrder":{"price":"10","betTargetType":"PAYOUT","betTargetSize":"10"}}]}, "id": 1}] Response [{"jsonrpc":"2.0","result":{"status":"SUCCESS","marketId":"1.126122473","instructionReports":[{"status":" SUCCESS","instruction":{"selectionId":11576316,"handicap":0.0,"limitOrder":{"price":10.0,"betTargetSize ":10.0,"persistenceType":"LAPSE","betTargetType":"PAYOUT"},"orderType":"LIMIT","side":"LAY"},"betId" :"72671531256","placedDate":"2016-08-12T13:05:45.000Z","averagePriceMatched":4.2,"sizeMatched":2 .38}]},"id":1}] Ability to place lower minimum stakes at larger prices In order to allow customers to bet to smaller stakes on longer-priced selections, an extra property has been added to our Currency Parameters – “Min Bet Payout”. As currently bets where the backer’s stake is at and above the ‘Min Bet Size’ for the currency concerned (£2 for GBP) are valid. In addition, bets below this value are valid if the payout of the bet would be equal to or greater than the value of ‘ Min Bet Payout’ - £10 for GBP. For example, a bet of £1 @ 10, or 10p @ 100 or 1p @ 1000 are all valid as they all target a payout of £10 or more. Please note: This function is only enabled for UK & International customers and not .it, .es, .dk jurisdictions. Each Way Betting Each Way betting is available via the API. Each Way markets can be identified as marketType EACH_WAY using listMarketCatalogue. The divisor that applies to the EACH_WAY market is returned by listMarketCatalogue via the MARKET_DESCRIPTION MarketProjection. Please see table a table that indicates how the “Each-Way divisor" is determined for specific race types: Race Type Number of Runners(1) Number of Places Fraction of Win Odds “Each-Way divisor" Handicap 16 or more 4 1/4 Handicap 12 to 15 3 1/4 Handicap 8 to 11 3 1/5 Handicap 5 to 7 2 1/4 Non-Handicap 8 or more 3 1/5 Non-Handicap 5 to 7 2 1/4 (1) Number of Runners at Market creation time; place terms are fixed for the life of the market (like Betfair Place market) not dependent on number of runners at the off (like Fixed Odds EW markets) We will not offer EW markets if the number of runners at market creation time is 4 or fewer Betfair Price Increments Below is a list of price increments per price 'group'. Placing a bet outside of these increments will result in an INVALID_ODDS error Odds Markets Price Increment 1.01 2 0.01 23 0.02 3 4 0.05 4 6 0.1 6 10 0.2 10 20 0.5 20 30 1 30 50 2 50 100 5 100 1000 10 Asian Handicap & Total Goal Markets Price Increment 1.01 1000 0.01 Currency Parameters Guide to available currencies and minimum bet sizes. Currency name Symbol Min Bet Size Min Deposit Size Minimum BSP Liability UK Sterling £ 2 10 10 Euro € 2 15 20 US Dollar US$ 4 15 20 Hong Kong Dollars HK$ 25 150 125 Australian Dollar AUD 5 30 30 Canadian Dollar CAD 6 25 30 Danish Kroner DKK 30 150 150 Norwegian Kronor NOK 30 150 150 Swedish Krona SEK 30 150 150 Singapore Dollar SGD 6 30 30 cancelOrders Operation cancelOrders CancelExecutionReport cancelOrders ( StringmarketId,List< CancelInstruction >instructions,Stringcust omerRef ) throws APINGException Cancel all bets OR cancel all bets on a market OR fully or partially cancel particular orders on a market. Only LIMIT orders can be cancelled or partially cancelled once placed. Parameter name Type Required marketId String If marketId and betId aren't supplied all bets are cancelled instructions List< CancelInstr uction > All instructions need to be on the same market. If not supplied all bets on the market (if market id is passed) are fully cancelled. The limit of cancel instructions per request is 60 customerRef String Description Optional parameter allowing the client to pass a unique string (up to 32 chars) that is used to de-dupe mistaken re-submissions. Return type Description CancelExecutionReport Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 replaceOrders Operation replaceOrders ReplaceExecutionReport replaceOrders ( StringmarketId , List< ReplaceInstruction >instructions , StringcustomerRef, MarketVersion marketVersion, boolean async ) throws APINGException This operation is logically a bulk cancel followed by a bulk place. The cancel is completed first then the new orders are placed. The new orders will be placed atomically in that they will all be placed or none will be placed. In the case where the new orders cannot be placed the cancellations will not be rolled back. See ReplaceInstruction. Parameter name Type Required Description marketId String The market id these orders are to be placed on instructions List< ReplaceInstr uction > The number of replace instructions. The limit of replace instructions per request is 60. customerRef String Optional parameter allowing the client to pass a unique string (up to 32 chars) that is used to de-dupe mistaken re-submissions. marketVersion MarketVersion Optional parameter allowing the client to specify which version of the market the orders should be placed on. If the current market version is higher than that sent on an order, the bet will be lapsed. async An optional flag (not setting equates to false) which specifies if the orders should be replaced asynchronously. Orders can be tracked via the Exchange Stream API or the API-NG by providing a customerOrderRef for each replace order. Not available for MOC or LOC bets. boolean Return type Description ReplaceExecutionReport Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 updateOrders Operation updateOrders UpdateExecutionReport updateOrders ( StringmarketId , List< UpdateInstruction >instructions ,St ringcustomerRef ) throws APINGException Update non-exposure changing fields Parameter name Type Required marketId String The market id these orders are to be placed on instructions List< UpdateInstr uction > The number of update instructions. The limit of update instructions per request is 60 customerRef String Description Optional parameter allowing the client to pass a unique string (up to 32 chars) that is used to de-dupe mistaken re-submissions. Return type Description UpdateExecutionReport Throws Description APINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 Betfair Starting Price Betting (BSP) The Betfair Starting Price will be determined by balancing bets from customers who want to back and lay at Starting Price and matching into the Betfair exchange markets to balance out any residual demand. The Betfair Starting Price will be calculated exactly to ensure the fairest and most transparent odds possible for both backers and layers. The BSP does not need to account for a profit margin but instead is calculated at the start of an event by looking at the relationship between the amounts of money requested at SP by opposing betting parties. To give an even more accurate price, we will use money where possible that is trading on the exchange at the start of the event. This gives a true reflection of public opinion on a selection. How is the BSP calculated? The Near Price is based on money currently on the site at SP as well as unmatched money on the same selection in the exchange. To understand this properly, you first need to understand the calculation of the Far Price, which only takes into account the SP bets that have been made. The Far Price is not as complicated but not as accurate and only accounts for money on the site at SP. Excluding money requested at a fixed price on the exchange, if there are £1000 worth of backers stakes on a selection at SP and £6000 worth of layers liability, we can return an SP at the start of the event of 6/1 (7.0). If however there were £6000 worth of backers stakes on the selection and £1000 worth of layers liability, we would return an SP of 1/6 (1.17). These are calculations of the Far Price. The calculation of the final starting price occurs when the market is turned in-play. This is when the market is reconciled. Further information and detailed working demonstrating how the Betfair SP price is calculated can be found via https://promo.betfair.com/betfairsp /FAQs_theBasics.html Betting Exceptions Exceptions APINGException This exception is thrown when an operation fails Error code Description TOO_MUCH_DATA The operation requested too much data, exceeding the Market Data Request Limits. INVALID_INPUT_DATA The data input is invalid. A specific description is returned via e rrorDetails as shown below. INVALID_SESSION_INFORMATION The session token hasn't been provided, is invalid or has expired. NO_APP_KEY An application key header ('X-Application') has not been provided in the request NO_SESSION A session token header ('X-Authentication') has not been provided in the request UNEXPECTED_ERROR An unexpected internal error occurred that prevented successful request processing. INVALID_APP_KEY The application key passed is invalid or is not present TOO_MANY_REQUESTS There are too many pending requests e.g. a listMarketBook wit h Order/Match projections is limited to 3 concurrent requests. The error also applies to listCurrentOrders, listMarketProfitAnd Loss and listClearedOrders if you have 3 or more requests currently in execution SERVICE_BUSY The service is currently too busy to service this request. TIMEOUT_ERROR The Internal call to downstream service timed out. Please note: If a TIMEOUT_ERROR error occurs on a placeOrders/r eplaceOrders request, you should check listCurrentOrders t o verify the status of your bets before placing further orders. Please allow up to 2 minutes for timed out order to appear. REQUEST_SIZE_EXCEEDS_LIMIT The request exceeds the request size limit. Requests are limited to a total of 250 betId’s/marketId’s (or a combination of both). ACCESS_DENIED The calling client is not permitted to perform the specific action e.g. the using a Delayed App Key when placing bets or attempting to place a bet from a restricted jurisdiction. Other parameters Type errorDetails String Required Description Values the stack trace of the error "market id passed is invalid" "locale must use valid iso-639 locale names" "currency must use valid iso2 currency code name" "country code must use valid iso2 country code name" "text query has invalid content" "language must use valid iso language name" requestUUID String Generic JSON-RPC Exceptions Error Code Description -32700 Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text. -32601 Method not found -32602 Problem parsing the parameters, or a mandatory parameter was not found -32603 Internal JSON-RPC error Betting Enums Enums MarketProjection Value Description COMPETITION If not selected then the competition will not be returned with marketCatalogue EVENT If not selected then the event will not be returned with marketCatalogue EVENT_TYPE If not selected then the eventType will not be returned with marketCatalogue MARKET_START_TIME If not selected then the start time will not be returned with marketCatalogue MARKET_DESCRIPTION If not selected then the description will not be returned with marketCatalogue RUNNER_DESCRIPTION If not selected then the runners will not be returned with marketCatalogue RUNNER_METADATA If not selected then the runner metadata will not be returned with marketCatalogue. If selected then RUNNER_DESCRIPTION will also be returned regardless of whether it is included as a market projection. PriceData Value Description SP_AVAILABLE Amount available for the BSP auction. SP_TRADED Amount traded in the BSP auction. EX_BEST_OFFERS Only the best prices available for each runner, to requested price depth. EX_ALL_OFFERS EX_ALL_OFFERS trumps EX_BEST_OFFERS if both settings are present EX_TRADED Amount traded on the exchange. MatchProjection Value Description NO_ROLLUP No rollup, return raw fragments ROLLED_UP_BY_PRICE Rollup matched amounts by distinct matched prices per side. ROLLED_UP_BY_AVG_PRICE Rollup matched amounts by average matched price per side OrderProjection Value Description ALL EXECUTABLE and EXECUTION_COMPLETE orders EXECUTABLE An order that has a remaining unmatched portion EXECUTION_COMPLETE An order that does not have any remaining unmatched portion MarketStatus Value Description INACTIVE The market has been created but isn't yet available. OPEN The market is open for betting. SUSPENDED The market is suspended and not available for betting. CLOSED The market has been settled and is no longer available for betting. RunnerStatus Value Description ACTIVE ACTIVE WINNER WINNER LOSER LOSER PLACED The runner was placed, applies to EACH_WAY marketTypes only. REMOVED_VACANT REMOVED_VACANT applies to Greyhounds. Greyhound markets always return a fixed number of runners (traps). If a dog has been removed, the trap is shown as vacant. REMOVED REMOVED HIDDEN The selection is hidden from the market. This occurs in Horse Racing markets were runners is hidden when it is doesn’t hold an official entry following an entry stage. This could be because the horse was never entered or because they have been scratched from a race at a declaration stage. All matched customer bet prices are set to 1.0 even if there are later supplementary stages. Should it appear likely that a specific runner may actually be supplemented into the race this runner will be reinstated with all matched customer bets set back to the original prices. TimeGranularity Value Description DAYS HOURS MINUTES Side Value Description BACK To back a team, horse or outcome is to bet on the selection to win. For LINE markets a Back bet refers to a SELL line. A SELL line will win if the outcome is LESS THAN the taken line (price) LAY To lay a team, horse, or outcome is to bet on the selection to lose. For LINE markets a Lay bet refers to a BUY line. A BUY line will win if the outcome is MORE THAN the taken line (price) OrderStatus Value Description PENDING An asynchronous order is yet to be processed. Once the bet has been processed by the exchange (including waiting for any in-play delay), the result will be reported and available on the Exchange Stream API and API NG. Not a valid search criteria on MarketFilter EXECUTION_COMPLETE An order that does not have any remaining unmatched portion. EXECUTABLE An order that has a remaining unmatched portion. EXPIRED The order is no longer available for execution due to its time in force constraint. In the case of FILL_OR_KILL orders, this means the order has been killed because it could not be filled to your specifications. Not a valid search criteria on MarketFilter OrderBy Value Description BY_BET @Deprecated Use BY_PLACE_TIME instead. Order by placed time, then bet id. BY_MARKET Order by market id, then placed time, then bet id. BY_MATCH_TIME Order by time of last matched fragment (if any), then placed time, then bet id. Filters out orders which have no matched date. The dateRange filter (if specified) is applied to the matched date. BY_PLACE_TIME Order by placed time, then bet id. This is an alias of to be deprecated BY_BET. The dateRange filter (if specified) is applied to the placed date. BY_SETTLED_TIME Order by time of last settled fragment (if any due to partial market settlement), then by last match time, then placed time, then bet id. Filters out orders which have not been settled. The dateRange filter (if specified) is applied to the settled date. BY_VOID_TIME Order by time of last voided fragment (if any), then by last match time, then placed time, then bet id. Filters out orders which have not been voided. The dateRange filter (if specified) is applied to the voided date. SortDir Value Description EARLIEST_TO_LATEST Order from earliest value to latest e.g. lowest betId is first in the results. LATEST_TO_EARLIEST Order from the latest value to the earliest e.g. highest betId is first in the results. OrderType Value Description LIMIT A normal exchange limit order for immediate execution LIMIT_ON_CLOSE Limit order for the auction (SP) MARKET_ON_CLOSE Market order for the auction (SP) MarketSort Value Description MINIMUM_TRADED Minimum traded volume MAXIMUM_TRADED Maximum traded volume MINIMUM_AVAILABLE Minimum available to match MAXIMUM_AVAILABLE Maximum available to match FIRST_TO_START The closest markets based on their expected start time LAST_TO_START The most distant markets based on their expected start time MarketBettingType Value Description ODDS Odds Market - Any market that doesn't fit any any of the below categories. LINE Line Market - LINE markets operate at even-money odds of 2.0. However, price for these markets refers to the line positions available as defined by the markets min-max range and interval steps. Customers either Buy a line (LAY bet, winning if outcome is greater than the taken line (price)) or Sell a line (BACK bet, winning if outcome is less than the taken line (price)). If settled outcome equals the taken line, stake is returned. RANGE Range Market - Now Deprecated ASIAN_HANDICAP_DOUBLE_LINE Asian Handicap Market - A traditional Asian handicap market. Can be identified by marketType ASIAN_HANDICAP ASIAN_HANDICAP_SINGLE_LINE Asian Single Line Market - A market in which there can be 0 or multiple winners. e,.g marketType TOTAL_GOALS FIXED_ODDS Sportsbook Odds Market. This type is deprecated and will be removed in future releases, when Sportsbook markets will be represented as ODDS market but with a different product type. ExecutionReportStatus Value Description SUCCESS Order processed successfully FAILURE Order failed. PROCESSED_WITH_ERRORS The order itself has been accepted, but at least one (possibly all) actions have generated errors. This error only occurs for replaceOr ders, cancelOrders and updateOrders operations. The placeOrd ers operation will not return PROCESSED_WITH_ERRORS status as it is an atomic operation. TIMEOUT Order timed out. ExecutionReportErrorCode Value Description ERROR_IN_MATCHER The matcher is not healthy PROCESSED_WITH_ERRORS The order itself has been accepted, but at least one (possibly all) actions have generated errors BET_ACTION_ERROR There is an error with an action that has caused the entire order to be rejected. Check the instructionReports errorCode for the reason for the rejection of the order. INVALID_ACCOUNT_STATE Order rejected due to the account's status (suspended, inactive, dup cards) INVALID_WALLET_STATUS Order rejected due to the account's wallet's status INSUFFICIENT_FUNDS Account has exceeded its exposure limit or available to bet limit LOSS_LIMIT_EXCEEDED The account has exceed the self imposed loss limit MARKET_SUSPENDED Market is suspended MARKET_NOT_OPEN_FOR_BETTING Market is not open for betting. It is either not yet active, suspended or closed awaiting settlement. DUPLICATE_TRANSACTION Duplicate customer reference data submitted - Please note: There is a time window associated with the de-duplication of duplicate submissions which is 60 second INVALID_ORDER Order cannot be accepted by the matcher due to the combination of actions. For example, bets being edited are not on the same market, or order includes both edits and placement INVALID_MARKET_ID Market doesn't exist PERMISSION_DENIED Business rules do not allow order to be placed. You are either attempting to place the order using a Delayed Application Key or from a restricted jurisdiction (i.e. USA) DUPLICATE_BETIDS duplicate bet ids found NO_ACTION_REQUIRED Order hasn't been passed to matcher as system detected there will be no state change SERVICE_UNAVAILABLE The requested service is unavailable REJECTED_BY_REGULATOR The regulator rejected the order. On the Italian Exchange t his error will occur if more than 50 bets are sent in a single placeOrders request. NO_CHASING A specific error code that relates to Spanish Exchange markets only which indicates that the bet placed contravenes the Spanish regulatory rules relating to loss chasing. REGULATOR_IS_NOT_AVAILABLE The underlying regulator service is not available. TOO_MANY_INSTRUCTIONS The amount of orders exceeded the maximum amount allowed to be executed INVALID_MARKET_VERSION The supplied market version is invalid. Max length allowed for market version is 12. PersistenceType Value Description LAPSE Lapse the order when the market is turned in-play PERSIST Persist the order to in-play. The bet will be place automatically into the in-play market at the start of the event. MARKET_ON_CLOSE Put the order into the auction (SP) at turn-in-play InstructionReportStatus Value SUCCESS FAILURE TIMEOUT Description InstructionReportErrorCode Value Description INVALID_BET_SIZE bet size is invalid for your currency or your regulator INVALID_RUNNER Runner does not exist, includes vacant traps in greyhound racing BET_TAKEN_OR_LAPSED Bet cannot be cancelled or modified as it has already been taken or has been cancelled/lapsed Includes attempts to cancel/modify market on close BSP bets and cancelling limit on close BSP bets. The error may be returned on placeOrders request if for example a bet is placed at the point when a market admin event takes place (i.e. market is turned in-play) BET_IN_PROGRESS No result was received from the matcher in a timeout configured for the system RUNNER_REMOVED Runner has been removed from the event MARKET_NOT_OPEN_FOR_BETTING Attempt to edit a bet on a market that has closed. LOSS_LIMIT_EXCEEDED The action has caused the account to exceed the self imposed loss limit MARKET_NOT_OPEN_FOR_BSP_BETTING Market now closed to bsp betting. Turned in-play or has been reconciled INVALID_PRICE_EDIT Attempt to edit down the price of a bsp limit on close lay bet, or edit up the price of a limit on close back bet INVALID_ODDS Odds not on price ladder - either edit or placement INSUFFICIENT_FUNDS Insufficient funds available to cover the bet action. Either the exposure limit or available to bet limit would be exceeded INVALID_PERSISTENCE_TYPE Invalid persistence type for this market, e.g. KEEP for a non in-play market. ERROR_IN_MATCHER A problem with the matcher prevented this action completing successfully INVALID_BACK_LAY_COMBINATION The order contains a back and a lay for the same runner at overlapping prices. This would guarantee a self match. This also applies to BSP limit on close bets ERROR_IN_ORDER The action failed because the parent order failed INVALID_BID_TYPE Bid type is mandatory INVALID_BET_ID Bet for id supplied has not been found CANCELLED_NOT_PLACED Bet cancelled but replacement bet was not placed RELATED_ACTION_FAILED Action failed due to the failure of a action on which this action is dependent NO_ACTION_REQUIRED the action does not result in any state change. eg changing a persistence to it's current value TIME_IN_FORCE_CONFLICT You may only specify a time in force on either the place request OR on individual limit order instructions (not both), since the implied behaviors are incompatible. UNEXPECTED_PERSISTENCE_TYPE You have specified a persistence type for a FILL_OR_KILL order, which is nonsensical because no umatched portion can remain after the order has been placed. INVALID_ORDER_TYPE You have specified a time in force of FILL_OR_KILL, but have included a non-LIMIT order type. UNEXPECTED_MIN_FILL_SIZE You have specified a minFillSize on a limit order, where the limit order's time in force is not FILL_OR_KILL. Using minFillSize is not supported where the time in force of the request (as opposed to an order) is FILL_OR_KILL. INVALID_CUSTOMER_ORDER_REF The supplied customer order reference is too long. INVALID_MIN_FILL_SIZE The minFillSize must be greater than zero and less than or equal to the order's size. The minFillSize cannot be less than the minimum bet size for your currency RollupModel Value Description STAKE The volumes will be rolled up to the minimum value which is >= rollupLimit. PAYOUT The volumes will be rolled up to the minimum value where the payout( price * volume ) is >= rollupLimit. On a LINE market, volumes will be rolled up where payout( 2.0 * volume ) is >= rollupLimit MANAGED_LIABILITY The volumes will be rolled up to the minimum value which is >= rollupLimit, until a lay price threshold. There after, the volumes will be rolled up to the minimum value such that the liability >= a minimum liability. Not supported as yet. NONE No rollup will be applied. However the volumes will be filtered by currency specific minimum stake unless overridden specifically for the channel. GroupBy Value Description EVENT_TYPE A roll up of settled P&L, commission paid and number of bet orders, on a specified event type EVENT A roll up of settled P&L, commission paid and number of bet orders, on a specified event MARKET A roll up of settled P&L, commission paid and number of bet orders, on a specified market SIDE An averaged roll up of settled P&L, and number of bets, on the specified side of a specified selection within a specified market, that are either settled or voided BET The P&L, commission paid, side and regulatory information etc, about each individual bet order BetStatus Value Description SETTLED A matched bet that was settled normally VOIDED A matched bet that was subsequently voided by Betfair, before, during or after settlement LAPSED Unmatched bet that was cancelled by Betfair (for example at turn in play). CANCELLED Unmatched bet that was cancelled by an explicit customer action. marketType - Legacy Data Value Description A Asian Handicap L Line market O Odds market R Range market. NOT_APPLICABLE The market does not have an applicable marketType. TimeInForce Value Description FILL_OR_KILL Execute the transaction immediately and completely (filled to size or between minFillSize and size) or not at all (cancelled). For LINE markets Volume Weighted Average Price (VWAP) functionality is disabled BetTargetType Value Description BACKERS_PROFIT The payout requested minus the calculated size at which this LimitOrder is to be placed. BetTargetType bets are invalid for LINE markets PAYOUT The total payout requested on a LimitOrder Betting Type Definitions Type definitions MarketFilter Field name Type Required Description textQuery String Restrict markets by any text associated with the market such as the Name, Event, Competition, etc. You can include a wildcard (*) character as long as it is not the first character. exchangeIds Set DEPRECATED eventTypeIds Set Restrict markets by event type associated with the market. (i.e., Football, Hockey, etc) eventIds Set Restrict markets by the event id associated with the market. competitionIds Set Restrict markets by the competitions associated with the market. marketIds Set Restrict markets by the market id associated with the market. venues Set Restrict markets by the venue associated with the market. Currently only Horse Racing markets have venues. bspOnly boolean Restrict to bsp markets only, if True or non-bsp markets if False. If not specified then returns both BSP and non-BSP markets turnInPlayEnabled boolean Restrict to markets that will turn in play if True or will not turn in play if false. If not specified, returns both. inPlayOnly boolean Restrict to markets that are currently in play if True or are not currently in play if false. If not specified, returns both. marketBettingTypes Set< MarketBettin gType > Restrict to markets that match the betting type of the market (i.e. Odds, Asian Handicap Singles, Asian Handicap Doubles or Line) marketCountries Set Restrict to markets that are in the specified country or countries marketTypeCodes Set Restrict to markets that match the type of the market (i.e., MATCH_ODDS, HALF_TIME_SCORE). You should use this instead of relying on the market name as the market type codes are the same in all locales marketStartTime TimeRange Restrict to markets with a market start time before or after the specified date withOrders Set< OrderStatus > Restrict to markets that I have one or more orders in these status. MarketCatalogue Information about a market Field name Type Required Description marketId String The unique identifier for the market. MarketId's are prefixed with '1.' or '2.' 1. = UK Exchange 2. = AUS Exchange. marketName String The name of the market marketStartTime Date The time this market starts at, only returned when the MARKET_START_TIME enum is passed in the marketProjections description MarketDescription Details about the market totalMatched Double The total amount of money matched on the market runners List< RunnerCatal og > The runners (selections) contained in the market eventType EventType The Event Type the market is contained within competition Competition The competition the market is contained within. Usually only applies to Football competitions event Event The event the market is contained within MarketBook The dynamic data in a market Field name Type Required Description marketId String The unique identifier for the market. MarketId's are prefixed with '1.' or '2.' 1. = UK Exchange 2. = AUS Exchange. isMarketDataDelayed boolean True if the data returned by listMarketBook will be delayed. The data may be delayed because you are not logged in with a funded account or you are using an Application Key that does not allow up to date data. status MarketStatus The status of the market, for example OPEN, SUSPENDED, CLOSED (settled), etc. betDelay int The number of seconds an order is held until it is submitted into the market. Orders are usually delayed when the market is in-play bspReconciled boolean True if the market starting price has been reconciled complete boolean If false, runners may be added to the market inplay boolean True if the market is currently in play numberOfWinners int The number of selections that could be settled as winners numberOfRunners int The number of runners in the market numberOfActiveRunners int The number of runners that are currently active. An active runner is a selection available for betting lastMatchTime Date The most recent time an order was executed totalMatched double The total amount matched totalAvailable double The total amount of orders that remain unmatched crossMatching boolean True if cross matching is enabled for this market. runnersVoidable boolean True if runners in the market can be voided version long The version of the market. The version increments whenever the market status changes, for example, turning in-play, or suspended when a goal is scored. runners List< Runner > Information about the runners (selections) in the market. RunnerCatalog Information about the Runners (selections) in a market Field name Type selectionId long Required Description The unique id for the selection. runnerName String The name of the runner handicap double The handicap sortPriority int The sort priority of this runner metadata Map Metadata associated with the runner. For a description of this data for Horse Racing, please see Runner Metadata Description Runner The dynamic data about runners in a market Field name Type selectionId long The unique id of the runner (selection) handicap double The handicap. Enter the specific handicap value (returned by RUNNER in listMaketBook) if the market is an Asian handicap market. status RunnerStatus The status of the selection (i.e., ACTIVE, REMOVED, WINNER, PLACED, LOSER, HIDDEN) Runner status information is available for 90 days following market settlement. adjustmentFactor double The adjustment factor applied if the selection is removed lastPriceTraded double The price of the most recent bet matched on this selection totalMatched double The total amount matched on this runner removalDate Date If date and time the runner was removed sp StartingPrices The BSP related prices for this runner ex ExchangePrices The Exchange prices available for this runner orders List< Order > List of orders in the market matches List< Match > List of matches (i.e, orders that have been fully or partially executed) matchesByStrategy Map Required Description List of matches for each strategy, ordered by matched data StartingPrices Information about the Betfair Starting Price. Only available in BSP markets Field name Type Required Description nearPrice double What the starting price would be if the market was reconciled now taking into account the SP bets as well as unmatched exchange bets on the same selection in the exchange. This data is cached and update every 60 seconds. Please note: Type Double may contain numbers, INF, -INF, and NaN. farPrice double What the starting price would be if the market was reconciled now taking into account only the currently place SP bets. The Far Price is not as complicated but not as accurate and only accounts for money on the exchange at SP. This data is cached and updated every 60 seconds. Please note: Type Double may contain numbers, INF, -INF, and NaN. backStakeTaken List< Pric eSize > The total amount of back bets matched at the actual Betfair Starting Price. layLiabilityTaken List< Pric eSize > The lay amount matched at the actual Betfair Starting Price. actualSP double The final BSP price for this runner. Only available for a BSP market that has been reconciled. ExchangePrices Field name Type Required Description availableToBack List< PriceSize > availableToLay List< PriceSize > tradedVolume List< PriceSize > Event Event Field name Type Required Description id String The unique id for the event name String The name of the event countryCode String The ISO-2 code for the event. A list of ISO-2 codes is available via http://en.wi kipedia.org/wiki/ISO_3166-1_alpha-2 timezone String This is timezone in which the event is taking place. venue String venue openDate Date The scheduled start date and time of the event. This is Europe/London (GMT) by default EventResult Event Result Field name Type event Event Required Description Event marketCount int Count of markets associated with this event Competition Competition Field name Type Required Description id String id name String name CompetitionResult Competition Result Field name Type Required competition Competition Competition marketCount int Count of markets associated with this competition competitionRegion String Description Region in which this competition is happening EventType EventType Field name Type Required Description id String id name String name EventTypeResult EventType Result Field name Type eventType EventType marketCount int Required Description The ID identifying the Event Type Count of markets associated with this eventType MarketTypeResult MarketType Result Field name Type marketType String Required Description Market Type marketCount int Count of markets associated with this marketType CountryCodeResult CountryCode Result Field name Type countryCode String Required Description The ISO-2 code for the event. A list of ISO-2 codes is available via http://en.wi kipedia.org/wiki/ISO_3166-1_alpha-2 marketCount int Count of markets associated with this Country Code VenueResult Venue Result Field name Type venue String Required Description Venue marketCount int Count of markets associated with this Venue TimeRange TimeRange Field name Type Required Description from Date from to Date to TimeRangeResult TimeRange Result Field name Type timeRange TimeRange marketCount int Required Description TimeRange Count of markets associated with this TimeRange Order Field name Type betId String orderType OrderType BSP Order type. status OrderStatus Either EXECUTABLE (an unmatched amount remains) or EXECUTION_COMPLETE (no unmatched amount remains). persistenceType PersistenceType What to do with the order at turn-in-play side Side Indicates if the bet is a Back or a LAY. For LINE markets customers either Buy a line (LAY bet, winning if outcome is greater than the taken line (price)) or Sell a line (BACK bet, winning if outcome is less than the taken line (price)) price double The price of the bet. Please note: LINE markets operate at even-money odds of 2.0. However, price for these markets refers to the line positions available as defined by the markets min-max range and interval steps size double The size of the bet. bspLiability double Not to be confused with size. This is the liability of a given BSP bet. placedDate Date The date, to the second, the bet was placed. avgPriceMatched double The average price matched at. Voided match fragments are removed from this average calculation. For MARKET_ON_CLOSE BSP bets this reports the matched SP price following the SP reconciliation process. This value is not meaningful for activity on LINE markets and is not guaranteed to be returned or maintained for these markets. sizeMatched double The current amount of this bet that was matched. sizeRemaining double The current amount of this bet that is unmatched. sizeLapsed double The current amount of this bet that was lapsed. sizeCancelled double The current amount of this bet that was cancelled. sizeVoided double The current amount of this bet that was voided. customerOrderRef CustomerOrderRef The customer order reference sent for this bet customerStrategyRef CustomerStrategyRef Required Description The customer strategy reference sent for this bet Match An individual bet Match, or rollup by price or avg price. Rollup depends on the requested MatchProjection Field name Type Required betId String Only present if no rollup matchId String Only present if no rollup side Side Indicates if the bet is a Back or a LAY price double Either actual match price or avg match price depending on rollup. This value is not meaningful for activity on LINE markets and is not guaranteed to be returned or maintained for these markets. size double Size matched at in this fragment, or at this price or avg price depending on rollup matchDate Date Description Only present if no rollup MarketVersion Market version Field name Type version long Required Description A non-monotonically increasing number indicating market changes MarketDescription Market definition Field name Type Required Description persistenceEnabled boolean If 'true' the market supports 'Keep' bets if the market is to be turned in-play bspMarket boolean If 'true' the market supports Betfair SP betting marketTime Date The market start time suspendTime Date The market suspend time settleTime Date settled time bettingType MarketBettingType See MarketBettingType turnInPlayEnabled boolean If 'true' the market is set to turn in-play marketType String Market base type regulator String The market regulator marketBaseRate double The commission rate applicable to the market discountAllowed boolean Indicates whether or not the user's discount rate is taken into account on this market. If ‘false’ all users will be charged the same commission rate, regardless of discount rate. wallet String The wallet to which the market belongs (UK/AUS) rules String The market rules. rulesHasDate boolean eachWayDivisor double The divisor is returned for the marketType EACH_WAY only and refers to the fraction of the win odds at which the place portion of an each way bet is settled clarifications String Any additional information regarding the market MarketRates Market Rates Field name Type Required Description marketBaseRate double marketBaseRate discountAllowed discountAllowed boolean MarketLicence Market Licence Field name Type Required Description wallet String The wallet from which funds will be taken when betting on this market rules String The rules for this market rulesHasDate boolean The market's start date and time are relevant to the rules. clarifications Clarifications to the rules for the market String MarketLineRangeInfo Market Line and Range Info Field name Type Required Description maxUnitValue double maxPrice - Maximum value for the outcome, in market units for this market (eg 100 runs) minUnitValue double minPrice - Minimum value for the outcome, in market units for this market (eg 0 runs) interval double interval - The odds ladder on this market will be between the range of minUnitValue and maxUnitValue, in increments of the inverval value.e.g. If minUnitValue=10 runs, maxUnitValue=20 runs, interval=0.5 runs, then valid odds include 10, 10.5, 11, 11.5 up to 20 runs. marketUnit String unit - The type of unit the lines are incremented in by the interval (e.g: runs, goals or seconds. PriceSize Field name Type Required Description price double The price available size double The stake available ClearedOrderSummary Summary of a cleared order. Field name Type Required Description eventTypeId EventTypeId The id of the event type bet on. Available at EVENT_TYPE groupBy level or lower. eventId EventId The id of the event bet on. Available at EVENT groupBy level or lower. marketId MarketId The id of the market bet on. Available at MARKET groupBy level or lower. selectionId SelectionId The id of the selection bet on. Available at RUNNER groupBy level or lower. handicap Handicap The handicap. Enter the specific handicap value (returned by RUNNER in listMaketBook) if the market is an Asian handicap market. Available at MARKET groupBy level or lower. betId BetId The id of the bet. Available at BET groupBy level. placedDate Date The date the bet order was placed by the customer. Only available at BET groupBy level. persistenceType PersistenceType The turn in play persistence state of the order at bet placement time. This field will be empty or omitted on true SP bets. Only available at BET groupBy level. orderType OrderType The type of bet (e.g standard limited-liability Exchange bet (LIMIT), a standard BSP bet (MARKET_ON_CLOSE), or a minimum-accepted-price BSP bet (LIMIT_ON_CLOSE)). If the bet has a OrderType of MARKET_ON_CLOSE and a persistenceType of MARKET_ON_CLOSE then it is a bet which has transitioned from LIMIT to MARKET_ON_CLOSE. Only available at BET groupBy level. side Side Whether the bet was a back or lay bet. Available at SIDE groupBy level or lower. itemDescription ItemDescription A container for all the ancillary data and localised text valid for this Item betOutcome String The settlement outcome of the bet. Tri-state (WIN/LOSE/PLACE) to account for Each Way bets where the place portion of the bet won but the win portion lost. The profit/loss amount in this case could be positive or negative depending on the price matched at. Only available at BET groupBy level. priceRequested Price The average requested price across all settled bet orders under this Item. Available at SIDE groupBy level or lower. For LINE markets this is the line position requested. For LINE markets this is the line position requested. settledDate Date The date and time the bet order was settled by Betfair. Available at SIDE groupBy level or lower. lastMatchedDate Date The date and time the last bet order was matched by Betfair. Available on Settled orders only. betCount int The number of actual bets within this grouping (will be 1 for BET groupBy) commission Size The cumulative amount of commission paid by the customer across all bets under this Item, in the account currency. Available at EXCHANGE, EVENT_TYPE, EVENT and MARKET level groupings only. priceMatched Price The average matched price across all settled bets or bet fragments under this Item. Available at SIDE groupBy level or lower. For LINE markets this is the line position matched at. priceReduced boolean If true, then the matched price was affected by a reduction factor due to of a runner removal from this Horse Racing market. sizeSettled Size The cumulative bet size that was settled as matched or voided under this Item, in the account currency. Available at SIDE groupBy level or lower. profit Size The profit or loss (negative profit) gained on this line, in the account currency sizeCancelled Size The amount of the bet that was available to be matched, before cancellation or lapsing, in the account currency customerOrderRef String The order reference defined by the customer for the bet order customerStrategyRef String The strategy reference defined by the customer for the bet order ClearedOrderSummaryReport A container representing search results. Field name Type Required Description clearedOrders List The list of cleared orders returned by your query. This will be a valid list (i.e. empty or non-empty but never 'null'). moreAvailable boolean Indicates whether there are further result items beyond this page. Note that underlying data is highly time-dependent and the subsequent search orders query might return an empty result. ItemDescription This object contains some text which may be useful to render a betting history view. It offers no long-term warranty as to the correctness of the text. Field name Type Required Description eventTypeDesc String The event type name, translated into the requested locale. Available at EVENT_TYPE groupBy or lower. eventDesc String The eventName, or openDate + venue, translated into the requested locale. Available at EVENT groupBy or lower. marketDesc String The market name or racing market type ("Win", "To Be Placed (2 places)", "To Be Placed (5 places)" etc) translated into the requested locale. Available at MARKET groupBy or lower. marketType String The market type e.g. MATCH_ODDS, PLACE, WIN etc. marketStartTime Date The start time of the market (in ISO-8601 format, not translated). Available at MARKET groupBy or lower. runnerDesc String The runner name, maybe including the handicap, translated into the requested locale. Available at BET groupBy. numberOfWinners int The number of winners on a market. Available at BET groupBy. eachWayDivisor The divisor is returned for the marketType EACH_WAY only and refers to the fraction of the win odds at which the place portion of an each way bet is settled double RunnerId This object contains the unique identifier for a runner Field name Type marketId MarketId Required Description The id of the market bet on selectionId SelectionId The id of the selection bet on handicap The handicap associated with the runner in case of asian handicap markets, otherwise returns '0.0'. Handicap CurrentOrderSummaryReport A container representing search results. Field name Type currentOrders List< CurrentOrderSu mmary > moreAvailable boolean Required Description The list of current orders returned by your query. This will be a valid list (i.e. empty or non-empty but never 'null'). Indicates whether there are further result items beyond this page. Note that underlying data is highly time-dependent and the subsequent search orders query might return an empty result. CurrentOrderSummary Summary of a current order. Field name Type Required Description betId String The bet ID of the original place order. marketId String The market id the order is for. selectionId long The selection id the order is for. handicap double The handicap associated with the runner in case of Asian handicap markets, null otherwise. priceSize PriceSize The price and size of the bet. bspLiability double Not to be confused with size. This is the liability of a given BSP bet. side Side BACK/LAY status OrderStatus Either EXECUTABLE (an unmatched amount remains) or EXECUTION_COMPLETE (no unmatched amount remains). persistenceType PersistenceType What to do with the order at turn-in-play. orderType OrderType BSP Order type. placedDate Date The date, to the second, the bet was placed. matchedDate Date The date, to the second, of the last matched bet fragment (where applicable) averagePriceMatched double The average price matched at. Voided match fragments are removed from this average calculation. The price is automatically adjusted in the event of non runners being declared with applicable reduction factors. Please note: T his value is not meaningful for activity on LINE markets and is not guaranteed to be returned or maintained for these markets. sizeMatched double The current amount of this bet that was matched. sizeRemaining double The current amount of this bet that is unmatched. sizeLapsed double The current amount of this bet that was lapsed. sizeCancelled double The current amount of this bet that was cancelled. sizeVoided double The current amount of this bet that was voided. regulatorAuthCode String The regulator authorisation code. regulatorCode String The regulator Code. customerOrderRef String The order reference defined by the customer for this bet customerStrategyRef String The strategy reference defined by the customer for this bet PlaceInstruction Instruction to place a new order Field name Type Required Description orderType OrderType selectionId long The selection_id. handicap double The handicap associated with the runner in case of Asian handicap markets (e.g. marketTypes ASIAN_HA NDICAP_DOUBLE_LINE, ASIAN_HANDICAP_SINGL E_LINE) null otherwise. side Side Back or Lay limitOrder LimitOrder A simple exchange bet for immediate execution limitOnCloseOrder LimitOnCloseOrder Bets are matched if, and only if, the returned starting price is better than a specified price. In the case of back bets, LOC bets are matched if the calculated starting price is greater than the specified price. In the case of lay bets, LOC bets are matched if the starting price is less than the specified price. If the specified limit is equal to the starting price, then it may be matched, partially matched, or may not be matched at all, depending on how much is needed to balance all bets against each other (MOC, LOC and normal exchange bets) marketOnCloseOrder MarketOnCloseOrder Bets remain unmatched until the market is reconciled. They are matched and settled at a price that is representative of the market at the point the market is turned in-play. The market is reconciled to find a starting price and MOC bets are settled at whatever starting price is returned. MOC bets are always matched and settled, unless a starting price is not available for the selection. Market on Close bets can only be placed before the starting price is determined customerOrderRef An optional reference customers can set to identify instructions.. No validation will be done on uniqueness and the string is limited to 32 characters. If an empty string is provided it will be treated as null. String PlaceExecutionReport Field name Type customerRef String status ExecutionReportStatus errorCode ExecutionReportErrorCode marketId String instructionReports List< PlaceInstructionReport > Required Description Echo of the customerRef if passed. Echo of marketId passed LimitOrder Place a new LIMIT order (simple exchange bet for immediate execution) Field name Type Required Description size double The size of the bet. Please note: For market type EACH_WAY. The total stake = size x 2 price double The limit price. For LINE markets, the price at which the bet is settled and struck will always be 2.0 (Evens). On these bets, the Price field is used to indicate the line value which is being bought or sold persistenceType PersistenceType What to do with the order at turn-in-play timeInForce TimeInForce The type of TimeInForce value to use. This value takes precedence over any PersistenceType value chosen. If this attribute is populated along with the PersistenceType field, then the PersistenceType will be ignored. When using FILL_OR_KILL for a Line market the Volume Weighted Average Price (VWAP) functionality is disabled minFillSize Size An optional field used if the TimeInForce attribute is populated. If specified without TimeInForce then this field is ignored. If no minFillSize is specified, the order is killed unless the entire size can be matched. If minFillSize is specified, the order is killed unless at least the minFillSize can be matched. The minFillSize cannot be greater than the order's size. If specified for a BetTargetType and FILL_OR_KILL order, then this value will be ignored betTargetType BetTargetType An optional field to allow betting to a targeted PAYOUT or BACKERS_PROFIT. It's invalid to specify both a Size and BetTargetType Matching provides best execution at the requested price or better up to the payout or profit. If the bet is not matched completely and immediately, the remaining portion enters the unmatched pool of bets on the exchange BetTargetType bets are invalid for LINE markets betTargetSize Size An optional field which must be specified if BetTargetType is specified for this order The requested outcome size of either the payout or profit. This is named from the backer's perspective. For Lay bets the profit represents the bet's liability LimitOnCloseOrder Place a new LIMIT_ON_CLOSE bet Field name Type Required Description liability double The size of the bet. price double The limit price of the bet if LOC MarketOnCloseOrder Place a new MARKET_ON_CLOSE bet Field name Type liability double Required Description The size of the bet. PlaceInstructionReport Response to a PlaceInstruction Field name Type Required Description status InstructionReportStatus whether the command succeeded or failed errorCode InstructionReportErrorCode cause of failure, or null if command succeeds orderStatus OrderStatus The status of the order, if the instruction succeeded. If the instruction was unsuccessful, no value is provided. instruction PlaceInstruction The instruction that was requested betId String The bet ID of the new bet. Will be null on failure or if order was placed asynchronously. placedDate Date Will be null if order was placed asynchronously averagePriceMatched Price Will be null if order was placed asynchronously. This value is not meaningful for activity on LINE markets and is not guaranteed to be returned or maintained for these markets. sizeMatched Will be null if order was placed asynchronously Size CancelInstruction Instruction to fully or partially cancel an order (only applies to LIMIT orders) Field name Type betId String sizeReduction double Required Description The betId If supplied then this is a partial cancel. Should be set to 'null' if no size reduction is required. CancelExecutionReport Field name Type Required customerRef String status ExecutionReportStatus errorCode ExecutionReportErrorCode marketId String Description Echo of the customerRef if passed. Echo of marketId passed instructionReports List< CancelInstructionReport > ReplaceInstruction Instruction to replace a LIMIT or LIMIT_ON_CLOSE order at a new price. Original order will be cancelled and a new order placed at the new price for the remaining stake. Field name Type Required Description betId String Unique identifier for the bet newPrice double The price to replace the bet at ReplaceExecutionReport Field name Type Required customerRef String status ExecutionReportStatus errorCode ExecutionReportErrorCode marketId String Description Echo of the customerRef if passed. Echo of marketId passed instructionReports List< ReplaceInstructionReport > ReplaceInstructionReport Field name Type Required Description status InstructionReportStatus whether the command succeeded or failed errorCode InstructionReportErrorCode cause of failure, or null if command succeeds cancelInstructionReport CancelInstructionReport Cancelation report for the original order placeInstructionReport Placement report for the new order PlaceInstructionReport CancelInstructionReport Field name Type Required Description status InstructionReportStatus whether the command succeeded or failed errorCode InstructionReportErrorCode cause of failure, or null if command succeeds instruction CancelInstruction The instruction that was requested sizeCancelled double cancelledDate Date UpdateInstruction Instruction to update LIMIT bet's persistence of an order that do not affect exposure Field name Type betId String Required Description Unique identifier for the bet newPersistenceType PersistenceType The new persistence type to update this bet to UpdateExecutionReport Field name Type Required customerRef String status ExecutionReportStatus errorCode ExecutionReportErrorCode marketId String Description Echo of the customerRef if passed. Echo of marketId passed instructionReports List< UpdateInstructionReport > UpdateInstructionReport Field name Type Required Description status InstructionReportStatus whether the command succeeded or failed errorCode InstructionReportErrorCode cause of failure, or null if command succeeds instruction UpdateInstruction The instruction that was requested PriceProjection Selection criteria of the returning price data Field name Type Required priceData Set< PriceData > Description The basic price data you want to receive in the response. exBestOffersOverrides ExBestOffersOverrides Options to alter the default representation of best offer prices Applicable to EX_BEST_OFFERS priceData selection virtualise boolean Indicates if the returned prices should include virtua l prices. Applicable to EX_BEST_OFFERS and EX_ALL_OFFERS priceData selections, default value is false. rolloverStakes boolean Indicates if the volume returned at each price point should be the absolute value or a cumulative sum of volumes available at the price and all better prices. If unspecified defaults to false. Applicable to EX_BEST_OFFERS and EX_ALL_OFFERS price projections. Not supported as yet. ExBestOffersOverrides Options to alter the default representation of best offer prices Field name Type Required Description bestPricesDepth int The maximum number of prices to return on each side for each runner. If unspecified defaults to 3. Maximum returned price depth returned is 10. rollupModel RollupModel The model to use when rolling up available sizes. If unspecified defaults to STAKE rollup model with rollupLimit of minimum stake in the specified currency. rollupLimit int The volume limit to use when rolling up returned sizes. The exact definition of the limit depends on the rollupModel. If no limit is provided it will use minimum stake as default the value. Ignored if no rollup model is specified. rollupLiabilityThreshold double Only applicable when rollupModel is MANAGED_LIABILITY. The rollup model switches from being stake based to liability based at the smallest lay price which is >= rollupLiabilityThreshold.service level default (TBD). Not supported as yet. rollupLiabilityFactor Only applicable when rollupModel is MANAGED_LIABILITY. (rollupLiabilityFactor * rollupLimit) is the minimum liabilty the user is deemed to be comfortable with. After the rollupLiabilityThreshold price subsequent volumes will be rolled up to minimum value such that the liability >= the minimum liability.service level default (5). Not supported as yet. int MarketProfitAndLoss Profit and loss in a market Field name Type marketId String Required Description The unique identifier for the market commissionApplied double The commission rate applied to P&L values. Only returned if netOfCommision option is requested profitAndLosses Calculated profit and loss data. List RunnerProfitAndLoss Profit and loss if selection is wins or loses Field name Type Required Description selectionId SelectionId The unique identifier for the selection ifWin double Profit or loss for the market if this selection is the winner. ifLose double Profit or loss for the market if this selection is the loser. Only returned for multi-winner odds markets. ifPlace double Profit or loss for the market if this selection is placed. Applies to marketType EACH_WAY only. Type Aliases Alias MarketType Venue MarketId SelectionId Handicap EventId EventTypeId CountryCode ExchangeId CompetitionId Type String String String long double String String String String String double Price double Size BetId MatchId String String CustomerOrderRef String CustomerStrategyRef String Accounts API Endpoints Please find below the details for the current Accounts API endpoints. Global Exchange Interface Endpoint JSON-RPC Prefix Example JSON-RPC https://api.betfair.com/exchange/account/json-rpc/v1 AccountAPING/v1.0/getAccountFunds JSON REST https://api.betfair.com/exchange/account/rest/v1.0/ getAccountFunds/ Accounts Operations Required Headers Please note - although the majority of API-NG calls require both the X-Authentication (sessionToken) and X-Application (Application Key) in the request header, this isn't applicable for some API Account Operations that are available to Software Vendors Only. The applicable headers for each Vendor API operation are included in the below table Summary Type Operation Description Available to Software Vendors Only DeveloperApp createDeveloperAppKeys (String appName ) Create 2 Application Keys for given user; one 'Delayed and the other 'Live'. You must apply to have your 'Live' App Key activated. Required List< DeveloperApp > getDeveloperAppKeys ( ) Get all application keys owned by the given developer/vendor Required AccountFundsResponse getAccountFunds ( ) Get available to bet amount. Required Required TransferResponse transferFunds ( Wallet from, Wallet t o, double amount ) Required Required AccountDetailsResponse getAccountDetails ( ) Returns the details relating your account, including your discount rate and Betfair point balance. Required Required String getVendorClientId ( ) Returns the vendor client id for customer account which is a unique identifier for that customer. Required Required String getApplicationSubscriptionToken ( intsubscriptionLength ) Used to create new subscription tokens for an application. Returns the newly generated subscription token which can be provided to the end user. Available to owner managed (Vendor) App Keys Only Required Required Status activateApplicationSubscription ( StringsubscriptionToken ) Activates the customers subscription token for an application Status cancelApplicationSubscription ( StringsubscriptionToken ) Cancel the subscription token. The customers subscription will no longer be active once cancelled. Available to owner managed (Vendor) App Keys Only Y Required Required String updateApplicationSubscription ( Stri ng vendorClientId, int subscriptionLength ) Update an application subscription with a new expiry date. Available to owner managed (Vendor) App Keys Only Y Required Required List< ApplicationSubscri ption > listApplicationSubscriptionTokens ( SubscriptionStatus subscriptionStatu s) Returns a list of subscription tokens for an application based on the subscription status passed in the request. Y Required Required List< AccountSubscriptio n> listAccountSubscriptionTokens ( ) List of subscription tokens associated with the account. Available to owner managed (Vendor) App Keys Only Y Required Required List getApplicationSubscriptionHistory ( String vendorClientId ) Returns a list of subscriptions tokens that have been associated with the customers account. Available to owner managed (Vendor) App Keys Only Y Required Required in request header OR request body Y X-Authentication X-Applicaiton Required AccountStatementReport getAccountStatement ( String locale, int fromRecord, int recordCount, Tim eRange itemDateRange, IncludeIte m includeItem,Walletwallet ) Get account statement - provides full audit trail of money moving to and from your account. List listCurrencyRates ( String fromCurrency ) Returns a list of currency rates based on given currency. VendorAccessTokenInfo token ( String client_id, GrantType grant_type, String code, String client_secret, String refresh_token ) Generate web vendor session based on a standard session identifiable by auth code, vendor secret and app key VendorDetails getVendorDetails ( String vendorId ) Return details about a vendor from its identifier. Response includes Vendor Name and URL Status revokeAccessToWebApp ( long vendorId ) Remove the link between an account and a vendor web app. This will remove the refreshToken for this user-vendor pair subscription. List listAuthorizedWebApps ( ) Retrieve all vendors applications currently subscribed to by the user making the request boolean isAccountSubscribedToWebApp ( String vendorId ) Return whether an account has authorised a web app. List getAffiliateRelation ( List vendorClientIds ) Return relation between a list of users and an affiliate Not available via the Ve ndor Web API Required Required Y Required Required Y Required Required createDeveloperAppKeys Operation createDeveloperAppKeys DeveloperApp createDeveloperAppKeys ( String appName ) throws AccountAPINGException Create 2 Application Keys for given user; one 'Delayed and the other 'Live'. You must apply to have your 'Live' App Key activated. Parameter name Type appName String Required Description A Display name for the application. Return type Description DeveloperApp A map of application keys, one marked ACTIVE, and the other DELAYED Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 getAccountDetails Operation getAccountDetails AccountDetailsResponse getAccountDetails ( ) throws AccountAPINGException Returns the details relating your account, including your discount rate and Betfair point balance. Return type Description AccountDetailsResponse Response for retrieving account details. Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 Please note: The data returned by getAccountDetails relies on two underlying services. The pointsBalance is returned by a separate service from the other data. As a consequence of this, in the event of a failure to a single underlying service, either the pointsBalance o r the remaining data may not be included in the getAccountDetails response. If both services fail, the error UNEXPECTED_ERROR will be returned. getAccountFunds Operation getAccountFunds AccountFundsResponse getAccountFunds ( ) throws AccountAPINGException Get available to bet amount. The getAccounts service will return the UK wallet balance by default from either the UK or AUS Accounts API endpoint if the wallet parameter is not specified. Parameter name Type wallet Wallet Required Description Name of the wallet in question. Please Note: To return the the Australian Exchange wallet balance you must specify AUSTRALIAN as the Wallet parameter. Return type Description AccountFundsResponse Response for retrieving available to bet. Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 getDeveloperAppKeys Operation getDeveloperAppKeys List< DeveloperApp > getDeveloperAppKeys ( ) throws AccountAPINGException Get all application keys owned by the given developer/vendor Return type Description List< DeveloperApp > A list of application keys owned by the given developer/vendor Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 getAccountStatement getAccountStatement AccountStatementReport getAccountStatement ( String locale, int fromRecord, int recordCount, TimeRange itemDateRange, In cludeItem includeItem, Wallet wallet) throws AccountAPINGException Get account statement Parameter name Type Required Description locale String The language to be used where applicable. If not specified, the customer account default is returned. fromRecord int Specifies the first record that will be returned. Records start at index zero. If not specified then it will default to 0. recordCount int Specifies the maximum number of records to be returned. Note that there is a page size limit of 100. itemDateRange TimeRange Return items with an itemDate within this date range. Both from and to date times are inclusive. If from is not specified then the oldest available items will be in range. If to is not specified then the latest items will be in range. nb. This itemDataRange is currently only applied when includeItem is set to ALL or not specified, else items are NOT bound by itemDate. includeItem IncludeItem Which items to include, if not specified then defaults to ALL. wallet Wallet Which wallet to return statementItems for. If unspecified then the UK wallet will be selected Return type Description AccountStatementReport List of statement items chronologically ordered plus moreAvailable boolean to facilitate paging Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. listCurrencyRates listCurrencyRates List listCurrencyRates ( String fromCurrency ) throws AccountAPINGException Returns a list of currency rates based on given currency. Please note: the currency rates are updated once every hour a few seconds after the hour. Parameter name Type Required fromCurrency String Description The currency from which the rates are computed. Please note: GBP is currently the only based currency support Return type Description List List of currency rates Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. transferFunds Operation transferFunds TransferResponse transferFunds ( Wallet from, Wallet to, double amount ) throws AccountAPINGException Transfer funds between the UK Exchange and other wallets. This operatio is currently deprecated due to the removal of the AUS wallet Parameter name Type Required Description from Wallet Source wallet to Wallet Destination wallet amount double Amount to transfer Return type Description TransferResponse Response for transfer funds action Throws Description AccountAPINGException Generic exception that is thrown if this operation fails for any reason. Since 1.0.0 Accounts Exceptions Exceptions AccountAPINGException This exception is thrown when an operation fails Error code Description INVALID_INPUT_DATA Invalid input data INVALID_SESSION_INFORMATION The session token hasn't been provided, is invalid or has expired. UNEXPECTED_ERROR An unexpected internal error occurred that prevented successful request processing. INVALID_APP_KEY The application key passed is invalid or is not present SERVICE_BUSY The service is currently too busy to service this request TIMEOUT_ERROR Internal call to downstream service timed out DUPLICATE_APP_NAME Duplicate application name APP_KEY_CREATION_FAILED Creating application key version has failed APP_CREATION_FAILED Application creation has been failed NO_SESSION A session token header ('X-Authentication') has not been provided in the request NO_APP_KEY An application key header ('X-Application') has not been provided in the request SUBSCRIPTION_EXPIRED An application key is required for this operation INVALID_SUBSCRIPTION_TOKEN The subscription token provided doesn't exist TOO_MANY_REQUESTS Too many requests INVALID_CLIENT_REF Invalid length for the client reference WALLET_TRANSFER_ERROR There was a problem transferring funds between your wallets INVALID_VENDOR_CLIENT_ID The vendor client ID is not subscribed to this application key Other parameters Type errorDetails String requestUUID String Accounts Enums Enums Required Description the stack trace of the error SubscriptionStatus Value Description ALL Any subscription status ACTIVATED Only activated subscriptions UNACTIVATED Only unactivated subscriptions CANCELLED Only cancelled subscriptions EXPIRED Only expired subscriptions Status Value Description SUCCESS Sucess status ItemClass Value Description UNKNOWN Statement item not mapped to a specific class. All values will be concatenated into a single key/value pair. The key will be 'unknownStatementItem' and the value will be a comma separated string. Wallet Value Description UK The UK Exchange wallet AUSTRALIAN The Australian Exchange wallet - THIS IS NOW DEPRECATED IncludeItem Value Description ALL Include all items DEPOSITS_WITHDRAWALS Include payments only EXCHANGE Include exchange bets only POKER_ROOM Include poker transactions only winLose Value Description RESULT_ERR Internal error RESULT_FIX Result has been updated after an initial state. i.e. your account history has been changed to reflect this. RESULT_LOST Loss RESULT_NOT_APPLICABLE Include poker transactions only RESULT_WON Won COMMISSION_REVERSAL Betfair have restored the funds to your account that it previously received from you in commission. GrantType Value Description AUTHORISATION_CODE REFRESH_TOKEN TokenType Value BEARER Description AffiliateRelationStatus Value Description INVALID_USER Provided vendor client ID is not valid AFFILIATED Vendor client ID valid and affiliated NOT_AFFILIATED Vendor client ID valid but not affiliated Accounts TypeDefinitions Type definitions TransferResponse Transfer operation response Field name Type Required transactionId String Description The id of the transfer transaction that will be used in tracking the transfers between the wallets ApplicationSubscription Application subscription details Field name Type Required Description subscriptionToken String Application key identifier expiryDateTime Date Subscription Expiry date expiredDateTime Date Subscription Expired date createdDateTime Date Subscription Create date activationDateTime Date Subscription Activation date cancellationDateTime Date Subscription Cancelled date subscriptionStatus SubscriptionStatus Subscription status clientReference String Client reference vendorClientId String Vendor client Id Subscription History Application subscription history details Field name Type Required Description subscriptionToken String Application key identifier expiryDateTime Date Subscription Expiry date expiredDateTime Date Subscription Expired date createdDateTime Date Subscription Create date activationDateTime Date Subscription Activation date cancellationDateTime Date Subscription Cancelled date subscriptionStatus SubscriptionStatus Subscription status clientReference String Client reference AccountSubscription Application subscription details Field name Type Required subscriptionTokens List< SubscriptionTokenInfo > Lis t of subscription token details applicationName String Application name applicationVersionId String Description Application version Id SubscriptionTokenInfo Subscription token information Field name Type Required Description subscriptionToken String Subscription token activatedDateTime Date Subscription Activated date expiryDateTime Date Subscription Expiry date expiredDateTime Date Subscription Expired date cancellationDateTime Date Subscription Cancelled date subscriptionStatus Subscription status SubscriptionStatus DeveloperApp Describes developer/vendor specific application Field name Type Required appName String The unique name of the application appId long A unique id of this application appVersions List< DeveloperAppVersion > Description The application versions (including application keys) DeveloperAppVersion Describes a version of an external application Field name Type Required Description owner String The user who owns the specific version of the application versionId long The unique Id of the application version version String The version identifier string such as 1.0, 2.0. Unique for a given application. applicationKey String The unqiue application key associated with this application version delayData boolean Indicates whether the data exposed by platform services as seen by this application key is delayed or realtime. subscriptionRequired boolean Indicates whether the application version needs explicit subscription ownerManaged boolean Indicates whether the application version needs explicit management by the software owner. A value of false indicates, this is a version meant for personal developer use. active boolean Indicates whether the application version is currently active vendorId String Public unique string provided to the Vendor that they can use to pass to the Betfair API in order to identify themselves. vendorSecret String Private unique string provided to the Vendor that they pass with certain calls to confirm their identity. Linked to a particular App Key. AccountFundsResponse Response for retrieving available to bet. Field name Type Required Description availableToBetBalance double Amount available to bet. exposure double Current exposure. retainedCommission double Sum of retained commission. exposureLimit double Exposure limit. discountRate double User Discount Rate. pointsBalance int The Betfair points balance AccountDetailsResponse Response for Account details. Field name Type Required Description currencyCode String Default user currency Code. See Currency Parameters for minimum bet sizes relating to each currency. firstName String First Name. lastName String Last Name. localeCode String Locale Code. region String Region based on users zip/postcode (ISO 3166-1 alpha-3 format). Defaults to GBR if zip/postcode cannot be identified. timezone String User Time Zone. discountRate double User Discount Rate. pointsBalance int The Betfair points balance. countryCode The customer's country of residence (ISO 2 Char format) String AccountStatementReport A container representing search results. Field name Type Required Description accountStatement List The list of statement items returned by your request. moreAvailable Indicates whether there are further result items beyond this page. boolean StatementItem Summary of a cleared order. Field name Type Required Description refId String An external reference, eg. equivalent to betId in the case of an exchange bet statement item. itemDate Date The date and time of the statement item, eg. equivalent to settledData for an exchange bet statement item. (in ISO-8601 format, not translated) amount double The amount of money the balance is adjusted by balance double Account balance. itemClass ItemClass Class of statement item. This value will determine which set of keys will be included in itemClassData itemClassData Map Key value pairs describing the current statement item. The set of keys will be determined by the itemClass legacyData Set of fields originally returned from APIv6. Provided to facilitate migration from APIv6 to API-NG, and ultimately onto itemClass and itemClassData StatementLegacyData StatementLegacyData Summary of a cleared order. Field name Type Required Description avgPrice double The average matched price of the bet (null if no part has been matched) betSize double The amount of the stake of your bet. (0 for commission payments or deposit/withdrawals) betType String Back or lay betCategoryType String Exchange, Market on Close SP bet, or Limit on Close SP bet. commissionRate String Commission rate on market eventId long Please note: this is the Id of the market without the associated exchangeId eventTypeId long Event Type fullMarketName String Full Market Name. For card payment items, this field contains the card name grossBetAmount double The winning amount to which commission is applied. marketName String Market Name. For card transactions, this field indicates the type of card transaction (deposit, deposit fee, or withdrawal). marketType marketType Market type. For account deposits and withdrawals, marketType is set to NOT_APPLICABLE. placedDate Date Date and time of bet placement selectionId long Id of the selection (this will be the same for the same selection across markets) selectionName String Name of the selection startDate Date Date and time at the bet portion was settled transactionType String Debit or credit transactionId long The unique reference Id assigned to account deposit and withdrawals. winLose winLose Win or loss TimeRange TimeRange Field name Type Required Description from Date from, format: ISO 8601) to Date to, format: ISO 8601 CurrencyRate Currency rate Field name Type Required Description currencyCode String Three letter ISO 4217 code rate Exchange rate for the currency specified in the request double AuthorisationResponse AuthorisationResponse Wrapper object containing authorisation code and redirect URL for web vendors Field name Type Required Description authorisationCode String The authorisation code redirectUrl URL to redirect the user to the vendor page String SubscriptionOptions SubscriptionOptions Wrapper object containing details of how a subscription should be created Field name Type Required Description subscription_length int How many days should a created subscription last for. Open ended subscription created if value not provided. Relevant only if createdSubscription is true. subscription_token String An existing subscription token that the caller wishes to be activated instead of creating a new one. Ignored is createSubscription is true. client_reference String Any client reference for this subscription token request. VendorAccessTokenInfo Wrapper object containing UserVendorSessionToken, RefreshToken and optionally a Subscription Token if one was created Field name Type access_token String Session token used by web vendors token_type TokenType Type of the token expires_in long How long until the token expires refresh_token String Token used to refresh the session token in future application_subscription ApplicationSubscription Required Description Object containing the vendor client id and optionally some subscription information VendorDetails Wrapper object containing vendor name and redirect url Field name Type Required Description appVersionId long Internal id of the application vendorName String Vendor name redirectUrl String URL to be redirected to AffiliateRelation Wrapper object containing affiliate relation details Field name Type Required Description vendorClientId String ID of user status The affiliate relation status AffiliateRelationStatus Heartbeat API Detailed documentation Operations Type definitions Exceptions Typical Interaction This Heartbeat operation is provided to allow customers to automatically cancel their unmatched bets in the event of their API client/s losing connectivity with the Betfair API. UK Exchange Interface Endpoint Example JSON-RPC https://api.betfair.com/exchange/heartbeat/json-rpc/v1 HeartbeatAPING/v1.0/heartbeat Italian Exchange Interface Endpoint Example JSON-RPC https://api.betfair.it/exchange/heartbeat/json-rpc/v1 HeartbeatAPING/v1.0/heartbeat Spanish Exchange Interface Endpoint Example JSON-RPC https://api.betfair.es/exchange/heartbeat/json-rpc/v1 HeartbeatAPING/v1.0/heartbeat Operation summary HeartbeatReport heartbeat ( int preferredTimeoutSeconds ) Detailed documentation Heartbeat Operations heartbeat Events Type definitions HeartbeatReport Enums ActionPerformed Exceptions APINGException Operations heartbeat HeartbeatReport heartbeat ( int preferredTimeoutSeconds ) throws APINGException This heartbeat operation is provided to help customers have their positions managed automatically in the event of their API clients losing connectivity with the Betfair API. If a heartbeat request is not received within a prescribed time period, then Betfair will attempt to cancel all 'LIMIT' type bets for the given customer on the given exchange. There is no guarantee that this service will result in all bets being cancelled as there are a number of circumstances where bets are unable to be cancelled. Manual intervention is strongly advised in the event of a loss of connectivity to ensure that positions are correctly managed. If this service becomes unavailable for any reason, then your heartbeat will be unregistered automatically to avoid bets being inadvertently cancelled upon resumption of service. you should manage your position manually until the service is resumed. Heartbeat data may also be lost in the unlikely event of nodes failing within the cluster, which may result in your position not being managed until a subsequent heartbeat request is received. Parameter name Type Required preferredTimeoutSeconds int Description Maximum period in seconds that may elapse (without a subsequent heartbeat request), before a cancellation request is automatically submitted on your behalf. The minimum value is 10, the maximum value permitted is 300. Passing 0 will result in your heartbeat being unregistered (or ignored if you have no current heartbeat registered). You will still get an actionPerformed value returned when passing 0, so this may be used to determine if any action was performed since your last heartbeat, without actually registering a new heartbeat. Passing a negative value will result in an error being returned, INVALID_INPUT_DATA. Any errors while registering your heartbeat will result in a error being returned, UNEXPECTED_ERROR. Passing a value that is less than the minimum timeout will result in your heartbeat adopting the minimum timeout. Passing a value that is greater than the maximum timeout will result in your heartbeat adopting the maximum timeout. The minimum and maximum timeouts are subject to change, so your client should utilise the returned actualTimeoutSeconds to set an appropriate frequency for your subsequent heartbeat requests. Return type Description HeartbeatReport Response from heartbeat operation Throws Description APINGException Thrown if the operation fails Events This interface does not define any events. Type definitions HeartbeatReport Response from heartbeat operation Field name Type actionPerformed ActionPerformed actualTimeoutSeconds int Required Description The action performed since your last heartbeat request. The actual timeout applied to your heartbeat request, see timeout request parameter description for details. Enums ActionPerformed Value Description NONE No action was performed since last heartbeat, or this is the first heartbeat CANCELLATION_REQUEST_SUBMITTED A request to cancel all unmatched bets was submitted since last heartbeat ALL_BETS_CANCELLED All unmatched bets were cancelled since last heartbeat SOME_BETS_NOT_CANCELLED Not all unmatched bets were cancelled since last heartbeat CANCELLATION_REQUEST_ERROR There was an error requesting cancellation, no bets have been cancelled CANCELLATION_STATUS_UNKNOWN There was no response from requesting cancellation, cancellation status unknown Exceptions APINGException This exception is thrown when an operation fails Error code Description INVALID_INPUT_DATA Invalid input data INVALID_SESSION_INFORMATION The session token passed is invalid NO_APP_KEY An application key is required for this operation NO_SESSION A session token is required for this operation INVALID_APP_KEY The application key passed is invalid UNEXPECTED_ERROR An unexpected internal error occurred that prevented successful request processing. Other parameters Type errorDetails String requestUUID String Required Description Specific error details Typical Interaction SET UP [{"jsonrpc": "2.0", "method": "HeartbeatAPING/v1.0/heartbeat", "params": {"preferredTimeoutSeconds":"10"}, "id": 1}] [{"jsonrpc":"2.0","result":{"actualTimeoutSeconds":10,"actionPerformed":"NONE"},"id":1}] RESET [{"jsonrpc": "2.0", "method": "HeartbeatAPING/v1.0/heartbeat", "params": {"preferredTimeoutSeconds":"0"}, "id": 1}] [{"jsonrpc":"2.0","result":{"actualTimeoutSeconds":0,"actionPerformed":"NONE"},"id":1}] RE-SET UP HEARTBEAT [{"jsonrpc": "2.0", "method": "HeartbeatAPING/v1.0/heartbeat", "params": {"preferredTimeoutSeconds":"10"}, "id": 1}] [{"jsonrpc":"2.0","result":{"actualTimeoutSeconds":10,"actionPerformed":"NONE"},"id":1}] You should be able to reset the heartbeat by passing a value of actualTimeoutSeconds":0 and then restarting it by setting the required value. EXAMPLE OF RESPONSE IF HEARTBEAT ISN'T RECEIVED WITHIN SPECIFIED TIME [{"jsonrpc": "2.0", "method": "HeartbeatAPING/v1.0/heartbeat", "params": {"preferredTimeoutSeconds":"10"}, "id": 1}] [{"jsonrpc":"2.0","result":{"actualTimeoutSeconds":10,"actionPerformed":"ALL_BETS_CANCELLED"},"id":1}] Race Status API The listRaceDetails operation is provided to allow customers to establish the status of a horse or greyhound race market both prior to and after the start of the race. This information is available for UK and Ireland races only. listRaceDetails Operation summary Operations Events Type definitions Type aliases Enums Exceptions listRaceDetails Interface Endpoint JSON-RPC Prefix Example JSON-RPC https://api.betfair.com/exchange/scores/json-rpc/v1 ScoresAPING/v1.0/listRaceDetails Operation summary List Operations listRaceDetails ( Set meetingIds, Set raceIds ) listRaceDetails Events Type definitions RaceDetails Enum RaceStatus Responsecode Exceptions APINGException Operations listRaceDetails List listRaceDetails ( Set meetingIds, Set raceIds ) throws APINGException Search for races to get their details. Parameter Type Required Description name meetingIds Set unique Id for the meeting equivalent to the eventId for that specific race as returned by listEvents. Optionally restricts the results to the specified meeting IDs. raceIds Set for the race in the format meetingid.raceTime (hhmm). raceTime is in GMT. Optionally restricts the results to the specified race IDs. The raceID field is returned within the Race node of the Navigation Data For Applications service. Return type Description List List of retrieved race details Throws APINGException Since 1.0.0 Description Events This interface does not define any events. Type definitions RaceDetails Race Details Field name meetingId Type MeetingId Required Description The unique Id for the meeting equivalent to the eventId for that specific race as returned by listEvents. Optionally restricts the results to the specified meeting IDs. raceId RaceId The unique Id for the race in the format meetingid.raceTime (hhmm). Optionally restricts the results to the specified race IDs. raceStatus RaceStatus The current status of the race. lastUpdated LastUpdated This is the time the data was last updated responseCode ResponseCode Type aliases Alias Type UpdateSequence long EventId String EventTypeId String EventTime String UpdateType String LastUpdated Date MeetingId String RaceId String Enums RaceStatus Value Description DORMANT There is no data available for this race. DELAYED The start of the race has been delayed PARADING The horses/greyhounds are in the parade ring GOINGDOWN The horses are going down to the starting post GOINGBEHIND The horses are going behind the stalls APPROACHING The greyhounds are approaching the traps GOINGINTRAPS The greyhounds are being put in the traps HARERUNNING The hare has been started ATTHEPOST The horses are at the post OFF The race has started FINISHED The race has finished FINALRESULT The result has been declared (Greyhounds only) FALSESTART There has been a false start PHOTOGRAPH The result of the race is subject to a photo finish RESULT The result of the race has been announced WEIGHEDIN The jockeys have weighed in RACEVOID The race has been declared void NORACE The race has been declared a no race MEETINGABANDONED The meeting has been abandoned RERUN The race will be rerun ABANDONED The race has been abandoned ResponseCode Value Description OK Data returned successfully NO_NEW_UPDATES No updates since the passes UpdateSequence NO_LIVE_DATA_AVAILABLE Event scores are no longer available or are not on the schedule SERVICE_UNAVAILABLE Data feed for the event type (tennis/football etc) is currently unavailable UNEXPECTED_ERROR An unexpected error occurred retrieving score data LIVE_DATA_TEMPORARILY_UNAVAILABLE Live Data feed for this event/match is temporarily unavailable, data could potentially be stale Exceptions APINGException This exception is thrown when an operation fails Error code Description UNEXPECTED_ERROR The operation failed with an unexpected error INVALID_INPUT_DATA Invalid input data INVALID_SESSION_INFORMATION The session token passed is invalid or expired INVALID_APP_KEY The application key passed is invalid SERVICE_BUSY The service is currently too busy to service this request TIMEOUT_ERROR Internal call to downstream service timed out NO_SESSION A session token is required for this operation NO_APP_KEY An application key is required for this operation TOO_MANY_REQUESTS Too many requests SERVICE_UNAVAILABLE Service is currently unavailable Other parameters Type errorDetails String requestUUID String Required Description The stack trace of the error Interface Definition Documents The below documents provide a machine readable interface description for API-NG in XML format. Updated 4th April 2017 SportsAPING.xml AccountAPING.xml HeartbeatAPING.xml Additional Information Betfair Price Increments Below is a list of price increments per price 'group'. Placing a bet outside of these increments will result in an INVALID_ODDS error Odds Markets Price Increment 1.01 2 0.01 23 0.02 3 4 0.05 4 6 0.1 6 10 0.2 10 20 0.5 20 30 1 30 50 2 50 100 5 100 1000 10 BettingType ASIAN_HANDICAP_SINGLE_LINE & ASIAN_HANDICAP_DOUBLE_LINE only Price Increment 1.01 1000 0.01 Currency Parameters Guide to available currencies and minimum bet sizes. Currency name UK Sterling Euro Symbol Currency Code Min Bet Size Min Deposit Size Minimum BSP Liability Minimum Bet Payout £ GBP 2 10 10 10 € EUR 2 15 20 20 US Dollar US$ USD 4 15 20 20 Hong Kong Dollars HK$ HKD 25 150 125 125 Australian Dollar AUD AUD 5 30 30 30 Canadian Dollar CAD CAD 6 25 30 30 Danish Kroner DKK DKK 30 150 150 150 Norwegian Kronor NOK NOK 30 150 150 150 Swedish Krona SEK SEK 30 150 150 150 Singapore Dollar SGD SGD 6 30 30 30 Racecourse Abbreviations The racecourse abbreviations lists for Horse Racing and Greyhounds is available via horsegreyhoundcourseabbreviations.xls Runner Metadata Description The RUNNER_METADATA returned by listMarketCatalogue for Horse Racing (when available) is described in the table below. Parameter Description WEIGHT_UNITS The unit of weight used. pounds ADJUSTED_RATING Adjusted ratings are race-specific ratings which reflect weights allocated in the race and, in some circumstances, the age of the horse. Collectively they represent the chance each runner has on form. https://www.timeform.com/Racing/Articles/How_the_ratings_for_a_race_are_calculated Please note: this data is only returned for those with a Premium Timeform subscription 79 DAM_YEAR_BORN The year the horse’s mother's birth 1997 DAYS_SINCE_LAST_RUN The number of days since the horse last ran 66 WEARING Any extra equipment the horse is wearing tongue strap DAMSIRE_YEAR_BORN The year in which the horse's grandfather was born on its mothers side 1988 SIRE_BRED The country were the horse's father was bred IRE TRAINER_NAME The name of the horse's trainer Fergal O'Brien STALL_DRAW The stall number the horse is starting from 10 SEX_TYPE The sex of the horse f OWNER_NAME The owner of the horse Mr M. C. Fahy SIRE_NAME The name of the horse's father Revoque FORECASTPRICE_NUMERATOR The forecast price numerator 13 FORECASTPRICE_DENOMINATOR The forecast price denominator 8 JOCKEY_CLAIM The reduction in the weight that the horse carries for a particular jockey were applicable. 5 WEIGHT_VALUE The weight of the horse 163 DAM_NAME The name of the horse's mother Rare Gesture AGE The age of the horse 7 COLOUR_TYPE The colour of the horse b DAMSIRE_BRED The country were the horse's grandfather was born IRE DAMSIRE_NAME The name of the horse's grandfather Shalford SIRE_YEAR_BORN The year the horse's father was born 1994 OFFICIAL_RATING The horses official rating 97 FORM The horses recent form 212246 BRED The country in which the horse was born IRE runnerId The runnerId for the horse 62434983 JOCKEY_NAME The name of the jockey. Please note: This field will contain 'Reserve' in the event that the horse has been entered into the market as a reserve runner. Any reserve runners will be withdrawn from the market once it has been confirmed that they will not run. Paddy Brenna DAM_BRED The country where the horse's mother was born IRE COLOURS_DESCRIPTION The textual description of the jockey silk Royal blue an white sleeves COLOURS_FILENAME A relative URL to an image file corresponding to the jockey silk. You must add the value of this field to the base URL: http://content-cache.betfair.com/feeds_images/Horses/SilkColours/ Please note - silk cloth images aren't provided for US Racing. The saddlecloth images used for US racing can be view via https://sn4.cdnbf.net/exchange/plus/images/app/common/assets/images/saddlecloths-sprite_2608 _.gif c20140225lei/ CLOTH_NUMBER The number on the saddle-cloth 5 CLOTH_NUMBER ALPHA The number on the saddle-cloth. For US Racing were the runner is paired, this field will display the cloth number of the paired runner e.g. "1A" 1A Terms of use: Please refer to http://form.timeform.betfair.com/termsofuse regarding the above data. Time Zones & Time Format All times are returned in GMT and are in ISO 8601 (http://en.wikipedia.org/wiki/ISO_8601) format. They can be converted to your local timezone using the timezone field returned by the getAccountDetails operation or into the local market timezone using the timezone returned for the event by listMarketCatalogue To synchronize with the Betfair server time we recommend that you use the pool of NTP servers listed via http://www.pool.ntp.org/zone/europe The following table lists the time zones returned be the API along with their meaning. Location Abbreviation Notes Africa/Johannesburg RSA America/Costa_Rica SJMT America/Indiana/Indianapolis IEST America/Santiago SMT Asia/Bangkok THAI Asia/Calcutta INT Asia/Dubai UAE Australia/Adelaide ACST Australia/Darwin ANST Australia/Perth AWST Australia/Queensland AQST Australia/Sydney AEST Brazil/East BRT Brazil/West AMT CET CET Central European Time EET EET Eastern European Time Etc/GMT-5 PKT Europe/London UKT Europe/Moscow MSK GMT/UTC GMT/UTC Hongkong HK Jamaica KMT Japan JPT NZ NZT US/Alaska AKST US/Arizona AST US/Central CST US/Eastern EST US/Hawaii HST North America Indiana East Greenwich Mean Time/Coordinated Universal Time New Zealand US/Mountain MST US/Pacific PST Common Error Codes Meaning FaultCode Client/Server Associated HTTP Transport Response Code DSC-0008 Comments JSONDeserialisationParseFailure Client 400 DSC-0009 ClassConversionFailure Client 400 Invalid format for parameter, for example passing a string where a number was expected. Can also happen when a value is passed that does not match any valid enum. DSC-0018 MandatoryNotDefined Client 400 A parameter marked as mandatory was not provided DSC-0019 Timeout Server 504 The request has timed out DSC-0021 NoSuchOperation Client 404 The operation specified does not exist DSC-0023 NoSuchService Client 404 DSC-0024 RescriptDeserialisationFailure Client 400 Exception during deserialization of RESCRIPT request DSC-0034 UnknownCaller Client 400 A valid and active App Key hasn't been provided in the request. Please check that your App Key is active. Please see Application Keys for further information regarding App Keys. DSC-0035 UnrecognisedCredentials Client 400 DSC-0036 InvalidCredentials Client 400 DSC-0037 SubscriptionRequired Client 403 The user is not subscribed to the App Key provided DSC-0038 OperationForbidden Client 403 The App Key sent with the request is not permitted to access the operation Virtual Bets The Betfair Exchange uses a 'cross matching' algorithm to display the best possible prices (bets) available by taking into account the back and lay offers (unmatched bets) across all selections. You can return virtual bets in the response when using API-NG by including the virtualise":"true" in the listMarketBook request e.g. [{"jso nrpc": "2.0", "method": "SportsAPING/v1.0/listMarketBook", "params": {"marketIds":["1.114101556"],"priceProjection":{"priceData":["EX_BEST_OFFERS"],"virtualise":"true"}}, "id": 1}] You should subscribe to the EX_BEST_OFFERS_DISP MarketDataFlter if using the Exchange Stream API One of the easiest ways to understand how we generate virtual bets for cross matching is to work through a couple of examples. Consider the following market and what would happen if we placed a very large back bet at 1.01 on The Draw: Without cross matching, this bet would be matched in three portions; 1) £150 at 5.0, 2) £250 at 3.0, and £999 at 1.01 with anything remaining being left unmatched. With cross matching we can do better. We have a back bet on Newcastle for £120 at 2.0 and a back bet on Chelsea for £150 at 3.0 (shown in pink on the available to lay side of the market). These two bets can be matched against a back bet on The Draw at a price of 6.0, since 2.0, 3.0, and 6.0 form a 100% book. To ensure that the book is balanced, we choose the stakes to be inversely proportional to the prices. This means that we take the full £120 at 2.0 on Newcastle, only £80 at 3.0 on Chelsea, and £40 at 6.0 on The Draw, which is the first virtual bet We now have a back bet on Newcastle for £75 at 2.5 and a back bet on Chelsea for £70 at 3.0 (again shown in pink on the available to lay side of the market). These two bets can be matched against a back bet on The Draw at a price of 3.75, since 2.5, 3.0, and 3.75 also form a 100% book. Balancing the stakes means that we need to take the full £75 at 2.5 on Newcastle, only £62.50 at 3.0 on Chelsea, and £50 at 3.75 on The Draw, which is the second virtual bet. Since 3.75 is less than 5.0, the £150 at 5.0 would be matched first followed by £50 at 3.75. If we continued this process we would get further matching at 1.50 and 1.05, but for the purposes of displaying the market view we have the best 3 prices for the available to back bets on The Draw, and so we can stop calculating the virtual bets. The virtual bets are just the bets that would have been matched had we received a sufficiently large back bet at 1.01; in this example, £40 at 6.0 and £50 at 3.75. We take these virtual bets and merge them with the existing bets on the market to generate the following market view (with the virtual bets shown in green) The process is repeated to obtain the virtual lay bets (available to back bets) for Newcastle and Chelsea. Here we have a slightly different market (as before, chosen to make the numbers nice) and consider what would happen if we placed a very large lay bet at 1000 on The Draw. Without cross matching, this bet would be matched in three portions; 1) £100 at 10.0, 2) £50 at 50.0, and £2 at 1000 with anything remaining being left unmatched. With cross matching we can do better. We have a lay bet on Newcastle for £300 at 2.0 and a lay bet on Chelsea for £150 at 3.0 (shown in blue on the available to back side of the market). These two bets can be matched against a lay bet on The Draw at a price of 6.0, since 2.0, 3.0, and 6.0 form a 100% book. To ensure that the book is balanced, we choose the stakes to be inversely proportional to the prices. This means that we take only £225 at 2.0 on Newcastle, the full £150 at 3.0 on Chelsea, and £75 at 6.0 on The Draw, which is the first virtual bet. Assuming these bets got matched, the market would look like this: We now have a lay bet on Newcastle for £75 at 2.0 and a lay bet on Chelsea for £250 at 2.4 (again shown in blue on the available to back side of the market). These two bets can be matched against a lay bet on The Draw at a price of 12.0, since 2.0, 2.4, and 12.0 also form a 100% book. Balancing the stakes means that we need to take the full £75 at 2.0 on Newcastle, only £62.50 at 2.4 on Chelsea, and £12.50 at 12.0 on The Draw, which is the second virtual bet. This leaves the following market: This time we can't continue the process since there is no valid price for a virtual bet on The Draw that would result in a 100% book, and so we can stop calculating the virtual bets. Again, the virtual bets are just the bets that would have been matched had we received a sufficiently large lay bet at 1000; in this example, £75 at 6.0 and £12.50 at 12.0. We take these virtual bets and merge them with the existing bets on the market to generate the following market view (with the virtual bets shown in orange): Locale Specification The locale specification determines the language returned for names of sports and markets. It is an optional parameter you can specify when you want to retrieve names in a language that differs from the language specified for the account. For example, if the account language is specified as English, you can use the locale parameter to retrieve non-English sport or market names. The language code is based on the ISO 639-1 standard which defines two-letter codes, such as "en" and "fr". The follow languages are available, but please be aware not all markets in all languages are fully translated: Language Locale Code English en Danish da Swedish sv German de Italian it Greek el Spanish es Turkish tr Korean ko Czech cs Bulgarian bg Russian ru French fr Thai th
Source Exif Data:
File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.4 Linearized : No Modify Date : 2017:04:24 13:54:40Z Create Date : 2017:04:24 13:54:40Z Producer : iText 2.1.7 by 1T3XT Page Mode : UseOutlines Page Count : 208EXIF Metadata provided by EXIF.tools