Flashscore API endpoint
Returns the title odds bookmakers list for one competition season in one viewer market, grouped by participant with every bookmaker's price and last movement. The provider lists only the top favourites (three in every competition checked), so this is a favourites market, not the full field. Bookmakers depend on the market: pick geo (and subdivision for US or CA) from flashscore-odds-geos. A market with no listed odds returns empty lists. Use the season-level tournament_id from event competition blocks or flashscore-tournament-archive-seasons.
/flashscore/tournament-outright-oddsReturns the title ("outright winner") odds bookmakers list for one competition season in one viewer market, grouped by participant with every bookmaker's decimal price and last movement. Bookmakers depend on the viewer's market, so pick geo (and subdivision for the United States and Canada) from /api/v1/flashscore/odds-geos.
Query parameters:
tournament_id (required): eight-character season-level tournament id. It is competition.tournament_id in /api/v1/flashscore/team-results, /api/v1/flashscore/team-fixtures, /api/v1/flashscore/player-results and /api/v1/flashscore/player-fixtures, and tournament_id of each season from /api/v1/flashscore/tournament-archive-seasons. The competition id and the stage id are different ids. An unknown id returns 404.geo (optional, default GB): viewer market country code from /api/v1/flashscore/odds-geos. One of AE, AL, AM, AO, AR, AT, AU, AZ, BA, BD, BE, BG, BO, BR, BY, CA, CH, CI, CL, CM, CN, CO, CR, CY, CZ, DE, DK, DO, DZ, EC, EE, EG, ES, ET, FI, FR, GB, GE, GH, GR, GT, HK, HN, HR, HU, ID, IE, IL, IN, IQ, IR, IS, IT, JO, JP, KE, KG, KH, KR, KW, KZ, LA, LB, LK, LT, LU, LV, LY, MA, MD, ME, MK, MM, MN, MT, MX, MY, NG, NI, NL, NO, NP, NZ, PA, PE, PH, PK, PL, PT, PY, QA, RO, RS, RU, SA, SD, SE, SG, SI, SK, SN, SV, TH, TN, TR, TW, TZ, UA, UG, US, UY, UZ, VE, VN, XK, ZA, ZM, ZW. Letter case is ignored. Bookmakers depend on the market; markets AE, BE, BR, HR, HU, ID, KZ and LT had no bookmakers when verified.subdivision (optional): a US state (with geo=US) or Canadian province (with geo=CA); any other combination is rejected. It changes which bookmakers are licensed. US: AK, AL, AR, AZ, CA, CO, CT, DC, DE, FL, GA, HI, IA, ID, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MS, MT, NC, ND, NE, NH, NJ, NM, NV, NY, OH, OK, OR, PA, RI, SC, SD, TN, TX, UT, VA, VT, WA, WI, WV, WY. Canada: AB, BC, MB, NB, NL, NS, NT, NU, ON, PE, QC, SK, YT.Invalid geo/subdivision values return 400 before any upstream request.
Limitation: the provider lists only the top favourites. Every competition checked (Premier League, Champions League, a tennis tournament) returned exactly three participants, so this is a favourites market, not the full field. has_more repeats the provider's own next-page flag (always false so far) and no way to request more was found.
Response fields: tournament_id, geo, subdivision, has_more, bookmakers ({id, name}) and participants. Each participant has id, name and offers: bookmaker_id, odds (decimal), change (the last price movement: UP or DOWN; omitted when none is reported), active (false when the market is shown but not open, as for a tournament already under way) and best. A market with no listed odds (for example AE) returns empty bookmakers and participants.
Example response (shortened):
{"code":200,"msg":"OK","data":{"source_url":"https://global.ds.lsapp.eu/odds/pq_graphql?_hash=lwo&geoIpCode=GB&geoIpSubdivisionCode=&projectId=2&tournamentId=SY30SsKF","tournament_id":"SY30SsKF","geo":"GB","has_more":false,"bookmakers":[{"id":16,"name":"bet365"},{"id":1281,"name":"BetMGM.uk"}],"participants":[{"id":"hA1Zm19f","name":"Arsenal","offers":[{"bookmaker_id":16,"odds":1.5,"change":"DOWN","active":true,"best":false},{"bookmaker_id":1281,"odds":1.5,"change":"DOWN","active":true,"best":false}]},{"id":"Wtn9Stg0","name":"Manchester City","offers":[{"bookmaker_id":16,"odds":5,"change":"UP","active":true,"best":false},{"bookmaker_id":1281,"odds":4.8,"change":"UP","active":true,"best":false}]}]}}
| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| id | 3 | |
| name | 3 | “bet365” and 2 other values |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| tournament_id | string | Yes | Eight-character season-level tournament id (tournament_id of an event competition block or of a season) | SY30SsKF | |
| geo | string | No | GB | Viewer market country code from flashscore-odds-geos; defaults to GB Allowed values: AE, AL, AM, AO, AR, AT, AU, AZ, BA, BD, BE, BG, BO, BR, BY, CA, CH, CI, CL, CM, CN, CO, CR, CY, CZ, DE, DK, DO, DZ, EC, EE, EG, ES, ET, FI, FR, GB, GE, GH, GR, GT, HK, HN, HR, HU, ID, IE, IL, IN, IQ, IR, IS, IT, JO, JP, KE, KG, KH, KR, KW, KZ, LA, LB, LK, LT, LU, LV, LY, MA, MD, ME, MK, MM, MN, MT, MX, MY, NG, NI, NL, NO, NP, NZ, PA, PE, PH, PK, PL, PT, PY, QA, RO, RS, RU, SA, SD, SE, SG, SI, SK, SN, SV, TH, TN, TR, TW, TZ, UA, UG, US, UY, UZ, VE, VN, XK, ZA, ZM, ZW. | GB |
| subdivision | string | No | US state (with geo US) or Canadian province (with geo CA) code from flashscore-odds-geos; rejected with any other geo Allowed values: AB, AK, AL, AR, AZ, BC, CA, CO, CT, DC, DE, FL, GA, HI, IA, ID, IL, IN, KS, KY, LA, MA, MB, MD, ME, MI, MN, MO, MS, MT, NB, NC, ND, NE, NH, NJ, NL, NM, NS, NT, NU, NV, NY, OH, OK, ON, OR, PA, PE, QC, RI, SC, SD, SK, TN, TX, UT, VA, VT, WA, WI, WV, WY, YT. | NJ | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/flashscore/tournament-outright-odds?tournament_id=SY30SsKF&geo=AE&subdivision=AB" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://global.ds.lsapp.eu/odds/pq_graphql?_hash=lwo&geoIpCode=GB&geoIpSubdivisionCode=&projectId=2&tournamentId=SY30SsKF",
"tournament_id": "SY30SsKF",
"geo": "GB",
"has_more": false,
"bookmakers": [
{
"id": 16,
"name": "bet365"
},
{
"id": 1281,
"name": "BetMGM.uk"
}
],
"participants": [
{
"id": "hA1Zm19f",
"name": "Arsenal",
"offers": [
{
"bookmaker_id": 16,
"odds": 1.5,
"change": "DOWN",
"active": true,
"best": false
},
{
"bookmaker_id": 1281,
"odds": 1.5,
"change": "DOWN",
"active": true,
"best": false
}
]
},
{
"id": "Wtn9Stg0",
"name": "Manchester City",
"offers": [
{
"bookmaker_id": 16,
"odds": 5,
"change": "UP",
"active": true,
"best": false
},
{
"bookmaker_id": 1281,
"odds": 4.8,
"change": "UP",
"active": true,
"best": false
}
]
}
]
}
}Request schema
No body schema
Response schema
Inline response schema
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | flashscore.TournamentOutrightOddsResponse | No | ||||
| data.bookmakers | array | No | ||||
| data.bookmakers[].id | integer | No | ||||
| data.bookmakers[].name | string | No | ||||
| data.geo | string | No | ||||
| data.has_more | boolean | No | ||||
| data.participants | array | No | ||||
| data.participants[].id | string | No | ||||
| data.participants[].name | string | No | ||||
| data.participants[].offers | array | No | OutrightOffer record, 5 fields: active, best, bookmaker_id, change, odds. Described under Flashscore team title odds API. | |||
| data.source_url | string | No | ||||
| data.subdivision | string | No | ||||
| data.tournament_id | string | No | ||||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/flashscore/tournament-outright-odds?tournament_id=SY30SsKF&geo=AE&subdivision=AB" \
-H "x-api-key: $CRAWLORA_API_KEY"