Push your timing data with the API

You build or run your own timing system, app or decoder software. Push its classification over HTTPS and Open Live Timing turns it into a live timing page for drivers and spectators, with results, notifications, the big screen and the embed. One request is enough to start.

Start
  1. 1

    Create your account

    Sign in, or create a free account with your e-mail address, Google or a passkey.

  2. 2

    Choose the live timing page

    Each live timing page has its own address (olt.live/lt/your-slug). Use one you already have or create one; the slug is the one of the API URLs.

    Sign in first: your live timing pages show here.

  3. 3

    Create an API key

    In the back office, create an API key for this live timing page. It starts with rm_ and is shown once: keep it in the configuration of your system, never in a web page or a public repository.

  4. 4

    Push the state

    Send the full state of the session whenever it changes (about once per second at most): session names, flag, and the drivers with their position, laps and times. Events (laps, flags, announcements) are optional and make the page react at once.

    curl -X POST https://openlivetiming.com/api/instances/your-slug/race/fullstate \
      -H "X-Api-Key: $OLT_API_KEY" -H "Content-Type: application/json" \
      -d '{"state": {"session": {"trackName": "My Track", "groupName": "Club", "runName": "Race 1", "flag": "Green"},
                     "drivers": {"7": {"number": "7", "fullName": "Alex Driver", "position": 1, "laps": 3,
                                           "lastTime": "1:02.345", "bestTime": "1:01.900"}}}}'
    Sessions and results
    • A new group or run name starts a new session: the previous one is archived as results.
    • A session under the checkered flag is archived 120 seconds after its last update, so the last laps settle first.
    Events
    • POST /race/event (one) or /race/events (a batch), with a $type: LapCompleted, SectorCompleted, BestLap, BestSector, FlagChange, PositionChange, Announcement.
    • Times as "1:02.345", "00:01:02.345" or a number of seconds; flags by name (Green, Yellow, Red, Checkered…). The full reference is on the API page.
  5. 5

    Check and share

    Open the live page: it shows the state you pushed at once. Then share its link and the embed code for your website.

What the live page shows

  • Positions, laps, last and best lap, sectors, gaps and intervals, classes
  • Flags, the time or laps to go, and race control announcements
  • Every session archived as published results, with exports
  • Push notifications, the big screen leaderboard and the embed for your website
  • The same data back through the read API and SignalR, for your own screens

Good to know

  • The page shows what you send: one system should push to a live timing page at a time.
  • The API key gives write access to its live timing pages only; revoke it in the back office if it leaks.
  • Push from your server or your timing software, never from a browser: the key would be public.

Questions

Is it really free?

Yes. The live timing page, the API, the results and the notifications are free for clubs, circuits, organisers and timing system developers.

Which languages and platforms can push?

Any that can send an HTTPS request with a JSON body: C#, Python, JavaScript, Java, a microcontroller with a network stack. There is no SDK to install.

Do I have to send events, or is the full state enough?

The full state is enough to run the page. Events add the reactions of the live page (lap and best lap highlights, flag changes) and the lap history of the results.

Can I read the data back?

Yes: the live state, the session history and a SignalR stream are open to read, as described on the API page.

Can I push the timing of an event I did not organise?

Only with the authorization of the organiser of the sessions (circuit, series, timekeeper), as the terms of use say.

An unhandled error has occurred. Reload 🗙