Free Roman numeral API
A static JSON endpoint for every number from 1 to 3999. No key, no rate limit, no catch. Build a bot, a game or a plugin on top of it.
Endpoint
Each number has its own file. Request it directly and you get back JSON with the numeral and the words.
GET https://romanize.net/api/roman/{number}.jsonhttpExample request
curl https://romanize.net/api/roman/2026.jsonbashExample response
{
"number": 2026,
"roman": "MMXXVI",
"words": "two thousand twenty-six",
"valid": true
}jsonFrom JavaScript
const res = await fetch("https://romanize.net/api/roman/49.json");
const data = await res.json();
console.log(data.roman); // "XLIX"jsFields
| Field | Type | Meaning |
|---|---|---|
| number | integer | The input number, 1 to 3999. |
| roman | string | The Roman numeral, e.g. MMXXVI. |
| words | string | The number spelled out in English. |
| valid | boolean | Always true for numbers in range. |
Usage and fair play
The API is served as static files from a content delivery network, so it is fast and resilient, but please cache responses on your side rather than fetching the same number repeatedly. Attribution is appreciated but not required. If you build something with it, we would love to hear about it on the contact page.
Frequently asked questions
Is the Roman numeral API really free?
Yes. It is a set of static JSON files served from a CDN, so there is no key, no sign up and no rate limit. Please cache responses rather than hammering the endpoint.
What range does the API cover?
Every whole number from 1 to 3999, which is the full standard Roman numeral range. Each file returns the numeral and the number spelled out in English.
Can I use it from the browser?
Yes. The files are plain JSON served with permissive caching, so a client-side fetch works from any origin.
Prefer to embed the UI?
If you want the converter itself rather than raw data, use the embeddable widget. Romanize keeps both free.