📘 ScriptureFlow Developer Docs

ScriptureFlow Developer Quickstart

Public API integration guidance based on approved ScriptureFlow documentation.

ScriptureFlow Developer Quickstart

Purpose

This quickstart helps developers make their first successful ScriptureFlow API request.

ScriptureFlow is a public Scripture access API designed to help developers build Bible-powered applications, automations, study tools, ministry resources, multilingual Scripture tools, and other software experiences that need structured Scripture data.

This guide focuses only on how to use the public API. It does not explain the private repository, internal build process, corpus processing, deployment pipeline, or contributor-only implementation details.


Base API URL

Use this base URL for public API requests:


https://scriptureflow-api-preview.pages.dev

All examples in this quickstart use the public preview API domain.


Your First Request

To retrieve John 3:16 from the King James Version, open this URL in your browser:


https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&book=John&chapter=3&verse=16

The request uses four required query parameters:

ParameterExampleMeaning
versionen-kjvThe exact translation/version key.
bookJohnThe book name or supported book reference.
chapter3The chapter number.
verse16The verse number.

A successful request returns a JSON response containing the requested Scripture data.


Important: Use Exact Version Keys

The version value is not just a display name. It is an exact lookup key.

For the King James Version, use:


en-kjv

Do not use:


kjv

Do not use:


en-KJV

Version keys are case-sensitive and catalog-controlled. If a version key is wrong, the API may not find the requested translation.

To see available translations and version keys, use:


https://scriptureflow-api-preview.pages.dev/translations.json

Lookup a Single Verse

Use /api/verse with version, book, chapter, and verse.


https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&book=John&chapter=3&verse=16

Browser

Paste the full URL into a browser address bar.

JavaScript


const baseUrl = "https://scriptureflow-api-preview.pages.dev";

const url = `${baseUrl}/api/verse?version=en-kjv&book=John&chapter=3&verse=16`;

const response = await fetch(url);
const data = await response.json();

console.log(data);

Python


import requests

base_url = "https://scriptureflow-api-preview.pages.dev"

url = f"{base_url}/api/verse?version=en-kjv&book=John&chapter=3&verse=16"

response = requests.get(url, timeout=20)
data = response.json()

print(data)

cURL


curl "https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&book=John&chapter=3&verse=16"

Lookup a Same-Chapter Passage

To request a passage range within the same chapter, add end_verse.

Example: Amos 8:4-6


https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&book=Amos&chapter=8&verse=4&end_verse=6

This requests:


Amos 8:4-6

Use this pattern when the passage starts and ends in the same chapter.

JavaScript


const baseUrl = "https://scriptureflow-api-preview.pages.dev";

const url = `${baseUrl}/api/verse?version=en-kjv&book=Amos&chapter=8&verse=4&end_verse=6`;

const response = await fetch(url);
const data = await response.json();

console.log(data);

Python


import requests

base_url = "https://scriptureflow-api-preview.pages.dev"

url = f"{base_url}/api/verse?version=en-kjv&book=Amos&chapter=8&verse=4&end_verse=6"

response = requests.get(url, timeout=20)
data = response.json()

print(data)

cURL


curl "https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&book=Amos&chapter=8&verse=4&end_verse=6"

Lookup by Free-Text Reference

You can also request a verse using a reference value.

Example:


https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&reference=John%203%3A16

The reference value must be URL encoded when used inside a URL.

Readable reference:


John 3:16

URL-encoded reference:


John%203%3A16

JavaScript


const baseUrl = "https://scriptureflow-api-preview.pages.dev";

const reference = encodeURIComponent("John 3:16");
const url = `${baseUrl}/api/verse?version=en-kjv&reference=${reference}`;

const response = await fetch(url);
const data = await response.json();

console.log(data);

Python


import requests

base_url = "https://scriptureflow-api-preview.pages.dev"

params = {
    "version": "en-kjv",
    "reference": "John 3:16",
}

response = requests.get(f"{base_url}/api/verse", params=params, timeout=20)
data = response.json()

print(data)

cURL


curl "https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&reference=John%203%3A16"

