For developers
Free cipher and code API
10 static JSON files holding the letter maps behind every translator on CipherPad. No API key, no rate limit, no sign up, CORS open, and openly licensed so you can actually rely on it.
Endpoints
| Endpoint | Entries | What it holds |
|---|---|---|
| /api/index.json | 10 | Machine-readable index of every endpoint, with sizes and descriptions. |
| /api/morse.json | 54 | International Morse code map for letters and digits. |
| /api/braille.json | 27 | Grade 1 (uncontracted) braille Unicode characters for A to Z. |
| /api/nato.json | 36 | NATO and ICAO phonetic alphabet code words for letters and digits. |
| /api/binary.json | 26 | 8-bit ASCII binary for the uppercase letters A to Z. |
| /api/a1z26.json | 26 | Letter to alphabet-position number, A is 1 through Z is 26. |
| /api/leet.json | 10 | Common leetspeak letter substitutions. |
| /api/pigpen.json | 26 | Pigpen cipher letter order. Each letter maps to a position in the grid and cross diagrams. |
| /api/polybius.json | 25 | Polybius square coordinates: row then column on the traditional 5x5 grid. |
| /api/bacon.json | 26 | Bacon's biliteral cipher, five A/B symbols per letter. |
| /api/morse-timing.json | 7 | Morse element durations in milliseconds at a range of speeds, from 5 to 30 words per minute. |
Response shape
Every map endpoint returns the same structure.
{
"cipher": "morse",
"kind": "encoding",
"description": "International Morse code map for letters and digits.",
"standard": "International Morse code. Dash length is three dot units ...",
"notes": "Characters with no Morse equivalent are omitted ...",
"map": { "a": ".-", "b": "-...", "c": "-.-." },
"reverse": { ".-": "a", "-...": "b", "-.-.": "c" },
"license": { "name": "CC BY 4.0", "url": "...", "attribution": "..." },
"lastUpdated": "2026-07-26",
"tool": "https://cipherpad.dev/translate/morse"
}The standard and notes fields matter as much as the map itself. Several of these schemes have competing variants in circulation, and a map with no statement of which variant it is will eventually be used wrongly. The methodology page covers the same ground for the tools.
JavaScript
// Fetch the Morse code map. No key, no sign up.
const res = await fetch("https://cipherpad.dev/api/morse.json");
const { map, reverse } = await res.json();
console.log(map.s + map.o + map.s); // "... --- ..."
console.log(reverse[".-"]); // "a"Python
import requests
data = requests.get("https://cipherpad.dev/api/morse.json").json()
print(data["map"]["s"] + data["map"]["o"] + data["map"]["s"])
# ... --- ...
print(data["standard"])curl
curl -s https://cipherpad.dev/api/morse.json | jq '.map.s' # "..." # List every endpoint curl -s https://cipherpad.dev/api/index.json | jq '.endpoints[].url'
One source of truth
These files are generated from the same module the translators themselves import, and the build runs a check that fails if the published map and the site's own map ever disagree. That is worth stating plainly, because an API that quietly drifts from the tool it documents is worse than no API at all.
Frequently asked questions
Is the API really free?
Yes. The files are static, so there is no cost to serve them and no reason to charge. Use them in personal or commercial projects. They are licensed CC BY 4.0, which means you may use and adapt them as long as you credit CipherPad.
Is there a rate limit or an API key?
Neither. There is nothing to sign up for and no key to pass. They are cacheable static files served with permissive CORS, so you can fetch them straight from a browser. If you expect heavy traffic, mirror the JSON on your own host.
How do I get a Morse code map as JSON?
Fetch https://cipherpad.dev/api/morse.json. It returns an object with a map field going from character to Morse, a reverse field going the other way, plus the standard it follows and the licence.
Are these maps the same ones the site uses?
Yes, and that is enforced rather than promised. The JSON is generated from the same module the translators import, and a verification script fails the build if the published map and the site's own map ever differ.
Can I use this in my app or game?
That is what it is for. Credit CipherPad as the source, which the CC BY 4.0 licence asks for, and you are set.
Prefer a drop-in translator instead of raw data? Use the embeddable widget. Not sure what you are looking at? Try the cipher identifier. Machine-readable summaries of the whole site live at /llms.txt and /llms-full.txt.