API DOCUMENTATION

Search API v2: endpoint and schema reference

This reference is generated from the checked-in OpenAPI contract. Return to the integration guide for workflows and ready-to-run examples.

Resolved request server: https://search.getbible.net.

GET /healthz#

Liveness

Operation ID: health.

Responses#

Status Description Media type Schema
200 Service is online application/json #/components/schemas/Health
Complete operation contract
{
  "operationId": "health",
  "responses": {
    "200": {
      "content": {
        "application/json": {
          "example": {
            "status": "ok"
          },
          "schema": {
            "$ref": "#/components/schemas/Health"
          }
        }
      },
      "description": "Service is online"
    }
  },
  "security": [],
  "summary": "Liveness",
  "parameters": []
}

GET /readyz#

Readiness: read a verse from the default translation

Operation ID: readiness.

Responses#

Status Description Media type Schema
200 Scripture is readable application/json #/components/schemas/Health
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "operationId": "readiness",
  "responses": {
    "200": {
      "content": {
        "application/json": {
          "example": {
            "status": "ready"
          },
          "schema": {
            "$ref": "#/components/schemas/Health"
          }
        }
      },
      "description": "Scripture is readable"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "security": [],
  "summary": "Readiness: read a verse from the default translation",
  "parameters": []
}

GET /{segment}#

Short form: translation or search string

Operation ID: searchAlias.

Parameter In Required Type Example / default Description
segment path Yes string faith hope
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Responses#

Status Description Media type Schema
301 Redirect to the versioned endpoint, preserving query parameters. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "operationId": "searchAlias",
  "responses": {
    "301": {
      "description": "Redirect to the versioned endpoint, preserving query parameters.",
      "headers": {
        "Location": {
          "schema": {
            "type": "string"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Short form: translation or search string",
  "parameters": [
    {
      "in": "path",
      "name": "segment",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

POST /{segment}#

Short form with POST

Operation ID: searchAliasPost.

Parameter In Required Type Example / default Description
segment path Yes string faith hope
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Request body#

Optional.

Media type: application/json. Schema: #/components/schemas/SearchRequest.

Responses#

Status Description Media type Schema
308 Redirect preserving method, JSON body and query parameters. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "operationId": "searchAliasPost",
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SearchRequest"
        }
      }
    },
    "required": false
  },
  "responses": {
    "308": {
      "description": "Redirect preserving method, JSON body and query parameters.",
      "headers": {
        "Location": {
          "schema": {
            "type": "string"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Short form with POST",
  "parameters": [
    {
      "in": "path",
      "name": "segment",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

Short form: translation or search string

Operation ID: searchUnversioned.

Parameter In Required Type Example / default Description
translation path Yes string kjv Translation abbreviation; case-insensitive.
search path Yes string faith hope Search words or a scripture reference, URL-encoded.
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Responses#

Status Description Media type Schema
301 Redirect to the versioned endpoint, preserving query parameters. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "operationId": "searchUnversioned",
  "responses": {
    "301": {
      "description": "Redirect to the versioned endpoint, preserving query parameters.",
      "headers": {
        "Location": {
          "schema": {
            "type": "string"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Short form: translation or search string",
  "parameters": [
    {
      "description": "Translation abbreviation; case-insensitive.",
      "in": "path",
      "name": "translation",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference, URL-encoded.",
      "in": "path",
      "name": "search",
      "required": true,
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

POST /{translation}/{search}#

Short form with POST

Operation ID: searchUnversionedPost.

Parameter In Required Type Example / default Description
translation path Yes string kjv Translation abbreviation; case-insensitive.
search path Yes string faith hope Search words or a scripture reference, URL-encoded.
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Request body#

Optional.

Media type: application/json. Schema: #/components/schemas/SearchRequest.

Responses#

Status Description Media type Schema
308 Redirect preserving method, JSON body and query parameters. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "operationId": "searchUnversionedPost",
  "requestBody": {
    "content": {
      "application/json": {
        "schema": {
          "$ref": "#/components/schemas/SearchRequest"
        }
      }
    },
    "required": false
  },
  "responses": {
    "308": {
      "description": "Redirect preserving method, JSON body and query parameters.",
      "headers": {
        "Location": {
          "schema": {
            "type": "string"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Short form with POST",
  "parameters": [
    {
      "description": "Translation abbreviation; case-insensitive.",
      "in": "path",
      "name": "translation",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference, URL-encoded.",
      "in": "path",
      "name": "search",
      "required": true,
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

GET /v2/openapi.json#

Public API contract

Operation ID: openapi.

Responses#

Status Description Media type Schema
200 Generated OpenAPI 3.1 JSON document. application/json object
Complete operation contract
{
  "operationId": "openapi",
  "responses": {
    "200": {
      "content": {
        "application/json": {
          "schema": {
            "properties": {
              "info": {
                "type": "object"
              },
              "openapi": {
                "type": "string"
              },
              "paths": {
                "type": "object"
              }
            },
            "required": [
              "openapi",
              "info",
              "paths"
            ],
            "type": "object"
          }
        }
      },
      "description": "Generated OpenAPI 3.1 JSON document."
    }
  },
  "security": [],
  "summary": "Public API contract",
  "parameters": []
}

GET /v2/{translation}#

Search using URL parameters

The path wins over query parameters. Only book and exclude may repeat. Filters override configured defaults; scripture references return scripture without applying full-text filters. GET bodies are not read.

Operation ID: searchTranslation.

Parameter In Required Type Example / default Description
translation path Yes string kjv Translation abbreviation; case-insensitive.
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Responses#

Status Description Media type Schema
200 Search result, or scripture when the text is a reference. application/json #/components/schemas/SearchResult
301 An unrecognised translation segment is interpreted as the search string and redirected to the default translation. See contract
304 Not modified for an ETag conditional GET. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "description": "The path wins over query parameters. Only book and exclude may repeat. Filters override configured defaults; scripture references return scripture without applying full-text filters. GET bodies are not read.",
  "operationId": "searchTranslation",
  "responses": {
    "200": {
      "$ref": "#/components/responses/SearchResult"
    },
    "301": {
      "description": "An unrecognised translation segment is interpreted as the search string and redirected to the default translation.",
      "headers": {
        "Location": {
          "schema": {
            "type": "string"
          }
        }
      }
    },
    "304": {
      "description": "Not modified for an ETag conditional GET."
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Search using URL parameters",
  "parameters": [
    {
      "description": "Translation abbreviation; case-insensitive.",
      "in": "path",
      "name": "translation",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

POST /v2/{translation}#

Search using URL parameters, a JSON body, or both

The same search implementation as GET. Path > query parameters > JSON body > configured defaults. A body is optional when q is provided in the URL. Scripture references return scripture without applying full-text filters.

Operation ID: searchTranslationPost.

Parameter In Required Type Example / default Description
translation path Yes string kjv Translation abbreviation; case-insensitive.
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Request body#

Optional.

Media type: application/json. Schema: #/components/schemas/SearchRequest.

{
  "limit": 25,
  "q": "faith hope",
  "words": "any"
}

Responses#

Status Description Media type Schema
200 Search result, or scripture when the text is a reference. application/json #/components/schemas/SearchResult
308 An unrecognised translation segment is interpreted as the search string; redirect preserves POST, body and query parameters. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
415 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "description": "The same search implementation as GET. Path > query parameters > JSON body > configured defaults. A body is optional when q is provided in the URL. Scripture references return scripture without applying full-text filters.",
  "operationId": "searchTranslationPost",
  "requestBody": {
    "content": {
      "application/json": {
        "example": {
          "limit": 25,
          "q": "faith hope",
          "words": "any"
        },
        "schema": {
          "$ref": "#/components/schemas/SearchRequest"
        }
      }
    },
    "required": false
  },
  "responses": {
    "200": {
      "$ref": "#/components/responses/SearchResult"
    },
    "308": {
      "description": "An unrecognised translation segment is interpreted as the search string; redirect preserves POST, body and query parameters.",
      "headers": {
        "Location": {
          "schema": {
            "type": "string"
          }
        }
      }
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "415": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Search using URL parameters, a JSON body, or both",
  "parameters": [
    {
      "description": "Translation abbreviation; case-insensitive.",
      "in": "path",
      "name": "translation",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

Search using URL parameters

The path wins over query parameters. Only book and exclude may repeat. Filters override configured defaults; scripture references return scripture without applying full-text filters. GET bodies are not read.

Operation ID: search.

Parameter In Required Type Example / default Description
translation path Yes string kjv Translation abbreviation; case-insensitive.
search path Yes string faith hope Search words or a scripture reference, URL-encoded.
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Responses#

Status Description Media type Schema
200 Search result, or scripture when the text is a reference. application/json #/components/schemas/SearchResult
304 Not modified for an ETag conditional GET. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "description": "The path wins over query parameters. Only book and exclude may repeat. Filters override configured defaults; scripture references return scripture without applying full-text filters. GET bodies are not read.",
  "operationId": "search",
  "responses": {
    "200": {
      "$ref": "#/components/responses/SearchResult"
    },
    "304": {
      "description": "Not modified for an ETag conditional GET."
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Search using URL parameters",
  "parameters": [
    {
      "description": "Translation abbreviation; case-insensitive.",
      "in": "path",
      "name": "translation",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference, URL-encoded.",
      "in": "path",
      "name": "search",
      "required": true,
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

POST /v2/{translation}/{search}#

Search using URL parameters, a JSON body, or both

The same search implementation as GET. Path > query parameters > JSON body > configured defaults. A body is optional when q is provided in the URL. Scripture references return scripture without applying full-text filters.

Operation ID: searchPost.

Parameter In Required Type Example / default Description
translation path Yes string kjv Translation abbreviation; case-insensitive.
search path Yes string faith hope Search words or a scripture reference, URL-encoded.
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Request body#

Optional.

Media type: application/json. Schema: #/components/schemas/SearchRequest.

{
  "limit": 25,
  "q": "faith hope",
  "words": "any"
}

Responses#

Status Description Media type Schema
200 Search result, or scripture when the text is a reference. application/json #/components/schemas/SearchResult
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
415 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "description": "The same search implementation as GET. Path > query parameters > JSON body > configured defaults. A body is optional when q is provided in the URL. Scripture references return scripture without applying full-text filters.",
  "operationId": "searchPost",
  "requestBody": {
    "content": {
      "application/json": {
        "example": {
          "limit": 25,
          "q": "faith hope",
          "words": "any"
        },
        "schema": {
          "$ref": "#/components/schemas/SearchRequest"
        }
      }
    },
    "required": false
  },
  "responses": {
    "200": {
      "$ref": "#/components/responses/SearchResult"
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "415": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Search using URL parameters, a JSON body, or both",
  "parameters": [
    {
      "description": "Translation abbreviation; case-insensitive.",
      "in": "path",
      "name": "translation",
      "required": true,
      "schema": {
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference, URL-encoded.",
      "in": "path",
      "name": "search",
      "required": true,
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

GET /v2#

Search using URL parameters

The path wins over query parameters. Only book and exclude may repeat. Filters override configured defaults; scripture references return scripture without applying full-text filters. GET bodies are not read. At a domain root, a request without query parameters serves the public documentation page; API requests at that path use the configured API access policy.

Operation ID: searchDefault.

Parameter In Required Type Example / default Description
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Responses#

Status Description Media type Schema
200 Search result, or scripture when the text is a reference. application/json #/components/schemas/SearchResult
304 Not modified for an ETag conditional GET. See contract
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "description": "The path wins over query parameters. Only book and exclude may repeat. Filters override configured defaults; scripture references return scripture without applying full-text filters. GET bodies are not read. At a domain root, a request without query parameters serves the public documentation page; API requests at that path use the configured API access policy.",
  "operationId": "searchDefault",
  "responses": {
    "200": {
      "$ref": "#/components/responses/SearchResult"
    },
    "304": {
      "description": "Not modified for an ETag conditional GET."
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Search using URL parameters",
  "parameters": [
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

POST /v2#

Search using URL parameters, a JSON body, or both

The same search implementation as GET. Path > query parameters > JSON body > configured defaults. A body is optional when q is provided in the URL. Scripture references return scripture without applying full-text filters.

Operation ID: searchDefaultPost.

Parameter In Required Type Example / default Description
q query No string faith hope Search words or a scripture reference; ignored when the search is supplied in the path.
translation query No string kjv Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.
words query No string all
match query No string whole_word
case_sensitive query No boolean false Accepts true/false, 1/0 or yes/no (case-insensitive).
scope query No string bible
book query No array 1 Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.
books query No string John Comma-separated book names or numbers; combined with repeated book values.
diacritics query No string fold fold/exact; compatibility aliases insensitive/sensitive are also accepted.
exclude query No array darkness Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.
proximity query No integer 1 Intervening words, 0 to 100; requires words=all.
sort query No string canonical
limit query No integer 100
offset query No integer 0

Request body#

Optional.

Media type: application/json. Schema: #/components/schemas/SearchRequest.

{
  "limit": 25,
  "q": "faith hope",
  "words": "any"
}

Responses#

Status Description Media type Schema
200 Search result, or scripture when the text is a reference. application/json #/components/schemas/SearchResult
400 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
401 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
404 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
405 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
413 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
415 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
429 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
500 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
502 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
503 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
504 RFC 9457 error. Existing access policies apply to API data requests. application/problem+json #/components/schemas/Problem
Complete operation contract
{
  "description": "The same search implementation as GET. Path > query parameters > JSON body > configured defaults. A body is optional when q is provided in the URL. Scripture references return scripture without applying full-text filters.",
  "operationId": "searchDefaultPost",
  "requestBody": {
    "content": {
      "application/json": {
        "example": {
          "limit": 25,
          "q": "faith hope",
          "words": "any"
        },
        "schema": {
          "$ref": "#/components/schemas/SearchRequest"
        }
      }
    },
    "required": false
  },
  "responses": {
    "200": {
      "$ref": "#/components/responses/SearchResult"
    },
    "400": {
      "$ref": "#/components/responses/Problem"
    },
    "401": {
      "$ref": "#/components/responses/Problem"
    },
    "404": {
      "$ref": "#/components/responses/Problem"
    },
    "405": {
      "$ref": "#/components/responses/Problem"
    },
    "413": {
      "$ref": "#/components/responses/Problem"
    },
    "415": {
      "$ref": "#/components/responses/Problem"
    },
    "429": {
      "$ref": "#/components/responses/Problem"
    },
    "500": {
      "$ref": "#/components/responses/Problem"
    },
    "502": {
      "$ref": "#/components/responses/Problem"
    },
    "503": {
      "$ref": "#/components/responses/Problem"
    },
    "504": {
      "$ref": "#/components/responses/Problem"
    }
  },
  "summary": "Search using URL parameters, a JSON body, or both",
  "parameters": [
    {
      "description": "Search words or a scripture reference; ignored when the search is supplied in the path.",
      "in": "query",
      "name": "q",
      "schema": {
        "maxLength": 500,
        "minLength": 1,
        "type": "string"
      }
    },
    {
      "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
      "in": "query",
      "name": "translation",
      "schema": {
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "words",
      "schema": {
        "default": "all",
        "enum": [
          "all",
          "any",
          "phrase"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "match",
      "schema": {
        "default": "whole_word",
        "enum": [
          "whole_word",
          "substring"
        ],
        "type": "string"
      }
    },
    {
      "description": "Accepts true/false, 1/0 or yes/no (case-insensitive).",
      "in": "query",
      "name": "case_sensitive",
      "schema": {
        "default": false,
        "type": "boolean"
      }
    },
    {
      "in": "query",
      "name": "scope",
      "schema": {
        "default": "bible",
        "enum": [
          "bible",
          "old_testament",
          "new_testament",
          "deuterocanon"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat book=Genesis&book=2 to select books; combined with books. At most 83 combined selections.",
      "explode": true,
      "in": "query",
      "name": "book",
      "schema": {
        "items": {
          "type": [
            "string",
            "integer"
          ]
        },
        "maxItems": 83,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Comma-separated book names or numbers; combined with repeated book values.",
      "in": "query",
      "name": "books",
      "schema": {
        "description": "Comma-separated book names or numbers.",
        "type": "string"
      }
    },
    {
      "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
      "in": "query",
      "name": "diacritics",
      "schema": {
        "default": "fold",
        "enum": [
          "fold",
          "exact",
          "insensitive",
          "sensitive"
        ],
        "type": "string"
      }
    },
    {
      "description": "Repeat exclude=word to exclude multiple terms; at most 32 terms of 100 characters each.",
      "explode": true,
      "in": "query",
      "name": "exclude",
      "schema": {
        "items": {
          "maxLength": 100,
          "minLength": 1,
          "type": "string"
        },
        "maxItems": 32,
        "type": "array"
      },
      "style": "form"
    },
    {
      "description": "Intervening words, 0 to 100; requires words=all.",
      "in": "query",
      "name": "proximity",
      "schema": {
        "description": "Requires words=all.",
        "maximum": 100,
        "minimum": 0,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "sort",
      "schema": {
        "default": "canonical",
        "enum": [
          "canonical",
          "relevance"
        ],
        "type": "string"
      }
    },
    {
      "in": "query",
      "name": "limit",
      "schema": {
        "default": 100,
        "maximum": 100,
        "minimum": 1,
        "type": "integer"
      }
    },
    {
      "in": "query",
      "name": "offset",
      "schema": {
        "default": 0,
        "maximum": 10000,
        "minimum": 0,
        "type": "integer"
      }
    }
  ]
}

Component schemas#

Types, required properties, nested objects, constraints and examples below are copied directly from the contract. A property omitted from a schema’s required array is optional, even when examples include it.

Criteria#

View full Criteria schema
{
  "properties": {
    "books": {
      "items": {
        "type": [
          "integer",
          "string"
        ]
      },
      "type": "array"
    },
    "case_sensitive": {
      "default": false,
      "type": "boolean"
    },
    "diacritics": {
      "default": "fold",
      "enum": [
        "fold",
        "exact",
        "insensitive",
        "sensitive"
      ],
      "type": "string"
    },
    "exclude": {
      "items": {
        "maxLength": 100,
        "minLength": 1,
        "type": "string"
      },
      "maxItems": 32,
      "type": "array"
    },
    "limit": {
      "default": 100,
      "maximum": 100,
      "minimum": 1,
      "type": "integer"
    },
    "match": {
      "default": "whole_word",
      "enum": [
        "whole_word",
        "substring"
      ],
      "type": "string"
    },
    "offset": {
      "default": 0,
      "maximum": 10000,
      "minimum": 0,
      "type": "integer"
    },
    "proximity": {
      "maximum": 100,
      "minimum": 0,
      "type": [
        "integer",
        "null"
      ]
    },
    "scope": {
      "default": "bible",
      "enum": [
        "bible",
        "old_testament",
        "new_testament",
        "deuterocanon"
      ],
      "type": "string"
    },
    "sort": {
      "default": "canonical",
      "enum": [
        "canonical",
        "relevance"
      ],
      "type": "string"
    },
    "words": {
      "default": "all",
      "enum": [
        "all",
        "any",
        "phrase"
      ],
      "type": "string"
    }
  },
  "required": [
    "words",
    "match",
    "case_sensitive",
    "scope",
    "books",
    "diacritics",
    "exclude",
    "proximity",
    "sort",
    "limit",
    "offset"
  ],
  "type": "object"
}

Health#

View full Health schema
{
  "properties": {
    "status": {
      "enum": [
        "ok",
        "ready"
      ],
      "type": "string"
    }
  },
  "required": [
    "status"
  ],
  "type": "object"
}

Problem#

RFC 9457 problem document.

View full Problem schema
{
  "description": "RFC 9457 problem document.",
  "properties": {
    "code": {
      "type": "string"
    },
    "detail": {
      "type": "string"
    },
    "instance": {
      "type": "string"
    },
    "retry_after": {
      "minimum": 0,
      "type": "integer"
    },
    "status": {
      "type": "integer"
    },
    "title": {
      "type": "string"
    },
    "type": {
      "format": "uri",
      "type": "string"
    }
  },
  "required": [
    "type",
    "title",
    "status",
    "code",
    "detail",
    "instance"
  ],
  "type": "object"
}

Scripture#

One entry per chapter, keyed {translation}{book}{chapter}, with compact API translation metadata and selected verses. Verse source fields are retained; static chapter editorial is excluded.

View full Scripture schema
{
  "additionalProperties": {
    "properties": {
      "abbreviation": {
        "type": "string"
      },
      "book_name": {
        "type": "string"
      },
      "book_nr": {
        "type": "integer"
      },
      "chapter": {
        "type": "integer"
      },
      "direction": {
        "type": "string"
      },
      "encoding": {
        "type": "string"
      },
      "lang": {
        "type": "string"
      },
      "language": {
        "type": "string"
      },
      "name": {
        "type": "string"
      },
      "ref": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "translation": {
        "type": "string"
      },
      "verses": {
        "items": {
          "$ref": "#/components/schemas/Verse"
        },
        "type": "array"
      }
    },
    "required": [
      "book_nr",
      "chapter",
      "verses"
    ],
    "type": "object"
  },
  "description": "One entry per chapter, keyed {translation}_{book}_{chapter}, with compact API translation metadata and selected verses. Verse source fields are retained; static chapter editorial is excluded.",
  "type": "object"
}

SearchMatch#

Reference results omit score, occurrences and terms.

View full SearchMatch schema
{
  "description": "Reference results omit score, occurrences and terms.",
  "properties": {
    "book_nr": {
      "type": "integer"
    },
    "chapter": {
      "type": "integer"
    },
    "occurrences": {
      "minimum": 0,
      "type": "integer"
    },
    "reference": {
      "type": "string"
    },
    "score": {
      "type": "number"
    },
    "terms": {
      "items": {
        "type": "string"
      },
      "type": "array"
    },
    "verse": {
      "type": "integer"
    }
  },
  "required": [
    "reference",
    "book_nr",
    "chapter",
    "verse"
  ],
  "type": "object"
}

SearchQuery#

Reference results omit criteria, sha, pagination, cache, analysis and cost. Filters are only applied to full-text searches.

View full SearchQuery schema
{
  "description": "Reference results omit criteria, sha, pagination, cache, analysis and cost. Filters are only applied to full-text searches.",
  "properties": {
    "analysis": {
      "properties": {
        "script": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "cache": {
      "properties": {
        "checked_at": {
          "type": [
            "number",
            "null"
          ]
        },
        "stale": {
          "type": "boolean"
        }
      },
      "type": "object"
    },
    "cost": {
      "properties": {
        "deadline_seconds": {
          "type": "number"
        },
        "expensive": {
          "type": "boolean"
        },
        "work_units": {
          "minimum": 0,
          "type": "integer"
        }
      },
      "type": "object"
    },
    "criteria": {
      "$ref": "#/components/schemas/Criteria"
    },
    "engine_version": {
      "type": "integer"
    },
    "has_more": {
      "type": "boolean"
    },
    "kind": {
      "enum": [
        "search",
        "reference"
      ],
      "type": "string"
    },
    "limit": {
      "minimum": 1,
      "type": "integer"
    },
    "offset": {
      "minimum": 0,
      "type": "integer"
    },
    "returned": {
      "minimum": 0,
      "type": "integer"
    },
    "sha": {
      "type": [
        "string",
        "null"
      ]
    },
    "text": {
      "type": "string"
    },
    "total": {
      "minimum": 0,
      "type": "integer"
    },
    "translation": {
      "anyOf": [
        {
          "$ref": "#/components/schemas/Translation"
        },
        {
          "type": "string"
        }
      ]
    }
  },
  "required": [
    "text",
    "kind",
    "translation",
    "engine_version",
    "total",
    "returned"
  ],
  "type": "object"
}

SearchRequest#

All fields are optional when supplied in the path/query. GET uses query parameters. POST accepts query parameters, a JSON object, or both. Path > query > body > configured defaults; null body fields preserve a lower-priority value. book and books are combined.

View full SearchRequest schema
{
  "additionalProperties": false,
  "description": "All fields are optional when supplied in the path/query. GET uses query parameters. POST accepts query parameters, a JSON object, or both. Path > query > body > configured defaults; null body fields preserve a lower-priority value. book and books are combined.",
  "properties": {
    "book": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": [
                "string",
                "integer"
              ]
            },
            {
              "items": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "maxItems": 83,
              "type": "array"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "books": {
      "anyOf": [
        {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "type": [
                  "string",
                  "integer"
                ]
              },
              "maxItems": 83,
              "type": "array"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "case_sensitive": {
      "anyOf": [
        {
          "default": false,
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "diacritics": {
      "anyOf": [
        {
          "default": "fold",
          "enum": [
            "fold",
            "exact",
            "insensitive",
            "sensitive"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "exclude": {
      "anyOf": [
        {
          "anyOf": [
            {
              "maxLength": 100,
              "minLength": 1,
              "type": "string"
            },
            {
              "items": {
                "maxLength": 100,
                "minLength": 1,
                "type": "string"
              },
              "maxItems": 32,
              "type": "array"
            }
          ]
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "limit": {
      "anyOf": [
        {
          "default": 100,
          "maximum": 100,
          "minimum": 1,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "match": {
      "anyOf": [
        {
          "default": "whole_word",
          "enum": [
            "whole_word",
            "substring"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "offset": {
      "anyOf": [
        {
          "default": 0,
          "maximum": 10000,
          "minimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "proximity": {
      "anyOf": [
        {
          "description": "Requires words=all.",
          "maximum": 100,
          "minimum": 0,
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "q": {
      "anyOf": [
        {
          "maxLength": 500,
          "minLength": 1,
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "scope": {
      "anyOf": [
        {
          "default": "bible",
          "enum": [
            "bible",
            "old_testament",
            "new_testament",
            "deuterocanon"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "sort": {
      "anyOf": [
        {
          "default": "canonical",
          "enum": [
            "canonical",
            "relevance"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "translation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    },
    "words": {
      "anyOf": [
        {
          "default": "all",
          "enum": [
            "all",
            "any",
            "phrase"
          ],
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "description": "Null leaves the lower-priority value unchanged."
    }
  },
  "type": "object"
}

SearchResult#

View full SearchResult schema
{
  "properties": {
    "matches": {
      "items": {
        "$ref": "#/components/schemas/SearchMatch"
      },
      "type": "array"
    },
    "query": {
      "$ref": "#/components/schemas/SearchQuery"
    },
    "results": {
      "$ref": "#/components/schemas/Scripture"
    }
  },
  "required": [
    "query",
    "results",
    "matches"
  ],
  "type": "object"
}

Translation#

View full Translation schema
{
  "properties": {
    "abbreviation": {
      "type": "string"
    },
    "direction": {
      "type": "string"
    },
    "encoding": {
      "type": "string"
    },
    "lang": {
      "type": "string"
    },
    "language": {
      "type": "string"
    },
    "translation": {
      "type": "string"
    }
  },
  "type": "object"
}

Verse#

A source verse from the selected v2 data. Core fields are shared by v2 and v3. Optional v3 paragraph, tokens and spans are retained when present, as are other source fields and nested values.

View full Verse schema
{
  "additionalProperties": true,
  "description": "A source verse from the selected v2 data. Core fields are shared by v2 and v3. Optional v3 paragraph, tokens and spans are retained when present, as are other source fields and nested values.",
  "properties": {
    "chapter": {
      "type": "integer"
    },
    "name": {
      "type": "string"
    },
    "paragraph": {
      "description": "V3: true when this verse begins a paragraph; omitted when absent from the source.",
      "type": "boolean"
    },
    "spans": {
      "description": "V3 annotations over token and word ranges, when supplied by the source.",
      "items": {
        "$ref": "#/components/schemas/VerseSpan"
      },
      "type": "array"
    },
    "text": {
      "type": "string"
    },
    "tokens": {
      "description": "V3 word tokens in reading order, when supplied by the source.",
      "items": {
        "$ref": "#/components/schemas/VerseToken"
      },
      "type": "array"
    },
    "verse": {
      "type": "integer"
    }
  },
  "required": [
    "verse",
    "name",
    "text"
  ],
  "type": "object"
}

VerseSpan#

V3 source annotation. Token positions index the verse tokens array from zero, inclusive. Word positions count display words from one, inclusive; zero means unlocated.

View full VerseSpan schema
{
  "additionalProperties": true,
  "description": "V3 source annotation. Token positions index the verse tokens array from zero, inclusive. Word positions count display words from one, inclusive; zero means unlocated.",
  "properties": {
    "attrs": {
      "additionalProperties": {
        "type": "string"
      },
      "type": "object"
    },
    "span": {
      "type": "string"
    },
    "tag": {
      "type": "string"
    },
    "token_end": {
      "minimum": 0,
      "type": "integer"
    },
    "token_start": {
      "minimum": 0,
      "type": "integer"
    },
    "word_end": {
      "minimum": 0,
      "type": "integer"
    },
    "word_start": {
      "minimum": 0,
      "type": "integer"
    }
  },
  "required": [
    "tag",
    "span",
    "token_start",
    "token_end",
    "word_start",
    "word_end"
  ],
  "type": "object"
}

VerseToken#

V3 word token. Word positions count whitespace-separated display words from one, inclusive; zero means unlocated. Additional source attributes are retained.

View full VerseToken schema
{
  "additionalProperties": true,
  "description": "V3 word token. Word positions count whitespace-separated display words from one, inclusive; zero means unlocated. Additional source attributes are retained.",
  "properties": {
    "gloss": {
      "type": "string"
    },
    "lemma": {
      "additionalProperties": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "description": "Lexical identifiers grouped by scheme, such as strong.",
      "type": "object"
    },
    "morph": {
      "additionalProperties": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "description": "Morphology codes grouped by scheme.",
      "type": "object"
    },
    "morphSegmented": {
      "type": "boolean"
    },
    "n": {
      "type": "string"
    },
    "src": {
      "items": {
        "type": [
          "integer",
          "string"
        ]
      },
      "type": "array"
    },
    "subType": {
      "type": "string"
    },
    "token": {
      "type": "string"
    },
    "type": {
      "type": "string"
    },
    "variant": {
      "type": "boolean"
    },
    "variantType": {
      "type": "string"
    },
    "word_end": {
      "minimum": 0,
      "type": "integer"
    },
    "word_start": {
      "minimum": 0,
      "type": "integer"
    },
    "xlit": {
      "additionalProperties": {
        "items": {
          "type": "string"
        },
        "type": "array"
      },
      "description": "Transliterations grouped by scheme.",
      "type": "object"
    }
  },
  "required": [
    "token",
    "word_start",
    "word_end"
  ],
  "type": "object"
}

Authentication contract#

{
  "security": [],
  "securitySchemes": {
    "bearer": {
      "description": "Required for API data only on token-only domains. Valid tokens retain unrestricted rate access.",
      "scheme": "bearer",
      "type": "http"
    }
  }
}

See access and tokens for public usage and token requests.

Search the documentation

Type to search APIs, projects and guides.

Press Escape to close · Ctrl / ⌘ K to search