Last updated: August 8th 2025
This API serves live data collected by the KK7-NQN logger. All endpoints return application/json; charset=utf-8
and support CORS with Access-Control-Allow-Origin: *
.
America/Los_Angeles
(local server time; PST/PDT as appropriate).limit
and time filters to avoid large pulls.YYYY-MM-DD
or ISO-8601 (e.g. 2025-07-26T21:00:00Z
). Date-only expands to local day start/end.{"error":"Server error","message":"..."}
with HTTP 500.debug=1
to include a _meta
block with effective params/branch.Returns transcripts. Works in two modes:
callsign=AB6MB
. Default returns one row per transcript with that callsign, with the most recent mention time (last_mentioned_at
). Add mentions=1
to return every mention (duplicates per transcript).transcriptions
, optionally filtered by date range.Param | Type | Default | Description |
---|---|---|---|
callsign | string | — | Filter by callsign (case-insensitive). Enables “callsign mode”. |
mentions | 0/1 | 0 | Only in callsign mode. 1 = return every mention with mentioned_at . 0 = dedup per transcript with last_mentioned_at . |
since | date/datetime | — | Filter by local time window start. Accepts YYYY-MM-DD or ISO-8601. Date-only expands to 00:00:00. |
until | date/datetime | — | Filter by local time window end. Date-only expands to 23:59:59. |
limit | int | 25 | Number of rows to return (min 1, max 100000). In dedup mode, applied after joining to avoid off-by-one. |
debug | 0/1 | 0 | Wraps response as { data: [...], _meta: {...} } for troubleshooting. |
GET https://kk7nqn.net/api/callsign_transcriptions.php?callsign=AB6MB&limit=3
{ "transcript_id": 5039, "filename": "2025-07-26_21-32-03.wav", "transcription": "…", "transcript_timestamp": "2025-07-26 21:38:40", "last_mentioned_at": "2025-07-28 20:50:51" }
GET https://kk7nqn.net/api/callsign_transcriptions.php?callsign=AB6MB&mentions=1&limit=5
{ "transcript_id": 5039, "filename": "2025-07-26_21-32-03.wav", "transcription": "…", "transcript_timestamp": "2025-07-26 21:38:40", "mentioned_at": "2025-07-28 20:50:51" }
GET https://kk7nqn.net/api/callsign_transcriptions.php?since=2025-07-26&until=2025-07-26&limit=10
# cURL
curl -s "https://kk7nqn.net/api/callsign_transcriptions.php?callsign=AB6MB&limit=3" | jq .
# JavaScript
const url = "https://kk7nqn.net/api/callsign_transcriptions.php?callsign=AB6MB&limit=3";
const rows = await fetch(url).then(r => r.json());
Lists callsigns from the callsign
table with metadata (ID, callsign, validated, first_seen, last_seen, seen_count
), with search/sort/filter.
Param | Type | Default | Description |
---|---|---|---|
q | string | — | Search callsign (case-insensitive). Use with qmode . |
qmode | enum | contains | prefix or contains . |
validated | 0/1 | — | Filter by validation flag. |
min_seen | int | — | Minimum seen_count . |
since /until | date/datetime | — | Filter on last_seen (local time). |
order | enum | last_seen | last_seen | first_seen | seen_count | callsign . |
dir | enum | desc | asc or desc . |
limit | int | 25 | Number of rows to return (min 1, max 100000). |
debug | 0/1 | 0 | Include _meta with effective limit & sort. |
GET https://kk7nqn.net/api/callsigns_db.php?validated=1&limit=10
GET https://kk7nqn.net/api/callsigns_db.php?q=KK7&qmode=prefix&order=seen_count&dir=desc&limit=20
Raw view of the callsign_log
mentions table.
Param | Type | Default | Description |
---|---|---|---|
callsign | string | — | Optional exact callsign filter (case-insensitive). |
transcript_id | int | — | Optional exact transcript filter. |
since /until | date/datetime | — | Filter by callsign_log.timestamp (local time). |
limit | int | 25 | Number of rows to return (min 1, max 100000). |
debug | 0/1 | 0 | Include _meta with effective limit. |
GET https://kk7nqn.net/api/callsign_log.php?callsign=AB6MB&since=2025-07-26&until=2025-07-27&limit=20
[ { "id": 123, "callsign": "AB6MB", "transcript_id": 5039, "timestamp": "2025-07-26 21:38:40" }, { "id": 124, "callsign": "AB6MB", "transcript_id": 5037, "timestamp": "2025-07-26 21:34:26" } ]
Content-Type: application/json; charset=utf-8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, OPTIONS
Access-Control-Allow-Headers: Content-Type
Cache-Control: public, max-age=60
Preflight OPTIONS
returns 204 No Content
.
{ "error": "Server error", "message": "prepare failed (dedup): ...or other mysqli error..." }
Error responses use HTTP 500 with a short JSON body. Do not rely on the exact message text; it may change.
const qs = new URLSearchParams({ callsign: "AB6MB", limit: "3" });
const res = await fetch("/api/callsign_transcriptions.php?" + qs.toString());
const data = await res.json();
curl -s "https://kk7nqn.net/api/callsigns_db.php?q=KK7&qmode=prefix&order=seen_count&dir=desc&limit=10" | jq .
curl -s "https://kk7nqn.net/api/callsign_log.php?callsign=AB6MB&limit=5" | jq .
Questions or feature requests? Open an issue or ping the maintainer.