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.

Licensed CC BY 4.0: use, adapt and redistribute freely, including commercially, as long as you credit CipherPad. An explicit licence matters more than it sounds. Without one, nobody can safely build on the data.

Endpoints

Every endpoint, generated from the API index itself. Last updated 2026-07-26.
EndpointEntriesWhat it holds
/api/index.json10Machine-readable index of every endpoint, with sizes and descriptions.
/api/morse.json54International Morse code map for letters and digits.
/api/braille.json27Grade 1 (uncontracted) braille Unicode characters for A to Z.
/api/nato.json36NATO and ICAO phonetic alphabet code words for letters and digits.
/api/binary.json268-bit ASCII binary for the uppercase letters A to Z.
/api/a1z26.json26Letter to alphabet-position number, A is 1 through Z is 26.
/api/leet.json10Common leetspeak letter substitutions.
/api/pigpen.json26Pigpen cipher letter order. Each letter maps to a position in the grid and cross diagrams.
/api/polybius.json25Polybius square coordinates: row then column on the traditional 5x5 grid.
/api/bacon.json26Bacon's biliteral cipher, five A/B symbols per letter.
/api/morse-timing.json7Morse 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.