FlickerFaith API

Integrate FlickerFaith's Christian AI assistant and Bible study data into your application.

Authentication

All requests require an API key passed via the X-API-Key header. The Data API also accepts the same key as a bearer token.

X-API-Key: ff_live_your_api_key_here
# or
Authorization: Bearer ff_live_your_api_key_here

Contact FlickerFaith to obtain an API key. Each key has configurable rate limits.

Chat API

Endpoint

POST /v1/chat

Request Body

FieldTypeRequiredDescription
messagestringYesThe user's message (max 10,000 chars)
conversationHistoryarrayNoPrevious messages: [{role: "user"|"assistant", content: "..."}] (max 20)
personastringNoAI persona: default, biblical_scholar, or simple_helper
maxTokensnumberNoMax response tokens (capped by your key's limit)

Example Request

curl -X POST https://api.flickerfaith.com/v1/chat \
  -H "Content-Type: application/json" \
  -H "X-API-Key: ff_live_your_key_here" \
  -d '{
    "message": "What does Philippians 4:13 mean?",
    "persona": "biblical_scholar"
  }'

Example Response

{
  "success": true,
  "data": {
    "message": "Philippians 4:13 — 'I can do all things through Christ...'",
    "model": "flickerfaith-1",
    "usage": { "inputTokens": 180, "outputTokens": 350 }
  },
  "meta": {
    "requestId": "a1b2c3d4-...",
    "latencyMs": 2150,
    "persona": "biblical_scholar",
    "rateLimits": {
      "daily": { "limit": 100, "remaining": 87 },
      "monthly": { "limit": 2000, "remaining": 1543 }
    }
  }
}

Personas

IDDescription
defaultBalanced Christian AI assistant — bold, Biblical, compassionate
biblical_scholarAcademic depth — Hebrew/Greek origins, manuscript traditions, church history
simple_helperWarm encourager — short, practical, plain language for new believers

Error Codes

HTTPCodeDescription
401MISSING_API_KEYNo API key provided
401INVALID_API_KEYKey not found or revoked
429DAILY_LIMIT_EXCEEDEDDaily message cap reached (resets midnight UTC)
429MONTHLY_LIMIT_EXCEEDEDMonthly cap reached (resets 1st of month)
400INVALID_REQUESTMissing or invalid message field
400INVALID_PERSONAUnknown persona ID
500INTERNAL_ERRORServer error — retry the request

Rate Limits

Each API key has configurable daily and monthly message limits. Current limits are returned in every response under meta.rateLimits. When a limit is exceeded, the API returns HTTP 429.

Notes

Data API

Read-only access to the Bible study resources behind FlickerFaith: Bible translations, commentaries, dictionaries, topical works, Strong's lexicons, cross-references and a curated index of Bible stories. Partners receive only the resources the FlickerFaith team has marked shareable for their key; start with /catalog to see what yours can read. The machine-readable contract is at /openapi.json (OpenAPI 3.0.3).

Base URL and envelope

https://api.flickerfaith.com/v1/data

Every response uses the same envelope. Successful responses carry Cache-Control: private, max-age=300 (responses are specific to your key), so a client-side HTTP cache will absorb repeat lookups.

// success
{ "success": true, "data": { ... } }

// error
{ "success": false, "error": { "code": "NOT_FOUND", "message": "No story with slug jonah-and-the-whale" } }

Error codes

HTTPCodeDescription
401MISSING_API_KEYNo key in X-API-Key or Authorization
401INVALID_API_KEYKey not found or revoked
403SCOPE_DENIEDThe resource exists but is not shareable with this key
404NOT_FOUNDUnknown book, chapter, verse, entry, topic or story
400INVALID_REQUESTMalformed reference, missing query, or a limit exceeded
429DAILY_LIMIT_EXCEEDEDPer-key daily request quota reached (resets midnight UTC)
500INTERNAL_ERRORServer error — retry the request

Catalog

GET /catalog

What this key can access, grouped by family. Every item carries the id you pass to the other endpoints, a display name, and the attribution string you must show with its content.

