SofaScore API endpoint
Returns a cricket match's innings scorecards from SofaScore. Each innings has the batting and bowling teams, runs, wickets, overs in cricket notation (18.4 is 18 overs and 4 balls), extras (wides, no balls, byes, leg byes, penalty), every batter's line (runs, balls, fours, sixes, dismissal with the bowler and fielder, fall-of-wicket score and over), every bowler's figures (overs, maidens, runs, wickets, wides, no balls), the partnerships and a derived fall-of-wickets list. Works for T20, one-day and Test matches (a Test lists up to four innings). Returns 404 when SofaScore has no innings data for the match, which includes matches that have not started and sports other than cricket.
/sofascore/event-inningsQuery parameters:
id: required. Numeric SofaScore event (match) id of a cricket match, e.g. 16253632 (an IPL match) or 12998931 (an Ashes Test). Get it from sofascore/live-events with sport cricket, sofascore/search or sofascore/scheduled-events.Notable response behavior:
innings is in batting order. A T20 or one-day match lists two innings and a Test up to four (number 1 to 4). Each innings has runs, wickets, overs and extras (total, wides, no_balls, byes, leg_byes, penalty).overs uses cricket notation: 18.4 is 18 overs and 4 balls, not 18.4 decimal overs. The same holds for fall_of_wicket_over and a bowler's overs.batting line has runs, balls, fours, sixes and a dismissal text with dismissal_code. Values seen: Bowled (1), LBW (2), Caught (3), Stumped (4), Caught & Bowled (6), Hit wicket (7), Not out (8) and Did not bat (9); other codes are passed through. bowler and fielder are present when SofaScore credits them, and fall_of_wicket_score and fall_of_wicket_over only for dismissed batters.fall_of_wickets is derived from those batting lines: dismissed batters ordered by team score and then over, numbered from 1. partnerships are numbered in the order SofaScore lists them (the last one can be unbroken).extras.total equal the innings runs, and partnership runs sum to the same total (checked on the innings of an IPL match and an Ashes Test).innings array is a valid response (a match that has not reached its first innings). Returns 404 when SofaScore has no innings data for the match, which includes matches that have not started and sports other than cricket.Example response (shortened):
{
"code": 200,
"msg": "OK",
"data": {
"event_id": 16253632,
"source_url": "https://api.sofascore.com/api/v1/event/16253632/innings",
"fetched_at": "2026-10-07T17:00:00Z",
"count": 2,
"innings": [
{
"id": 82607,
"number": 1,
"batting_team": {
"id": 216006,
"name": "Gujarat Titans",
"short_name": "GT",
"slug": "gujarat-titans"
},
"bowling_team": {
"id": 187843,
"name": "Royal Challengers Bengaluru",
"short_name": "RCB",
"slug": "royal-challengers-bengaluru"
},
"runs": 155,
"wickets": 8,
"overs": 20,
"extras": {
"total": 5,
"wides": 4,
"no_balls": 0,
"byes": 0,
"leg_byes": 1,
"penalty": 0
},
"batting": [
{
"player": {
"id": 1130200,
"name": "Sai Sudharsan",
"short_name": "S Sudharsan",
"slug": "sai-sudharsan",
"position": "BM",
"jersey_number": "66"
},
"scorecard_name": "S Sudharsan",
"runs": 12,
"balls": 12,
"fours": 2,
"sixes": 0,
"dismissal": "Caught",
"dismissal_code": 3,
"bowler": {
"id": 786528,
"name": "Bhuvneshwar Kumar",
"short_name": "B Kumar",
"slug": "bhuvneshwar-kumar",
"position": "B",
"jersey_number": "15"
},
"fielder": {
"id": 955278,
"name": "Jitesh Sharma",
"short_name": "J Sharma",
"slug": "jitesh-sharma",
"position": "WK",
"jersey_number": "55"
},
"fall_of_wicket_score": 26,
"fall_of_wicket_over": 3.4
},
{
"player": {
"id": 878580,
"name": "Washington Sundar",
"short_name": "W Sundar",
"slug": "washington-sundar",
"position": "AR",
"jersey_number": "5"
},
"scorecard_name": "W Sundar",
"runs": 50,
"balls": 37,
"fours": 5,
"sixes": 0,
"dismissal": "Not out",
"dismissal_code": 8
},
{
"player": {
"id": 934353,
"name": "Prasidh Krishna",
"short_name": "P Krishna",
"slug": "prasidh-krishna",
"position": "B",
"jersey_number": "24"
},
"scorecard_name": "P Krishna",
"runs": 0,
"balls": 0,
"fours": 0,
"sixes": 0,
"dismissal": "Did not bat",
"dismissal_code": 9
}
],
"bowling": [
{
"player": {
"id": 915786,
"name": "Jacob Duffy",
"short_name": "J Duffy",
"slug": "jacob-duffy",
"position": "B",
"jersey_number": "32"
},
"scorecard_name": "J Duffy",
"overs": 4,
"maidens": 0,
"runs": 38,
"wickets": 0,
"wides": 3,
"no_balls": 0
}
],
"partnerships": [
{
"number": 1,
"player1": {
"id": 932039,
"name": "Shubman Gill",
"short_name": "S Gill",
"slug": "shubman-gill",
"position": "BM",
"jersey_number": "77"
},
"player2": {
"id": 1130200,
"name": "Sai Sudharsan",
"short_name": "S Sudharsan",
"slug": "sai-sudharsan",
"position": "BM",
"jersey_number": "66"
},
"runs": 22,
"balls": 14
}
],
"fall_of_wickets": [
{
"wicket": 1,
"score": 22,
"over": 2.2,
"player": {
"id": 932039,
"name": "Shubman Gill",
"short_name": "S Gill",
"slug": "shubman-gill",
"position": "BM",
"jersey_number": "77"
}
},
{
"wicket": 2,
"score": 26,
"over": 3.4,
"player": {
"id": 1130200,
"name": "Sai Sudharsan",
"short_name": "S Sudharsan",
"slug": "sai-sudharsan",
"position": "BM",
"jersey_number": "66"
}
}
]
},
"..."
]
}
}
| Field | Filled in, of 2 checked | Values in the sample |
|---|---|---|
| id | 2 | |
| number | 2 | 1 to 2, median 1 |
| batting_team | 2 | |
| bowling_team | 2 | |
| runs | 2 | 155 to 161, median 155 |
| wickets | 2 | 5 to 8, median 5 |
| overs | 2 | 18 to 20, median 18 |
| extras | 2 | |
| batting | 2 | median 12 entries |
| bowling | 2 | median 5 entries |
| partnerships | 2 | median 6 entries |
| fall_of_wickets | 2 | median 5 entries |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| id | string | Yes | Numeric SofaScore cricket event (match) id | 16253632 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/sofascore/event-innings?id=16253632" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"event_id": 16253632,
"source_url": "https://api.sofascore.com/api/v1/event/16253632/innings",
"fetched_at": "2026-10-07T17:00:00Z",
"count": 2,
"innings": [
{
"id": 82607,
"number": 1,
"batting_team": {
"id": 216006,
"name": "Gujarat Titans",
"short_name": "GT",
"slug": "gujarat-titans"
},
"bowling_team": {
"id": 187843,
"name": "Royal Challengers Bengaluru",
"short_name": "RCB",
"slug": "royal-challengers-bengaluru"
},
"runs": 155,
"wickets": 8,
"overs": 20,
"extras": {
"total": 5,
"wides": 4,
"no_balls": 0,
"byes": 0,
"leg_byes": 1,
"penalty": 0
},
"batting": [
{
"player": {
"id": 1130200,
"name": "Sai Sudharsan",
"short_name": "S Sudharsan",
"slug": "sai-sudharsan",
"position": "BM",
"jersey_number": "66"
},
"scorecard_name": "S Sudharsan",
"runs": 12,
"balls": 12,
"fours": 2,
"sixes": 0,
"dismissal": "Caught",
"dismissal_code": 3,
"bowler": {
"id": 786528,
"name": "Bhuvneshwar Kumar",
"short_name": "B Kumar",
"slug": "bhuvneshwar-kumar",
"position": "B",
"jersey_number": "15"
},
"fielder": {
"id": 955278,
"name": "Jitesh Sharma",
"short_name": "J Sharma",
"slug": "jitesh-sharma",
"position": "WK",
"jersey_number": "55"
},
"fall_of_wicket_score": 26,
"fall_of_wicket_over": 3.4
},
{
"player": {
"id": 878580,
"name": "Washington Sundar",
"short_name": "W Sundar",
"slug": "washington-sundar",
"position": "AR",
"jersey_number": "5"
},
"scorecard_name": "W Sundar",
"runs": 50,
"balls": 37,
"fours": 5,
"sixes": 0,
"dismissal": "Not out",
"dismissal_code": 8
},
{
"player": {
"id": 934353,
"name": "Prasidh Krishna",
"short_name": "P Krishna",
"slug": "prasidh-krishna",
"position": "B",
"jersey_number": "24"
},
"scorecard_name": "P Krishna",
"runs": 0,
"balls": 0,
"fours": 0,
"sixes": 0,
"dismissal": "Did not bat",
"dismissal_code": 9
}
],
"bowling": [
{
"player": {
"id": 915786,
"name": "Jacob Duffy",
"short_name": "J Duffy",
"slug": "jacob-duffy",
"position": "B",
"jersey_number": "32"
},
"scorecard_name": "J Duffy",
"overs": 4,
"maidens": 0,
"runs": 38,
"wickets": 0,
"wides": 3,
"no_balls": 0
}
],
"partnerships": [
{
"number": 1,
"player1": {
"id": 932039,
"name": "Shubman Gill",
"short_name": "S Gill",
"slug": "shubman-gill",
"position": "BM",
"jersey_number": "77"
},
"player2": {
"id": 1130200,
"name": "Sai Sudharsan",
"short_name": "S Sudharsan",
"slug": "sai-sudharsan",
"position": "BM",
"jersey_number": "66"
},
"runs": 22,
"balls": 14
}
],
"fall_of_wickets": [
{
"wicket": 1,
"score": 22,
"over": 2.2,
"player": {
"id": 932039,
"name": "Shubman Gill",
"short_name": "S Gill",
"slug": "shubman-gill",
"position": "BM",
"jersey_number": "77"
}
},
{
"wicket": 2,
"score": 26,
"over": 3.4,
"player": {
"id": 1130200,
"name": "Sai Sudharsan",
"short_name": "S Sudharsan",
"slug": "sai-sudharsan",
"position": "BM",
"jersey_number": "66"
}
}
]
},
"..."
]
}
}Request schema
No body schema
Response schema
#/definitions/sofascore.eventInningsResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | sofascore.EventInningsResponse | No | ||||
| data.count | integer | No | ||||
| data.event_id | integer | No | 16253632 | |||
| data.fetched_at | string | No | ||||
| data.innings | array | No | ||||
| data.innings[].batting | array | No | ||||
| data.innings[].batting[].balls | integer | No | 12 | |||
| data.innings[].batting[].bowler | object | No | Bowler is the bowler credited with the wicket and Fielder the catcher or stumper, when SofaScore lists them. | |||
| data.innings[].batting[].bowler.id | integer | No | 839956 | |||
| data.innings[].batting[].bowler.jersey_number | string | No | 9 | |||
| data.innings[].batting[].bowler.name | string | No | Erling Haaland | |||
| data.innings[].batting[].bowler.position | string | No | F | |||
| data.innings[].batting[].bowler.short_name | string | No | E. Haaland | |||
| data.innings[].batting[].bowler.slug | string | No | erling-haaland | |||
| data.innings[].batting[].dismissal | string | No | Caught | Dismissal is SofaScore's status text: a dismissal such as `Caught`, `Bowled`, `LBW`, `Stumped` or `Hit wicket`, `Not out`, or `Did not bat`. | ||
| data.innings[].batting[].dismissal_code | integer | No | 3 | |||
| data.innings[].batting[].fall_of_wicket_over | number | No | 3.4 | |||
| data.innings[].batting[].fall_of_wicket_score | integer | No | 26 | FallOfWicketScore and FallOfWicketOver give the team score and over when this batter was dismissed; omitted for batters who were not dismissed. | ||
| data.innings[].batting[].fielder | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.innings[].batting[].fours | integer | No | 2 | |||
| data.innings[].batting[].player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.innings[].batting[].runs | integer | No | 12 | |||
| data.innings[].batting[].scorecard_name | string | No | S Sudharsan | ScorecardName is the short name as printed on the scorecard. | ||
| data.innings[].batting[].sixes | integer | No | 0 | |||
| data.innings[].batting_team | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.innings[].bowling | array | No | ||||
| data.innings[].bowling[].maidens | integer | No | 0 | |||
| data.innings[].bowling[].no_balls | integer | No | 0 | |||
| data.innings[].bowling[].overs | number | No | 4 | Overs uses cricket notation: 3.4 is three overs and four balls. | ||
| data.innings[].bowling[].player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.innings[].bowling[].runs | integer | No | 38 | |||
| data.innings[].bowling[].scorecard_name | string | No | J Duffy | |||
| data.innings[].bowling[].wickets | integer | No | 0 | |||
| data.innings[].bowling[].wides | integer | No | 3 | |||
| data.innings[].bowling_team | sofascore.TeamRef | No | TeamRef record, 6 fields: country, id, name, national, short_name, slug. Described under SofaScore venue API. | |||
| data.innings[].extras | sofascore.CricketExtras | No | ||||
| data.innings[].extras.byes | integer | No | 0 | |||
| data.innings[].extras.leg_byes | integer | No | 1 | |||
| data.innings[].extras.no_balls | integer | No | 0 | |||
| data.innings[].extras.penalty | integer | No | 0 | |||
| data.innings[].extras.total | integer | No | 5 | |||
| data.innings[].extras.wides | integer | No | 4 | |||
| data.innings[].fall_of_wickets | array | No | FallOfWickets is derived from the batting lines that carry a fall-of-wicket score, ordered by team score and then over, and numbered from 1. | |||
| data.innings[].fall_of_wickets[].over | number | No | 2.2 | |||
| data.innings[].fall_of_wickets[].player | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.innings[].fall_of_wickets[].score | integer | No | 22 | |||
| data.innings[].fall_of_wickets[].wicket | integer | No | 1 | |||
| data.innings[].id | integer | No | 82607 | |||
| data.innings[].number | integer | No | 1 | |||
| data.innings[].overs | number | No | 20 | Overs uses cricket notation: 18.4 is eighteen overs and four balls. | ||
| data.innings[].partnerships | array | No | ||||
| data.innings[].partnerships[].balls | integer | No | 14 | |||
| data.innings[].partnerships[].number | integer | No | 1 | Number is the partnership's position in the innings, starting at 1. | ||
| data.innings[].partnerships[].player1 | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.innings[].partnerships[].player2 | sofascore.PlayerBrief | No | PlayerBrief record, 6 fields: id, jersey_number, name, position, short_name, slug. Described under SofaScore event at-bat pitches API. | |||
| data.innings[].partnerships[].runs | integer | No | 22 | |||
| data.innings[].runs | integer | No | 155 | |||
| data.innings[].wickets | integer | No | 8 | |||
| data.source_url | string | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/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/sofascore/event-innings?id=16253632" \
-H "x-api-key: $CRAWLORA_API_KEY"