Bible API

Bible texts across 30 translations in 26 languages

Browse, read, and search Bible texts programmatically. 30 translations covering 26 languages, from ancient (Vulgate, 405 AD) to modern (World English Bible, 2000). Full-text search with BM25 ranking, verse of the day, and flexible book/chapter/verse navigation.

30 Translations, 26 Languages

From the King James Version to the Chinese Union Version, Arabic Smith-Van Dyke, and Polish Biblia Tysiąclecia. Protestant canon (66 books) plus deuterocanonical books in supported translations.

Full-Text Search

FTS5-powered search with BM25 ranking. Search within a single translation or across all translations at once. Supports keywords, phrases, and prefix wildcards with highlighted result snippets.

Verse of the Day

Deterministic daily verse (same for all callers on the same UTC date) or random mode. Filter by translation, language, testament, or book.

Flexible Book Slugs

Reference books by full name (genesis, song-of-solomon), abbreviation (gen, jhn), or USFX code (GEN, JHN). Case-insensitive and hyphen-tolerant.

Use Cases

Built for real-world scenarios

Quick Start

Start using this API in seconds

Get John 3:16 from the King James Version

$ curl "https://api.apicrate.io/api/v1/bible/kjv/john/3/16" \
  -H "X-API-Key: YOUR_API_KEY"

# Response
{
  "status": "ok",
  "data": {
    "translation_id": "kjv",
    "book": {
      "id": 43,
      "abbr": "JHN",
      "name": "John",
      "local_name": "John"
    },
    "chapter": 3,
    "verse": {
      "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."
    },
    "reference": "John 3:16"
  }
}
import requests

response = requests.get(
    "https://api.apicrate.io/api/v1/bible/kjv/john/3/16",
    headers={"X-API-Key": "YOUR_API_KEY"},
)

verse = response.json()["data"]
print(f"{verse['reference']}: {verse['verse']['text']}")
# John 3:16: For God so loved the world, that he gave his only begotten Son, ...
const res = await fetch(
  "https://api.apicrate.io/api/v1/bible/kjv/john/3/16",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);

const { data } = await res.json();
console.log(`${data.reference}: ${data.verse.text}`);
// John 3:16: For God so loved the world, that he gave his only begotten Son, ...

Psalm 23:1 in Polish (Biblia Tysiąclecia)

$ curl "https://api.apicrate.io/api/v1/bible/bt/psalms/23/1" \
  -H "X-API-Key: YOUR_API_KEY"

# Response
{
  "status": "ok",
  "data": {
    "translation_id": "bt",
    "book": {
      "id": 19,
      "abbr": "PSA",
      "name": "Psalms",
      "local_name": "Księga Psalmów"
    },
    "chapter": 23,
    "verse": {
      "verse": 1,
      "text": "Psalm. Dawidowy. Pan jest moim pasterzem, nie brak mi niczego."
    },
    "reference": "Psalms 23:1"
  }
}
import requests

response = requests.get(
    "https://api.apicrate.io/api/v1/bible/bt/psalms/23/1",
    headers={"X-API-Key": "YOUR_API_KEY"},
)

verse = response.json()["data"]
print(f"{verse['book']['local_name']} — {verse['verse']['text']}")
# Księga Psalmów — Psalm. Dawidowy. Pan jest moim pasterzem, nie brak mi niczego.
const res = await fetch(
  "https://api.apicrate.io/api/v1/bible/bt/psalms/23/1",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);

const { data } = await res.json();
console.log(`${data.book.local_name} — ${data.verse.text}`);
// Księga Psalmów — Psalm. Dawidowy. Pan jest moim pasterzem, nie brak mi niczego.

Get a Random Verse from the New Testament

$ curl "https://api.apicrate.io/api/v1/bible/daily?mode=random&testament=NT" \
  -H "X-API-Key: YOUR_API_KEY"

# Response
{
  "status": "ok",
  "data": {
    "translation_id": "web",
    "translation_name": "World English Bible",
    "lang_code": "en",
    "lang_name": "English",
    "book": {
      "id": 45,
      "abbr": "ROM",
      "name": "Romans",
      "local_name": "Romans"
    },
    "chapter": 8,
    "verse": {
      "verse": 28,
      "text": "We know that all things work together for good for those who love God, for those who are called according to his purpose."
    },
    "reference": "Romans 8:28"
  }
}
import requests

response = requests.get(
    "https://api.apicrate.io/api/v1/bible/daily",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"mode": "random", "testament": "NT"},
)

verse = response.json()["data"]
print(f"[{verse['translation_name']}] {verse['reference']}: {verse['verse']['text']}")
# [World English Bible] Romans 8:28: We know that all things work together ...
const res = await fetch(
  "https://api.apicrate.io/api/v1/bible/daily?mode=random&testament=NT",
  { headers: { "X-API-Key": "YOUR_API_KEY" } }
);

const { data } = await res.json();
console.log(`[${data.translation_name}] ${data.reference}: ${data.verse.text}`);
// [World English Bible] Romans 8:28: We know that all things work together ...
Endpoints

Available endpoints

GET /api/v1/bible/languages List languages
GET /api/v1/bible/translations List translations
GET /api/v1/bible/translations/{translation_id} Get translation detail
GET /api/v1/bible/daily Verse of the day / random verse
GET /api/v1/bible/search Search across translations
GET /api/v1/bible/{translation}/search Search within a translation
GET /api/v1/bible/{translation}/books List books
GET /api/v1/bible/{translation}/books/{book} Get book detail
GET /api/v1/bible/{translation}/{book}/chapters List chapters
GET /api/v1/bible/{translation}/{book}/{chapter} Get chapter content
GET /api/v1/bible/{translation}/{book}/{chapter}/{verse_ref} Get verse or verse range
FAQ

Frequently asked questions

How many translations are available?

The API currently serves 30 translations across 26 languages, including 6 English translations (KJV, WEB, ASV, YLT, Darby, Douay-Rheims), plus Arabic, Chinese, Czech, Dutch, French, German, Greek, Hebrew, Italian, Korean, Latin, Polish, Portuguese, Romanian, Russian, Spanish, Swahili, Ukrainian, and Vietnamese.

What search syntax is supported?

Full-text search supports simple keywords (love), exact phrases ("in the beginning"), and prefix wildcards (lo*). Results are ranked by BM25 relevance or can be sorted in canonical Bible order.

Can I search across multiple translations at once?

Yes. The /bible/search endpoint searches across all translations by default, or you can specify a comma-separated list with ?translations=kjv,web,lsg. Results are grouped by translation.

What book name formats are accepted?

Books can be referenced by full English name (genesis), common abbreviation (gen), or USFX code (GEN). Multi-word names support hyphens (song-of-solomon) or abbreviations (sng). All lookups are case-insensitive.

Does the API include deuterocanonical books?

Yes. Translations that include deuterocanonical books (e.g. the Douay-Rheims, Vulgate, and World English Bible) serve them with testament code DC. Protestant-only translations contain 66 books.

How does the verse of the day work?

In daily mode, the same verse is returned for all callers on the same UTC date (given the same filters). In random mode, a new verse is picked on every call. Filter by translation, language, testament, or book.

Ready to start building?

Create a free account and start making requests in under a minute.

Sign Up Free → View Documentation