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:
| Parameter | Type | Default | Description |
|---|---|---|---|
passage_id | path | — | Canonical ID (e.g., gen.1.1, 1-ne.3.7) |
include_witnesses | query | false | Include manuscript witness texts |
include_words | query | false | Include 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:
| Parameter | Type | Default | Description |
|---|---|---|---|
book_id | path | — | Book ID (e.g., gen, 1-ne) |
chapter | path | — | Chapter number |
translation | query | kjv | Translation (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:
| Parameter | Type | Description |
|---|---|---|
word_id | path | Strong'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:
| Parameter | Type | Description |
|---|---|---|
topic_id | path | Topic ID (e.g., faith, atonement) |
include_passages | query | Include full passage text (default: false) |
GET /topics
List all topics with optional filtering.
Parameters:
| Parameter | Type | Description |
|---|---|---|
letter | query | Filter by starting letter (e.g., a) |
type | query | Filter 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:
| Parameter | Type | Default | Description |
|---|---|---|---|
passage_id | path | — | Source passage ID |
limit | query | 25 | Maximum 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
}
]
}
Search
GET /search
Full-text and faceted search across passages, topics, and lexicon entries. Proxied to Typesense.
Parameters:
| Parameter | Type | Default | Description |
|---|---|---|---|
q | query | — | Search query text |
book_id | query | — | Filter by book |
testament | query | — | Filter by testament (ot, nt, bofm, dc, pgp) |
type | query | — | Filter by content type (passage, topic, lexicon) |
limit | query | 20 | Results per page |
cursor | query | — | Pagination 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:
| Parameter | Type | Description |
|---|---|---|
passage_id | path | Book of Mormon passage ID (e.g., 1-ne.1.1) |
Response includes: Critical apparatus comparing textual variants across manuscript witnesses.
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:
| Parameter | Type | Description |
|---|---|---|
passage_id | path | Passage 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:
| Parameter | Type | Description |
|---|---|---|
entry_id | path | Dictionary 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:
| Parameter | Type | Default | Description |
|---|---|---|---|
entity_id | path | --- | Entity ID (e.g., person slug or place slug) |
type | query | --- | 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.
Nav Events
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:
| Parameter | Type | Default | Description |
|---|---|---|---|
passage_id | path | --- | Passage ID (e.g., gen.1.1) |
lang | query | --- | 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:
| Code | HTTP Status | Description |
|---|---|---|
PASSAGE_NOT_FOUND | 404 | Passage ID doesn't exist in the graph |
INVALID_BOOK_ID | 400 | Unrecognized book ID |
INVALID_PASSAGE_FORMAT | 400 | Passage ID doesn't match {bookId}.{chapter}.{verse} |
RATE_LIMIT_EXCEEDED | 429 | Too many requests (enforced by gateway) |
Related Pages
- Content Service Overview — service setup and configuration
- Graph Client & Caching — query execution and caching internals
- API Reference — full OpenAPI specification