Menu
SermonIndex · Developer API

API Reference.

Every endpoint in version 2. All requests are GET; there is no authentication and no rate limit, and a .json suffix is accepted on every path.

sermons preachers topics scripture references

Media URLs. mp3Url and mp4Url resolve to the Archive.org mirror when one exists and to our CDN otherwise; cdnMp3Url and cdnMp4Url always hold our copy. Play the first, fall back to the second on error — there is a worked example in the guide, including why two <source> tags will not do it for you.

Root

GET/v2

Service description: version, licence, live counts and a map of every endpoint. A good thing to fetch first if you are exploring.

GET/v2/stats

Counts only, plus the timestamp of the last rebuild. Cheap to poll if you want to know whether anything has changed.

Scripture → sermons

The heart of the API. Ask at whatever level of precision you have: a whole book, a chapter, or a single verse. Results are exhaustive — every sermon that cites the passage, ordered with the most-heard first.

GET/v2/scripture

All sixty-six books with their OSIS code, testament, canonical order, chapter count and how many sermons reference each.

GET/v2/scripture/{bookId}

One book, with the list of chapters that actually have preaching on them and the count for each. bookId is an OSIS code — see Book Codes.

GET/v2/scripture/{bookId}/{chapter}

Every sermon on the chapter, plus a per-verse breakdown so you can render a heat map of where the preaching falls.

GET/v2/scripture/{bookId}/{chapter}/{verse}

Every sermon that cites that one verse. If a verse has no preaching on it the endpoint returns 404 rather than an empty list — check the chapter response first if you need to know in advance.

Topics

GET/v2/topics

Every topic with its slug, name and sermon count, ordered by size. Large — cache it.

GET/v2/topics/{slug}

One topic: a written description, the scriptures most often preached under it with their Berean Standard Bible text, and every sermon filed there.

Preachers

GET/v2/speakers

Every preacher with slug, name, portrait URL, sermon count and the themes he is most often heard on. Also available at /v2/contributors.

GET/v2/speakers/{slug}

One preacher, his biography and portrait, and every sermon of his in the library. Also at /v2/contributors/{slug}.

Sermons

GET/v2/sermons/page/{n}

The whole library in pages of 500. Each response carries page, totalPages and total so you can walk it. Start at page 1.

GET/v2/sermons

Every sermon in one response. This is a very large file — tens of megabytes. Prefer the paged endpoint, or take a bulk download.

GET/v2/sermons/popular

The five hundred most-listened sermons in the library. Useful as a starting shelf.

GET/v2/sermons/{id}

The full record: everything in the summary form plus the complete transcript (as HTML and as plain text), the outline, pull-quotes, application points, an FAQ and keywords.

The Bible

A complete mirror of over a thousand translations, hosted on our own CDN so that it stays reachable. The layout matches the Free Use Bible API it was built from, so existing code can be pointed at us by changing the base URL alone.

GET/v2/bible/available_translations.json

Every translation with its id, language, licence and website.

GET/v2/bible/{translation}/books.json

The books available in that translation, with chapter counts.

GET/v2/bible/{translation}/{bookId}/{chapter}.json

One chapter of text, verse by verse, with footnotes.

GET/v2/bible/available_commentaries.json

Public-domain commentaries in the same corpus, under /v2/bible/c/{id}/.

Response conventions

ItemNotes
Content-Typeapplication/json; charset=utf-8 on every path, with or without the .json suffix.
CORSAccess-Control-Allow-Origin: *. Call it straight from a browser; no proxy needed.
CachingEdge-cached for thirty days and purged on each rebuild. Please cache on your side too.
ErrorsA path that does not exist returns 404 with an HTML body, not JSON. Check the status code, not the body.
Trailing slashNot accepted. Use /v2/topics/prayer, not /v2/topics/prayer/.
IDsSermon ids are opaque sixteen-character strings and are stable. Slugs are stable too, but an id is the safer key.
Empty fieldsPresent as "" or [] rather than omitted, so you can read them without guarding.

Migrating from the old API

OldNow
/audio/speakers.json/v2/speakers
/audio/speaker/{name}.json/v2/speakers/{slug}
/audio/topic/{name}.json/v2/topics/{slug}
/audio/scripture/{book}/…/v2/scripture/{bookId}
/v1/contributors/v2/speakers
/v1/contributors/slug/{slug}/v2/speakers/{slug}
/v1/sermons/id/{id}/v2/sermons/{id}
/v1/topics/slug/{slug}/v2/topics/{slug}

The old underscore-separated speaker filenames became hyphenated slugs: leonard_ravenhill is now leonard-ravenhill.

Everything we make is available for free because of a generous community of supporters.

Donate