Developer API Documentation

Query clean, structured JSON data directly in your applications without authentication. Hosted entirely on GitHub and served via jsDelivr CDN.

Base URL: https://cdn.jsdelivr.net/gh/vishwapramuditha/moto-db@main

Note: For production apps, replace @main with a specific commit hash or tag to prevent breaking changes if our schemas evolve.

Formula 1

  • GET /data/f1/drivers.json
  • GET /data/f1/{year}/schedule.json +sessions[]
  • GET /data/f1/{year}/results_{round}.json

MotoGP

  • GET /data/motogp/drivers.json
  • GET /data/motogp/{year}/schedule.json +sessions[]
  • GET /data/motogp/{year}/{short_name}/motogp_RAC.json

NASCAR

  • GET /data/nascar/drivers.json
  • GET /data/nascar/{year}/schedule.json
  • GET /data/nascar/{year}/{series}/results_{id}.json

IndyCar

  • GET /data/indycar/{year}/schedule.json +sessions[]
  • GET /data/indycar/{year}/results_{id}.json

WEC

  • GET /data/wec/{year}/schedule.json
  • GET /data/wec/{year}/results.json
  • GET /data/wec/{year}/standings.json

Formula E

  • GET /data/formula_e/{year}/schedule.json +sessions[]
  • GET /data/formula_e/{year}/results.json

WRC

  • GET /data/wrc/{year}/schedule.json +sessions[]
  • GET /data/wrc/{year}/results.json

Developer Integration Guide

Best practices for consuming Moto-DB's Git-based API in web and backend applications.

Production Tips

Commit Pinning

Serving data via @main is great for development, but in production it is highly recommended to pin requests to a specific commit hash (e.g. @7a3f89e) or release tag. This acts as version locking, preventing schema updates from breaking your live application.

Client Support

Full CORS Support

Because files are served by jsDelivr, all endpoints support Cross-Origin Resource Sharing (CORS) out of the box. You can call our API directly from client-side React, Vue, or vanilla JS web apps without encountering security warnings or requiring a proxy server.

Rate Limits

No Limits & CDN Cache

jsDelivr uses a multi-CDN infrastructure (Cloudflare, Fastly, BunnyCDN) to cache all files globally. Responses are cached at the edge, offering response times of < 50ms worldwide and shielding Moto-DB from traffic spikes. Call it as much as you want.

Data Schema Reference

Understand the structure of JSON data returned by the Moto-DB API endpoints.

Race Schedule Schema (schedule.json)

Represents the full seasonal schedule of races for a motorsport series.

Field Type Description Example
round number The sequence index of the event in the season. 1
raceName string Official name of the Grand Prix or event. "Bahrain Grand Prix"
date string The calendar date of the main race (YYYY-MM-DD). "2025-04-13"
circuit object Metadata describing the venue hosting the race. { "circuitId": "bahrain", "circuitName": "Bahrain International Circuit", ... }
{
  "season": "2026",
  "total_rounds": 22,
  "races": [
    {
      "round": "1",
      "raceName": "Australian Grand Prix",
      "date": "2026-03-08",
      "circuit": {
        "circuitId": "albert_park",
        "circuitName": "Albert Park Grand Prix Circuit",
        "locality": "Melbourne",
        "country": "Australia"
      },
      "sessions": [
        { "type": "FP1",        "name": "Free Practice 1", "date": "2026-03-06", "time": "01:30:00Z" },
        { "type": "FP2",        "name": "Free Practice 2", "date": "2026-03-06", "time": "05:00:00Z" },
        { "type": "FP3",        "name": "Free Practice 3", "date": "2026-03-07", "time": "01:30:00Z" },
        { "type": "Qualifying", "name": "Qualifying",       "date": "2026-03-07", "time": "05:00:00Z" },
        { "type": "Race",       "name": "Race",             "date": "2026-03-08", "time": "04:00:00Z" }
      ]
    }
  ]
}

Driver Profiles Schema (drivers.json)

