Live now!
Formula 1 data

Formula 1 API for live races, results and lap times

Every session of the season, from lights out to the chequered flag. Full classification, gaps, intervals, lap times, tyre compounds, drivers and constructors, delivered in one uniform JSON on a single plan.

✓ One plan, every race ✓ No contracts, no minimums ✓ First call in minutes
GET /v3/motorsport/fixtures/19615512?include=lineups.driver;results 200 OK
Formula 1 · Race · 19 Jul 2026Chequered flag
P2
Charles Leclerc
Charles Leclerc
#16 · Ferrari
P1
Kimi Antonelli
Kimi Antonelli
#12 · Mercedes
P3
Max Verstappen
Max Verstappen
#3 · Red Bull Racing
#DriverGapLapTyre
1Kimi Antonelli MERWinner1:49.963S
2Charles Leclerc FER+1.9521:49.414H
3Max Verstappen RBR+11.5861:49.791H
4Lewis Hamilton FER+17.2451:50.619H
5Oscar Piastri MCL+18.9881:49.774H
Real race, real response. Every driver, gap, lap time and compound on this card comes from the API call above. 22 drivers in the full classification. Values are printed exactly as the API returns them.
{
  "data": {
    "id": 19615512,
    "sport_id": 2,
    "league_id": 3468,
    "season_id": 26733,
    "venue_id": 343587,
    "name": "Race",
    "starting_at": "2026-07-19 13:00:00",
    "state_id": 5,
    "leg": "1/1",
    "lineups": [
      {
        "player_id": 37920807,
        "team_id": 276198,
        "driver_name": "Kimi Antonelli",
        "driver_number": 12,
        "driver": { "image_path": "https://cdn.sportmonks.com/images/motorsport/players/7/37920807.png" }
      }
      // + 21 more drivers, each with number, team and photo
    ],
    "results": [
      { "participant_id": 37920807, "description": "POSITION",      "result": { "position": 1 } },
      { "participant_id": 37920807, "description": "GAP_TO_LEADER", "result": { "gap": "1:24:42.479" } },
      { "participant_id": 37920807, "description": "TIME",          "result": { "time": "1:49.963" } },
      { "participant_id": 37920807, "description": "TYRE",          "result": { "compound": "SOFT" } },
      { "participant_id": 37920804, "description": "POSITION",      "result": { "position": 2 } },
      { "participant_id": 37920804, "description": "INTERVAL",      "result": { "interval": "1.952" } }
      // 109 result rows: five types per driver, minus the leader's interval
    ]
  }
}

Trusted by 30,000+ sports builders

Case study
Case study
Case study
Case study
Case study Case study ScoutsLand Case study Case study Case study Sportspoule Case study Case study Case study Last5Games Case study Case study
1,200+
companies building on Sportmonks
99.99%
uptime
6.4B
API requests per month
10 years
of sports data, at scale
Real race, real response

See the F1 API in action

This is a real Formula 1 race rendered straight from the API. Left is the race centre, right is the exact JSON it came from. Drag the divider and check any value against the response.

