# Formula 1 API

> Formula 1 race results, race calendars and championship standings are available as a workflow and API.

Formula 1, also called F1, provides season race calendars with venues, session times and sprint weekends; choose a year and optionally a time zone. Get race results returns main-race finishing order and fastest lap; choose a year and Grand Prix, or omit them for the latest completed race. Get standings returns drivers’ and teams’ championship standings; choose a year and which standings to include.

- Page: https://fous.com/tools/formula-1
- Handle: `@formula-1`
- Category: [Sports](https://fous.com/tools/category/sports)
- Source website: https://formula1.com
- Last verified: Sep 30, 2026

## Methods

### Get race calendar

Operation `get_race_calendar`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get a Formula 1 season calendar with local or chosen-zone session times, race venues, and sprint weekends. Unpublished seasons have no races.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `year` | integer | no | `2026` | Season year, such as 2026. Leave blank for the current season. |
| `time_zone` | string | no | `"New York"` | City or IANA time zone for session start times, such as New York or America/New_York. Leave blank for circuit local time. |

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "maximum": 2100,
      "minimum": 1950,
      "description": "Season year, such as 2026. Leave blank for the current season.",
      "examples": [
        2026,
        2035
      ]
    },
    "time_zone": {
      "type": "string",
      "default": "local",
      "description": "City or IANA time zone for session start times, such as New York or America/New_York. Leave blank for circuit local time.",
      "examples": [
        "New York"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "year": 2026
    },
    {
      "year": 2026,
      "time_zone": "New York"
    },
    {
      "year": 2035
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `races` | array |  | Grand Prix races in round order; excludes pre-season tests. |
| `races[].city` | string or null | `"Melbourne"` |  |
| `races[].link` | string | `"https://www.formula1.com/en/racing/2026/australia"` |  |
| `races[].round` | integer | `1` |  |
| `races[].status` | string | `"completed"` |  |
| `races[].circuit` | string or null | `"Albert Park Grand Prix Circuit"` |  |
| `races[].country` | string or null | `"Australia"` |  |
| `races[].sessions` | array |  |  |
| `races[].grand_prix` | string | `"Australian Grand Prix"` |  |
| `races[].sprint_weekend` | boolean | `false` |  |
| `races[].weekend_end_date` | string or null | `"2026-03-08"` |  |
| `races[].weekend_start_date` | string or null | `"2026-03-06"` |  |
| `season` | integer | `2026` | Season year. |

**Example input**

```json
{
  "year": 2026
}
```

**Example output**

```json
{
  "races": [
    {
      "city": "Melbourne",
      "link": "https://www.formula1.com/en/racing/2026/australia",
      "round": 1,
      "status": "completed",
      "circuit": "Albert Park Grand Prix Circuit",
      "country": "Australia",
      "sessions": [
        {
          "name": "Practice 1",
          "start_time": "2026-03-06T12:30:00+11:00"
        },
        {
          "name": "Practice 2",
          "start_time": "2026-03-06T16:00:00+11:00"
        }
      ],
      "grand_prix": "Australian Grand Prix",
      "sprint_weekend": false,
      "weekend_end_date": "2026-03-08",
      "weekend_start_date": "2026-03-06"
    },
    {
      "city": "Shanghai",
      "link": "https://www.formula1.com/en/racing/2026/china",
      "round": 2,
      "status": "completed",
      "circuit": "Shanghai International Circuit",
      "country": "China",
      "sessions": [
        {
          "name": "Practice 1",
          "start_time": "2026-03-13T11:30:00+08:00"
        },
        {
          "name": "Sprint Qualifying",
          "start_time": "2026-03-13T15:30:00+08:00"
        }
      ],
      "grand_prix": "Chinese Grand Prix",
      "sprint_weekend": true,
      "weekend_end_date": "2026-03-15",
      "weekend_start_date": "2026-03-13"
    }
  ],
  "season": 2026
}
```

### Get race results

Operation `get_race_results`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get the main-race finishing order and fastest lap for a Grand Prix. Defaults to the most recent completed race in the current season.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `year` | integer | no | `2025` | Season year, such as 2025. Omit for the current season. |
| `grand_prix` | string | no | `"Monaco"` | Grand Prix name, circuit or host country, such as Monaco, Silverstone or Japan. Omit for the latest completed race. |

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "description": "Season year, such as 2025. Omit for the current season.",
      "examples": [
        2025
      ]
    },
    "grand_prix": {
      "type": "string",
      "default": "",
      "description": "Grand Prix name, circuit or host country, such as Monaco, Silverstone or Japan. Omit for the latest completed race.",
      "examples": [
        "Monaco",
        "Silverstone"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "year": 2025,
      "grand_prix": "Monaco"
    },
    {},
    {
      "year": 2025,
      "grand_prix": "Silverstone"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `date` | string | `"2025-05-25"` |  |
| `link` | string | `"https://www.formula1.com/en/results/2025/races/1261/monaco/race-result"` |  |
| `circuit` | string or null | `"Circuit de Monaco"` |  |
| `results` | array |  |  |
| `results[].team` | string | `"McLaren"` |  |
| `results[].driver` | string | `"Lando Norris"` |  |
| `results[].points` | number | `25` |  |
| `results[].position` | string | `"1"` |  |
| `results[].car_number` | integer | `4` |  |
| `results[].time_or_gap` | string | `"1:40:33.843"` |  |
| `results[].laps_completed` | integer or null | `78` |  |
| `grand_prix` | string | `"Monaco Grand Prix"` |  |
| `fastest_lap` | object or null |  |  |
| `fastest_lap.team` | string | `"McLaren"` |  |
| `fastest_lap.driver` | string | `"Lando Norris"` |  |
| `fastest_lap.lap_time` | string | `"1:13.221"` |  |

**Example input**

```json
{
  "year": 2025,
  "grand_prix": "Monaco"
}
```

**Example output**

```json
{
  "date": "2025-05-25",
  "link": "https://www.formula1.com/en/results/2025/races/1261/monaco/race-result",
  "circuit": "Circuit de Monaco",
  "results": [
    {
      "team": "McLaren",
      "driver": "Lando Norris",
      "points": 25,
      "position": "1",
      "car_number": 4,
      "time_or_gap": "1:40:33.843",
      "laps_completed": 78
    },
    {
      "team": "Ferrari",
      "driver": "Charles Leclerc",
      "points": 18,
      "position": "2",
      "car_number": 16,
      "time_or_gap": "+3.131s",
      "laps_completed": 78
    },
    {
      "team": "McLaren",
      "driver": "Oscar Piastri",
      "points": 15,
      "position": "3",
      "car_number": 81,
      "time_or_gap": "+3.658s",
      "laps_completed": 78
    }
  ],
  "grand_prix": "Monaco Grand Prix",
  "fastest_lap": {
    "team": "McLaren",
    "driver": "Lando Norris",
    "lap_time": "1:13.221"
  }
}
```

### Get standings

Operation `get_standings`, version 1. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.

Get Formula 1 drivers' and teams' championship standings for a season, with the last completed race. Teams' standings begin in 1958; a season without race results has empty lists.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `year` | integer | no | `2025` | Championship season, for example 2025. Defaults to the current year. |
| `standings` | string | no | `"drivers"` | Which championship standings to include, for example both. |

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "year": {
      "type": "integer",
      "minimum": 1950,
      "description": "Championship season, for example 2025. Defaults to the current year.",
      "examples": [
        2025,
        2026,
        2027
      ]
    },
    "standings": {
      "enum": [
        "drivers",
        "teams",
        "both"
      ],
      "type": "string",
      "default": "both",
      "description": "Which championship standings to include, for example both.",
      "examples": [
        "drivers",
        "both",
        "teams"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "year": 2025,
      "standings": "drivers"
    },
    {
      "year": 2026,
      "standings": "both"
    },
    {
      "year": 2027,
      "standings": "both"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `link` | string | `"https://www.formula1.com/en/results/2025/drivers"` | Formula 1 season standings page. |
| `teams` | array |  | Teams in championship order, empty when not requested or no races have finished. |
| `teams[].link` | string | `"https://www.formula1.com/en/results/2026/team/Mercedes"` | Team standings page on Formula 1. |
| `teams[].team` | string | `"Mercedes"` | Constructor name. |
| `teams[].points` | number | `538` | Championship points. |
| `teams[].position` | integer | `1` | Championship position. |
| `season` | integer | `2025` | Championship year. |
| `drivers` | array |  | Drivers in championship order, empty when not requested or no races have finished. |
| `drivers[].link` | string | `"https://www.formula1.com/en/results/2025/drivers/LANNOR01/lando-norris"` | Driver standings page on Formula 1. |
| `drivers[].team` | string or null | `"McLaren"` | Constructor name, or null if not recorded. |
| `drivers[].driver` | string | `"Lando Norris"` | Driver name. |
| `drivers[].points` | number | `423` | Championship points. |
| `drivers[].position` | integer | `1` | Championship position. |
| `drivers[].nationality` | string | `"British"` | Driver nationality. |
| `last_race_counted` | string or null | `"Abu Dhabi"` | Most recent Grand Prix with official race results; null when no results exist. |

**Example input**

```json
{
  "year": 2025,
  "standings": "drivers"
}
```

**Example output**

```json
{
  "link": "https://www.formula1.com/en/results/2025/drivers",
  "teams": [],
  "season": 2025,
  "drivers": [
    {
      "link": "https://www.formula1.com/en/results/2025/drivers/LANNOR01/lando-norris",
      "team": "McLaren",
      "driver": "Lando Norris",
      "points": 423,
      "position": 1,
      "nationality": "British"
    },
    {
      "link": "https://www.formula1.com/en/results/2025/drivers/MAXVER01/max-verstappen",
      "team": "Red Bull Racing",
      "driver": "Max Verstappen",
      "points": 421,
      "position": 2,
      "nationality": "Dutch"
    },
    {
      "link": "https://www.formula1.com/en/results/2025/drivers/OSCPIA01/oscar-piastri",
      "team": "McLaren",
      "driver": "Oscar Piastri",
      "points": 410,
      "position": 3,
      "nationality": "Australian"
    }
  ],
  "last_race_counted": "Abu Dhabi"
}
```

## Quick start

Replace `YOUR_API_KEY` with a Fous API key. To create one, open Developers at the bottom of Fous Studio, turn on Developer mode, then go to API keys (https://app.fous.com/keys). Change the values in `input` to run the same tool on new data.

```bash
curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 180 \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@formula-1",
  "visibility": "public",
  "operation": "get_race_calendar",
  "version": 1,
  "input": {
    "year": 2026
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
import json
import urllib.error
import urllib.request

api_key = "YOUR_API_KEY"

body = json.loads("{\n  \"api\": \"@formula-1\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_race_calendar\",\n  \"version\": 1,\n  \"input\": {\n    \"year\": 2026\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=180) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
const apiKey = "YOUR_API_KEY";

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(180_000),
  body: JSON.stringify({
  "api": "@formula-1",
  "visibility": "public",
  "operation": "get_race_calendar",
  "version": 1,
  "input": {
    "year": 2026
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

## Use from an AI assistant

Connect this tool to Claude Code, Claude Desktop, Cursor, VS Code, Codex and any MCP client as its own MCP server. Each method is a typed tool whose arguments are the method’s input.

- Server URL: `https://api.fous.com/mcp/tools/formula-1`
- Authorization: `Authorization: Bearer <Fous API key>`

**Tools**

- `get_race_calendar`: Get race calendar. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_race_results`: Get race results. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `get_standings`: Get standings. 1 credit per completed call. Failed calls without a completed billing receipt are free; completed work can remain charged if delivery is interrupted.
- `fous_get_run`: the result of a run that was still going, by its `request_id`. Free.

Claude Code:

```bash
claude mcp add --scope user --transport http fous-formula-1 https://api.fous.com/mcp/tools/formula-1 --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"
```

To give the assistant every tool, connect `https://api.fous.com/mcp`: it finds one with `fous_search_tools` and runs it with `fous_run_tool`. Setup for other clients: https://fous.com/llms-full.txt.

## Use cases

- Plan race coverage using session times and venues.
- Review finishing order and fastest laps after a Grand Prix.
- Track drivers’ championship positions and points.
- Compare teams’ championship standings across a season.

## FAQ

### Can I run it with my own inputs?

Yes. Change the inputs in Studio and press Run, or send new inputs from your code, or ask a connected AI assistant.

### Can I call this Formula 1 tool as an API?

Yes. Send a POST request to /v1/query with your Fous API key and the inputs, and get JSON back.

### How much does it cost?

Each completed run costs 1 credit. Failed runs without a completed receipt are free; completed work can remain charged if delivery is interrupted. With pay as you go, a credit costs 1¢. Monthly plans cost less per credit.

### Do I need a Formula 1 account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from formula1.com when you run it. Some results are reused for up to 24 hours, and results that use your account or key are never reused. It was last verified on Sep 30, 2026.

### What races are on the calendar for a season?

Get race calendar returns Grand Prix races in round order, with venues, session times and sprint weekend details. Choose a year and optionally a time zone.

### Who finished first in a Grand Prix?

Get race results returns the main-race finishing order and fastest lap. Choose a year and Grand Prix, or omit them for the latest completed race.

### What are the drivers’ and teams’ standings?

Get standings returns drivers’ and teams’ championship positions and points for a season. Choose which standings to include.

## Related

- [Yahoo Sports API](https://fous.com/tools/yahoo-sports.md): Yahoo Sports returns date-based scores and schedules, seasonal standings, and player regular-season and career stats when Yahoo provides them; unavailable data may be missing.
- [MLB API](https://fous.com/tools/mlb.md): MLB provides scores, schedules and game details for one date or up to seven days, regular-season division standings defaulting to the current year, and player profiles with regular-season stats for a selected season and career.
- [NBA API](https://fous.com/tools/nba.md): NBA provides up-to-seven-day schedules and scores, seasonal standings, player bios and available regular-season averages, plus matchup box scores, with undated matchups showing the latest.
- [NHL API](https://fous.com/tools/nhl.md): NHL provides games, schedules, and scores when published, standings by date, and player profiles with regular-season stats; dates outside a season have no teams, and unavailable stats are null.
- [NFL API](https://fous.com/tools/nfl.md): NFL provides weekly scores and schedules, regular-season standings, current rosters, and player season and career stats; released players are excluded, and ages or stats may be unavailable.
- [parkrun API](https://fous.com/tools/parkrun.md): Free community walking and running events and their public results.
- [Premier League API](https://fous.com/tools/premier-league.md): Premier League provides current/chosen-season tables and recent form, date-range fixtures/results (up to 380), player profiles and stats, and seasonal leaders; older-season stats may be limited.
- [ESPN API](https://fous.com/tools/espn.md): ESPN provides daily scores and schedules, team results, player statistics, matchup summaries, and latest topic-specific headlines; coverage and published details vary, especially for college and soccer.
- [All Sports tools](https://fous.com/tools/category/sports)
