{"openapi":"3.1.0","info":{"title":"Mizan Cloud API","description":"Provenance-first knowledge graph and retrieval over Ali's corpus. See docs/api-guide.md and docs/provenance-semantics-guide.md.","version":"1.0.0"},"paths":{"/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/refresh":{"post":{"tags":["auth"],"summary":"Refresh","operationId":"refresh_auth_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenPair"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/logout":{"post":{"tags":["auth"],"summary":"Logout","operationId":"logout_auth_logout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefreshRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Logout Auth Logout Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/change-password":{"post":{"tags":["auth"],"summary":"Change Password","description":"Requires the current password (not just a valid access token) so a\nstolen short-lived token alone can't take over the account. An API key\nhas no password to change -- only a `kind=\"user\"` principal (one that\ncame from /auth/login, not an API key) may call this.\n\nRevokes every other refresh-token session on success: a password change\nis exactly the moment other logged-in devices should be forced to\nre-authenticate, the same way changing a password anywhere else signs\nout other sessions.","operationId":"change_password_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Change Password Auth Change Password Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/sessions":{"get":{"tags":["auth"],"summary":"List Sessions","description":"Device/session visibility (section 7).","operationId":"list_sessions_auth_sessions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Sessions Auth Sessions Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/sessions/{session_id}":{"delete":{"tags":["auth"],"summary":"Revoke Session","operationId":"revoke_session_auth_sessions__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Revoke Session Auth Sessions  Session Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/search":{"get":{"tags":["search"],"summary":"Search","operationId":"search_v1_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":8,"title":"Limit"}},{"name":"layer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"}},{"name":"collection","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Search V1 Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/node":{"get":{"tags":["graph"],"summary":"Node","operationId":"node_v1_node_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term","in":"query","required":true,"schema":{"type":"string","title":"Term"}},{"name":"node_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Node Type"}},{"name":"hops","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Hops"}},{"name":"include_proposed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Proposed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Node V1 Node Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/related":{"get":{"tags":["graph"],"summary":"Related","operationId":"related_v1_related_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term","in":"query","required":true,"schema":{"type":"string","title":"Term"}},{"name":"edge_types","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Edge Types"}},{"name":"hops","in":"query","required":false,"schema":{"type":"integer","default":2,"title":"Hops"}},{"name":"include_proposed","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Proposed"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Related V1 Related Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/gaps":{"get":{"tags":["graph"],"summary":"Gaps","operationId":"gaps_v1_gaps_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Gaps V1 Gaps Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/ontology":{"get":{"tags":["graph"],"summary":"Ontology","operationId":"ontology_v1_ontology_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"layer","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Layer"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Ontology V1 Ontology Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/stats":{"get":{"tags":["graph"],"summary":"Stats","operationId":"stats_v1_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Stats V1 Stats Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/context":{"post":{"tags":["context"],"summary":"Get Context","operationId":"get_context_v1_context_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContextRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Context V1 Context Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/know":{"get":{"tags":["context"],"summary":"What Do I Already Know","description":"'What do I already know about this?' (section 15) -- a fixed\ncomposition of the same four categories, structured for that one\nquestion rather than left to lens selection.","operationId":"what_do_i_already_know_v1_know_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response What Do I Already Know V1 Know Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/candidates":{"get":{"tags":["candidates"],"summary":"Relation Candidates","operationId":"relation_candidates_v1_candidates_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"term","in":"query","required":true,"schema":{"type":"string","title":"Term"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":8,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Relation Candidates V1 Candidates Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/assert":{"post":{"tags":["assert"],"summary":"Create Assertion","operationId":"create_assertion_v1_assert_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssertRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Assertion V1 Assert Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/review":{"post":{"tags":["assert"],"summary":"Review Assertion","operationId":"review_assertion_v1_review_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Review Assertion V1 Review Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/highlights":{"post":{"tags":["annotate"],"summary":"Create Highlight","operationId":"create_highlight_v1_highlights_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HighlightRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Highlight V1 Highlights Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["annotate"],"summary":"List Highlights","description":"Added for Mizan Reader: without this, a highlight created in one\nsession is invisible the next time the same document is opened -- spec\nsays highlights must survive reopening, so a create-only API isn't\nenough. Mirrors `create_highlight`'s response shape plus the fields the\nReader needs to repaint the highlight (quote/char_start/char_end).","operationId":"list_highlights_v1_highlights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_path","in":"query","required":true,"schema":{"type":"string","title":"Document Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Highlights V1 Highlights Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/annotations":{"post":{"tags":["annotate"],"summary":"Create Annotation","operationId":"create_annotation_v1_annotations_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnnotationRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Create Annotation V1 Annotations Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["annotate"],"summary":"List Annotations","description":"Added for Mizan Reader alongside list_highlights, same rationale.\nAn Annotation's `annotates` edge may point directly at this Document\nnode, or at one of this document's Highlight nodes -- both count as\n\"annotations on this document\" for the Reader's purposes.","operationId":"list_annotations_v1_annotations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_path","in":"query","required":true,"schema":{"type":"string","title":"Document Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response List Annotations V1 Annotations Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/reading-position":{"put":{"tags":["annotate"],"summary":"Set Reading Position","operationId":"set_reading_position_v1_reading_position_put","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReadingPositionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Set Reading Position V1 Reading Position Put"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["annotate"],"summary":"Get Reading Position","operationId":"get_reading_position_v1_reading_position_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_path","in":"query","required":true,"schema":{"type":"string","title":"Document Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Reading Position V1 Reading Position Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sync/manifest":{"post":{"tags":["sync"],"summary":"Diff Manifest","operationId":"diff_manifest_v1_sync_manifest_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ManifestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Diff Manifest V1 Sync Manifest Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/sync/upload":{"post":{"tags":["sync"],"summary":"Upload Document","operationId":"upload_document_v1_sync_upload_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","title":"Path"}},{"name":"sha256","in":"query","required":true,"schema":{"type":"string","title":"Sha256"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_v1_sync_upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Upload Document V1 Sync Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sync/tombstones":{"post":{"tags":["sync"],"summary":"Create Tombstones","operationId":"create_tombstones_v1_sync_tombstones_post","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Paths"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Tombstones V1 Sync Tombstones Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/sync/tombstones/{tombstone_id}/confirm":{"post":{"tags":["sync"],"summary":"Confirm Tombstone","description":"Only an admin confirmation actually marks the document tombstoned --\nsection 6: 'detect deletions without immediately destructively deleting\ncloud knowledge.'","operationId":"confirm_tombstone_v1_sync_tombstones__tombstone_id__confirm_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"tombstone_id","in":"path","required":true,"schema":{"type":"integer","title":"Tombstone Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Confirm Tombstone V1 Sync Tombstones  Tombstone Id  Confirm Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/sync/status":{"get":{"tags":["sync"],"summary":"Sync Status","operationId":"sync_status_v1_sync_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Sync Status V1 Sync Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/api-keys":{"get":{"tags":["admin"],"summary":"List Api Keys","operationId":"list_api_keys_v1_admin_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Response List Api Keys V1 Admin Api Keys Get"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Create Api Key","operationId":"create_api_key_v1_admin_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Create Api Key V1 Admin Api Keys Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/v1/admin/api-keys/{key_id}":{"delete":{"tags":["admin"],"summary":"Delete Api Key","operationId":"delete_api_key_v1_admin_api_keys__key_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Api Key V1 Admin Api Keys  Key Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/admin/audit-log":{"get":{"tags":["admin"],"summary":"Read Audit Log","operationId":"read_audit_log_v1_admin_audit_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"actor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"}},{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","additionalProperties":true},"title":"Response Read Audit Log V1 Admin Audit Log Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/healthz":{"get":{"summary":"Healthz","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Healthz Healthz Get"}}}}}}}},"components":{"schemas":{"AnnotationRequest":{"properties":{"kind":{"type":"string","enum":["question","interpretation","agreement","disagreement"],"title":"Kind"},"statement":{"type":"string","title":"Statement"},"target_type":{"type":"string","title":"Target Type"},"target_key":{"type":"string","title":"Target Key"},"valence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valence"}},"type":"object","required":["kind","statement","target_type","target_key"],"title":"AnnotationRequest"},"ApiKeyCreateRequest":{"properties":{"name":{"type":"string","title":"Name"},"scopes":{"items":{"type":"string"},"type":"array","title":"Scopes"}},"type":"object","required":["name","scopes"],"title":"ApiKeyCreateRequest"},"AssertRequest":{"properties":{"src_type":{"type":"string","title":"Src Type"},"src_key":{"type":"string","title":"Src Key"},"src_label":{"type":"string","title":"Src Label"},"edge_type":{"type":"string","title":"Edge Type"},"dst_type":{"type":"string","title":"Dst Type"},"dst_key":{"type":"string","title":"Dst Key"},"dst_label":{"type":"string","title":"Dst Label"},"quote":{"type":"string","minLength":1,"title":"Quote"},"document_path":{"type":"string","title":"Document Path"}},"type":"object","required":["src_type","src_key","src_label","edge_type","dst_type","dst_key","dst_label","quote","document_path"],"title":"AssertRequest"},"Body_upload_document_v1_sync_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_document_v1_sync_upload_post"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","minLength":12,"title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"ContextRequest":{"properties":{"document_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Path"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"selected_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Selected Text"},"query":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Query"},"lenses":{"items":{"type":"string","enum":["current_document","my_annotations","related_corpus","knowledge_graph","philosophic_calculus","institution","production","everything"]},"type":"array","title":"Lenses"},"limits":{"additionalProperties":{"type":"integer"},"type":"object","title":"Limits"}},"type":"object","title":"ContextRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HighlightRequest":{"properties":{"document_path":{"type":"string","title":"Document Path"},"quote":{"type":"string","title":"Quote"},"char_start":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Char Start"},"char_end":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Char End"}},"type":"object","required":["document_path","quote"],"title":"HighlightRequest"},"LoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"device_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Label"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"ManifestEntry":{"properties":{"path":{"type":"string","title":"Path"},"sha256":{"type":"string","title":"Sha256"},"bytes":{"type":"integer","title":"Bytes"},"mtime":{"type":"number","title":"Mtime"}},"type":"object","required":["path","sha256","bytes","mtime"],"title":"ManifestEntry"},"ManifestRequest":{"properties":{"entries":{"items":{"$ref":"#/components/schemas/ManifestEntry"},"type":"array","title":"Entries"},"detect_deletions":{"type":"boolean","title":"Detect Deletions","default":true}},"type":"object","required":["entries"],"title":"ManifestRequest"},"ReadingPositionRequest":{"properties":{"document_path":{"type":"string","title":"Document Path"},"location":{"type":"string","title":"Location"}},"type":"object","required":["document_path","location"],"title":"ReadingPositionRequest"},"RefreshRequest":{"properties":{"refresh_token":{"type":"string","title":"Refresh Token"}},"type":"object","required":["refresh_token"],"title":"RefreshRequest"},"ReviewRequest":{"properties":{"subject_kind":{"type":"string","enum":["node","edge"],"title":"Subject Kind"},"subject_id":{"type":"integer","title":"Subject Id"},"to_status":{"type":"string","enum":["approved","rejected","retracted"],"title":"To Status"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["subject_kind","subject_id","to_status"],"title":"ReviewRequest"},"TokenPair":{"properties":{"access_token":{"type":"string","title":"Access Token"},"refresh_token":{"type":"string","title":"Refresh Token"},"token_type":{"type":"string","const":"bearer","title":"Token Type","default":"bearer"}},"type":"object","required":["access_token","refresh_token"],"title":"TokenPair"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}