Live data from the Open Signal amateur-radio picture network. Three endpoints,
GET only, no keys, no rate cards: they are public and CORS is wide open
(Access-Control-Allow-Origin: *), so a browser can fetch them
straight from any website. Writes are not possible through this API — everything
under /api/v1 only ever reads.
| Method | Endpoint | Returns | Freshness |
|---|---|---|---|
GET | /api/v1/map | Stations on the air now (with lat/lon from their Maidenhead grid), QSO links between them, and stations heard in the last 7 days. | ~30 s |
GET | /api/v1/photos | The most recently shared pictures, newest first — one entry per picture, with who sent it and everyone who copied it. ?limit= caps the count in pictures (default 24); ?receptions=1 inlines the reception detail below. | ~60 s |
GET | /api/v1/photos/{serial} | One picture in full: the sender and every station that copied it, each with its dB report and the centre of its grid square — what a reception map is drawn from. | ~60 s |
GET | /api/v1/stats | The full statistics document: live counts, today / this-week / all-time totals, DX records, top stations, a 14-day activity series and service counters. | ~4 min |
curl https://opensignal-processor.2e0jwr.co.uk/api/v1/map curl https://opensignal-processor.2e0jwr.co.uk/api/v1/photos?limit=8 curl https://opensignal-processor.2e0jwr.co.uk/api/v1/stats
The ready-made page at https://opensignal-processor.2e0jwr.co.uk/map embeds cleanly:
<iframe src="https://opensignal-processor.2e0jwr.co.uk/map" style="width:100%;height:900px;border:0"
title="Open Signal live map"></iframe>
Or build your own view against the JSON — the live page itself is plain HTML + fetch, so its source doubles as an integration example.
ageSeconds is server-computed, so clock skew on the client never
shows a picture from "-3 minutes ago".utc, *Utc) are Unix milliseconds, UTC.