Same-Chapter Range by Free-Text Reference

A same-chapter range may also be requested using the reference parameter.

Example:


https://scriptureflow-api-preview.pages.dev/api/verse?version=en-kjv&reference=Amos%208%3A4-6

Readable reference:


Amos 8:4-6

URL-encoded reference:


Amos%208%3A4-6

Current Range Limitation

ScriptureFlow currently supports same-chapter ranges.

This works:


Amos 8:4-6

This should not be used as a single request:


John 3:16-4:2

Cross-chapter ranges are not currently supported by the public /api/verse endpoint. If your application needs a passage that crosses chapter boundaries, make separate same-chapter requests and combine the results in your application.


Find Available Translations

Use the translation catalog to find supported version keys:


https://scriptureflow-api-preview.pages.dev/translations.json

The catalog helps developers identify which translations are currently available through the public API.

A translation entry may include fields such as:

FieldMeaning
versionThe exact version key to use in API requests.
language_codeThe language code associated with the translation.
translation_nameThe readable translation name.
statusThe current public readiness status.

Use the version value exactly as listed.


Public Catalog and Status Files

ScriptureFlow also exposes public metadata files.

Translation Catalog


https://scriptureflow-api-preview.pages.dev/translations.json

Use this to find supported version keys and translation metadata.

Public Catalog


https://scriptureflow-api-preview.pages.dev/public-catalog.json

Use this for public catalog-level information about available translations.

Status Summary


https://scriptureflow-api-preview.pages.dev/status.json

Use this for a public summary of current API data readiness.


Common Mistakes

Mistake 1: Using the wrong version key

Incorrect:


version=kjv

Correct:


version=en-kjv

Mistake 2: Using the wrong casing

Incorrect:


version=en-KJV

Correct:


version=en-kjv

Mistake 3: Forgetting to URL encode free-text references

Incorrect:


/api/verse?version=en-kjv&reference=John 3:16

Correct:


/api/verse?version=en-kjv&reference=John%203%3A16

Mistake 4: Trying to request a cross-chapter passage as one range

Not currently supported:


John 3:16-4:2

Use separate requests instead.


Simple Integration Pattern

Most applications can start with this basic flow:

  1. Load translations.json.
  2. Let the user choose a translation.
  3. Store the selected version key.
  4. Send a request to /api/verse.
  5. Display the returned Scripture text and reference.
  6. Handle errors clearly if a version, book, chapter, or verse is unavailable.

Example:


const baseUrl = "https://scriptureflow-api-preview.pages.dev";

async function getVerse({ version, book, chapter, verse }) {
  const params = new URLSearchParams({
    version,
    book,
    chapter: String(chapter),
    verse: String(verse),
  });

  const response = await fetch(`${baseUrl}/api/verse?${params.toString()}`);

  if (!response.ok) {
    const error = await response.json().catch(() => ({
      error: `HTTP ${response.status}`,
    }));

    throw new Error(error.error || `Request failed with HTTP ${response.status}`);
  }

  return response.json();
}

const data = await getVerse({
  version: "en-kjv",
  book: "John",
  chapter: 3,
  verse: 16,
});

console.log(data);

Recommended Developer Checklist

Before building deeper integration, confirm that you can:

  • Open translations.json.
  • Identify the correct version key.
  • Request a single verse.
  • Request a same-chapter passage range.
  • Request a free-text reference.
  • Handle an error response.
  • Avoid hardcoding unverified version names.
  • Avoid assuming a translation is available without checking the catalog.

Public API Boundary

The public API gives developers access to ScriptureFlow’s published API surface.

Developers do not need access to the private repository to use ScriptureFlow.

The public documentation does not include:

  • Internal architecture
  • Corpus processing details
  • Build or indexing logic
  • Deployment workflow details

For normal API usage, developers should rely on the public API endpoints and public documentation.


Next Steps

After completing this quickstart, review:

  • Endpoint Specification
  • Example Requests
  • Supported Languages
  • API Product Overview
  • Terms and Attribution

These documents provide additional guidance for building with ScriptureFlow.