{"openapi":"3.1.0","info":{"title":"Сандарбхи: открытый API","version":"0.3.0","description":"No authentication. GET/HEAD/OPTIONS. HTML /read/{release}/resource and Markdown /read/{release}/resource.md mirror JSON without JavaScript. Use /read/{release}/.md for root Markdown. Unknown/duplicate parameters rejected; no request body. Follow next_cursor until null; complete_answer=false never promises semantic recall. Byte cap 256KiB; explicit 503 if single metadata object exceeds budget. Errors no-store; ETag/If-None-Match; CORS *. Relative API and /read links resolve against https://spapi.bhaktilata.ru, never the human reader https://acarya.bhaktilata.ru. Discovery and /llms.txt provide absolute documentation links. JSON source text is canonical, HTML supports escaped emphasis only."},"servers":[{"url":"https://spapi.bhaktilata.ru","description":"Public read-only API; available corpus is declared by release discovery"}],"externalDocs":{"url":"https://spapi.bhaktilata.ru/docs","description":"Usage and separate human reader https://acarya.bhaktilata.ru"},"x-public-origins":{"api":"https://spapi.bhaktilata.ru","reader":"https://acarya.bhaktilata.ru"},"security":[],"paths":{"/":{"parameters":[],"get":{"operationId":"get1","description":"Human/AI discovery HTML.","responses":{"200":{"description":"Discovery/instructions without JavaScript; same ETag, method and security guards.","content":{"text/html":{"schema":{"type":"string"}}}},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head1","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options1","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/docs":{"parameters":[],"get":{"operationId":"get2","description":"API usage instructions; API origin https://spapi.bhaktilata.ru; human reader https://acarya.bhaktilata.ru.","responses":{"200":{"description":"Discovery/instructions without JavaScript; same ETag, method and security guards.","content":{"text/html":{"schema":{"type":"string"}}}},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head2","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options2","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/llms.txt":{"parameters":[],"get":{"operationId":"get3","description":"Plain-text instructions search -> topic -> reading/context/next.","responses":{"200":{"description":"Discovery/instructions without JavaScript; same ETag, method and security guards.","content":{"text/plain":{"schema":{"type":"string"}}}},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head3","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options3","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1":{"parameters":[],"get":{"operationId":"get4","description":"Discovery and current release. Prototype data has eight books, not SB4.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head4","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options4","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/openapi.json":{"parameters":[],"get":{"operationId":"get5","description":"This OpenAPI description.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head5","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options5","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""}],"get":{"operationId":"get6","description":"Pinned discovery.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head6","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options6","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/search":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":2,"maxLength":200},"description":"Required; at most 32 letter/number tokens."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get7","description":"Same core.searchTopics as reader; preserves order/route/fuzzy/suggestions. Subjects have independent subject_total and reader hard limit6.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head7","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options7","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/topics":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"kind","in":"query","required":false,"schema":{"enum":["ordinary","question","reference","overview","reference_collection"]},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get8","description":"Effective catalog, with overlay/exclusions. Preserve source kind: reference is distinct from question. ordinary uses the actual reader rule, excluding only overview/reference_collection; baseline4868=4843question+25reference. Discovery exposes exact questions, ordinary_topics and by_kind counts.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head8","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options8","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/topics/{id}":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":160},"description":""}],"get":{"operationId":"get9","description":"Full accepted scope and metadata, related IDs, links to ordered bindings.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head9","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options9","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/topics/{id}/passages":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":160},"description":""},{"name":"book","in":"query","required":false,"schema":{"type":"string"},"description":""},{"name":"kind","in":"query","required":false,"schema":{"type":"string"},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get10","description":"Ordered metadata and bindings. No quoted full text expansion.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head10","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options10","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/topics/{id}/reading":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":160},"description":""},{"name":"book","in":"query","required":false,"schema":{"type":"string"},"description":""},{"name":"kind","in":"query","required":false,"schema":{"type":"string"},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":30},"description":""},{"name":"max_bytes","in":"query","required":false,"schema":{"type":"integer","minimum":8192,"maximum":262144,"default":262144},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get11","description":"Ready-to-read exact selected paragraphs with source reference, book/kind/role, bindings and context links. Deduplicated in existing coherent collection order. Usually an entire <=30-quote collection fits one response. Exact representation byte cap; normal quotes move whole to next page. Only a quote exceeding an empty page is segmented, with start/end/total_codepoints, SHA256 and text_complete=false. Continuation includes passage index + text offset; follow next until null for no loss. Context is separate and is never added to thematic support. HTML/MD show actual quotations and minimal provenance, no JSON dump.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head11","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options11","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/passages/{id}":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":160},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":16000,"default":8000},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get12","description":"Exact text segmented by Unicode codepoints; SHA256 of full text and segment. Follow next until null.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head12","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options12","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/passages/{id}/context":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":160},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":16000,"default":8000},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get13","description":"Full available unit with match_start/end, source coordinates and surrounding_text_is_topic_support=false.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head13","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options13","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/tree":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get14","description":"Exactly one navigation level, starting from roots.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head14","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options14","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}},"/api/v1/releases/{release}/tree/{kind}/{id}":{"parameters":[{"name":"release","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-f0-9]{32}$"},"description":""},{"name":"kind","in":"path","required":true,"schema":{"enum":["root","group","chapter","subject","branch"]},"description":""},{"name":"id","in":"path","required":true,"schema":{"type":"string","maxLength":160},"description":""},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":50,"default":20},"description":""},{"name":"cursor","in":"query","required":false,"schema":{"type":"string","maxLength":512},"description":"Opaque continuation bound to release, resource and all parameters including limit."}],"get":{"operationId":"get15","description":"Exactly one navigation level; root/all starts navigation. Canonical branch aliases explicit; related/reference links are separate, never inherited support.","responses":{"200":{"description":"Allowlisted JSON. All responses have release_id, version, links and complete_answer=false. Lists: items,total,returned,limit,next_cursor. Text: text,total_codepoints,start,end,text_sha256,segment_sha256,next_cursor,previous_cursor."},"304":{"description":"ETag unchanged"},"400":{"description":"Invalid or unknown/duplicate parameters"},"404":{"description":"Unknown resource/release"},"405":{"description":"Read-only; Allow GET, HEAD, OPTIONS"},"409":{"description":"Cursor mismatch"},"429":{"description":"Bounded admission exceeded; Retry-After: 2"},"503":{"description":"Integrity/deadline/response budget failure; no fallback"}}},"head":{"operationId":"head15","responses":{"200":{"description":"GET metadata, no body"}}},"options":{"operationId":"options15","responses":{"204":{"description":"CORS *, no credentials; Allow GET, HEAD, OPTIONS"}}}}}}