{"openapi":"3.1.0","info":{"title":"GetBible Dictionaries v1","version":"1","summary":"The GetBible dictionaries as static JSON: every path is a file, every document is plain text.","description":"Static JSON documents converted from CrossWire SWORD dictionary and lexicon modules\nby the GetBible study builder.\n\n**Finding a dictionary.** `dictionaries.json` lists every dictionary with its id,\nlanguage, licence, counts, its Strong's prefix when it is a Strong's lexicon, and the\nbyte size of its whole-dictionary document, and gives the path template of every\nother document relative to `v1/`. The id is the first path segment of all of that\ndictionary's documents.\n\n**Finding a word.** `index.json` lists every word once, sorted by `search`, the\naccent-insensitive lowercase form of the key, so one fetch is enough to search,\nprefix-match or binary-search a dictionary in memory. Each record's `id` is the\ndocument name of the word itself, `{id}.json`, so a hit resolves with one further\nrequest and no other lookup. Strong's lexicons use the Bible API's own tokens as ids:\n`G3056` for Greek, `H0430` for Hebrew (`H0` plus the unpadded number). Other keys\nreceive deterministic path-safe ids.\n\n**Repeated keys.** A dictionary may define the same key more than once. The first\ndefinition keeps the plain id and later ones carry `--2`, `--3` and so on; every\ndefinition is in the index, and `occurrence` states its position among the\ndefinitions of that key.\n\n**Links.** `see_also` lists the words an entry points at and `backlinks` the words\nthat point back, each as an id and key in the same dictionary, so a client navigates\nin either direction without building an index. The whole-dictionary document holds\nevery entry in index order, byte-for-byte as served alone, for clients that would\notherwise request each word.\n\nEvery path below is a file in a static tree; there is no query string, no content\nnegotiation and no request-time logic, and every document is plain-text JSON that\ncarries no HTML.\n\n**Where the paths start.** Paths are given from the server root with `v1` as the\nfirst segment, which is how the tree is laid out on disk. No host is assumed. A tree\nmounted under a prefix is described by adding a `servers` entry with that prefix.\n\n**Integrity.** `hashes.json` holds the SHA-256 of every other document in the tree,\nthis one included, and is therefore the complete list of paths the tree contains.\n`build.json` records which builder and extractor produced the tree, when, and which\nBible API its scripture references were resolved against. `schema/` holds the JSON\nSchema of every document type; the same schemas are embedded under `components` here.\nA document is byte-stable between builds while its module is unchanged; only the\ncatalog, `build.json` and `build-report.json` carry the build time.\n\n**Build health.** `build-report.json` records the compilation outcome: `success`\nmeans every approved module built, and `partial` means the report lists failures\nalongside successful modules. `retained` identifies modules kept from a previous\nverified tree because their rebuild failed. A failed new module has no placeholder\nentry. The report is captured before publication; the workflow artifact additionally\nrecords later repository or publication errors. Check this report when deciding\nwhether the tree contains a newly built or retained copy of a module.\n\n**Scripture references.** `references` on an entry are the passages it cites,\nresolved to GetBible coordinates: `book`, `chapter` and `verse`, with `verses` when\nmore than one verse is covered and no `verse` at all for a whole chapter. `osis` is\nthe OSIS identifier of the first verse. `ref` is the citation written canonically, in\nthe book names of the module's language, in the form the GetBible Query API accepts.\n`text` is the citation exactly as the entry's own text spells it, present whenever the\ncitation was located there, so a client can link it in place.\n"},"tags":[{"name":"tree","description":"Documents that describe the whole tree."},{"name":"dictionary","description":"The documents of one dictionary."}],"paths":{"/v1/dictionaries.json":{"get":{"tags":["tree"],"summary":"The catalog of every dictionary in the tree","description":"Every dictionary this tree holds, with its counts and sizes, and the path template of each of its documents relative to v1/.","operationId":"listDictionaries","responses":{"200":{"description":"The catalog of every dictionary in the tree","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dictionary-catalog"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/build.json":{"get":{"tags":["tree"],"summary":"How and when the tree was built","description":"The builder and extractor versions, the build time, the module catalog the modules were selected from and the Bible API the references were resolved against.","operationId":"getBuild","responses":{"200":{"description":"How and when the tree was built","content":{"application/json":{"schema":{"$ref":"#/components/schemas/build"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/build-report.json":{"get":{"tags":["tree"],"summary":"The compilation outcome and module failures","description":"The build status, successfully rebuilt modules, failures with their stage and reason, and previously verified modules retained after a failed rebuild. This snapshot describes compilation; the workflow report also records later publication errors.","operationId":"getBuildReport","responses":{"200":{"description":"The compilation outcome and module failures","content":{"application/json":{"schema":{"$ref":"#/components/schemas/build-report"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/hashes.json":{"get":{"tags":["tree"],"summary":"The SHA-256 of every other document","description":"The integrity manifest of the tree: a digest for every other document, which is also the complete list of the paths the tree contains.","operationId":"getHashes","responses":{"200":{"description":"The SHA-256 of every other document","content":{"application/json":{"schema":{"$ref":"#/components/schemas/hashes"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/openapi.json":{"get":{"tags":["tree"],"summary":"This description","description":"The OpenAPI description of the tree, generated with it.","operationId":"getOpenApi","responses":{"200":{"description":"This description","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/schema/{document}.json":{"get":{"tags":["tree"],"summary":"The JSON Schema of one document type","description":"The schemas embedded under components, served beside the data.","operationId":"getSchema","parameters":[{"name":"document","in":"path","required":true,"description":"The document type.","schema":{"type":"string","enum":["dictionary-catalog","dictionary-metadata","dictionary-index","dictionary-entry","dictionary","build","build-report","hashes"]}}],"responses":{"200":{"description":"The JSON Schema of one document type","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/{dictionary}/metadata.json":{"get":{"tags":["dictionary"],"summary":"One dictionary's provenance, licence, counts and sizes","description":"Where the module came from, under which licence, how many words it holds, how large its whole-dictionary document is, and which Bible its references were resolved against.","operationId":"getDictionaryMetadata","parameters":[{"name":"dictionary","in":"path","required":true,"description":"The dictionary's id, as dictionaries.json lists it.","schema":{"type":"string","minLength":1,"enum":["abbottsmith","abbottsmithstrongs","amtract","bdbglosses_strongs","cawdrey","cbc","daily","dodson","easton","eusebian_num","hitchcock","isbe","klven_iklingon","klviklingon_en","nave","oshm","saoa","sme","smith","strongsgreek","strongshebrew","swe1917of","tcr","torrey","viestrongsgreek","webster1806","webster1913"]}}],"responses":{"200":{"description":"One dictionary's provenance, licence, counts and sizes","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dictionary-metadata"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/{dictionary}/index.json":{"get":{"tags":["dictionary"],"summary":"Every word of one dictionary","description":"Every word once, sorted by its accent-insensitive lowercase search term, with the id of the document that holds it.","operationId":"getDictionaryIndex","parameters":[{"name":"dictionary","in":"path","required":true,"description":"The dictionary's id, as dictionaries.json lists it.","schema":{"type":"string","minLength":1,"enum":["abbottsmith","abbottsmithstrongs","amtract","bdbglosses_strongs","cawdrey","cbc","daily","dodson","easton","eusebian_num","hitchcock","isbe","klven_iklingon","klviklingon_en","nave","oshm","saoa","sme","smith","strongsgreek","strongshebrew","swe1917of","tcr","torrey","viestrongsgreek","webster1806","webster1913"]}}],"responses":{"200":{"description":"Every word of one dictionary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dictionary-index"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/{dictionary}/{entry}.json":{"get":{"tags":["dictionary"],"summary":"One word of one dictionary","description":"The definition, the words it links to and from, and the scripture it cites.","operationId":"getDictionaryEntry","parameters":[{"name":"dictionary","in":"path","required":true,"description":"The dictionary's id, as dictionaries.json lists it.","schema":{"type":"string","minLength":1,"enum":["abbottsmith","abbottsmithstrongs","amtract","bdbglosses_strongs","cawdrey","cbc","daily","dodson","easton","eusebian_num","hitchcock","isbe","klven_iklingon","klviklingon_en","nave","oshm","saoa","sme","smith","strongsgreek","strongshebrew","swe1917of","tcr","torrey","viestrongsgreek","webster1806","webster1913"]}},{"name":"entry","in":"path","required":true,"description":"The word's id as index.json lists it: a Strong's token such as G3056 or H0430 in a Strong's lexicon, otherwise a deterministic path-safe id, with --2, --3 and so on for later definitions of a repeated key.","schema":{"type":"string","minLength":1}}],"responses":{"200":{"description":"One word of one dictionary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dictionary-entry"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}},"/v1/{dictionary}.json":{"get":{"tags":["dictionary"],"summary":"The whole dictionary","description":"Every entry document in index order, each byte-for-byte the document served at its own path. A bulk document: metadata.json states its size.","operationId":"getDictionary","parameters":[{"name":"dictionary","in":"path","required":true,"description":"The dictionary's id, as dictionaries.json lists it.","schema":{"type":"string","minLength":1,"enum":["abbottsmith","abbottsmithstrongs","amtract","bdbglosses_strongs","cawdrey","cbc","daily","dodson","easton","eusebian_num","hitchcock","isbe","klven_iklingon","klviklingon_en","nave","oshm","saoa","sme","smith","strongsgreek","strongshebrew","swe1917of","tcr","torrey","viestrongsgreek","webster1806","webster1913"]}}],"responses":{"200":{"description":"The whole dictionary","content":{"application/json":{"schema":{"$ref":"#/components/schemas/dictionary"}}}},"404":{"description":"No such document. The tree is static: a path that hashes.json does not list does not exist."}}}}},"components":{"schemas":{"dictionary-catalog":{"title":"GetBible Dictionary Catalog v1","description":"Every dictionary in one v1 tree, with the path template of each of its documents relative to the tree root. The catalog and build.json are the only documents that carry the build time.","type":"object","required":["schema","version","generated_at","base_url","metadata_url_template","index_url_template","dictionary_url_template","entry_url_template","module_count","dictionaries"],"properties":{"schema":{"const":"getbible-dictionaries-catalog-v1"},"version":{"const":1},"generated_at":{"type":"string","format":"date-time"},"base_url":{"type":"string","minLength":1},"metadata_url_template":{"const":"{dictionary}/metadata.json"},"index_url_template":{"const":"{dictionary}/index.json"},"dictionary_url_template":{"const":"{dictionary}.json"},"entry_url_template":{"const":"{dictionary}/{entry}.json"},"module_count":{"type":"integer","minimum":0},"dictionaries":{"type":"array","items":{"type":"object","description":"One dictionary: its id is the first path segment of all of its documents, strong_prefix is G or H for a Strong's lexicon and null otherwise, and bytes is the size of its whole-dictionary document.","required":["id","name","language","license","entry_count","unique_key_count","strong_prefix","bytes"],"properties":{"id":{"type":"string","minLength":1},"name":{"type":"string","minLength":1},"language":{"type":"string","minLength":2},"license":{"type":"string"},"entry_count":{"type":"integer","minimum":0},"unique_key_count":{"type":"integer","minimum":0},"strong_prefix":{"type":["string","null"],"enum":["G","H",null]},"bytes":{"type":"integer","minimum":0}},"additionalProperties":false}}},"additionalProperties":false},"dictionary-metadata":{"title":"GetBible Dictionary Metadata v1","description":"One dictionary's provenance, licence, counts and sizes. bytes is the size of the whole-dictionary document.","type":"object","required":["schema","id","module","name","language","version","license","driver","source_type","entry_count","unique_key_count","strong_prefix","bytes","index_url","entry_url_template","source","source_module_url","text_source","copyright","copyright_holder","copyright_contact","distribution_notes","about","conversion_note","references"],"properties":{"schema":{"const":"getbible-dictionary-metadata-v1"},"id":{"type":"string","minLength":1},"module":{"type":"string","minLength":1,"description":"The source module's own name."},"name":{"type":"string","minLength":1},"language":{"type":"string","minLength":2},"version":{"type":"string"},"license":{"type":"string"},"driver":{"type":"string"},"source_type":{"type":"string"},"entry_count":{"type":"integer","minimum":0},"unique_key_count":{"type":"integer","minimum":0},"strong_prefix":{"type":["string","null"],"enum":["G","H",null]},"bytes":{"type":"integer","minimum":0},"index_url":{"const":"index.json"},"entry_url_template":{"const":"{entry}.json"},"source":{"const":"CrossWire SWORD"},"source_module_url":{"type":"string","minLength":1,"description":"The module's own page at its source."},"text_source":{"type":"string"},"copyright":{"type":"string"},"copyright_holder":{"type":"string"},"copyright_contact":{"type":"object","required":["name","email","address"],"properties":{"name":{"type":"string"},"email":{"type":"string"},"address":{"type":"string"}},"additionalProperties":false},"distribution_notes":{"type":"string"},"about":{"type":"string"},"conversion_note":{"type":"string","minLength":1},"references":{"type":"object","description":"Which Bible the module's scripture references were resolved against: the API, the versification, the translations whose shape decided which chapters and verses exist, the translation whose book names ref uses, and the librarian and alias tables that resolved the spellings.","required":["api","versification","translations","names","language","librarian","aliases"],"properties":{"api":{"const":"getbible-v2"},"versification":{"type":"string"},"translations":{"type":"array","items":{"type":"string","minLength":1}},"names":{"type":["string","null"]},"language":{"type":"string"},"librarian":{"type":"array","items":{"type":"string","minLength":1}},"aliases":{"type":"array","items":{"type":"string","minLength":1}}},"additionalProperties":false}},"additionalProperties":false},"dictionary-index":{"title":"GetBible Dictionary Index v1","description":"Every word in one dictionary, sorted by the accent-insensitive lowercase search term. One fetch is enough to search a dictionary in any direction; the word itself is then at entry_url_template with the record's id.","type":"object","required":["schema","dictionary","language","name","entry_url_template","entry_count","unique_key_count","entries"],"properties":{"schema":{"const":"getbible-dictionary-index-v1"},"dictionary":{"type":"string","minLength":1},"language":{"type":"string","minLength":2},"name":{"type":"string","minLength":1},"entry_url_template":{"const":"{entry}.json"},"entry_count":{"type":"integer","minimum":0},"unique_key_count":{"type":"integer","minimum":0},"entries":{"type":"array","items":{"type":"object","required":["id","key","search"],"properties":{"id":{"type":"string","minLength":1},"key":{"type":"string","minLength":1},"search":{"type":"string","minLength":1},"aliases":{"type":"array","items":{"type":"string"},"minItems":1},"occurrence":{"type":"integer","minimum":2}},"additionalProperties":false}}},"additionalProperties":false},"dictionary-entry":{"title":"GetBible Dictionary Entry v1","description":"One word of one dictionary. see_also lists the words this entry points at; backlinks lists the words that point back.","type":"object","required":["schema","dictionary","language","id","key","occurrence","aliases","text"],"properties":{"schema":{"const":"getbible-dictionary-entry-v1"},"dictionary":{"type":"string","minLength":1},"language":{"type":"string","minLength":2},"id":{"type":"string","minLength":1},"key":{"type":"string","minLength":1},"occurrence":{"type":"integer","minimum":1},"aliases":{"type":"array","items":{"type":"string"},"minItems":1},"text":{"type":"string"},"see_also":{"$ref":"#/components/schemas/dictionary-entry/$defs/links"},"backlinks":{"$ref":"#/components/schemas/dictionary-entry/$defs/links"},"references":{"type":"array","items":{"type":"object","description":"One scripture reference, resolved against the GetBible Bible API. book, chapter, and verse are Bible API coordinates; verses lists every verse covered when there is more than one, and an item without verse covers the whole chapter. ref is the same reference written canonically, in the book name the module's language uses, in the form the Query API accepts. text is present when the citation was located in the entry text: the citation exactly as the text spells it.","required":["ref","osis","book","chapter"],"properties":{"text":{"type":"string","minLength":1},"ref":{"type":"string","minLength":1},"osis":{"type":"string","minLength":1},"book":{"type":"integer","minimum":1,"maximum":83},"chapter":{"type":"integer","minimum":0},"verse":{"type":"integer","minimum":0},"verses":{"type":"array","description":"Every verse this reference covers, including verse. Absent when it covers only verse.","items":{"type":"integer","minimum":0},"minItems":2,"uniqueItems":true}},"additionalProperties":false}}},"additionalProperties":false,"$defs":{"links":{"type":"array","items":{"type":"object","required":["id","key"],"properties":{"id":{"type":"string","minLength":1},"key":{"type":"string","minLength":1}},"additionalProperties":false}}}},"dictionary":{"title":"GetBible Dictionary v1","description":"One complete dictionary in index order. Each member of entries is byte-for-byte the document served at {dictionary}/{entry}.json. This is a bulk document for offline clients; metadata.json publishes its size in bytes.","type":"object","required":["schema","dictionary","language","name","entries"],"properties":{"schema":{"const":"getbible-dictionary-v1"},"dictionary":{"type":"string","minLength":1},"language":{"type":"string","minLength":2},"name":{"type":"string","minLength":1},"entries":{"type":"array","items":{"$ref":"#/components/schemas/dictionary-entry"}}},"additionalProperties":false},"build":{"title":"GetBible Build v1","description":"How and when one v1 tree was built: the builder and extractor, the catalog the modules were selected from and the Bible API the references were resolved against.","type":"object","required":["schema","builder","builder_version","extractor","extractor_version","extractor_contract","api_version","resource","generated_at","catalog_url","bible_api","module_count"],"properties":{"schema":{"const":"getbible-build-v1"},"builder":{"const":"v1_study_builder"},"builder_version":{"type":"string","minLength":1},"extractor":{"const":"getbiblesword"},"extractor_version":{"type":"string","minLength":1},"extractor_contract":{"type":"string","minLength":1},"api_version":{"const":1},"resource":{"enum":["commentaries","dictionaries"]},"generated_at":{"type":"string","format":"date-time"},"catalog_url":{"type":"string","minLength":1},"bible_api":{"type":"string","minLength":1},"module_count":{"type":"integer","minimum":0}},"additionalProperties":false},"build-report":{"title":"GetBible Build Report v1","description":"Compilation status and actionable diagnostics for one build. A published snapshot is captured before repository publication; the workflow report is updated with later publication errors. Successfully rebuilt modules and retained previous modules are listed separately.","type":"object","required":["schema","status","started_at","completed_at","requested_resource","catalog_url","built","skipped","failed","retained","errors","diagnostics","storage","commits"],"properties":{"schema":{"const":"getbible-build-report-v1"},"status":{"enum":["running","success","partial","failed"],"description":"Running is an in-progress checkpoint. Success means all approved modules built; partial means usable output exists with reported failures. Failed means the run could not complete safely. Publication failures are recorded in the workflow report."},"started_at":{"type":"string","format":"date-time"},"completed_at":{"type":["string","null"],"format":"date-time"},"requested_resource":{"enum":["all","commentaries","dictionaries"]},"catalog_url":{"type":"string","minLength":1},"built":{"type":"object","required":["commentaries","dictionaries"],"properties":{"commentaries":{"type":"array","items":{"type":"string"}},"dictionaries":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"skipped":{"type":"array","items":{"$ref":"#/components/schemas/build-report/$defs/moduleIssue"}},"failed":{"type":"array","items":{"$ref":"#/components/schemas/build-report/$defs/moduleFailure"}},"retained":{"type":"array","description":"Failed modules whose prior verified documents remain in the published tree.","items":{"$ref":"#/components/schemas/build-report/$defs/moduleIssue"}},"errors":{"type":"array","items":{"type":"object","required":["stage","error_type","reason"],"properties":{"stage":{"type":"string","minLength":1},"error_type":{"type":"string","minLength":1},"reason":{"type":"string"},"resource":{"enum":["commentaries","dictionaries"]}},"additionalProperties":false}},"diagnostics":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object"}}},"storage":{"type":"object","additionalProperties":{"type":"object"}},"commits":{"type":"object","additionalProperties":{"type":["string","null"]}}},"$defs":{"moduleIssue":{"type":"object","required":["resource","module","reason"],"properties":{"resource":{"enum":["commentaries","dictionaries"]},"module":{"type":"string","minLength":1},"reason":{"type":"string"}},"additionalProperties":false},"moduleFailure":{"type":"object","required":["resource","module","reason","stage","error_type"],"properties":{"resource":{"enum":["commentaries","dictionaries"]},"module":{"type":"string","minLength":1},"reason":{"type":"string"},"stage":{"type":"string","minLength":1},"error_type":{"type":"string","minLength":1}},"additionalProperties":false}},"additionalProperties":false},"hashes":{"title":"GetBible Hashes v1","description":"The SHA-256 of every other document in one v1 tree, keyed by path relative to the tree root; also the complete list of the paths the tree contains.","type":"object","required":["schema","algorithm","files"],"properties":{"schema":{"const":"getbible-hashes-v1"},"algorithm":{"const":"sha256"},"files":{"type":"object","additionalProperties":{"type":"string","pattern":"^[0-9a-f]{64}$"}}},"additionalProperties":false}}}}