Contains profiles of active or historical drivers for a given championship.

Field Type Description Example
driverId string Unique identifier code for the competitor. "hamilton"
permanentNumber string The driver's registered racing/car number. "44"
givenName string The first/given name of the competitor. "Lewis"
nationality string The country of nationality of the driver. "British"
[
  {
    "driverId": "leclerc",
    "permanentNumber": "16",
    "code": "LEC",
    "givenName": "Charles",
    "familyName": "Leclerc",
    "dateOfBirth": "1997-10-16",
    "nationality": "Monegasque"
  }
]

Race Results Schema (results.json)

Contains final standing classification, points awarded, and race completion metadata.

Field Type Description Example
position number The final race finishing position (1 = Winner). 1
points number Championship points gained from this position. 25
grid number Starting grid position before lights out. 3
status string Final driver state (e.g. Finished, +1 Lap, Accident, Engine). "Finished"
[
  {
    "position": 1,
    "points": 25,
    "grid": 1,
    "laps": 57,
    "status": "Finished",
    "time": "1:31:44.742",
    "driver": {
      "driverId": "verstappen",
      "familyName": "Verstappen"
    },
    "constructor": {
      "constructorId": "red_bull",
      "name": "Red Bull Racing"
    }
  }
]

Race Weekend Sessions Schema (sessions[] in schedule.json)

Every race/event in every sport's schedule.json now contains a sessions[] array listing all on-track events for the race weekend with UTC times.

Field Type Description Example
type string Session type code. e.g. FP1, FP2, SQ, Sprint, Qualifying, Race, SPR, WUP, SS… "FP1"
name string Human-readable session name (includes class for MotoGP). "Free Practice 1" / "Race (MotoGP)"
datetime / date+time string Session start in UTC. F1 uses separate date + time fields; all others use a single ISO-8601 datetime field. "2026-03-06T01:30:00Z"
category string MotoGP only. Racing class: motogp, moto2, or moto3. "motogp"
status string MotoGP only. Session state from the API: FINISHED or NOT-STARTED. "FINISHED"

Sport-specific weekend formats:

// F1 — Sprint Weekend
"sessions": [
  { "type": "FP1",    "name": "Free Practice 1",       "date": "2026-04-04", "time": "08:30:00Z" },
  { "type": "SQ",     "name": "Sprint Qualifying",      "date": "2026-04-04", "time": "12:30:00Z" },
  { "type": "Sprint", "name": "Sprint",                 "date": "2026-04-05", "time": "08:00:00Z" },
  { "type": "Qualifying", "name": "Qualifying",         "date": "2026-04-05", "time": "12:00:00Z" },
  { "type": "Race",   "name": "Race",                   "date": "2026-04-06", "time": "11:00:00Z" }
]

// MotoGP — All 3 classes (exact times from Pulse Live API)
"sessions": [
  { "type": "FP",  "name": "Free Practice (Moto3)",    "category": "moto3",  "datetime": "2026-02-27T09:00:00Z",  "status": "FINISHED" },
  { "type": "FP",  "name": "Free Practice (MotoGP)",   "category": "motogp", "datetime": "2026-02-27T10:45:00Z", "status": "FINISHED" },
  { "type": "SPR", "name": "Sprint Race (MotoGP)",     "category": "motogp", "datetime": "2026-02-28T15:00:00Z", "status": "FINISHED" },
  { "type": "RAC", "name": "Race (MotoGP)",             "category": "motogp", "datetime": "2026-03-01T15:00:00Z", "status": "FINISHED" }
]

// WRC — Stage days
"sessions": [
  { "type": "Shakedown", "name": "Shakedown",                   "day": "Thursday", "date": "2026-01-22" },
  { "type": "SS",        "name": "Day 2 – Friday Stages",       "day": "Friday",   "date": "2026-01-23" },
  { "type": "SS",        "name": "Day 4 – Power Stage (Sunday)","day": "Sunday",   "date": "2026-01-25" }
]