Q-code translator
QTH means station location and QSL means acknowledging receipt: paste ham radio Q-codes to read their meaning, or type a phrase such as low power to get QRP. Unknown codes are flagged, never invented. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- QTH QSL
- Calculation mode
- Expand
- Known count
- 2
- Unknown count
- 0
- Catalog size
- 49
Q-codes are the short three-letter radio abbreviations that let operators ask and answer common questions without long plain-language sentences on crowded HF, VHF, and CW nets. New licensees memorise QTH for location, QSL for confirmation, QRM for man-made interference, and QRP for low power, then still blank on rarer forms during a pile-up or exam review. This Q-code translator expands those abbreviations into readable English glosses and compresses everyday meaning phrases back into the matching code, with an auto mode that detects which direction you need. Unknown codes are listed as unknown instead of invented, so study tools and logging helpers stay honest.
Expand Q-codes to plain English meanings
Set mode to expand (or leave mode on auto when every token already looks like a three-letter Q-code) and put one or more abbreviations in the required text field. Tokens may be separated by spaces, commas, slashes, pipes, or newlines, so a log fragment such as QTH, QSL, QRM expands in a single call. Matching is case-insensitive and ignores trailing punctuation often copied from QSO notes, so qth?
and QTH both resolve to the station-location gloss. Each known code returns a row with the canonical uppercase code, a short English meaning that collapses the traditional question and answer forms into one line, and known set to true. Codes that are not in the built-in amateur and maritime-style catalog return known false with the original query preserved and without a fabricated meaning—exactly what exam trainers and log cleaners need when a mistyped QXZ should not silently become a real abbreviation.
Compress meanings to Q-codes and use auto mode
Set mode to compress when you have a phrase such as station location, low power, man-made interference, or acknowledge receipt and want the matching Q-code. The compressor first checks curated keyword hints ordered from longer, more specific phrases to shorter ones, so qsl card and acknowledge receipt both land on QSL while location alone maps to QTH.
If no hint fires, the engine scores content words of length four or more against the canonical meaning strings and requires a solid match before claiming a hit, which keeps single vague words from inventing false positives. Unmatched phrases are returned with known false rather than a random nearest code. Multi-line or semicolon-separated compress input is split into separate items so a study sheet of several definitions can be coded in one request.
Where a Q-code translator earns its keep
Amateur radio clubs and license-prep sites use a Q-code translator so candidates can drill QTH, QSL, QRZ, and QSY without flipping a printed chart during practice exams. Logging and contest tools expand codes embedded in free-text remarks so operators see station location next to QTH without leaving the editor. Help-desk bots for radio software can compress a user’s plain-language complaint—something like my signals are fading—into QSB for structured tickets.
Keep requests under the documented text length cap, prefer expand for bulk code lists and compress for prose, and you get reproducible radio study and log enrichment without standing up your own glossary service.
What you can do with it
License exam and club drills
Candidates expand QTH, QSL, QRM, and QRP lists during practice sessions and compress textbook definitions back to codes, with unknown tokens flagged instead of guessed.
Log and remark enrichment
Contest and daily logging software expands free-text Q-codes in QSO notes so operators see plain-English location and confirmation glosses beside the abbreviations.
Support tickets and study bots
Chatbots compress plain-language radio complaints into structured Q-codes for routing, and study bots report unknown codes when a student mistypes an abbreviation.
FAQ
What does this Q-code translator do?
It expands amateur-radio Q-codes such as QTH and QSL into English meanings, or compresses meaning phrases back into codes. Auto mode picks the direction from the input shape.
What happens if I enter an unknown code?
The item is returned with known set to false and without a meaning.
How do expand, compress, and auto differ?
Expand maps codes to meanings. Compress maps phrases to codes via keyword hints and meaning word scores. Auto expands when every token looks like a Qxx code; otherwise it compresses the whole text.
Which Q-codes does the translator know?
It has a built-in catalog of 49 amateur and maritime-style codes, including QTH, QSL, QRM, QRP, QRZ and QSY. Anything outside that list is shown as unknown rather than given a made-up meaning.
Can I expand several Q-codes at once?
Yes. Separate them with spaces, commas, slashes, pipes or new lines, so a log line such as QTH, QSL, QRM is expanded in one go. Case does not matter, and a trailing question mark, as in qth?, is ignored.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/enc/q-code \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"QTH QSL"}'const res = await fetch("https://api.kit.forhosting.com/enc/q-code", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "QTH QSL"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/enc/q-code",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "QTH QSL"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/enc/q-code", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"QTH QSL"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"QTH QSL"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/enc/q-code", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "QTH QSL"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "enc.q_code",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
The free browser path and the prepaid API share the same pure module at $0.002 per successful item.
Expand Q-codes to plain English meanings
The response also includes known_count, unknown_count, the resolved mode, the echoed text, and catalog_size so clients can show coverage without hard-coding the dictionary length. Field aliases input, value, s, codes, and query are accepted for text; direction, op, and action may stand in for mode.
Compress meanings to Q-codes and use auto mode
Invalid mode strings, missing text, empty text, and non-string text fail with invalid_input and are not billed on the prepaid path.
Where a Q-code translator earns its keep
Automation scripts pin known_count and catalog_size in tests so dictionary updates become deliberate reviews instead of silent drift. Pair this endpoint with Morse or NATO phonetic tools when you also need on-air spelling practice, but keep Q-code expand and compress on its own landing page so search intent stays single-purpose. Every successful call costs the published $0.002 base price with no model tokens and no outbound network; failed validation does not consume balance.
Technical questions
Which Q-codes are supported?
A fixed catalog of common ham and maritime-style codes (QRA through QUF family forms used on the air and in study guides). catalog_size in the response is the exact count. Unknown codes are reported with known false.
What does the Q-code translator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.