Prayer Pulse Bible API Documentation

RESTful API for accessing Bible translations, verses, and search functionality

Base URL: https://api.prayerpulse.io
Production Ready

Introduction

The Prayer Pulse Bible API provides programmatic access to multiple Bible translations, search functionality, and user features. All endpoints return JSON responses with CORS enabled for cross-origin requests.

Response Format: All responses are in JSON format with UTF-8 encoding.

Authentication

Most read endpoints do not require authentication. User-specific features (bookmarks, history, notes) require authentication via Django session or OAuth.

Public Endpoints: No authentication required for verse retrieval, search, and book metadata endpoints.

๐ŸŽ‰ What's New

๐ŸŒ Multilingual Support - Get Languages Endpoint

New Endpoint: /bible/get-languages/ - Access 150+ Bible translations organized by language!

Build truly multilingual Bible apps with our new language-organized endpoint. Get all translations grouped by their native language:

๐ŸŒ Fetch All Languages
curl https://api.prayerpulse.io/bible/get-languages/

Supported Languages (27 total):

๐Ÿ’ก Perfect for: Building language selectors, regional apps, or Bible study tools that serve international audiences. Each translation includes metadata like last update timestamp and text direction (RTL for Hebrew/Arabic/Farsi).

See it in action: View full endpoint documentation โ†’

๐Ÿ“– User-Friendly Book Codes

Major Update: All Bible API endpoints now support intuitive book names instead of just numeric IDs!

You can now use readable book names in your API calls:

โœ… New User-Friendly Format
https://api.prayerpulse.io/bible/get-verse/KJV/John/3/16/
https://api.prayerpulse.io/bible/get-text/NIV/Genesis/1/
https://api.prayerpulse.io/bible/get-chapter/ESV/Matthew/5/
https://api.prayerpulse.io/bible/get-text/KJV/Psalms/23/
โœ… Still Works - Legacy Numeric Format
https://api.prayerpulse.io/bible/get-verse/KJV/43/3/16/
https://api.prayerpulse.io/bible/get-text/NIV/1/1/

Supported book name formats:

๐Ÿ’ก Note: All Bible API endpoints are now under the /bible/ prefix. This allows for future expansion with other API categories like /users/ or /prayers/.

โœจ Clean Text Parameter

New Feature: Add ?clean=true to any endpoint to remove Strong's numbers and footnotes for cleaner reading!

Some translations (like KJV, ASV) include Strong's Concordance numbers for Bible study. You can now toggle these on/off:

๐Ÿ“š With Scholarly Annotations (default)
https://api.prayerpulse.io/bible/get-verse/KJV/John/3/16/

Response:
{
  "text": "For<S>1063</S> God<S>2316</S> so<S>3779</S> loved<S>25</S> the world<S>2889</S>..."
}
๐Ÿ“– Clean Text (without annotations)
https://api.prayerpulse.io/bible/get-verse/KJV/John/3/16/?clean=true

Response:
{
  "text": "For God so loved the world, that he gave his only begotten Son..."
}

Works with all endpoints:

๐Ÿ’ก Use case: Enable this in your app settings to let users choose between clean reading text or scholarly study mode!

๐Ÿ“‘ Understanding Section Titles

What are Section Titles? Many Bible translations include section titles like "The Beginning", "The Fall of Man", "The Good Samaritan" to help readers understand the context.

Some translations (like NIV, ESV, NLT) include section titles embedded in verse text. These are editorial additions that help organize the Bible into logical sections for study.

๐Ÿ“š Default Response - Includes Section Title
GET https://api.prayerpulse.io/bible/get-verse/NIV/Genesis/1/1/

Response:
{
  "pk": 2568649,
  "verse": 1,
  "text": "The Beginning<br/>In the beginning God created the heavens and the earth."
}
๐Ÿ“– Clean Response - Section Title Removed
GET https://api.prayerpulse.io/bible/get-verse/NIV/Genesis/1/1/?clean=true

