Outlap Docs
Open Outlap

Stream live timing

Push raw RMonitor lines or vendor passings. Outlap decodes them, matches drivers, de-duplicates laps and tracks flag and session state.

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

This is the endpoint behind the timing bridge. Send the lines your timing system emits, unchanged, and Outlap folds them into a persistent feed state for the event: running order, class and competitor details, the current flag and session name. Each lap that is new since the last packet is stored.

Use it for MyLaps Orbits, MyLaps Trackside/X2, AxWare and any RMonitor relay. If you’re building your own integration, you can send either form:

  • lines: raw RMonitor records ($F, $A, $G, $J …).
  • passings: one JSON object per completed lap, for systems that don’t speak RMonitor.

If both are present, lines wins.

Requires timing:write. Laps are matched to drivers by transponder, then car number, using the transponder list on the event’s Paddock tab.

Body

  • vendor string default: rmonitor
    One of orbits, trackside, axware, rmonitor, generic. Recorded as the lap source (live:<vendor>).
  • lines string[] optional
    Raw RMonitor records. Maximum 5,000. Lines not starting with $ are ignored.
  • passings object[] optional
    Vendor passings. Maximum 2,000. See below.
  • session_id string optional
    Attach laps to a session. Lap numbers are de-duplicated within it.
  • bridge_version string optional
    Shown in Race Control. Truncated to 40 characters.
  • source_label string optional
    Friendly name such as “Race Control PC”. Truncated to 120 characters.

At least one of lines or passings is required.

Passing object

  • transponder string optional
    Or transponder_id.
  • number string optional
    Car number. Either number or a transponder is required.
  • name string optional
    Competitor name.
  • lap_number integer optional
    Or lap. If omitted, laps are counted from the last one seen. A lap number already ingested is skipped.
  • lap_time_ms integer optional
    Or lap_time as "1:42.311". Passings with no valid lap time are skipped.
  • recorded_at string optional
    ISO 8601 timestamp.

Response

  • ok boolean
    Always true on success.
  • recognised integer
    Records the decoder understood. A persistently low number means the wrong output is enabled on the timing system.
  • laps_decoded integer
    Laps found in this packet.
  • laps_inserted integer
    Laps stored after removing duplicates.
  • flag string | null
    Latest flag: green, yellow, red, chequered, white or purple.
  • session string | null
    Latest session name from the $B record.

Behaviour worth knowing

  • Idempotent. Resending a packet doesn’t duplicate laps. Existing laps are skipped by transponder and lap number within the session.
  • Stateful. The feed state persists between packets, so you don’t need to resend $A registrations each time, though sending them after a restart is harmless.
  • Heartbeat. A successful call marks the feed live. Use POST /feed/status to report stale, error or stopped.
  • Packet limits. More than 5,000 lines or 2,000 passings returns 413.
esc
↑↓ to navigate ↵ to open esc to close