Books — entry 004 of 22
Bible-api
Bible-api.com serves single verses and passages as JSON from simple GET requests like /john+3:16, drawing on 17 public-domain translations across eight languages — including the World English Bible (the default), KJV, ASV, and non-English editions in Chinese, Portuguese, Czech, and Cherokee. It's a keyless, open-source hobby project: the author publishes the full codebase and verse data on GitHub and explicitly invites self-hosting for anyone who needs more reliable uptime than the hosted instance, which is rate-limited to 15 requests per 30 seconds per IP.
Bible-api.com serves a single verse or passage as JSON from one GET per reference, e.g. /john+3:16, with the translation selectable via a ?translation= query parameter. A live GET this run against /john+3:16?translation=kjv returned a genuine 520 B King James Version record; the identical reference with no translation param returned a different, 493 B record in the default World English Bible instead.
GreatAPIs Score
Auth quickstart
- No API key, signup, or credit card required — a live GET this run against
/john+3:16?translation=kjvreturned the full verse with zero credentials, and the response carriedaccess-control-allow-origin: *. The project's own docs, published alongside its open-source code and verse data, state the hosted instance is rate-limited to 15 requests per 30 seconds per IP; self-hosting removes that cap entirely.
Your key is stored only in this browser (localStorage) and sent directly to the API — never to greatapis.
Fetch a verse in a specific translation
GEThttps://bible-api.com/john+3:16?translation=kjv
{"reference":"John 3:16","verses":[{"book_id":"JHN","book_name":"John","chapter":3,"verse":16,"text":" For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life.\n"}],"text":" For God so loved the world, that he gave his only begotten Son, that whosoever believeth in him should not perish, but have everlasting life.\n","translation_id":"kjv","translation_name":"King James Version","translation_note":"Public Domain"}Dropping ?translation=kjv returns the default World English Bible translation instead — a live GET this run against the bare /john+3:16 returned a 493 B record with "translation_id":"web" and genuinely different wording ("his one and only Son" vs. KJV's "his only begotten Son"), not the same body reused.
Try it
Developer reference
https://bible-api.com15 requests per 30 seconds per IP on the hosted instance, per the project's own published docs (not independently tripped live this run); self-hosting the open-source code removes the cap entirely.
- GET/{reference}
Gotchas & limits
- The KJV translation's
textfield ships with leading whitespace baked in — a live GET this run against/john+3:16?translation=kjvreturned"text":" For God so loved the world...", ten literal leading spaces before the verse itself. Code that assumestextstarts with a capital letter, or that skips trimming, will render the whitespace verbatim. - An unresolvable reference is a real HTTP 404, not a 200 with an error field — a live GET this run against
/notabook+99:99returned{"error":"not found"}at HTTP 404, a 21-byte body. Unlike PoetryDB's fake-404-inside-a-200 quirk elsewhere in this quartet, this API's transport status code is trustworthy. - The full passage text is returned twice — once nested per-verse inside the
versesarray (verses[0].text) and again flattened at the top-leveltextkey — confirmed live on the response above; both copies carry the identical leading whitespace, so trimming only one leaves the other still dirty. - Every response carries
access-control-allow-origin: *plus explicitaccess-control-allow-methods: GET/OPTIONSheaders — confirmed live on both the KJV and default-translation requests above — so browser-side fetches need no proxy.
Changelog
- gained rate limits