Public API
Everything on the air, as JSON.
Nodes, repeaters, DMR ids, licensing records, what clubs publish and who is on the air right now. Read-only, no key, no sign-up: 120 requests a minute per address, CORS open, answers cacheable for a minute.
Import that file into Postman, Insomnia, Bruno or any OpenAPI 3.1 tool and every endpoint below arrives with its parameters. Base URL https://api.qsoapp.com; staging answers at https://staging-api.qsoapp.com.
Try it
Every box runs the request from this page and shows the answer. Fill in the parameters, press Run, and copy the curl line when it is what you want.
On the air
Nodes, repeaters, DMR, presence and signal reports
GET /v1/nodes · AllStarLink nodes near a point, by place, or by callsign
AllStarLink publishes no coordinate for a node, only the text its owner typed, so place is how most nodes are found.
GET /v1/nodes/{number} · One node: callsign, frequency, tone, status, location
GET /v1/repeaters · Repeaters near a point, or by callsign
Submitted by trustees and operators, plus BrandMeister's DMR repeaters.
GET /v1/repeaters.chirp.csv · The same search as a CHIRP memory file
Analogue FM only: CTCSS as Tone or TSQL, DCS as DTCS, digital-only machines left out. File then Import in CHIRP.
GET /v1/pota/parks · Parks on the Air near a point
From POTA's public API, cached a day per area. The radius is capped at 200 km.
GET /v1/pota/spots · Activators spotted right now
Cached a minute. Without near, every current spot.
GET /v1/satellites/passes · When an amateur satellite crosses your sky
SGP4 over Celestrak's amateur element sets, cached twelve hours, for the FM satellites a handheld can work. Each pass carries where it rises, how high it climbs, where it sets, and the uplink, downlink and tone that go in the radio.
POST /v1/reach · Terrain line of sight from one point to up to 25 sites
2 m at the person and 20 m at a site unless given, over 4/3-earth curvature. Its own rate limit: 30 calls a minute per address, not the 120 the rest of /v1 allows.
GET /v1/repeaters/{id} · One repeater
GET /v1/dmr/{callsign} · A callsign's DMR ids, from RadioID
GET /v1/presence · Who has said they are around today, by grid square
Opt-in only, four-character Maidenhead grid, cleared nightly.
GET /v1/reports/{kind}/{id} · Signal reports left on a repeater, a node or a callsign
Callsigns
The licensing mirror
GET /v1/lookup/{callsign} · Licensing record (US, Canada) and the callsign's nodes
Clubs
What a club publishes
GET /v1/clubs · Every club on QSO App
GET /v1/clubs/{slug} · A club's public page: name, callsign, where it meets, nets
GET /v1/clubs/{slug}/events · A club's upcoming events
GET /v1/clubs/{slug}/events.ics · The same events as an iCalendar feed to subscribe to
GET /v1/clubs/{slug}/posts · A club's public announcements, minutes and agendas
GET /v1/clubs/{slug}/dues · A club's dues plans
GET /v1/clubs/{slug}/elections · A club's elections and their results
GET /v1/nets/open · Every club net on the air right now
GET /v1/school-programs · School programmes clubs run, with the club
First contact
The guided path's own content
GET /v1/radios · The handheld profiles behind "pick your radio"
Authored in the repository under content/radios, CC BY-SA 4.0. Each profile carries the keys by their printed names, how this radio changes a setting, and the steps a new operator does in order.
GET /v1/radios/{slug} · One radio profile
GET /v1/path/prompts · The Part 97 prompts a first contact touches
Authored in the repository at content/path/regulatory.md, CC BY-SA 4.0. One source, so the wording a new operator is held to is the same everywhere it is shown.
First year
A shared milestone
GET /v1/milestones/{id} · A shared first, as its owner chose to share it
What is not here
Anything that needs a signed-in operator sits outside /v1 and is not a public API: the requests board, the club's members, dues ledgers, the net room. Where a point comes from, what each source allows and what is deliberately left out is on the Data-API page of the wiki. Assistants that speak the Model Context Protocol get the same data through the MCP gateway.
AllStarLink node data from allstarlink.org · DMR repeater data from BrandMeister · place coordinates from the US Census Bureau gazetteer · licensing records from the FCC and ISED Canada. The API is part of the platform, AGPL-3.0.