Race centre · built from the response Formula 1
Formula 1 · Race
19 Jul 2026 · 22 drivers · final classification
Chequered flag
P2
Charles Leclerc
Charles Leclerc
#16 · Ferrari
P1
Kimi Antonelli
Kimi Antonelli
#12 · Mercedes
P3
Max Verstappen
Max Verstappen
#3 · Red Bull Racing
#DriverGapLapTyre
112Kimi AntonelliMercedesMERWinner1:49.963S
216Charles LeclercFerrariFER+1.9521:49.414H
33Max VerstappenRed Bull RacingRBR+11.5861:49.791H
444Lewis HamiltonFerrariFER+17.2451:50.619H
581Oscar PiastriMcLarenMCL+18.9881:49.774H
66Isack HadjarRed Bull RacingRBR+23.3071:49.298H
71Lando NorrisMcLarenMCL+24.0141:48.890M
85Gabriel BortoletoAudiAUD+49.141:51.252H
941Arvid LindbladRacing BullsRCB+50.4061:50.574H
1043Franco ColapintoAlpineALP+76.0371:51.197H
1110Pierre GaslyAlpineALP+76.9911:51.130H
1230Liam LawsonRacing BullsRCB+77.5231:51.075H
1327Nico HulkenbergAudiAUD+78.3481:51.169H
1487Oliver BearmanHaasHAA+94.4651:51.511H
1523Alexander AlbonWilliamsWIL+104.6841:52.040H
1655Carlos SainzWilliamsWIL+105.8561:52.197H
1731Esteban OconHaasHAA+110.9251:51.900H
1877Valtteri BottasCadillacCAD+1 lap1:52.796S
1914Fernando AlonsoAston MartinAST+2 laps1:57.116H
2018Lance StrollAston MartinASTDNF2:9.921S
2111Sergio PerezCadillacCADDNF2:40.889H
2263George RussellMercedesMERDNFn/aM
MercedesMercedes
Kimi AntonelliP1
George RussellDNF
FerrariFerrari
Charles LeclercP2
Lewis HamiltonP4
Red Bull RacingRed Bull Racing
Max VerstappenP3
Isack HadjarP6
McLarenMcLaren
Oscar PiastriP5
Lando NorrisP7
AudiAudi
Gabriel BortoletoP8
Nico HulkenbergP13
Racing BullsRacing Bulls
Arvid LindbladP9
Liam LawsonP12
AlpineAlpine
Franco ColapintoP10
Pierre GaslyP11
HaasHaas
Oliver BearmanP14
Esteban OconP17
WilliamsWilliams
Alexander AlbonP15
Carlos SainzP16
CadillacCadillac
Valtteri BottasP18
Sergio PerezDNF
Aston MartinAston Martin
Fernando AlonsoP19
Lance StrollDNF
A different real session, because this one returns grid positions: fixture 19398659, Race, 16 Mar 2025, season_id 25273. Wet race, 19 of 20 classified cars on intermediates. Two cars share grid slot 18 in this response, which is how the payload returns it.
GridDriverFinMove
14Lando NorrisMCL10
281Oscar PiastriMCL97 down
31Max VerstappenRBR21 up
463George RussellMER31 up
522Yuki TsunodaRCB127 down
623Alexander AlbonWIL51 up
716Charles LeclercFER81 down
844Lewis HamiltonFER102 down
910Pierre GaslyALP112 down
1055Carlos SainzWIL188 down
116Isack HadjarRCB198 down
1214Fernando AlonsoAST175 down
1318Lance StrollAST67 up
147Jack DoohanALP206 down
155Gabriel BortoletoAUD161 down
1612Kimi AntonelliMER412 up
1727Nico HulkenbergAUD710 up
1831Esteban OconHAA135 up
1830Liam LawsonRBR153 up
2087Oliver BearmanHAA146 up
SportFormula 1 · sport_id 2
SessionRace · name "Race", leg 1/1
Start19 July 2026, 13:00 UTC · starting_at
Entries22 drivers, 19 classified, 3 DNF
Compounds17 hard, 3 soft, 2 medium · from the TYRE result rows
Constructors11 teams, joined on team_id · /seasons/26733?include=teams
CircuitReturned as a reference, not a name · venue_id 343587
Referencesleague_id 3468 · season_id 26733 · stage_id 77479373 · venue_id 343587 · state_id 5
GET /v3/motorsport/fixtures/19615512?include=lineups.driver;results 200 OK
{
  "data": {
    "id": 19615512,
    "sport_id": 2,
    "league_id": 3468,
    "season_id": 26733,
    "stage_id": 77479373,
    "venue_id": 343587,
    "name": "Race",
    "starting_at": "2026-07-19 13:00:00",
    "state_id": 5,
    "leg": "1/1",
    "lineups": [
      {
        "player_id": 37920807,
        "team_id": 276198,
        "driver_name": "Kimi Antonelli",
        "driver_number": 12,
        "grid_position": null,
        "driver": {
          "image_path": "https://cdn.sportmonks.com/images/motorsport/players/7/37920807.png"
        }
      },
      {
        "player_id": 37920804,
        "team_id": 276189,
        "driver_name": "Charles Leclerc",
        "driver_number": 16,
        "grid_position": null
      }
      // … 20 more drivers, each with number, team_id and photo
    ],
    "results": [
      { "participant_id": 37920807, "description": "POSITION",      "result": { "position": 1 } },
      { "participant_id": 37920807, "description": "GAP_TO_LEADER", "result": { "gap": "1:24:42.479" } },
      { "participant_id": 37920807, "description": "TIME",          "result": { "time": "1:49.963" } },
      { "participant_id": 37920807, "description": "TYRE",          "result": { "compound": "SOFT" } },
      { "participant_id": 37920804, "description": "POSITION",      "result": { "position": 2 } },
      { "participant_id": 37920804, "description": "INTERVAL",      "result": { "interval": "1.952" } },
      { "participant_id": 37920804, "description": "TIME",          "result": { "time": "1:49.414" } },
      { "participant_id": 37920804, "description": "TYRE",          "result": { "compound": "HARD" } },
      { "participant_id": 37920800, "description": "POSITION",      "result": { "position": 3 } },
      { "participant_id": 37920800, "description": "INTERVAL",      "result": { "interval": "11.586" } }
      // 109 result rows in total, across five types per driver.
      // Not 110: the leader has no INTERVAL row, there is no car ahead.
    ]
  }
}

