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=kjv` returned the full verse with zero credentials, and the response carried `access-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 `text` field ships with **leading whitespace baked in** -- a live GET this run against `/john+3:16?translation=kjv` returned `"text":" For God so loved the world..."`, ten literal leading spaces before the verse itself. Code that assumes `text` starts 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:99` returned `{"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 `verses` array (`verses[0].text`) and again flattened at the top-level `text` key -- 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 explicit `access-control-allow-methods: GET` / `OPTIONS` headers -- confirmed live on both the KJV and default-translation requests above -- so browser-side fetches need no proxy.