Ultimate Cricket Data API — Live Score, Scorecard, Fantasy, Stats and Fixtures
One cricket data API for live matches, scorecards, ball-by-ball, player statistics, fantasy points, news, fixtures, tables, and results. Simple REST access, 24x7, with team images on our own URLs.
One Cricket Data API for the Whole Match
A cricket product rarely needs only the current score. The home screen wants live matches. The match page wants a scorecard and ball-by-ball. A fantasy room wants playing XI and points. A stats page wants career numbers, tables, and results. A blog wants news next to the score. CricketLiveApi puts that package behind one REST API, so you are not stitching five feeds together.
The live cricket score, player statistics, scorecard, and ball-by-ball endpoints stay available 24x7. You call them when the match is on, and the same match id still works after the result is final.
What the API Includes
- Live matches — current score, overs, status, series name, and team images.
- Scorecard — batting, bowling, extras, fall of wickets, and partnerships.
- Ball-by-ball — every delivery with batter, bowler, runs, and wicket detail.
- Player statistics — career batting and bowling numbers, plus recent form.
- Fantasy — playing XI, roles, and live fantasy points for the same match.
- Fixtures, tables, and results — upcoming matches, points tables, and completed games.
- News — headlines and thumbnails you can place beside a live score widget.
- Graphs-ready numbers — over-by-over runs and wickets you can plot as a worm or Manhattan chart in your own UI.
Team and news images come back on CricketLiveApi URLs, not a third-party CDN. Your app can cache them without hotlinking someone else's image host.
Live Score, Anytime
Start with the live list. It is the smallest payload and the one your home screen should poll.
GET https://cricketliveapi.com/api/v1/cricket/matches/live
Authorization: Bearer YOUR_API_KEY
{
"success": true,
"data": {
"matches": [
{
"match_id": 173060,
"series_name": "India tour of England, 2026",
"match_desc": "3rd ODI",
"first_team": {
"name": "India",
"short_name": "IND",
"score": "287/6 (50 Ov)",
"team_image_url": "https://cricketliveapi.com/images/team_images/776162.jpg"
},
"second_team": {
"name": "England",
"short_name": "ENG",
"score": "214/4 (38.2 Ov)",
"team_image_url": "https://cricketliveapi.com/images/team_images/776177.jpg"
},
"status": "England need 74 runs from 70 balls"
}
]
}
}
Keep this call on a short timer. Do not reload the full scorecard for every card on the home screen. Open the heavier endpoints only after the user taps a match.
Scorecard and Ball-by-Ball
The scorecard is the match page. Batters, bowlers, and the fall of wickets sit in one JSON object you can render without scraping a website.
GET /api/v1/cricket/match/{match_id}/scorecard
{
"innings": [
{
"team": "India",
"total": "287/6",
"overs": "50",
"batters": [
{ "name": "Rohit Sharma", "runs": 112, "balls": 98, "fours": 11, "sixes": 4, "sr": 114.3 }
],
"bowlers": [
{ "name": "Jofra Archer", "overs": "10", "maidens": 1, "runs": 48, "wickets": 3, "econ": 4.80 }
],
"fall_of_wickets": [
{ "wicket": 1, "score": "68", "over": "12.4", "batter": "Shubman Gill" }
]
}
]
}
Ball-by-ball commentary is a separate call. Use it for the commentary tab, a ticker, or your own over graph. Each ball already has the over, the runs, and whether it was a wicket — that is enough to draw a worm or a Manhattan chart without a second stats vendor.
GET /api/v1/cricket/match/{match_id}/commentary
{
"commentary": [
{
"over": "38.2",
"bowler": "Jasprit Bumrah",
"batter": "Joe Root",
"runs": 4,
"wicket": false,
"text": "Short and wide, Root cuts it past point for four."
}
]
}
Player Statistics
A player page should not depend on the live match feed. Career numbers stay useful between series.
GET /api/v1/cricket/player/{player_id}/stats
{
"player": {
"name": "Virat Kohli",
"role": "Batsman",
"batting": {
"test": { "matches": 113, "runs": 8848, "avg": 48.62, "hundreds": 29 },
"odi": { "matches": 295, "runs": 13906, "avg": 58.18, "hundreds": 50 },
"t20i": { "matches": 125, "runs": 4188, "avg": 52.35, "hundreds": 1 }
}
}
}
Pair this with the recent-form endpoint when you want the last few innings next to the career card. The live match payload and the stats payload stay independent, so a slow stats page never blocks the score.
Fantasy Points on the Same Match
Fantasy apps need the playing XI and a points total that moves with every ball. Both hang off the same match id as the scorecard.
GET /api/v1/fantasy/points/{match_id}
{
"players": [
{
"name": "Virat Kohli",
"role": "BAT",
"fantasy_points": 94.5,
"breakdown": { "runs_points": 71.5, "boundary_bonus": 14.0, "milestone_bonus": 9.0 }
},
{
"name": "Jasprit Bumrah",
"role": "BOWL",
"fantasy_points": 118.0,
"breakdown": { "wicket_points": 75.0, "economy_bonus": 31.0, "maiden_bonus": 12.0 }
}
]
}
Load the squad once when the teams are announced. Poll points on a slower timer than the live score. Users care that points move after a wicket or a boundary, not that you hit the API on every dot ball.
Fixtures, Tables, and Results
Live data is only half of a cricket app. The other half is the calendar and the table.
- Upcoming fixtures for the schedule screen and push reminders.
- Series standings for group tables and points.
- Recent results for the completed-match list and season archive.
GET /api/v1/cricket/matches/upcoming
GET /api/v1/cricket/matches/recent
GET /api/v1/cricket/series/{series_id}/schedule
GET /api/v1/cricket/series/{series_id}/standings
A table does not change every ball. Cache standings for several minutes. Cache fixtures until the start time moves. Spend the short cache window on live matches only.
News Next to the Score
Score widgets on blogs and news apps work better when the headline feed uses the same auth and the same image host. Pull news when you render an article or a sidebar, not on the live-score timer.
GET /api/v1/cricket/news
{
"articles": [
{
"title": "India seal the series with a 46-run win",
"thumbnail": "https://cricketliveapi.com/images/news/48211.jpg",
"published_at": "2026-07-18T14:10:00Z"
}
]
}
A Small Client in Python
import requests
API = "https://cricketliveapi.com/api/v1"
KEY = "your_api_key_here"
H = {"Authorization": f"Bearer {KEY}"}
def live():
return requests.get(f"{API}/cricket/matches/live", headers=H, timeout=10).json()
def scorecard(match_id):
return requests.get(f"{API}/cricket/match/{match_id}/scorecard", headers=H, timeout=10).json()
def fantasy(match_id):
return requests.get(f"{API}/fantasy/points/{match_id}", headers=H, timeout=10).json()
for match in live()["data"]["matches"]:
mid = match["match_id"]
t1, t2 = match["first_team"], match["second_team"]
print(f"{t1['name']} {t1['score']} vs {t2['name']} {t2['score']}")
# scorecard(mid) and fantasy(mid) only after the user opens the match
Call CricketLiveApi from your server. The app or the website should talk to you, and you should attach the bearer token. That keeps the key out of a mobile binary and out of page source.
How to Split the Calls
- Home screen: live matches only.
- Match screen: scorecard, then commentary if that tab opens.
- Fantasy screen: squad once, points on a slower poll.
- Player screen: career stats, cached for hours.
- Tournament screen: fixtures and standings, cached for minutes.
- Blog sidebar: news, cached like any other editorial feed.
That split is what keeps a live score app fast during the IPL, a World Cup, the BBL, or the PSL. The data is all there. You just should not download all of it on every refresh.
Coverage
International Tests, ODIs, and T20Is, plus the IPL, BBL, PSL, CPL, SA20, ILT20, and major domestic competitions. If a match is in the live list, the scorecard, commentary, fantasy, and result endpoints use the same match id.
Get an API Key
Create an account, copy the bearer token, and hit the live matches endpoint. Documentation for every route is at cricketliveapi.com/docs.