Drag the divider to resize. Double-click it to reset. Timing values are printed exactly as the API returns them, so you can match any cell to the response.

What's included

Every field you get per session

One plan covers every race weekend of the season: practice, qualifying and the race. These are the actual field names in the response, so you can map your models before you write a single line of integration code.

Position
Classified finishing position for every driver, including cars that did not finish.
results[].description = "POSITION"
Timing
Gap to leader
Cumulative gap to the race leader. For the winner this is the total race time.
results[].description = "GAP_TO_LEADER"
Timing
Interval
Gap to the car directly ahead, the number that drives every live battle graphic.
results[].description = "INTERVAL"
Timing
Lap time
Lap time per driver, so you can render pace, fastest laps and stint comparisons.
results[].description = "TIME"
Timing
Tyre
Compound per driver: soft, medium, hard or intermediate. Strategy, straight from the feed.
results[].description = "TYRE"
Timing
Driver
Full driver name and car number for every entry in the session.
lineups[].driver_name · driver_number
Entry list
Grid
Starting position, returned per session where the timing feed provides it, so start to finish movement needs no second source.
lineups[].grid_position
Entry list
Photo
Official driver image served from our CDN, so you do not build an asset pipeline to show a face next to a name.
lineups[].driver.image_path
Entry list
Constructor
Team reference on every entry. Join it for constructor names and crests.
lineups[].team_id
Entry list
Session
Which session this is and where it sits in the weekend.
name · leg · stage_id
Structure
Schedule
Start time in UTC plus a state so you know if a session is upcoming, running or done.
starting_at · state_id
Structure
Season
Season and circuit references to build a calendar, an archive or a venue page.
season_id · venue_id · league_id
Structure

Result rows are returned per driver per type, so a 22 car race returns 109 rows across the five timing types. That is 109 and not 110 because the leader has no interval row: there is no car ahead. Field availability follows the session, so a race classification returns finishing positions and gaps where a qualifying session returns times, and grid position appears where the timing feed provides it. Full field definitions live in the Motorsport API documentation.

Built for builders

From token to race centre in one session

One base URL, one token, standard REST and JSON. If you already use the Sportmonks Football API, the auth and response conventions are the ones you know. New here? Your first F1 call is minutes away.

  1. 1Sign up and get your API token instantly. No credit card, no sales call.
  2. 2Call a session with include=lineups.driver;results to get the entry list and the timing in one response.
  3. 3Retrieve constructors once through /seasons/{id}?include=teams on team_id, then reuse it all season.
✓ In-depth documentation ✓ Built-in testing platform ✓ Postman collection

Timing data is delivered over REST, so you request the session you are showing and refresh it at the rate your product needs. Session responses stay small, and the plan allows 3,000 calls per hour per endpoint, which covers a race weekend at a live-timing refresh rate.

Stuck on an include or a result type? You talk to a person, 7 days a week. Sportmonks is the only sports data API with an actual face.

Start building for free Read the Motorsport API docs
curl "https://api.sportmonks.com/v3/motorsport/fixtures/19615512?api_token=YOUR_TOKEN&include=lineups.driver;results" 200 OK
{
  "data": {
    "id": 19615512,
    "name": "Race",
    "starting_at": "2026-07-19 13:00:00",
    "lineups": [
      {
        "driver_name": "Kimi Antonelli",
        "driver_number": 12,
        "team_id": 276198
      }
      // one object per driver on the entry list
    ],
    "results": [
      {
        "participant_id": 37920807,
        "description": "POSITION",
        "result": { "position": 1 }
      }
      // one object per driver, per result type
    ]
  }
}
From builders using Sportmonks

What builders say about the data

★★★★★

"Very good product with great price/performance ratio. Live scores are delivered fast and reliably. Clean, easy to use API. It builds a base for our own app. Well done!"

DK Dariusz KalitaOwner, Betsleagueapp
★★★★★

"Sportmonks have been great for getting our business up and running. The technical support has been spot on and responses to issues implementing the API excellent."

JB Jason BaylystCEO, Crowdcoach
★★★★★

"When I first found Sportmonks, I was astonished by how well it's documented, and how affordable and flexible the plans are. The API end-points are very well structured and continue to improve."

JD JDWELSportmonks customer

Read the full stories on our case studies page.

Plans and pricing

One plan, the whole season

One plan, every session of the season, with no tiers to decode and no data held back behind an upgrade. No contracts and no minimums. We publish our prices, so compare us openly.

Full season

Full Season F1

Everything you need to build a Formula 1 product

