For AI agents & tools: machine-readable versions of these docs are available as an OpenAPI 3.1 spec (openapi.json) and a Markdown summary at llms.txt. No authentication is required and CORS is open.
To display the Arabic Quran text correctly alongside the translations, we recommend downloading Hafs_20.zip. It contains the Uthmanic Hafs font v20 by the King Fahd Glorious Quran Printing Complex (KFGQPC) and the Uthmanic Hafs Quran text that matches this font. Older or newer versions of the font may not render this text correctly, so use the font and the text together.
Hafs_20.ttf: Uthmanic Hafs font v20 (TrueType, for desktop / mobile apps)
Hafs_20.woff2: the same font in WOFF2 format (for websites)
Quran_text.csv: Uthmanic Hafs Quran text that matches the font, one row per aya (6236 rows). Columns: "id", "sura", "aya", "uthmani"
Download: Hafs_20.zip (~550 KB)
GET / https://quranenc.com/api/v1/translations/list/[[{language}]]/?localization={language_iso_code}
Description: Lists available translations. If the optional path param {language} is provided (ISO code) the list is filtered to that language only.
language (optional path): Filter by a specific language ISO code (see available languages / iso codes). If omitted, all translations are returned.
localization (optional query): Defaults to en. Localizes "title" & "description" into the specified locale (see available locales)
Returns: JSON object {"translations":[...]}. Each item includes "key", "direction", "language_iso_code", "version", "last_update" (timestamp), "title", "description" (localized), plus download links ("database_url", "pdf_url", "epub_url", ...).
Examples:
/api/v1/translations/list
/api/v1/translations/list/es
(Spanish only, default English localization)
/api/v1/translations/list/es?localization=es
(Spanish list localized in Spanish)
GET / https://quranenc.com/api/v1/translation/sura/{translation_key}/{sura_number}
Description: Returns all ayat of a sura for the specified translation.
translation_key: Translation key (e.g. english_saheeh)
sura_number: 1–114
Returns: JSON object {"result":[...]}: each item has "id", "sura", "aya", "arabic_text", "translation", "footnotes".
GET / https://quranenc.com/api/v1/translation/aya/{translation_key}/{sura_number}/{aya_number}
Description: Returns a single aya translation.
translation_key: Translation key
sura_number: 1–114
aya_number: 1–… (within sura)
Returns: JSON object {"result":{...}} with "id", "sura", "aya", "arabic_text", "translation", "footnotes". Add ?without_footnotes_symbols=1 to strip footnote markers like [1] from "translation".
GET / https://quranenc.com/api/v1/translations/sowar_locales
Description: Lists the language ISO codes for which localized sura names are available.
Returns: JSON object: "locales" — array of ISO codes, e.g. {"locales":["ar","en","fr", ...]}.
GET / https://quranenc.com/api/v1/translations/sowar_names?iso_code={language_iso_code}
Description: Returns the names of all 114 suras in the specified language.
iso_code (optional query): Defaults to en. One of the codes returned by sowar_locales.
Returns: JSON object keyed by sura number (1–114), each value is the localized sura name. Returns HTTP 400 {"error":"Invalid locale"} if names are not available for the given code.
{
"1": "Al-Fātihah",
"2": "Al-Baqarah",
"3": "Āl-‘Imrān",
...
"114": "An-Nās"
}
Examples:
/api/v1/translations/sowar_locales
/api/v1/translations/sowar_names?iso_code=en
(English)
/api/v1/translations/sowar_names?iso_code=fr
(French)
Base URL / https://d.quranenc.com/data/audio/{translation_key}/{sura_3digits}{aya_3digits}.mp3
Description: Audio files for each aya are served as static MP3 files. The URL is constructed from the translation key and the sura/aya numbers each zero-padded to 3 digits.
translation_key: One of the keys listed above.
sura_3digits: Sura number zero-padded to 3 digits (001–114)
aya_3digits: Aya number zero-padded to 3 digits (001–…)
Returns: MP3 audio file (audio/mpeg). Returns HTTP 404 if the file does not exist for the given translation/sura/aya.
URL construction example (JavaScript):
function audioUrl(translationKey, sura, aya) {
const s = String(sura).padStart(3, '0');
const a = String(aya).padStart(3, '0');
return `https://d.quranenc.com/data/audio/${translationKey}/${s}${a}.mp3`;
}
// Sura 1, Aya 1 — Chinese Suliman
audioUrl('chinese_suliman', 1, 1);
// → "https://d.quranenc.com/data/audio/chinese_suliman/001001.mp3"
// Sura 18, Aya 110
audioUrl('chinese_suliman', 18, 110);
// → "https://d.quranenc.com/data/audio/chinese_suliman/018110.mp3"
Example URLs:
https://d.quranenc.com/data/audio/chinese_suliman/001001.mp3
(Sura 1, Aya 1)
https://d.quranenc.com/data/audio/chinese_suliman/002255.mp3
(Sura 2, Aya 255 — Ayat Al-Kursi)
POST / https://quranenc.com/api/v1/translations/note
Description: Submit a user note / feedback on a specific Aya translation.
translation_key*: string
sura*: 1–114
aya*: 1–…
note*: string (content)
version: optional translation version
suggested_translation: optional alternative text
name: optional author name
email: optional author email
source: optional app name or domain name
* required
Returns:
201: {"status":1}
400: {"status":0,"error":"Missing required parameters"}
500: {"status":0,"error":"Failed to save note"}
Example (JSON):
{
"translation_key":"english_saheeh",
"sura":1,
"aya":7,
"note":"This is my note",
"version":"1.0.9",
"name":"Mostafa",
"email":"[email protected]",
"source":"MyQuranApp"
}
Example (form-data):
translation_key=english_saheeh sura=1 aya=7 note=This is my note version=1.0.9 name=Mostafa [email protected] source=MyQuranApp