---
title: "Get the materialized web index"
method: GET
path: "/api/v2/seo-index"
---

# Get the materialized web index

`GET /api/v2/seo-index`

## Request

- Base URL: `https://api.racecalendar.app`
- URL: `https://api.racecalendar.app/api/v2/seo-index`
- Auth: none declared

Returns the compact SEO index used by the website, including per-year season snapshots and standings when present.

## Response `200`

Materialized SEO index for the web app

- CompactSeoIndex
  - `generatedAt` string, required
  - `seasons` CompactSeoIndexSeason[], required
    - `payload` SeasonPayload, required
      - `year` number, required
      - `generatedAt` string, nullable, required
      - `hasIncompleteResults` boolean, required
      - `weekends` SeasonWeekend[], required
        - `id` number, required
        - `round` number, required
        - `grandPrixName` string, required
        - `circuitName` string, required
        - `location` string, required
        - `countryName` string, required
        - `latitude` number, nullable, required
        - `longitude` number, nullable, required
        - `trackPath` string, nullable, required
        - `startDate` string, required
        - `endDate` string, required
        - `meetingOfficialName` string, nullable, required
        - `countryCode` string, nullable, required
        - `countryFlag` string, nullable, required
        - `circuitKey` number, nullable, required
        - `circuitType` string, nullable, required
        - `circuitImage` string, nullable, required
        - `gmtOffset` string, nullable, required
        - `raceWinnerName` string, nullable, required
        - `raceWinnerHeadshotURL` string, nullable, required
        - `raceWinnerConstructorName` string, nullable, required
        - `sprintResultSummary` RaceResultEntry[], nullable, required
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `qualifyingResultSummary` RaceResultEntry[], nullable, required
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `raceResultSummary` RaceResultEntry[], nullable, required
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `webSprintResultSummary` RaceResultEntry[], nullable
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `webQualifyingResultSummary` RaceResultEntry[], nullable
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `webRaceResultSummary` RaceResultEntry[], nullable
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `startingGridSummary` StartingGridEntry[], nullable, required
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
          - `lapDuration` number, nullable, required
        - `latestResultKind` 'sprint' | 'qualifying' | 'race' | 'null', nullable, required
        - `latestResultSummary` RaceResultEntry[], nullable, required
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `webLatestResultSummary` RaceResultEntry[], nullable
          - `position` number, required
          - `positionLabel` string, nullable
          - `driverNumber` number, required
          - `fullName` string, nullable, required
          - `headshotUrl` string, nullable, required
          - `constructorName` string, nullable, required
          - `numberOfLaps` number, nullable
          - `points` number, nullable
          - `duration` string, nullable
          - `gapToLeader` string, nullable
          - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
        - `latestResultSessionKey` number, nullable, required
        - `latestResultUpdatedAt` string, nullable, required
        - `latestResultFingerprint` string, nullable, required
        - `latestResultSource` 'F1DB' | 'OpenF1' | 'null', nullable, required
        - `latestResultSourceVersion` string, nullable, required
        - `resultStatus` 'notStarted' | 'pending' | 'available', required
        - `raceRecap` RaceRecap, nullable, required
          - `winner` object, nullable, required
            - `position` number, required
            - `positionLabel` string, nullable
            - `driverNumber` number, required
            - `fullName` string, nullable, required
            - `headshotUrl` string, nullable, required
            - `constructorName` string, nullable, required
            - `numberOfLaps` number, nullable
            - `points` number, nullable
            - `duration` string, nullable
            - `gapToLeader` string, nullable
            - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
          - `podium` RaceResultEntry[], required
            - `position` number, required
            - `positionLabel` string, nullable
            - `driverNumber` number, required
            - `fullName` string, nullable, required
            - `headshotUrl` string, nullable, required
            - `constructorName` string, nullable, required
            - `numberOfLaps` number, nullable
            - `points` number, nullable
            - `duration` string, nullable
            - `gapToLeader` string, nullable
            - `status` 'dnf' | 'dns' | 'dsq' | 'null', nullable
          - `biggestGainers` object[], required
            - `gridPosition` number, required
            - `finishPosition` number, required
            - `positionsGained` number, required
            - `driverNumber` number, required
            - `fullName` string, nullable, required
            - `headshotUrl` string, nullable, required
            - `constructorName` string, nullable, required
          - `notableFinishers` object[], required
            - `finishPosition` number, nullable, required
            - `status` 'dnf' | 'dns' | 'dsq', required
            - `driverNumber` number, required
            - `fullName` string, nullable, required
            - `headshotUrl` string, nullable, required
            - `constructorName` string, nullable, required
          - `summaryLine` string, required
          - `summaryDetail` string, nullable, required
        - `status` 'scheduled' | 'cancelled', required
        - `statusNote` string, nullable, required
        - `sessions` SeasonSession[], required
          - `id` number, required
          - `name` string, required
          - `displayName` string, required
          - `kind` 'practice' | 'sprintQualifying' | 'sprint' | 'qualifying' | 'race' | 'other', required
          - `sessionType` string, required
          - `startDate` string, required
          - `endDate` string, required
        - `additionalSessions` SeasonSession[], required
          - `id` number, required
          - `name` string, required
          - `displayName` string, required
          - `kind` 'practice' | 'sprintQualifying' | 'sprint' | 'qualifying' | 'race' | 'other', required
          - `sessionType` string, required
          - `startDate` string, required
          - `endDate` string, required
    - `standings` object, nullable, required
      - `year` number, required
      - `sessionKey` number, required
      - `drivers` StandingsDriverRow[], required
        - `position` number, required
        - `points` number, required
        - `driverNumber` number, required
        - `fullName` string, nullable, required
        - `headshotUrl` string, nullable, required
      - `teams` StandingsTeamRow[], required
        - `position` number, required
        - `points` number, required
        - `teamName` string, required
        - `teamColour` string, nullable, required
        - `teamLogoUrl` string, nullable, required
    - `year` number, required
  - `years` number[], required

## Other responses

- `304`: Not modified
- `400`: Invalid request. Typed RFC 9457-compatible JSON (`ErrorResponse`) keeps `ok: false` plus `error` for iOS clients.
- `404`: Resource not found. Typed RFC 9457-compatible JSON (`ErrorResponse`) keeps `ok: false` plus `error` for iOS clients.
- `429`: Too many requests. Public calendar, season, standings, and track GET routes do not currently return 429; they only advertise an informational RateLimit ceiling. MCP cache-miss queries under `/api/v2/mcp/*` may return 429 with Retry-After. Identity and referral routes keep their existing D1 budgets.
- `500`: Internal server error. Typed RFC 9457-compatible JSON (`ErrorResponse`) keeps `ok: false` plus `error` for iOS clients.

---

[API](https://skmtc.dev/racecalendar/apis/race-calendar-formula-1-api.md) · [All operations](https://skmtc.dev/racecalendar/apis/race-calendar-formula-1-api/llms.txt) · [OpenAPI document](https://skmtc.dev/racecalendar/apis/race-calendar-formula-1-api/revisions/b2c2532b5f80?raw)
