Outlap Docs
Open Outlap

Ingest laps

Push batches of up to 1,000 laps into an event, optionally scoped to a session. Drivers are matched by user ID or transponder.

POST …/timing-api/v1/events/{eventId}/laps

Send completed laps from any timing source. Provide user_id directly, or a transponder_id and Outlap resolves the driver from the event’s transponder roster. Laps that can’t be matched are still stored against the transponder, so you can assign them in Race Control afterwards.

There are two equivalent forms. Use the session form to attach laps to a specific session; lap numbers restart each session.

POST /v1/events/{eventId}/laps
POST /v1/events/{eventId}/sessions/{sessionId}/laps

Requires a key with the timing:write scope. See Authentication.

Path parameters

  • eventId string required
    The event’s ID. It must belong to the club that owns the key.
  • sessionId string optional
    Session form only. Attaches every lap in the request to that session.

Body

  • laps array required
    Between 1 and 1,000 lap objects.

Lap object

  • lap_number integer required
    Zero or greater.
  • lap_time_ms integer required
    Lap time in milliseconds. Greater than 0 and no more than 24 hours.
  • s1_ms integer optional
    Sector split. s2_ms, s3_ms and s4_ms work the same way.
  • speed_trap_kph number optional
    Speed through the trap, in km/h.
  • is_valid boolean default: true
    Set false for laps that shouldn’t count, for example cut or off-track laps.
  • invalid_reason string optional
    Free text such as "cut T7". Shown to organisers.
  • transponder_id string optional
    Used to resolve the driver when user_id is absent.
  • user_id string optional
    The Outlap driver’s user ID. Overrides any transponder lookup.
  • recorded_at string optional
    ISO 8601 timestamp. Defaults to the time of the request.

Response

Returns the number of laps stored.

  • inserted integer
    Rows created.

Duplicates

This endpoint doesn’t de-duplicate: posting the same lap twice creates two rows. Retry only when you didn’t receive a response, and dedupe on your side, or mark the earlier lap invalid. For continuous feeds, use POST /stream, which ignores redelivered laps (per transponder, lap number and session).

esc
↑↓ to navigate ↵ to open esc to close