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/circuits | List 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