€ 69

per month, paid yearly · € 830 billed for twelve months

  • Every race weekend on the calendar, every session
  • Full classification: positions, gaps, intervals, lap times, tyres
  • Drivers and constructors, with photos and crests
  • 3,000 API calls per hour, per endpoint
  • Human support, 7 days a week
Get your free API token

All prices are exclusive of VAT and, where applicable, VAT will be applied at the standard rate.

Formula 1 data explained

What is the Sportmonks Formula 1 API?

The Sportmonks Formula 1 API is a REST API that returns live and historical Formula 1 data as JSON. It is part of our Motorsport API v3, where every session of a race weekend is a fixture with its own start time, venue and state, so practice, qualifying and the race all arrive in the same shape.

Each fixture carries two arrays that do the work. lineups gives you the entry list: driver name, car number, grid position, constructor and an official driver photo. results gives you the timing: finishing position, gap to the leader, interval to the car ahead, lap time and tyre compound, one row per driver per result type. Constructor names and crests join on team_id through the season endpoint, so a full race centre comes out of two calls.

That means you do not parse a different format for standings, timing and entry lists. You write one parser, point it at a session ID, and render whatever your product needs: a live race centre, a driver table, a results archive or a season calendar. Already building with our Football API? It is the same token, the same auth and the same JSON conventions.

Reference points

22Drivers in a full race classification, each with number, constructor and photo.
11Constructors on the 2026 grid, joined on team_id with official crests.
5Result types per driver: position, gap to leader, interval, lap time and tyre compound.
3,000API calls per hour, per endpoint, on the Full Season F1 plan.
Formula 1 API, FAQ

F1 questions builders actually ask

Quick answers before you sign up. Want the long version? It is all in the Motorsport API documentation.

What is the Sportmonks Formula 1 API?

The Sportmonks Formula 1 API is a REST API that returns live and historical Formula 1 data as JSON. It is part of the Sportmonks Motorsport API v3, where every session of a race weekend is a fixture with its own start time, venue and state.

Each session returns two arrays: lineups with the entry list (driver name, car number, grid position, constructor and driver photo) and results with the timing (finishing position, gap to leader, interval, lap time and tyre compound).

Which Formula 1 data does the API return?

Per driver, per session, you get five timing values: position, gap to leader, interval to the car ahead, lap time and tyre compound. Alongside that you get the entry list with driver names, car numbers, grid positions, official driver photos and a constructor reference.

Result rows are returned per driver per type, so a 22 car race classification returns 109 rows. Constructor names and crests are joined on team_id through the season endpoint.

Is Formula 1 data available live during a session?

Yes. Race and session data updates in real time, which is what makes a live race centre possible: positions and intervals move as the race does. Data is delivered over REST, so you request the session you are displaying and refresh it at the rate your product needs.

The Full Season F1 plan allows 3,000 API calls per hour per endpoint, which covers a race weekend at a live-timing refresh rate.

Which races and sessions are covered?

Every race weekend on the Formula 1 calendar is covered, and each session is returned as its own fixture, so practice, qualifying and the race all arrive in the same shape. There is no separate plan or add-on for particular circuits. If your product depends on a specific session type, check the current session list in the documentation before you build around it.

How much does the Formula 1 API cost?

There is one plan, Full Season F1, at 79 euro per month, or 830 euro billed for twelve months, which works out at about 69 euro per month. Prices are exclusive of VAT. The plan includes every session of the season, the full classification data set, drivers and constructors, and 3,000 API calls per hour per endpoint.

No contracts and no minimums. You can move between monthly and yearly whenever your product changes.

Can I try the Formula 1 API before paying?

Yes. Sign up and you get an API token instantly, with no credit card and no sales call, so you can make real calls against real sessions before you decide. If you get stuck, you talk to a person, 7 days a week. Free trial included.

Can I use one account for Formula 1 and football?

Formula 1, football and cricket all live on one Sportmonks account, with the same authentication style and the same JSON conventions, so adding a sport does not mean adding a vendor or a second integration pattern. Each sport is its own subscription, so check your plan in MySportmonks for exactly which sports your token is entitled to.

I use the Formula One API v1. How do I migrate?

Formula 1 now lives in the Motorsport API v3. The documentation includes a migration guide that maps the v1 Formula One API onto the v3 structure, so you can move across without reverse engineering the differences.

If anything in your integration does not map cleanly, contact support and a person will work through it with you.

Build your F1 app this weekend

Professional-grade Formula 1 data on the most approachable sports data API. Get a token, call a real session, and see the data before you commit to anything.

✓ One plan, every race ✓ No contracts, no minimums ✓ Human support, 7 days a week
More Sportmonks APIs