Skip to main content

Content Service Endpoints

All Content service endpoints are mounted behind the gateway at /api/v1/<resource>. The Content service itself handles paths starting from /<resource>.

Passages

GET /passages/{passage_id}

Retrieve a single scripture passage by its canonical ID.

Parameters:

ParameterTypeDefaultDescription
passage_idpathCanonical ID (e.g., gen.1.1, 1-ne.3.7)
include_witnessesqueryfalseInclude manuscript witness texts
include_wordsqueryfalseInclude word-level original language alignment

Example:

curl http://localhost:8080/api/v1/passages/gen.1.1?include_witnesses=true

Response:

{
"data": {
"id": "gen.1.1",
"bookId": "gen",
"chapter": 1,
"verse": 1,
"text": "In the beginning God created the heaven and the earth.",
"witnesses": [{ "type": "kjv", "text": "In the beginning God created..." }]
}
}

GET /passages/{book_id}/{chapter}

Retrieve all passages in a chapter.

Parameters:

ParameterTypeDefaultDescription
book_idpathBook ID (e.g., gen, 1-ne)
chapterpathChapter number
translationquerykjvTranslation (kjv or jst)

Example:

curl http://localhost:8080/api/v1/passages/gen/1

Lexicon

GET /lexicon/{word_id}

Retrieve a lexicon entry by Strong's number.

Parameters:

ParameterTypeDescription
word_idpathStrong's number (e.g., H0430 for Elohim, G0026 for agape)

Response includes: original word, transliteration, pronunciation, definition, morphology, usage examples.

Topics

GET /topics/{topic_id}

Retrieve a Topical Guide or Bible Dictionary entry with its referenced passages.

Parameters:

ParameterTypeDescription
topic_idpathTopic ID (e.g., faith, atonement)
include_passagesqueryInclude full passage text (default: false)

GET /topics

List all topics with optional filtering.

Parameters:

ParameterTypeDescription
letterqueryFilter by starting letter (e.g., a)
typequeryFilter by type (tg for Topical Guide, bd for Bible Dictionary)

Connections

GET /connections/{passage_id}

Traverse the knowledge graph from a specific passage to find all connected nodes — cross-references, topics, lexicon entries, and scholarly annotations.

Parameters:

ParameterTypeDefaultDescription
passage_idpathSource passage ID
limitquery25Maximum connections to return

Response:

{
"data": [
{
"relationshipType": "CROSS_REF",
"nodeType": "Passage",
"connectedId": "isa.7.14",
"connectedTitle": "Isaiah 7:14",
"weight": 0.95
},
{
"relationshipType": "CITES",
"nodeType": "IndexTopic",
"connectedId": "messiah",
"connectedTitle": "Messiah",
"weight": 0.88
}
]
}

Full-text and faceted search across passages, topics, and lexicon entries. Proxied to Typesense.

Parameters:

ParameterTypeDefaultDescription
qquerySearch query text
book_idqueryFilter by book
testamentqueryFilter by testament (ot, nt, bofm, dc, pgp)
typequeryFilter by content type (passage, topic, lexicon)
limitquery20Results per page
cursorqueryPagination cursor

Witnesses

GET /witnesses/{passage_id}

Retrieve all manuscript witnesses for a Book of Mormon passage — Original Manuscript, Printer's Manuscript, and 1830 edition.

Parameters:

ParameterTypeDescription
passage_idpathBook of Mormon passage ID (e.g., 1-ne.1.1)

Response includes: Critical apparatus comparing textual variants across manuscript witnesses.

Scholar Feature

The witnesses endpoint requires the manuscript_witnesses entitlement, available on Scholar and Academic plans.

Commentary

GET /commentary/{passage_id}

Retrieve commentary entries for a given passage from Clarke, BYU, and other scholarly commentary sources.

Parameters:

ParameterTypeDescription
passage_idpathPassage ID (e.g., gen.1.1)

Response includes: Commentary text, source attribution, and date metadata.

Dictionary

GET /dictionary/{entry_id}

Retrieve a Bible Dictionary entry by its canonical ID.

Parameters:

ParameterTypeDescription
entry_idpathDictionary entry ID (e.g., moses)

Response includes: Entry title, body text, cross-references to Topical Guide, and related passages.

Entities

GET /entities/{entity_id}

Retrieve a typed entity (Person, Place, Event, PeopleGroup) by ID.

Parameters:

ParameterTypeDefaultDescription
entity_idpath---Entity ID (e.g., person slug or place slug)
typequery---Filter by entity type (person, place, etc.)

Response includes: Entity name, type, subtypes, and APPEARS_IN passage references.

CFM (Come Follow Me)

GET /cfm/current

Retrieve the current Come Follow Me lesson based on today's date.

GET /cfm/{lesson_id}

Retrieve a specific Come Follow Me lesson by ID.

Response includes: Lesson title, week, assigned passages, discussion questions, and related topics.

Share

POST /share

Generate a shareable link or card for a passage or Pinboard.

Request body: Passage ID, optional annotation context, share format.

Response includes: Shareable URL, Open Graph metadata, preview image URL.

POST /nav-events

Record a user navigation event for Study Map navigation-graph edge ingestion.

DELETE /nav-events

Clear navigation event history for the current user.

Request body (POST): Source passage, target passage, navigation type, timestamp.

Translations

GET /translations/{passage_id}

Retrieve all available translations for a given passage.

Parameters:

ParameterTypeDefaultDescription
passage_idpath---Passage ID (e.g., gen.1.1)
langquery---Filter by language code (e.g., grc, hbo)

Response includes: Array of translation texts with language, edition, and source metadata.

Error Responses

All endpoints return errors in the standard envelope format:

{
"error": {
"code": "PASSAGE_NOT_FOUND",
"message": "Passage 'gen.99.99' does not exist",
"request_id": "abc-123"
}
}

Common error codes:

CodeHTTP StatusDescription
PASSAGE_NOT_FOUND404Passage ID doesn't exist in the graph
INVALID_BOOK_ID400Unrecognized book ID
INVALID_PASSAGE_FORMAT400Passage ID doesn't match {bookId}.{chapter}.{verse}
RATE_LIMIT_EXCEEDED429Too many requests (enforced by gateway)