Bible API
Every verse, chapter, book, Strong's entry and Verse of the Day on this site is available as plain JSON over HTTP — free, no API key required within fair limits. The text is the King James Version (1769) with the Apocrypha, public domain.
Quick start
- Pick an endpoint below — every row has a Try it link and a ready-made URL you can copy.
- Append
?format=json, a.jsonsuffix, or send anAccept: application/jsonheader — all three work. - Read the JSON. No signup, no key, no cost.
curl 'https://getholybible.com/book/57/3/16?format=json'
- Base URL:
https://getholybible.com - Version: append
?v=kjv(default) or?v=kjvno(Norwegian machine translation) to the text endpoints. - Book numbering: 1–80 in the 1611 order — Genesis is 1, Malachi 39, the Apocrypha 40–53, Matthew 54, John 57, Revelation 80. See the Bible page.
- Caching: Bible text responses are immutable and carry an
ETag— sendIf-None-Matchand a matching copy costs you nothing (304).
Machine-readable: OpenAPI 3.1
The whole API is also described as a single
OpenAPI 3.1
document — endpoints, parameters, schemas, headers and error shapes:
/openapi.json. Point Postman, Insomnia,
Swagger Editor, Redoc or a code generator at it and you are done.
curl 'https://getholybible.com/openapi.json'
Bible text
| Endpoint | Returns | |
|---|---|---|
/?format=json |
Version metadata, the 80-book index, and today's Verse of the Day. | Try it |
/book/{book}?format=json |
Book metadata and its chapter numbers. | Try it |
/book/{book}/{chapter}?format=json |
Every verse in the chapter, each with ref, text and
per-word words (surface, italics, words of Jesus, Strong's tag). |
Try it |
/book/{book}/{chapter}/{verse}?format=json |
A single verse — same shape as one chapter verse. | Try it |
/passage?ref=… |
A passage by free-form reference — John 3:16, John 3:16-21,
Psalm 23, John 3-4, 1 Corinthians 13. Caps at 500 verses. |
Try it |
/random |
A random verse from the canonical books (66 books — never the Apocrypha). | Try it |
/versions |
Every translation the corpus offers — id, name, language, scope, license, source. | Try it |
Search & study
| Endpoint | Returns | |
|---|---|---|
/search?q=…&page=N&format=json |
Full-text search across the whole Bible (25 per page), with highlighted snippets. | Try it |
/strongs/{G|H}{number}?format=json |
A Strong's dictionary entry: lemma, transliteration, KJV renderings, definition, derivation. | Try it |
/popbv?format=json |
The popular-verses collection: seeded favourites ranked with real reader visits. | Try it |
Verse of the Day
| Endpoint | Returns | |
|---|---|---|
/votd?format=json |
Today's Verse of the Day: reference, verse text, artwork URL, prev/next days. | Try it |
/votd/{Y-m-d}?format=json |
The Verse of the Day for any date in the archive. | Try it |
/votd/archive/{year}?format=json |
Every day of that year with its reference — the whole archive in one response. | Try it |
Account
| Endpoint | Returns | |
|---|---|---|
/me |
Who the request was authenticated as — requires a token (see rate limits). | Get a token |
POST /token |
Mint an API token with email + password — no browser needed, ideal for apps. | Example |
curl -X POST https://getholybible.com/token \
-H 'Content-Type: application/json' \
-d '{"email":"you@example.com","password":"…","name":"my app"}'
# → {"ok":true,"token":"ghb_…"} (shown exactly once)
curl https://getholybible.com/me -H 'Authorization: Bearer ghb_…'
curl 'https://getholybible.com/me' -H 'Authorization: Bearer YOUR_TOKEN'
Code examples
curl 'https://getholybible.com/search?q=armour%20of%20God&format=json'
const res = await fetch('https://getholybible.com/votd?format=json');
const votd = await res.json();
console.log(votd.ref, '→', votd.verse.text);
$verse = json_decode(file_get_contents('https://getholybible.com/book/57/3/16?format=json'), true);
echo $verse['text'];
foreach ($verse['words'] as $w) {
if (isset($w['s'])) echo " {$w['t']}={$w['s']}";
}
Note: responses are served same-origin; browsers calling the API from another site need a server-side proxy or the bulk download.
Response fields
{
"book": 57, "chapter": 3, "verse": 16,
"ref": "Jhn 3:16",
"text": "For God so loved the world, that he gave his only begotten Son, …",
"words": [
{ "t": "For", "s": "G1063" },
{ "t": "God", "s": "G2316" },
{ "t": "so", "s": "G3779" }, …
]
}
- t
- the word itself
- i
- true when supplied by translators — italicized in print
- r
- true for words of Christ, printed in red
- s
- Strong's number — look it up at
/strongs/{s}
API tokens & rate limits
- Without a token: 120 requests/minute and 10,000/day per IP address.
- With a token: 240 requests/minute and a per-token daily quota you
choose (up to 50,000 — active supporters can go unlimited). Mint one at
Settings → API tokens and send it as
Authorization: Bearer <token>. - Every API response carries
X-RateLimit-Limit,X-RateLimit-RemainingandX-RateLimit-Resetheaders. Exceed a limit and you get429withRetry-After.
Errors
| Status | When | Body |
|---|---|---|
401 |
Missing, invalid or revoked token. | {"error": "…", "status": 401} |
404 |
Unknown book, chapter, verse, Strong's number, or date outside the archive range. | {"error": "…", "status": 404} |
429 |
Over a rate limit — see the Retry-After header. |
{"error": "…", "status": 429} |
503 |
Empty verse pool (should never happen). | {"error": "…", "status": 503} |
Bulk, no requests at all
Prefer one download to a thousand calls? The complete dataset — every verse with Strong's tags, the Strong's dictionaries, and book metadata — ships as a single SQLite file at /download, public domain, updated with the site.
Text: King James Version (1769) with Apocrypha, public domain, courtesy of CrossWire and eBible.org. Strong's dictionaries: OpenScriptures JSON edition (CC-BY-SA). Questions or something looks wrong? Contact us.