Response:
{
  "pk": 2568649,
  "verse": 1,
  "text": "In the beginning God created the heavens and the earth."
}

How to Display Section Titles in Your App:

JavaScript Example - Extracting Section Titles
// Fetch verse with section title
fetch('https://api.prayerpulse.io/bible/get-verse/NIV/Genesis/1/1/')
  .then(res => res.json())
  .then(data => {
    const fullText = data.text;

    // Check if text contains section title
    if (fullText.includes('<br/>')) {
      const parts = fullText.split('<br/>');
      const sectionTitle = parts[0].trim();
      const verseText = parts[1].trim();

      // Display section title separately
      console.log('Section:', sectionTitle);  // "The Beginning"
      console.log('Verse:', verseText);       // "In the beginning..."

      // Render in your UI
      // <h3>{sectionTitle}</h3>
      // <p>{verseText}</p>
    } else {
      // No section title
      console.log('Verse:', fullText);
    }
  });

Section Title Use Cases:

๐Ÿ’ก Best Practice: Store the full text (with section titles) in your database, then use ?clean=true when you want to display just the verse text. This gives you maximum flexibility!

๐Ÿ“– Cross-References & Commentaries

The Bible API provides cross-references (also known as concordance or parallel passages) and commentaries that enrich Bible study by showing how verses relate to each other and providing scholarly notes.

๐Ÿ”— What are Cross-References?

Cross-References are links to other Bible passages that are thematically or theologically related. They help readers understand connections between different parts of Scripture.

For example, Genesis 3:24 (the cherubim guarding Eden) has cross-references to Ezekiel 1:5-12 and 10:21, which also describe cherubim.

๐Ÿ“š How to Access Cross-References

Cross-references and commentaries are automatically included in the comment field when you request verses or chapters using certain translations (currently RNKSV Korean translation has extensive cross-references).

Get Verse with Cross-References
GET https://api.prayerpulse.io/bible/get-verse/RNKSV/Genesis/3/24/

Response:
{
  "pk": 123456,
  "verse": 24,
  "text": "์ด๋ ‡๊ฒŒ ๊ทธ๋ถ„๊ป˜์„œ๋Š” ์‚ฌ๋žŒ์„ ์ซ“์•„๋‚ด์‹œ๊ณ ...",
  "comment": "[12] ์‚ด์•„ ์žˆ๋Š” ํ”ผ์กฐ๋ฌผ, ๋‚ ๊ฐœ์™€ ์–ผ๊ตด์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋จ(<a href='/RNKSV/26/1/5-12'>๊ฒ”  1:5-12</a>; <a href='/RNKSV/26/10/21'>10:21</a>)"
}
Get Chapter with All Cross-References
GET https://api.prayerpulse.io/bible/get-chapter/RNKSV/Genesis/1/

Response:
[
  {
    "pk": 1,
    "verse": 1,
    "text": "ํƒœ์ดˆ์— ํ•˜๋‚˜๋‹˜์ด ํ•˜๋Š˜๊ณผ ๋•…์„ ์ฐฝ์กฐํ•˜์…จ๋‹ค.",
    "comment": "[1] ๋˜๋Š” 'ํƒœ์ดˆ์— ํ•˜๋‚˜๋‹˜์ด ์ฒœ์ง€๋ฅผ ์ฐฝ์กฐํ•˜์‹ค ๋•Œ์—'..."
  },
  {
    "pk": 2,
    "verse": 2,
    "text": "๋•…์€ ํ˜•์ฒด๊ฐ€ ์—†๊ณ  ํ…… ๋น„์–ด ์žˆ์—ˆ๋Š”๋ฐ...",
    "comment": "[2] ๋˜๋Š” 'ํ•˜๋‚˜๋‹˜์˜ ๋ฐ”๋žŒ' ๋˜๋Š” '๊ฐ•ํ•œ ๋ฐ”๋žŒ'"
  }
  // ... more verses with commentaries
]

