{
  "info": {
    "contact": {"name":"getBible","url":"https://getbible.net"},
    "description": "Full-text scripture search through GET URL parameters or POST URL parameters and/or JSON. Both methods use the same implementation and filters. Precedence: path, query, body, configured defaults. All filters are optional. Documentation, OpenAPI, health and readiness are public without a token. The deployment search probe is socket-only.",
    "title": "getBible search endpoint",
    "version": "v2"
  },
  "openapi": "3.1.0",
  "servers": [{"url":"https://search.getbible.net"}],
  "paths": {
    "/healthz": {
      "get": {
        "operationId": "health",
        "responses": {"200":{"content":{"application/json":{"example":{"status":"ok"},"schema":{"$ref":"#/components/schemas/Health"}}},"description":"Service is online"}},
        "security": [],
        "summary": "Liveness"
      }
    },
    "/readyz": {
      "get": {
        "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"
      }
    },
    "/{segment}": {
      "get": {
        "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"}},
        {"$ref":"#/components/parameters/q"},
        {"$ref":"#/components/parameters/translation"},
        {"$ref":"#/components/parameters/words"},
        {"$ref":"#/components/parameters/match"},
        {"$ref":"#/components/parameters/case_sensitive"},
        {"$ref":"#/components/parameters/scope"},
        {"$ref":"#/components/parameters/book"},
        {"$ref":"#/components/parameters/books"},
        {"$ref":"#/components/parameters/diacritics"},
        {"$ref":"#/components/parameters/exclude"},
        {"$ref":"#/components/parameters/proximity"},
        {"$ref":"#/components/parameters/sort"},
        {"$ref":"#/components/parameters/limit"},
        {"$ref":"#/components/parameters/offset"}
      ],
      "post": {
        "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"
      }
    },
    "/{translation}/{search}": {
      "get": {
        "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"}
        },
        {"$ref":"#/components/parameters/q"},
        {"$ref":"#/components/parameters/translation"},
        {"$ref":"#/components/parameters/words"},
        {"$ref":"#/components/parameters/match"},
        {"$ref":"#/components/parameters/case_sensitive"},
        {"$ref":"#/components/parameters/scope"},
        {"$ref":"#/components/parameters/book"},
        {"$ref":"#/components/parameters/books"},
        {"$ref":"#/components/parameters/diacritics"},
        {"$ref":"#/components/parameters/exclude"},
        {"$ref":"#/components/parameters/proximity"},
        {"$ref":"#/components/parameters/sort"},
        {"$ref":"#/components/parameters/limit"},
        {"$ref":"#/components/parameters/offset"}
      ],
      "post": {
        "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"
      }
    },
    "/v2/openapi.json": {
      "get": {
        "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"
      }
    },
    "/v2/{translation}": {
      "get": {
        "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"}},
        {"$ref":"#/components/parameters/q"},
        {"$ref":"#/components/parameters/translation"},
        {"$ref":"#/components/parameters/words"},
        {"$ref":"#/components/parameters/match"},
        {"$ref":"#/components/parameters/case_sensitive"},
        {"$ref":"#/components/parameters/scope"},
        {"$ref":"#/components/parameters/book"},
        {"$ref":"#/components/parameters/books"},
        {"$ref":"#/components/parameters/diacritics"},
        {"$ref":"#/components/parameters/exclude"},
        {"$ref":"#/components/parameters/proximity"},
        {"$ref":"#/components/parameters/sort"},
        {"$ref":"#/components/parameters/limit"},
        {"$ref":"#/components/parameters/offset"}
      ],
      "post": {
        "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"
      }
    },
    "/v2/{translation}/{search}": {
      "get": {
        "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"}
        },
        {"$ref":"#/components/parameters/q"},
        {"$ref":"#/components/parameters/translation"},
        {"$ref":"#/components/parameters/words"},
        {"$ref":"#/components/parameters/match"},
        {"$ref":"#/components/parameters/case_sensitive"},
        {"$ref":"#/components/parameters/scope"},
        {"$ref":"#/components/parameters/book"},
        {"$ref":"#/components/parameters/books"},
        {"$ref":"#/components/parameters/diacritics"},
        {"$ref":"#/components/parameters/exclude"},
        {"$ref":"#/components/parameters/proximity"},
        {"$ref":"#/components/parameters/sort"},
        {"$ref":"#/components/parameters/limit"},
        {"$ref":"#/components/parameters/offset"}
      ],
      "post": {
        "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"
      }
    },
    "/v2": {
      "get": {
        "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": [
        {"$ref":"#/components/parameters/q"},
        {"$ref":"#/components/parameters/translation"},
        {"$ref":"#/components/parameters/words"},
        {"$ref":"#/components/parameters/match"},
        {"$ref":"#/components/parameters/case_sensitive"},
        {"$ref":"#/components/parameters/scope"},
        {"$ref":"#/components/parameters/book"},
        {"$ref":"#/components/parameters/books"},
        {"$ref":"#/components/parameters/diacritics"},
        {"$ref":"#/components/parameters/exclude"},
        {"$ref":"#/components/parameters/proximity"},
        {"$ref":"#/components/parameters/sort"},
        {"$ref":"#/components/parameters/limit"},
        {"$ref":"#/components/parameters/offset"}
      ],
      "post": {
        "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"
      }
    }
  },
  "components": {
    "parameters": {
      "book": {
        "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"
      },
      "books": {
        "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"}
      },
      "case_sensitive": {"description":"Accepts true/false, 1/0 or yes/no (case-insensitive).","in":"query","name":"case_sensitive","schema":{"default":false,"type":"boolean"}},
      "diacritics": {
        "description": "fold/exact; compatibility aliases insensitive/sensitive are also accepted.",
        "in": "query",
        "name": "diacritics",
        "schema": {"default":"fold","enum":["fold","exact","insensitive","sensitive"],"type":"string"}
      },
      "exclude": {
        "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"
      },
      "limit": {"in":"query","name":"limit","schema":{"default":100,"maximum":100,"minimum":1,"type":"integer"}},
      "match": {"in":"query","name":"match","schema":{"default":"whole_word","enum":["whole_word","substring"],"type":"string"}},
      "offset": {"in":"query","name":"offset","schema":{"default":0,"maximum":10000,"minimum":0,"type":"integer"}},
      "proximity": {
        "description": "Intervening words, 0 to 100; requires words=all.",
        "in": "query",
        "name": "proximity",
        "schema": {"description":"Requires words=all.","maximum":100,"minimum":0,"type":"integer"}
      },
      "q": {
        "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"}
      },
      "scope": {"in":"query","name":"scope","schema":{"default":"bible","enum":["bible","old_testament","new_testament","deuterocanon"],"type":"string"}},
      "sort": {"in":"query","name":"sort","schema":{"default":"canonical","enum":["canonical","relevance"],"type":"string"}},
      "translation": {
        "description": "Translation abbreviation (case-insensitive); defaults to kjv and is overridden by a path translation.",
        "in": "query",
        "name": "translation",
        "schema": {"type":"string"}
      },
      "words": {"in":"query","name":"words","schema":{"default":"all","enum":["all","any","phrase"],"type":"string"}}
    },
    "responses": {
      "Problem": {
        "content": {"application/problem+json":{"schema":{"$ref":"#/components/schemas/Problem"}}},
        "description": "RFC 9457 error. Existing access policies apply to API data requests.",
        "headers": {"Retry-After":{"description":"Seconds before retrying, when supplied for a temporary error.","schema":{"minimum":0,"type":"integer"}}}
      },
      "SearchResult": {
        "content": {"application/json":{"schema":{"$ref":"#/components/schemas/SearchResult"}}},
        "description": "Search result, or scripture when the text is a reference.",
        "headers": {"Cache-Control":{"schema":{"type":"string"}},"ETag":{"schema":{"type":"string"}},"X-Request-ID":{"schema":{"type":"string"}}}
      }
    },
    "schemas": {
      "Criteria": {
        "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": {"properties":{"status":{"enum":["ok","ready"],"type":"string"}},"required":["status"],"type":"object"},
      "Problem": {
        "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": {
        "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}; source metadata is retained.",
        "type": "object"
      },
      "SearchMatch": {
        "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": {
        "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": {
        "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": {
        "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": {
        "properties": {
          "abbreviation": {"type":"string"},
          "direction": {"type":"string"},
          "encoding": {"type":"string"},
          "lang": {"type":"string"},
          "language": {"type":"string"},
          "translation": {"type":"string"}
        },
        "type": "object"
      },
      "Verse": {
        "properties": {"chapter":{"type":"integer"},"name":{"type":"string"},"text":{"type":"string"},"verse":{"type":"integer"}},
        "required": ["verse","name","text"],
        "type": "object"
      }
    },
    "securitySchemes": {"bearer":{"description":"Required for API data only on token-only domains. Valid tokens retain unrestricted rate access.","scheme":"bearer","type":"http"}}
  }
}
