Integration

Developer API

Other apps store circuit_id and layout_id, optionally pinning layout_revision_id for historic events. Responses carry ETags for caching.

Live Endpoints

GET/api/public/v1/circuitsList published circuits. Filters: search, country, updated_since, limit, cursor
GET/api/public/v1/circuits/{circuitId}One circuit by UUID or readable key (e.g. BRANDS_HATCH), with layouts and revisions
GET/api/public/v1/layouts/{layoutId}?revision={revisionId}One layout by UUID or key, current or pinned revision
GET/api/public/v1/changes?cursor={cursor}Change feed with tombstones. Invalid cursor returns 410: run a full resync

Only published records are returned. Drafts, private contacts and editor data are never exposed.

Example

// Store canonical IDs, never copies of names or lengths
const res = await fetch("https://<atlas-host>/api/public/v1/layouts/BRANDS_HATCH_GP");
const { data } = await res.json();
// Pin historic races to a revision:
// /api/public/v1/layouts/{layout_id}?revision={revision_id}
console.log(data.id, data.revision.id, data.revision.length_m);

Planned (Stage 5)

  • /layouts/{layoutId}/geometry
  • /layouts/{layoutId}/elevation
  • /circuits/{circuitId}/facilities
  • /circuits/{circuitId}/nearby
  • POST /exports
  • Scoped client keys, rate limits and signed webhooks