๐Ÿ” Understanding the Comment Field

The comment field contains:

๐Ÿ’ป Parsing Cross-References in Your App

JavaScript Example - Extract Cross-References
// Fetch verse with commentary
fetch('https://api.prayerpulse.io/bible/get-verse/RNKSV/Genesis/3/24/')
  .then(res => res.json())
  .then(data => {
    if (data.comment) {
      // Parse HTML to extract cross-reference links
      const parser = new DOMParser();
      const doc = parser.parseFromString(data.comment, 'text/html');
      const links = doc.querySelectorAll('a');

      links.forEach(link => {
        const href = link.getAttribute('href');
        const text = link.textContent;

        console.log(`Reference: ${text}`);
        console.log(`Link: ${href}`);

        // Convert to API URL format
        const apiUrl = `https://api.prayerpulse.io/bible${href}`;
        console.log(`API URL: ${apiUrl}`);

        // You can now fetch these related verses
        // fetch(apiUrl).then(...)
      });
    }
  });
Python Example - Extract Cross-References
import re
import requests
from bs4 import BeautifulSoup

# Fetch verse with commentary
response = requests.get('https://api.prayerpulse.io/bible/get-verse/RNKSV/Genesis/3/24/')
data = response.json()

if 'comment' in data:
    # Parse HTML comment to extract links
    soup = BeautifulSoup(data['comment'], 'html.parser')
    links = soup.find_all('a')

    for link in links:
        href = link.get('href')
        text = link.get_text()

        print(f"Reference: {text}")
        print(f"Link: {href}")

        # Convert to API URL and fetch related verse
        api_url = f"https://api.prayerpulse.io/bible{href}"
        related_verse = requests.get(api_url).json()
        print(f"Related text: {related_verse['text'][:50]}...")

๐ŸŽฏ Use Cases for Cross-References

โš™๏ธ Loading Commentaries (For Self-Hosted Deployments)

If you're self-hosting the Prayer Pulse Bible API, you'll need to load the commentaries into your database:

Django Management Command
# Navigate to the Django directory
cd django/

# Load all commentaries and cross-references from CSV
python manage.py load_commentaries

# This will import 3,780+ commentary entries including cross-references
๐Ÿ“Š Current Coverage: The commentaries database includes 3,780+ entries for the RNKSV (Korean) translation with extensive cross-references. Additional translations and commentaries can be added by following the same CSV format.
๐Ÿ’ก Pro Tip: When displaying cross-references, consider showing them as clickable links that fetch and display the related verse inline. This creates a rich, interconnected Bible reading experience!

Quick Start

Get started with a simple request to fetch John 3:16 using the new user-friendly format:

Request (User-Friendly)
curl https://api.prayerpulse.io/bible/get-verse/KJV/John/3/16/
Request (Legacy Numeric - Still Works)
curl https://api.prayerpulse.io/bible/get-verse/KJV/43/3/16/
Response
{
  "pk": 26133,
  "verse": 16,
  "text": "For God so loved the world, that he gave his only begotten Son..."
}

Get All Translations

Before fetching Bible text, get a list of all available translations and their books. This is essential for knowing which translations you can work with.

