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.

Changelog

  • Aug 2026gained rate limits

See every tracked change ↗ ·Subscribe with RSS ↗