{
  "success": true,
  "data": {
    "bible":        [{ "id": "WEB", "name": "World English Bible", "attribution": "World English Bible (WEB), public domain." }],
    "commentaries": [{ "id": "MHC", "name": "Matthew Henry's Concise Commentary", "attribution": "..." }],
    "dictionaries": [{ "id": "Easton", "name": "Easton's Bible Dictionary", "attribution": "..." }],
    "topics":       [{ "id": "Nave", "name": "Nave's Topical Bible", "attribution": "..." }],
    "lexicons":     [{ "id": "StrGrk", "name": "Strong's Greek", "attribution": "Lemma and transliteration data from Open Scriptures, CC BY-SA 4.0." }],
    "crossrefs":    { "id": "crossrefs", "name": "Cross-references", "attribution": "..." },
    "stories":      { "id": "stories", "name": "FlickerFaith Bible Stories", "attribution": "Story index curated by FlickerFaith." }
  }
}

Bible

GET /bible/books

The 66 books in canonical order with abbreviations, chapter count and the verse count of every chapter (verseCounts[0] is chapter 1). Use it to validate references before you request them.

{ "success": true, "data": { "books": [
  { "number": 9, "name": "1 Samuel", "abbreviations": ["1sam", "1sa", "1sm"], "chapters": 31, "verseCounts": [28, 36, 21, ...] },
  ...
] } }
GET /bible/{translation}/{book}/{chapter}

book may be the book number, the full English name, or a common abbreviation (1sam, Song of Songs, Rev). Whole chapter only.

{ "success": true, "data": {
  "translation": "WEB",
  "book": { "number": 9, "name": "1 Samuel" },
  "chapter": 17,
  "verses": [{ "v": 1, "text": "..." }, { "v": 2, "text": "..." }, ...],
  "attribution": "World English Bible (WEB), public domain."
} }
GET /bible/{translation}/passage?ref=John 3:16-18;Psalm 23

Semicolon-separated references. Accepts Book c, Book c:v, Book c:v-v, Book c:v-c:v and Book c-c. Limits: at most 10 refs per call, each spanning at most 4 chapters; anything larger returns INVALID_REQUEST.

{ "success": true, "data": {
  "translation": "WEB",
  "passages": [
    { "ref": "John 3:16-18", "verses": [{ "book": "John", "chapter": 3, "v": 16, "text": "..." }, ...] },
    { "ref": "Psalm 23",     "verses": [{ "book": "Psalms", "chapter": 23, "v": 1, "text": "..." }, ...] }
  ],
  "attribution": "World English Bible (WEB), public domain."
} }

Strong's lexicons

GET /strongs/{number}

G1234 for Greek, H430 for Hebrew.

{ "success": true, "data": {
  "number": "G26", "lexicon": "greek",
  "lemma": "ἀγάπη", "transliteration": "agapē", "gloss": "love",
  "definition": "...",
  "attribution": "Lemma and transliteration data from Open Scriptures, CC BY-SA 4.0."
} }
GET /strongs/search?q=&lex=greek|hebrew

Matches lemma, transliteration and gloss. Returns up to 25 entries under data.results; lex is optional.

Commentaries

GET /commentaries/{id}/{book}/{chapter}

Entries for every verse in the chapter that the commentary covers, as data.entries: [{ verse, text }].

GET /commentaries/{id}/{book}/{chapter}/{verse}

A single verse entry: { id, book, chapter, verse, text, attribution }.

Dictionaries

GET /dictionaries/{id}/search?q=

Headword prefix search, up to 25 hits of { idx, headword }.

GET /dictionaries/{id}/entries/{idx}

The full entry: { id, idx, headword, text, attribution }.

Topics

GET /topics/{id}/search?q=

Headword search inside one topical work; returns { slug, headword } hits.

GET /topics/{id}/browse?letter=A

Every headword beginning with the letter.

GET /topics/{id}/entries/{slug}
{ "success": true, "data": {
  "id": "Nave", "slug": "courage", "headword": "Courage",
  "sections": [
    { "heading": "Enjoined",
      "refs": [{ "ref": "Joshua 1:6-7", "bookNum": 6, "ch": 1, "v": 6, "vEnd": 7 }, ...],
      "see": ["Boldness", "Fear"] }
  ],
  "attribution": "..."
} }
GET /topics/merged?q=headword

The same headword merged across every topical work the key can read, one sources[] entry per work, each with its own attribution.

Cross-references

GET /crossrefs/{book}/{chapter}/{verse}
{ "success": true, "data": { "book": "1 Samuel", "chapter": 17, "verse": 45,
  "refs": ["1 Samuel 17:47", "Psalms 20:7", "Zechariah 4:6", ...], "attribution": "..." } }

Bible stories

