Convert any human-written Bible reference — abbreviations, typos, compound ranges — into deterministic canonical coordinates and OSIS identifiers.
Users never type Scripture references the same way twice. Your application must handle all of these:
Without a normalization layer, your app must implement complex parsing logic — and still get it wrong on edge cases.
Many libraries detect references and produce OSIS strings like John.3.16. That solves display. It does not solve deterministic storage: you also need numeric book IDs, validated chapter/verse spans, and deduplication of compound ranges like Rom 8:1-4,28. The BibleBridge Scripture Resolver produces all of that in one request.
Send any human-written reference string. The Scripture Resolver handles abbreviations, verse carry-forward, book aliases, and compound ranges.
curl --get https://holybible.dev/api/resolve \
-H "Authorization: Bearer YOUR_API_KEY" \
--data-urlencode reference="rom 8:1-4,28; john 3:16"
Messy user input in → deterministic canonical coordinates out:
{
"type": "collection",
"valid": true,
"input": "rom 8:1-4,28; john 3:16",
"osis_id": "Rom.8.1-Rom.8.4,Rom.8.28,John.3.16",
"references": [
{
"type": "single",
"valid": true,
"book": { "key": "ROM", "book_id": 45, "name": "Romans", "slug": "romans" },
"spans": [
{ "start": { "chapter": 8, "verse": 1 }, "end": { "chapter": 8, "verse": 4 } },
{ "start": { "chapter": 8, "verse": 28 }, "end": { "chapter": 8, "verse": 28 } }
],
"osis_id": "Rom.8.1-Rom.8.4,Rom.8.28",
"input_segments": [
{ "input": "rom 8:1-4,28", "normalized": "Romans 8:1-4, 28", "corrections": ["verse_carry", "book_alias"] }
]
},
{
"type": "single",
"valid": true,
"book": { "key": "JHN", "book_id": 43, "name": "John", "slug": "john" },
"spans": [
{ "start": { "chapter": 3, "verse": 16 }, "end": { "chapter": 3, "verse": 16 } }
],
"osis_id": "John.3.16",
"input_segments": [
{ "input": "john 3:16", "normalized": "John 3:16", "corrections": ["book_case_normalized"] }
]
}
]
}
| Field | Description |
|---|---|
| osis_id | Canonical OSIS representation of the fully normalized reference |
| references[].book.book_id | Deterministic numeric book ID (1–66) |
| references[].spans[] | Explicit verse ranges after deduplication and normalization |
| input_segments[].normalized | Canonical human-readable reconstruction using the full book name |
| input_segments[].corrections | Tags: verse_carry, book_alias, book_case_normalized, carry_forward |
/expand, /context, and /scriptureExperiment interactively with flexible references in the Scripture Resolver Playground — no API key required.
A free API key gives you 500 calls per day — no credit card required.
Get a free API key Next: Expand references →