Books — entry 004 of 22

Bible-api

Verified Jul 2026

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.

booksreligious-textbibletranslationopen-source
AuthenticationNone requiredCall it straight away — no key, no signup.
HTTPSSupportedTraffic is encrypted in transit.
CORSEnabledCallable directly from browser JavaScript.
PricingFreeNo paid tier — free for the documented use case.
FormatsJSONResponses can be requested as JSON.

GreatAPIs Score

Score74out of 100
Authentication25/25No authentication required
Pricing20/20Free to use
Docs0/20No docs or spec available
Formats9/15Single response format
Freshness20/20Verified within 6 months

Embed this badge

Scored 74 on greatapis.com
<a href="https://greatapis.com/api/bible-api/"><img src="https://greatapis.com/badge/bible-api.svg" alt="Scored 74 on greatapis.com"></a>

Auth quickstart

  1. 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.
Stored keyNo key stored

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

200 application/json;charset=utf-8

{"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

Base URLhttps://bible-api.com
Rate limit

15 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.

Key endpoints
  • 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.