A curated index of the major narratives of both testaments plus a set of parables (kind is narrative or parable). Each entry maps a story to exact passages, characters, lowercase theme tags, one to three factual one-sentence hooks, a short summary in FlickerFaith's own words, a period tag and a canonical reading order. Passages are validated against real chapter and verse counts.

GET /stories?theme=&q=&testament=&kind=&limit=
QueryDescription
themeExact theme tag, e.g. courage, forgiveness, provision
qFree-text match on title, characters, hooks and summary
testamentOT or NT
kindnarrative or parable
limit1–100, default 25; results are in canonical order
GET /stories/{slug}
{ "success": true, "data": {
  "slug": "david-and-goliath", "title": "David and Goliath",
  "kind": "narrative", "testament": "OT", "book": "1 Samuel",
  "passages": [{ "ref": "1 Samuel 17" }],
  "characters": ["David", "Goliath", "Saul", "Eliab"],
  "themes": ["courage", "faith", "underdog", "god's power"],
  "hooks": ["A teenager with a sling faces a nine-foot champion", "..."],
  "summary": "The Philistine champion Goliath taunts Israel's army for forty days ...",
  "era": "united-monarchy", "order": 61,
  "attribution": "Story index curated by FlickerFaith."
} }

Quotas

Each key has a per-day request quota across all Data API endpoints. When it is exhausted the API returns 429 DAILY_LIMIT_EXCEEDED until midnight UTC. Responses are cacheable for five minutes; caching them on your side does not count against the quota.

Worked example

Find a story about courage, pull its passage in the WEB translation, then fetch the Nave's topic Courage to surface related verses.

1. Find a story tagged courage

curl "https://api.flickerfaith.com/v1/data/stories?theme=courage&limit=3" \
  -H "X-API-Key: ff_live_your_key_here"
{ "success": true, "data": { "total": 14, "stories": [
  { "slug": "birth-of-moses", "title": "The Birth of Moses", "book": "Exodus",
    "passages": [{ "ref": "Exodus 1:8-2:10" }], "themes": ["courage", "protection", ...], "order": 26, ... },
  { "slug": "the-twelve-spies", "title": "The Twelve Spies", "order": 38, ... },
  { "slug": "david-and-goliath", "title": "David and Goliath", "book": "1 Samuel",
    "passages": [{ "ref": "1 Samuel 17" }],
    "hooks": ["A teenager with a sling faces a nine-foot champion", ...], "order": 61, ... }
], "attribution": "Story index curated by FlickerFaith." } }

2. Pull the passage in the WEB translation

curl "https://api.flickerfaith.com/v1/data/bible/WEB/passage?ref=1%20Samuel%2017:45-47" \
  -H "X-API-Key: ff_live_your_key_here"
{ "success": true, "data": {
  "translation": "WEB",
  "passages": [{ "ref": "1 Samuel 17:45-47", "verses": [
    { "book": "1 Samuel", "chapter": 17, "v": 45, "text": "Then David said to the Philistine, ..." },
    { "book": "1 Samuel", "chapter": 17, "v": 46, "text": "..." },
    { "book": "1 Samuel", "chapter": 17, "v": 47, "text": "..." }
  ] }],
  "attribution": "World English Bible (WEB), public domain."
} }

3. Fetch the Nave's topic "Courage"

curl "https://api.flickerfaith.com/v1/data/topics/Nave/entries/courage" \
  -H "X-API-Key: ff_live_your_key_here"
{ "success": true, "data": {
  "id": "Nave", "slug": "courage", "headword": "Courage",
  "sections": [
    { "heading": "Enjoined", "refs": [
        { "ref": "Deuteronomy 31:6-7", "bookNum": 5, "ch": 31, "v": 6, "vEnd": 7 },
        { "ref": "Joshua 1:6-7",       "bookNum": 6, "ch": 1,  "v": 6, "vEnd": 7 },
        { "ref": "1 Samuel 17:32",     "bookNum": 9, "ch": 17, "v": 32, "vEnd": null }, ...
      ], "see": ["Boldness", "Fear"] },
    { "heading": "Instances of", "refs": [ ... ], "see": [] }
  ],
  "attribution": "Nave's Topical Bible, public domain."
} }

Feed any of those ref values back into step 2 to render the verses. Show each response's attribution next to the content it came from.

Licensing and attribution

Questions about licensing a resource that is not in your catalog? Write to hello@flickerfaith.com.

© 2025 FlickerFaith · flickerfaith.com