Public Access
The broadcaster publishes uniform WebSocket channels. Every client on the same channel receives the same telemetry stream. No per-user filtering is applied.
WebSocket endpoint
ws://localhost:8080/public/ogn
Authentication is required unless the server runs with AUTH_DISABLED=true. Provide a JWT via Authorization: Bearer <token> or ?token=<token>.
Reference client
const ws = new WebSocket('ws://localhost:8080/public/ogn');
ws.onmessage = (event) => {
const data = JSON.parse(event.data);
if (data.type === 'hb') return; // heartbeat every ~25s
if (data.v !== 'telemetry_v1') return;
console.log(data);
};Available channels
| Path | Scope | Notes |
|---|---|---|
| /public/ogn | Global | All aircraft, no geographic filter. |
| /public/ogn/europe | Regional | Europe bounds. |
| /public/ogn/africa | Regional | Africa bounds. |
| /public/ogn/oceania | Regional | Oceania bounds. |
| /public/ogn/south-america | Regional | South America bounds. |
| /public/ogn/north-america | Regional | North America bounds. |
| /public/ogn/competition/:id | Competition | Dynamic channel with competition bounds and thermal-only filtering. |
Schema (TelemetryEventV1)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"title": "TelemetryEventV1",
"type": "object",
"additionalProperties": false,
"required": [
"v",
"ts",
"addr",
"lat",
"lon"
],
"properties": {
"v": {
"const": "telemetry_v1"
},
"ts": {
"type": "string",
"description": "ISO 8601 UTC timestamp"
},
"addr": {
"type": "string"
},
"lat": {
"type": "number"
},
"lon": {
"type": "number"
},
"alt_msl": {
"type": "number"
},
"gs_kmh": {
"type": "number"
},
"track_deg": {
"type": "number"
},
"vario_ms": {
"type": "number"
},
"aircraft_type": {
"enum": [
"glider",
"tow",
"helicopter",
"parachute",
"drop_plane",
"hang_glider",
"paraglider",
"powered",
"jet",
"balloon",
"uav",
"unknown"
]
},
"privacy": {
"type": "boolean"
},
"source": {
"const": "OGN"
},
"turn_rate_rot": {
"type": "number"
},
"receiver": {
"type": "string"
},
"signal_db": {
"type": "number"
},
"callsign": {
"type": "string"
},
"gps_accuracy": {
"type": "string"
},
"registration": {
"type": "string"
},
"cn": {
"type": "string"
},
"aircraft_model": {
"type": "string"
}
}
}Example payload
{
"v": "telemetry_v1",
"ts": "2026-02-08T20:00:00Z",
"addr": "D-1234",
"lat": 46.9,
"lon": 7.4,
"alt_msl": 1250,
"gs_kmh": 120,
"track_deg": 90,
"vario_ms": 1.5,
"aircraft_type": "glider",
"source": "OGN",
"registration": "HB-1234",
"cn": "AB",
"aircraft_model": "Ventus 3"
}HTTP endpoints
| Endpoint | Purpose |
|---|---|
| GET /health | Broadcaster + Redis health. |
| GET /channels | List active broadcast channels. |
| GET /history | Historical tracks with optional region/type/speed/age filters. |
| GET /weather | Open-Meteo weather proxy. |
HTTP endpoints are CORS-enabled (Access-Control-Allow-Origin: *).
History endpoint example
/history?region=europe&maxAge=120&maxSpeed=300
{
"addr": "D-1234",
"points": [
{
"ts": "2026-02-08T19:58:00Z",
"lat": 46.8941,
"lon": 7.4012,
"alt_msl": 1175,
"gs_kmh": 108,
"track_deg": 82,
"vario_ms": 0.8,
"aircraft_type": "glider"
}
],
"departure_place": "Belp, Bern",
"departure_lat": 46.9134,
"departure_lon": 7.4991,
"registration": "HB-1234",
"cn": "AB",
"aircraft_model": "Ventus 3",
"dist_km": 118.2,
"avg_speed_kmh": 92.4
}/history returns per-aircraft point arrays plus metadata such as departure, DDB fields, and aggregate flight stats.