# 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/workflows/formula-1
- Handle: `@formula-1`
- Category: [Sports](https://fous.com/workflows/category/sports)
- Source website: https://formula1.com
- Last verified: Sep 30, 2026
- Fous is not affiliated with Formula 1.

## Methods

### Get race calendar

Operation `get_race_calendar`, version 1. 1 credit per call.

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 |  |  |
| `races[].link` | string |  |  |
| `races[].round` | integer |  |  |
| `races[].status` | string |  |  |
| `races[].circuit` | string or null |  |  |
| `races[].country` | string or null |  |  |
| `races[].sessions` | array |  |  |
| `races[].grand_prix` | string |  |  |
| `races[].sprint_weekend` | boolean |  |  |
| `races[].weekend_end_date` | string or null |  |  |
| `races[].weekend_start_date` | string or null |  |  |
| `season` | integer | `2035` | Season year. |

**Example input**

```json
{
  "year": 2035
}
```

**Example output**

```json
{
  "races": [],
  "season": 2035
}
```

### Get race results

Operation `get_race_results`, version 1. 1 credit per call.

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 call.

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

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_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.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

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=120) 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.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_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);
```

Or describe the data in plain language: send `{"api":"@formula-1","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## 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

### Is Fous affiliated with Formula 1?

No. Fous is not affiliated with Formula 1. This workflow reads the public formula1.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. 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; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check 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/workflows/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/workflows/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/workflows/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/workflows/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/workflows/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/workflows/parkrun.md): Free community walking and running events and their public results.
- [Premier League API](https://fous.com/workflows/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/workflows/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 workflows](https://fous.com/workflows/category/sports)