๐Ÿ’ก Tip for Beginners: Always start by fetching the translations list to see what Bible versions are available (KJV, NIV, YLT, etc.).
GET
/bible/get-languages/
Get all available Bible translations organized by language. Perfect for building language-based navigation in your app.
Example Request
curl https://api.prayerpulse.io/bible/get-languages/
Example Response (Excerpt)
[
  {
    "language": "English",
    "translations": [
      {
        "short_name": "KJV",
        "full_name": "King James Version 1769",
        "updated": 1750968212682
      },
      {
        "short_name": "NIV",
        "full_name": "New International Version, 1984",
        "updated": 1626349711821
      }
      // ... 40+ more English translations
    ]
  },
  {
    "language": "Spanish Espaรฑol",
    "translations": [
      {
        "short_name": "RV1960",
        "full_name": "Reina-Valera 1960",
        "updated": 1635446313426
      }
      // ... more Spanish translations
    ]
  }
  // ... 25+ more languages
]
Response Structure
language string
Language name (e.g., "English", "Spanish Espaรฑol", "Korean ํ•œ๊ตญ์–ด")
translations array
Array of Bible translations available in this language
translations[].short_name string
Translation ID used in API requests (e.g., "KJV", "NIV", "RV1960")
translations[].full_name string
Full name of the translation
translations[].updated integer
Last update timestamp (milliseconds since 1970)
translations[].dir string (optional)
Text direction - "rtl" for right-to-left languages (Hebrew, Arabic, Farsi)
๐Ÿ“Š Coverage: The API currently supports 27 languages with 150+ Bible translations including English (40+ versions), Spanish, Portuguese, Ukrainian, Russian, Chinese, Korean, Japanese, German, French, Hebrew, Greek, and many more!
๐Ÿ’ก Use Case: Use this endpoint to build a language selector in your app, allowing users to browse translations in their native language. Perfect for multilingual Bible apps!
GET
/bible/get-translations/
Get a complete list of all available Bible translations.
Example Request
curl https://api.prayerpulse.io/bible/get-translations/
Example Response
[
  {
    "short_name": "YLT",
    "full_name": "Young's Literal Translation",
    "updated": 1613548800000
  },
  {
    "short_name": "KJV",
    "full_name": "King James Version",
    "updated": 1613548800000
  }
]
Response Fields
short_name string
Translation ID used in API requests (e.g., "YLT", "KJV")
full_name string
Full name of the translation
updated integer
Last update timestamp (milliseconds since 1970)
dir string (optional)
Text direction ("rtl" for right-to-left languages like Hebrew/Arabic)

Verses & Chapters

Retrieve Bible verses, chapters, and random verses. You can get individual verses or entire chapters with or without commentaries.

GET
/bible/get-verse/{translation}/{book}/{chapter}/{verse}/
Retrieve a single Bible verse by translation, book, chapter, and verse number.
Path Parameters
translation string
Translation code (e.g., YLT, KJV, ASV)
book integer
Book number (1-66)
chapter integer
Chapter number
verse integer
Verse number
Example Request
curl https://api.prayerpulse.io/bible/get-verse/YLT/1/1/1/
Example Response
{
  "pk": 1,
  "verse": 1,
  "text": "In the beginning of God's preparing the heavens and the earth --"
}
GET
/bible/get-text/{translation}/{book}/{chapter}/
Retrieve all verses from a specific chapter.
Example Request
curl https://api.prayerpulse.io/bible/get-text/YLT/43/3/
Example Response
[
  {
    "pk": 26118,
    "verse": 1,
    "text": "And there was a man of the Pharisees..."
  },
  // ... more verses
]
GET
/bible/get-chapter/{translation}/{book}/{chapter}/
Retrieve all verses from a specific chapter WITH commentaries and study notes.
What's the difference? Use /get-text/ for just the verses, or /get-chapter/ to include commentary and study notes.
Example Request
curl https://api.prayerpulse.io/bible/get-chapter/NKJV/43/3/
Example Response
[
  {
    "pk": 26118,
    "verse": 1,
    "text": "There was a man of the Pharisees named Nicodemus...",
    "comment": "<i>Nicodemus was a prominent Jewish leader...</i>"
  }
]
GET
/bible/get-random-verse/{translation}/
Get a random Bible verse from the specified translation. Perfect for daily devotionals or inspiration!
Example Request
curl https://api.prayerpulse.io/bible/get-random-verse/YLT/
Example Response
{
  "pk": 31073,
  "translation": "YLT",
  "book": 9,
  "chapter": 24,
  "verse": 19,
  "text": "and that a man doth find his enemy..."
}

Books & Metadata

Retrieve book lists, verse counts, and translation metadata. Perfect for building book navigation, table of contents, and Bible reading apps.

GET
/bible/get-books/{translation}/
Get a list of all books in the specified translation with clean IDs and names optimized for navigation.
Example Request
curl https://api.prayerpulse.io/bible/get-books/KJV/
Example Response
[
  {
    "id": "GEN",
    "bookid": 1,
    "name": "Genesis",
    "chapters": 50
  },
  {
    "id": "EXO",
    "bookid": 2,
    "name": "Exodus",
    "chapters": 40
  },
  {
    "id": "MAT",
    "bookid": 40,
    "name": "Matthew",
    "chapters": 28
  },
  {
    "id": "REV",
    "bookid": 66,
    "name": "Revelation",
    "chapters": 22
  }
  // ... 62 more books
]
Response Fields
id string
3-letter book code (e.g., "GEN", "MAT", "REV") - perfect for navigation and URL building
bookid integer
Numeric book ID (1-66 for standard Bible, higher for Apocrypha)
name string
Clean, user-friendly book name (e.g., "Genesis", "Matthew", "Revelation")
chapters integer
Total number of chapters in this book
๐Ÿ’ก Perfect for Navigation: Use the id field for "Next Book" and "Previous Book" buttons in your app. The clean book codes work seamlessly with all API endpoints!
JavaScript Example - Next/Previous Book Navigation
// Fetch book list
const books = await fetch('https://api.prayerpulse.io/bible/get-books/KJV/')
  .then(res => res.json());

// Current book: "MAT" (Matthew)
const currentBookId = "MAT";
const currentIndex = books.findIndex(b => b.id === currentBookId);

// Navigate to next book
const nextBook = books[currentIndex + 1];
console.log(`Next: ${nextBook.name}`); // "Mark"

// Navigate to previous book
const prevBook = books[currentIndex - 1];
console.log(`Previous: ${prevBook.name}`); // "Malachi"

// Fetch next chapter using the clean book ID
const nextChapter = await fetch(
  `https://api.prayerpulse.io/bible/get-chapter/KJV/${nextBook.id}/1/`
).then(res => res.json());

User Features

Authenticated endpoints for user bookmarks, notes, and reading history.

Authentication Required: These endpoints require user authentication via Django session or OAuth.
POST
/save-bookmarks/
Save user bookmarks for specific verses.
GET
/bible/get-bookmarks/{translation}/{book}/{chapter}/
Retrieve user bookmarks for a specific chapter.

Compare Versions (Parallel Verses)

Compare the same verses across multiple Bible translations side-by-side. Perfect for Bible study and translation comparison!

๐Ÿ“– Use Case: Want to see how John 3:16 reads in KJV, NIV, and YLT? This endpoint returns all three versions at once!
POST
/bible/get-parallel-verses/
Compare specific verses across multiple translations.
Request Body (JSON)
translations array of strings
List of translation codes (e.g., ["YLT", "KJV", "NIV"])
verses array of integers
List of verse numbers to compare (e.g., [1, 2, 3])
book integer
Book number (1-66)
chapter integer
Chapter number
Example Request (JavaScript)
fetch("https://api.prayerpulse.io/bible/get-parallel-verses/", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify({
    translations: ["YLT", "KJV", "WEB"],
    verses: [3, 4, 5],
    book: 43,
    chapter: 1
  })
}).then(res => res.json())
cURL Example
curl -X POST https://api.prayerpulse.io/bible/get-parallel-verses/ \
  -H "Content-Type: application/json" \
  -d '{"translations":["YLT","KJV"],"verses":[16],"book":43,"chapter":3}'
Example Response
[
  // YLT Translation
  [
    {
      "pk": 26133,
      "translation": "YLT",
      "book": 43,
      "chapter": 3,
      "verse": 16,
      "text": "for God did so love the world..."
    }
  ],
  // KJV Translation
  [
    {
      "pk": 2743736,
      "translation": "KJV",
      "book": 43,
      "chapter": 3,
      "verse": 16,
      "text": "For God so loved the world..."
    }
  ]
]

Fetch Multiple Verses

Need to fetch several verses from different books or chapters in one request? This endpoint lets you grab multiple verses efficiently!

POST
/bible/get-verses/
Fetch multiple verses from different locations in the Bible.
Request Body (JSON Array)
translation string
Translation code
book integer
Book number
chapter integer
Chapter number
verses array of integers
Array of verse numbers
Example Request (JavaScript)
fetch("/get-verses/", {
  method: "POST",
  headers: { "Content-Type": "application/json" },
  body: JSON.stringify([
    {
      translation: "YLT",
      book: 19,
      chapter: 23,
      verses: [1, 2, 3]
    },
    {
      translation: "KJV",
      book: 43,
      chapter: 3,
      verses: [16]
    }
  ])
}).then(res => res.json())

Hebrew & Greek Dictionary

Look up definitions for Hebrew and Greek words directly from Strong's Concordance and other lexicons. Perfect for word studies!

๐Ÿ”ค Search Options: Search by Hebrew/Greek word, Strong's number (H125, G523), or even English/Russian words to find related definitions.
GET
/bible/dictionary-definition/{dict}/{query}/
Get dictionary definitions for Hebrew or Greek words.
Path Parameters
dict string
Dictionary code: "BDBT" (Brown-Driver-Briggs/Thayer) or "RUSD" (Russian Strong/Dvoretsky)
query string
Hebrew/Greek word, Strong's number (H125/G523), or English/Russian word
Query Parameters
extended boolean (optional)
Return extended search results (default: false)
Search by Hebrew Word
curl https://api.prayerpulse.io/bible/dictionary-definition/BDBT/ืึนึ‘ื•ืจ/
Search by Strong's Number
curl https://api.prayerpulse.io/bible/dictionary-definition/BDBT/H216/
Example Response
[
  {
    "topic": "H216",
    "lexeme": "ืื•ึนืจ",
    "transliteration": "'รดwr",
    "pronunciation": "ore",
    "short_definition": "light",
    "definition": "<p>light, daylight, illumination...</p>",
    "weight": 1.0
  }
]

Download Full Translations

Download entire Bible translations as JSON or ZIP files for offline use or bulk processing.

GET
/static/translations/{translation}.json
Download a complete translation in JSON format.
Download JSON
curl https://api.prayerpulse.io/static/translations/YLT.json -O
GET
/static/translations/{translation}.zip
Download a complete translation in compressed ZIP format.
Download ZIP
curl https://api.prayerpulse.io/static/translations/KJV.zip -O
โš ๏ธ Large Files: Full translations can be several megabytes. Consider downloading during off-peak hours if bandwidth is limited.

Available Translations

Currently available Bible translations in the API:

Code Name Language
YLT Young's Literal Translation English
KJV King James Version English
ASV American Standard Version English
BSB Berean Study Bible English
...and many more

Book Reference Numbers

Books are referenced by their canonical order (1-66):

ID Book ID Book
1 Genesis 40 Matthew
2 Exodus 41 Mark
3 Leviticus 42 Luke
4 Numbers 43 John
5 Deuteronomy 44 Acts
Use /get-books/ endpoint for complete list

Error Codes

Standard HTTP response codes are used:

Code Status Description
200 OK Request successful
400 Bad Request Invalid parameters or malformed request
404 Not Found Resource does not exist
500 Internal Server Error Server encountered an error

Best Practices

Performance Tips:
  • Use specific verse endpoints instead of downloading entire translations
  • Cache responses on your client to reduce API calls
  • Implement proper error handling for network failures
  • Always use HTTPS for secure connections

Support

Need help or have questions?

Contact:
Email: admin@prayerpulse.io
Admin Panel: https://api.prayerpulse.io/admin/
Prayer Pulse Bible API v1.0 โ€ข Self-Hosted โ€ข Last Updated: November 2025