-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathopenapi_temp.json
More file actions
1 lines (1 loc) · 135 KB
/
openapi_temp.json
File metadata and controls
1 lines (1 loc) · 135 KB
1
{"openapi":"3.1.0","info":{"title":"BEACON - Government Policy Intelligence Platform","description":"AI-powered document management and policy analysis system with role-based access control","version":"2.0.0"},"paths":{"/auth/password-requirements":{"get":{"tags":["authentication"],"summary":"Get Password Requirements","description":"Get password strength requirements for frontend validation","operationId":"get_password_requirements_auth_password_requirements_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/auth/register":{"post":{"tags":["authentication"],"summary":"Register","description":"Register a new user with email verification\n\n- Developer and Public Viewer are auto-approved\n- Others need approval from their admin\n- All users must verify their email","operationId":"register_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["authentication"],"summary":"Login","description":"Login user and return JWT token","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/TokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/me":{"get":{"tags":["authentication"],"summary":"Get Me","description":"Get current user profile","operationId":"get_me_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/logout":{"post":{"tags":["authentication"],"summary":"Logout","description":"Logout user (client should delete token)","operationId":"logout_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/profile":{"put":{"tags":["authentication"],"summary":"Update Profile","description":"Update user profile (name only)","operationId":"update_profile_auth_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/auth/verify-email/{token}":{"get":{"tags":["authentication"],"summary":"Verify Email","description":"Verify user email with token\n\nArgs:\n token: Verification token from email link\n\nReturns:\n Success message and user info","operationId":"verify_email_auth_verify_email__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/resend-verification":{"post":{"tags":["authentication"],"summary":"Resend Verification","description":"Resend verification email\n\nArgs:\n email: User's email address\n\nReturns:\n Success message","operationId":"resend_verification_auth_resend_verification_post","parameters":[{"name":"email","in":"query","required":true,"schema":{"type":"string","format":"email","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/list":{"get":{"tags":["user-management","user-management"],"summary":"List Users","description":"List users based on current user's permissions\n\n- Developer sees all users\n- MoE admin sees all users nationwide\n- University admin sees only users in their institution\n- Others cannot list users","operationId":"list_users_users_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"role","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by role","title":"Role"},"description":"Filter by role"},{"name":"approved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by approval status","title":"Approved"},"description":"Filter by approval status"},{"name":"institution_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by institution","title":"Institution Id"},"description":"Filter by institution"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"description":"Max results (default 100, max 1000)","default":100,"title":"Limit"},"description":"Max results (default 100, max 1000)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserListResponse"},"title":"Response List Users Users List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/approve/{user_id}":{"post":{"tags":["user-management","user-management"],"summary":"Approve User","description":"Approve a pending user\n\n- Developer approves MoE admins\n- MoE admin approves University admins\n- University admin approves Document Officers and Students","operationId":"approve_user_users_approve__user_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/reject/{user_id}":{"post":{"tags":["user-management","user-management"],"summary":"Reject User","description":"Reject a pending user (deletes the user account)","operationId":"reject_user_users_reject__user_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/change-role/{user_id}":{"patch":{"tags":["user-management","user-management"],"summary":"Change User Role","description":"Change a user's role (admin only)\n\n- Must have appropriate permissions\n- Cannot demote yourself\n- Logs the change in audit trail","operationId":"change_user_role_users_change_role__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RoleChangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/revoke/{user_id}":{"post":{"tags":["user-management","user-management"],"summary":"Revoke User Approval","description":"Revoke approval for a user (set approved=False)","operationId":"revoke_user_approval_users_revoke__user_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/delete/{user_id}":{"delete":{"tags":["user-management","user-management"],"summary":"Delete User","description":"Delete a user account permanently","operationId":"delete_user_users_delete__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/users/pending":{"get":{"tags":["user-management","user-management"],"summary":"Get Pending Users","description":"Get list of users pending approval based on current user's role","operationId":"get_pending_users_users_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/bookmark/toggle/{document_id}":{"post":{"tags":["bookmarks"],"summary":"Toggle Bookmark","description":"Toggle bookmark status for a document","operationId":"toggle_bookmark_bookmark_toggle__document_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bookmark/list":{"get":{"tags":["bookmarks"],"summary":"List Bookmarks","description":"Get all bookmarked document IDs for current user (cached for 30s)","operationId":"list_bookmarks_bookmark_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/institutions/public":{"get":{"tags":["institutions","institutions"],"summary":"List Institutions Public","description":"Public endpoint to list all institutions (for registration)\n\n- No authentication required\n- Used during user registration to select institution","operationId":"list_institutions_public_institutions_public_get","parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstitutionResponse"},"title":"Response List Institutions Public Institutions Public Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/institutions/list":{"get":{"tags":["institutions","institutions"],"summary":"List Institutions","description":"List institutions based on user role\n\n- Developer: See all institutions\n- Ministry Admin: See their ministry + institutions under their ministry\n- University Admin: See their institution + parent ministry\n- Others: See all institutions (for registration/reference)","operationId":"list_institutions_institutions_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InstitutionResponse"},"title":"Response List Institutions Institutions List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/institutions/create":{"post":{"tags":["institutions","institutions"],"summary":"Create Institution","description":"Create a new institution\n\n- Only developers can create ministries\n- Developers and ministry admins can create universities/departments","operationId":"create_institution_institutions_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstitutionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InstitutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/institutions/assign-user/{user_id}":{"patch":{"tags":["institutions","institutions"],"summary":"Assign User To Institution","description":"Assign a user to an institution\n\n- Only developers and MoE admins can assign users\n- Useful for transferring users between institutions","operationId":"assign_user_to_institution_institutions_assign_user__user_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/institutions/{institution_id}/users":{"get":{"tags":["institutions","institutions"],"summary":"Get Institution Users","description":"Get all users in an institution\n\n- University admins can only see their own institution\n- MoE admins and developers can see any institution","operationId":"get_institution_users_institutions__institution_id__users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"institution_id","in":"path","required":true,"schema":{"type":"integer","title":"Institution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/institutions/{institution_id}":{"delete":{"tags":["institutions","institutions"],"summary":"Delete Institution","description":"Soft delete an institution and convert users to public viewers\n\n- Only developers can delete ministries\n- Developers and ministry admins can delete institutions\n- All users converted to public viewers and notified","operationId":"delete_institution_institutions__institution_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"institution_id","in":"path","required":true,"schema":{"type":"integer","title":"Institution Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteInstitutionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/institution-domains/list":{"get":{"tags":["institution-domains","institution-domains"],"summary":"List Domains","description":"Get list of all configured institution domains\nOnly accessible by developers and MoE admins","operationId":"list_domains_institution_domains_list_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/institution-domains/add":{"post":{"tags":["institution-domains","institution-domains"],"summary":"Add Domain","description":"Add a domain to institution whitelist\nOnly accessible by developers and MoE admins","operationId":"add_domain_institution_domains_add_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/institution-domains/institution/{institution_id}":{"get":{"tags":["institution-domains","institution-domains"],"summary":"Get Institution Domains","description":"Get domains for a specific institution","operationId":"get_institution_domains_institution_domains_institution__institution_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"institution_id","in":"path","required":true,"schema":{"type":"integer","title":"Institution Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/institution-domains/bulk-add":{"post":{"tags":["institution-domains","institution-domains"],"summary":"Bulk Add Domains","description":"Add multiple domains at once\nOnly accessible by developers","operationId":"bulk_add_domains_institution_domains_bulk_add_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DomainRequest"},"type":"array","title":"Domains"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/documents/upload":{"post":{"tags":["documents","documents"],"summary":"Upload Documents","operationId":"upload_documents_documents_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_documents_documents_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/documents/list":{"get":{"tags":["documents","documents"],"summary":"List Documents","description":"List documents with Pagination, Search, Sorting, and Role-Based Security.\n⚡ Optimized with caching, eager loading, and reduced default limit.\n\nSort options:\n- recent: Most recent first (default)\n- oldest: Oldest first\n- title-asc: Title A-Z\n- title-desc: Title Z-A\n- department: By department name","operationId":"list_documents_documents_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"sort_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"recent","title":"Sort By"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/vector-stats":{"get":{"tags":["documents","documents"],"summary":"Get Vector Stats","description":"Get overall vector store statistics","operationId":"get_vector_stats_documents_vector_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/documents/vector-stats/{document_id}":{"get":{"tags":["documents","documents"],"summary":"Get Document Vector Stats","description":"Get vector store statistics for a specific document using pgvector","operationId":"get_document_vector_stats_documents_vector_stats__document_id__get","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}":{"get":{"tags":["documents","documents"],"summary":"Get Document","description":"Get full document details with access control","operationId":"get_document_documents__document_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/status":{"get":{"tags":["documents","documents"],"summary":"Get Document Status","description":"Get document processing status","operationId":"get_document_status_documents__document_id__status_get","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/browse/metadata":{"get":{"tags":["documents","documents"],"summary":"Browse Documents","description":"Browse documents by metadata filters","operationId":"browse_documents_documents_browse_metadata_get","parameters":[{"name":"department","in":"query","required":false,"schema":{"type":"string","title":"Department"}},{"name":"document_type","in":"query","required":false,"schema":{"type":"string","title":"Document Type"}},{"name":"year","in":"query","required":false,"schema":{"type":"integer","title":"Year"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/download":{"get":{"tags":["documents","documents"],"summary":"Download Document","description":"Download a document (if allowed)","operationId":"download_document_documents__document_id__download_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/embed":{"post":{"tags":["documents","documents"],"summary":"Embed Documents","description":"Manually trigger embedding for specific documents","operationId":"embed_documents_documents_embed_post","requestBody":{"content":{"application/json":{"schema":{"items":{"type":"integer"},"type":"array","title":"Doc Ids"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/submit-for-review":{"post":{"tags":["documents","documents"],"summary":"Submit Document For Review","description":"Submit document for MoE review (University Admin only)\nChanges status from 'draft' to 'pending' and sets escalation flag","operationId":"submit_document_for_review_documents__document_id__submit_for_review_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/approve":{"post":{"tags":["documents","documents"],"summary":"Approve Document","description":"Approve a document (MoE Admin or University Admin)","operationId":"approve_document_documents__document_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/reject":{"post":{"tags":["documents","documents"],"summary":"Reject Document","description":"Reject a document with reason (MoE Admin or University Admin)","operationId":"reject_document_documents__document_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/request-changes":{"post":{"tags":["documents","documents"],"summary":"Request Changes","description":"Request changes to a document (MoE Admin or University Admin)","operationId":"request_changes_documents__document_id__request_changes_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/approvals/pending":{"get":{"tags":["documents","documents"],"summary":"Get Pending Approvals","description":"Get list of documents pending approval (for MoE Admin and University Admin)","operationId":"get_pending_approvals_documents_approvals_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/documents/{document_id}/update-status":{"post":{"tags":["documents","documents"],"summary":"Update Document Status","description":"Update document status (for admins)\nValid statuses: draft, pending, under_review, changes_requested, approved, \n restricted_approved, archived, rejected, flagged, expired","operationId":"update_document_status_documents__document_id__update_status_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"new_status","in":"query","required":true,"schema":{"type":"string","title":"New Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/compare":{"post":{"tags":["documents","documents"],"summary":"Compare Documents","description":"Compare multiple policy documents using LLM analysis\n\nArgs:\n document_ids: List of 2-5 document IDs to compare\n comparison_aspects: Optional list of aspects to compare\n\nReturns:\n Structured comparison matrix with extracted information\n\nRole-based access (respects institutional autonomy):\n- Developer: All documents\n- MoE Admin: Public + pending approval + their institution + their uploads\n- University Admin: Public + their institution\n- Document Officer: Public + their institution\n- Student: Approved public + their institution's approved institution_only\n- Public Viewer: Only approved public documents\n\nUsers can only compare documents they have access to.","operationId":"compare_documents_documents_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/documents/compare/conflicts":{"post":{"tags":["documents","documents"],"summary":"Detect Conflicts","description":"Detect conflicts between policy documents\n\nArgs:\n document_ids: List of 2-5 document IDs to analyze\n\nReturns:\n List of potential conflicts and contradictions\n\nRole-based access: Same as compare endpoint","operationId":"detect_conflicts_documents_compare_conflicts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/documents/{document_id}/check-compliance":{"post":{"tags":["documents","documents"],"summary":"Check Document Compliance","description":"Check if document complies with given criteria\n\nArgs:\n document_id: ID of document to check\n checklist: List of compliance criteria (max 20)\n strict_mode: If true, requires explicit evidence\n\nReturns:\n Compliance report with pass/fail for each criterion and evidence\n\nRole-based access (respects institutional autonomy):\n- Developer: Can check any document\n- MoE Admin: Can check public + pending + their institution + their uploads\n- University Admin: Can check public + their institution\n- Document Officer: Can check public + their institution\n- Student: Can check approved public + their institution's approved institution_only\n- Public Viewer: Can check approved public documents only\n\nUsers can only check compliance of documents they have access to.","operationId":"check_document_compliance_documents__document_id__check_compliance_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/compliance-report":{"post":{"tags":["documents","documents"],"summary":"Generate Compliance Report","description":"Generate detailed compliance report with recommendations\n\nArgs:\n document_id: ID of document to analyze\n checklist: List of compliance criteria\n strict_mode: If true, requires explicit evidence\n\nReturns:\n Detailed compliance report with actionable recommendations\n\nRole-based access: Same as check-compliance endpoint","operationId":"generate_compliance_report_documents__document_id__compliance_report_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/conflicts":{"get":{"tags":["documents","documents"],"summary":"Detect Document Conflicts","description":"Detect conflicts between this document and other documents\n\nUses lazy embedding strategy:\n1. Search by metadata to find potentially related documents\n2. Embed only top 3 candidates (if not already embedded)\n3. Use semantic search + LLM to detect actual conflicts\n\nArgs:\n document_id: ID of document to check for conflicts\n max_candidates: Maximum number of documents to check (default: 3, max: 10)\n\nReturns:\n List of potential conflicts with severity and recommendations\n\nRole-based access (respects institutional autonomy):\n- Developer: Can check any document\n- MoE Admin: Can check public + pending + their institution + their uploads\n- University Admin: Can check public + their institution\n- Document Officer: Can check public + their institution\n- Student: Can check approved public + their institution's approved institution_only\n- Public Viewer: Can check approved public documents only\n\nUsers can only check conflicts for documents they have access to.","operationId":"detect_document_conflicts_documents__document_id__conflicts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"max_candidates","in":"query","required":false,"schema":{"type":"integer","default":3,"title":"Max Candidates"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/approvals/documents/pending":{"get":{"tags":["approvals"],"summary":"Get Pending Documents","description":"Get documents pending approval based on user's role\n\n- Developer sees all pending documents\n- MoE Admin sees restricted and public documents\n- University Admin sees institution-only and public documents from their institution","operationId":"get_pending_documents_approvals_documents_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/approvals/documents/approved":{"get":{"tags":["approvals"],"summary":"Get Approved Documents","description":"Get documents that have been approved based on user's role\n\n- Developer sees all approved documents\n- MoE Admin sees restricted and public approved documents\n- University Admin sees institution-only and public approved documents from their institution","operationId":"get_approved_documents_approvals_documents_approved_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/approvals/documents/rejected":{"get":{"tags":["approvals"],"summary":"Get Rejected Documents","description":"Get documents that have been rejected based on user's role\n\n- Developer sees all rejected documents\n- MoE Admin sees restricted and public rejected documents\n- University Admin sees institution-only and public rejected documents from their institution","operationId":"get_rejected_documents_approvals_documents_rejected_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/approvals/documents/approve/{document_id}":{"post":{"tags":["approvals"],"summary":"Approve Document","description":"Approve a pending document\n\n- Checks user has permission based on document visibility level\n- Updates document status to 'approved'\n- Logs the approval action","operationId":"approve_document_approvals_documents_approve__document_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/approvals/documents/reject/{document_id}":{"post":{"tags":["approvals"],"summary":"Reject Document","description":"Reject a pending document\n\n- Same permissions as approval\n- Updates status to 'rejected'\n- Document becomes inaccessible for search","operationId":"reject_document_approvals_documents_reject__document_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/approvals/documents/history/{document_id}":{"get":{"tags":["approvals"],"summary":"Get Document Approval History","description":"Get approval history for a document","operationId":"get_document_approval_history_approvals_documents_history__document_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/query/stream":{"post":{"tags":["chat","chat"],"summary":"Chat Query Stream","description":"Ask a question to the RAG agent with streaming response (SSE)\n\nArgs:\n question: The question to ask\n thread_id: Optional thread ID for conversation memory\n\nReturns:\n Server-Sent Events stream with:\n - content: Token chunks as they're generated\n - citation: Citations as they're discovered (with approval status)\n - metadata: Final confidence and status\n - done: Stream completion signal\n\nRequires authentication - applies role-based access control","operationId":"chat_query_stream_chat_query_stream_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/chat/query":{"post":{"tags":["chat","chat"],"summary":"Chat Query","description":"Ask a question to the RAG agent (non-streaming, backward compatible)\n\nArgs:\n question: The question to ask\n session_id: Optional session ID (creates new if not provided)\n thread_id: Deprecated, use session_id instead\n\nReturns:\n Answer with citations, confidence score, session_id, and message_id\n\nRequires authentication - all authenticated users can query\n\nNEW: Now saves all messages to database for chat history","operationId":"chat_query_chat_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/chat/health":{"get":{"tags":["chat","chat"],"summary":"Chat Health","description":"Check if chat service is healthy","operationId":"chat_health_chat_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/chat/sessions":{"post":{"tags":["chat-history","chat-history"],"summary":"Create Session","description":"Create a new chat session\n\n- **title**: Optional session title (defaults to \"New Chat\")\n- Returns session details including unique thread_id for agent memory","operationId":"create_session_chat_sessions_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["chat-history","chat-history"],"summary":"List Sessions","description":"List all chat sessions for the current user\n\n- **limit**: Number of sessions to return (1-100, default 20)\n- **offset**: Number of sessions to skip (for pagination)\n- **search**: Optional search query to filter sessions\n- Returns paginated list of sessions with message counts and previews","operationId":"list_sessions_chat_sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of sessions to return","default":20,"title":"Limit"},"description":"Number of sessions to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of sessions to skip","default":0,"title":"Offset"},"description":"Number of sessions to skip"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query for title or content","title":"Search"},"description":"Search query for title or content"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/sessions/{session_id}/messages":{"get":{"tags":["chat-history","chat-history"],"summary":"Get Session Messages","description":"Get all messages for a specific chat session\n\n- **session_id**: ID of the chat session\n- Returns all messages ordered by creation time (oldest first)\n- Returns 403 if session doesn't belong to current user","operationId":"get_session_messages_chat_sessions__session_id__messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessagesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/sessions/{session_id}":{"put":{"tags":["chat-history","chat-history"],"summary":"Update Session Title","description":"Update the title of a chat session\n\n- **session_id**: ID of the chat session\n- **title**: New title (1-200 characters)\n- Returns updated session details\n- Returns 403 if session doesn't belong to current user","operationId":"update_session_title_chat_sessions__session_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTitleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["chat-history","chat-history"],"summary":"Delete Session","description":"Delete a chat session and all its messages\n\n- **session_id**: ID of the chat session to delete\n- Cascade deletes all messages in the session\n- Returns 403 if session doesn't belong to current user","operationId":"delete_session_chat_sessions__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"integer","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/chat/sessions/search":{"get":{"tags":["chat-history","chat-history"],"summary":"Search Sessions","description":"Search chat sessions by title or message content\n\n- **q**: Search query (required)\n- **limit**: Number of results to return (1-100, default 20)\n- Searches in session titles and message content\n- Returns matching sessions ordered by relevance (most recent first)","operationId":"search_sessions_chat_sessions_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","minLength":1,"description":"Search query","title":"Q"},"description":"Search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"description":"Number of results to return","default":20,"title":"Limit"},"description":"Number of results to return"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SessionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/voice/query/stream":{"post":{"tags":["voice","voice"],"summary":"Voice Query Stream","description":"Process voice query with streaming response (SSE)\n\nArgs:\n audio: Audio file (MP3, WAV, M4A, OGG, FLAC)\n language: Language code (e.g., 'en', 'hi') or None for auto-detect\n thread_id: Optional conversation thread ID\n \nReturns:\n Server-Sent Events stream with transcription and AI response","operationId":"voice_query_stream_voice_query_stream_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_voice_query_stream_voice_query_stream_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/voice/query":{"post":{"tags":["voice","voice"],"summary":"Voice Query","description":"Process voice query: transcribe audio and send to RAG agent\n\nArgs:\n audio: Audio file (MP3, WAV, M4A, OGG, FLAC)\n language: Language code (e.g., 'en', 'hi') or None for auto-detect\n thread_id: Optional conversation thread ID\n \nReturns:\n {\n \"transcription\": \"What are the education policy guidelines?\",\n \"language\": \"en\",\n \"confidence\": 0.95,\n \"engine\": \"whisper-local\",\n \"answer\": \"The education policy guidelines include...\",\n \"processing_time\": 2.5\n }","operationId":"voice_query_voice_query_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_voice_query_voice_query_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/voice/transcribe":{"post":{"tags":["voice","voice"],"summary":"Transcribe Audio","description":"Transcribe audio to text (without RAG query)\n\nArgs:\n audio: Audio file (MP3, WAV, M4A, OGG, FLAC)\n language: Language code (e.g., 'en', 'hi') or None for auto-detect\n \nReturns:\n {\n \"text\": \"transcribed text\",\n \"language\": \"en\",\n \"confidence\": 0.95,\n \"engine\": \"whisper-local\"\n }","operationId":"transcribe_audio_voice_transcribe_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_transcribe_audio_voice_transcribe_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/voice/engine-info":{"get":{"tags":["voice","voice"],"summary":"Get Voice Engine Info","description":"Get information about the active speech-to-text engine\n\nReturns:\n {\n \"active_engine\": \"whisper-local\",\n \"engine_type\": \"whisper\",\n \"config\": {...}\n }","operationId":"get_voice_engine_info_voice_engine_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/voice/health":{"get":{"tags":["voice","voice"],"summary":"Voice Health Check","description":"Check if voice service is operational\n\nReturns:\n {\n \"status\": \"healthy\",\n \"active_engine\": \"whisper-local\",\n \"supported_formats\": [\"mp3\", \"wav\", \"m4a\", \"ogg\", \"flac\"]\n }","operationId":"voice_health_check_voice_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/audit/logs":{"get":{"tags":["audit"],"summary":"Get Audit Logs","description":"Get audit logs\n\n- Developer sees all logs\n- MoE Admin sees logs for their scope\n- University Admin sees logs for their institution\n- Others cannot access audit logs","operationId":"get_audit_logs_audit_logs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"action","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by action type","title":"Action"},"description":"Filter by action type"},{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by user ID","title":"User Id"},"description":"Filter by user ID"},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":7,"title":"Days"},"description":"Number of days to look back"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Maximum number of logs to return","default":100,"title":"Limit"},"description":"Maximum number of logs to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Pagination offset","default":0,"title":"Offset"},"description":"Pagination offset"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit/actions":{"get":{"tags":["audit"],"summary":"Get Action Types","description":"Get list of all action types in the system","operationId":"get_action_types_audit_actions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/audit/user/{user_id}/activity":{"get":{"tags":["audit"],"summary":"Get User Activity","description":"Get activity logs for a specific user\n\n- Admins can view activity for users in their scope\n- Users can view their own activity","operationId":"get_user_activity_audit_user__user_id__activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to look back","default":30,"title":"Days"},"description":"Number of days to look back"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/audit/summary":{"get":{"tags":["audit"],"summary":"Get Audit Summary","description":"Get summary statistics of system activity\n\n- Only available to admins","operationId":"get_audit_summary_audit_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","description":"Number of days to summarize","default":7,"title":"Days"},"description":"Number of days to summarize"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/request":{"post":{"tags":["data-sources","data-sources"],"summary":"Request Data Source","description":"Submit a data source connection request\n\n- Ministry Admin can request with classification\n- University Admin can request (auto-classified as institutional)","operationId":"request_data_source_data_sources_data_sources_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSourceRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/data-sources/data-sources/my-requests":{"get":{"tags":["data-sources","data-sources"],"summary":"Get My Requests","description":"Get current user's data source requests\n\n- Ministry/University admins see their own requests","operationId":"get_my_requests_data_sources_data_sources_my_requests_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/data-sources/data-sources/requests/pending":{"get":{"tags":["data-sources","data-sources"],"summary":"Get Pending Requests","description":"Get all pending data source requests\n\n- Only developers can view pending requests","operationId":"get_pending_requests_data_sources_data_sources_requests_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/data-sources/data-sources/active":{"get":{"tags":["data-sources","data-sources"],"summary":"Get Active Sources","description":"Get all active data sources (approved, active, or failed)\n\n- Only developers can view active sources","operationId":"get_active_sources_data_sources_data_sources_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/data-sources/data-sources/requests/{request_id}/approve":{"post":{"tags":["data-sources","data-sources"],"summary":"Approve Request","description":"Approve a data source request\n\n- Only developers can approve\n- Starts sync automatically","operationId":"approve_request_data_sources_data_sources_requests__request_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"integer","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/requests/{request_id}/reject":{"post":{"tags":["data-sources","data-sources"],"summary":"Reject Request","description":"Reject a data source request\n\n- Only developers can reject\n- Requires rejection reason","operationId":"reject_request_data_sources_data_sources_requests__request_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"integer","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalAction"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/create":{"post":{"tags":["data-sources","data-sources"],"summary":"Create Data Source","description":"Register a new external data source (Direct creation - Developer only)\n\n- Only developers can create data sources directly\n- For Ministry/University admins, use /request endpoint","operationId":"create_data_source_data_sources_data_sources_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSourceCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/data-sources/data-sources/list":{"get":{"tags":["data-sources","data-sources"],"summary":"List Data Sources","description":"List all registered data sources\n\n- Only developers can view data sources","operationId":"list_data_sources_data_sources_data_sources_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ministry_name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ministry Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/{source_id}":{"get":{"tags":["data-sources","data-sources"],"summary":"Get Data Source","description":"Get details of a specific data source\n\n- Only developers can view data sources","operationId":"get_data_source_data_sources_data_sources__source_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["data-sources","data-sources"],"summary":"Update Data Source","description":"Update data source configuration","operationId":"update_data_source_data_sources_data_sources__source_id__put","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataSourceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["data-sources","data-sources"],"summary":"Delete Data Source","description":"Delete a data source\n\n- Only developers can delete data sources","operationId":"delete_data_source_data_sources_data_sources__source_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/{source_id}/revoke-access":{"post":{"tags":["data-sources","data-sources"],"summary":"Revoke Access","description":"Revoke access to a data source by deleting credentials\n\n- Only developers can revoke access\n- Credentials are deleted but source record is preserved for audit trail\n- Requirement 8.5","operationId":"revoke_access_data_sources_data_sources__source_id__revoke_access_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/test-connection":{"post":{"tags":["data-sources","data-sources"],"summary":"Test Connection","description":"Test connection to external database\n\nReturns connection status without storing credentials","operationId":"test_connection_data_sources_data_sources_test_connection_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConnectionTest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/{source_id}/sync":{"post":{"tags":["data-sources","data-sources"],"summary":"Trigger Sync","description":"Manually trigger sync for a data source","operationId":"trigger_sync_data_sources_data_sources__source_id__sync_post","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}},{"name":"limit","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"}},{"name":"force_full","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force Full"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/sync-all":{"post":{"tags":["data-sources","data-sources"],"summary":"Sync All Sources","description":"Trigger sync for all enabled data sources\n\n- Only developers can trigger syncs","operationId":"sync_all_sources_data_sources_data_sources_sync_all_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/data-sources/data-sources/{source_id}/sync-logs":{"get":{"tags":["data-sources","data-sources"],"summary":"Get Sync Logs","description":"Get sync history for a data source","operationId":"get_sync_logs_data_sources_data_sources__source_id__sync_logs_get","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/data-sources/data-sources/sync-logs/all":{"get":{"tags":["data-sources","data-sources"],"summary":"Get All Sync Logs","description":"Get recent sync logs across all sources","operationId":"get_all_sync_logs_data_sources_data_sources_sync_logs_all_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/list":{"get":{"tags":["notifications","notifications"],"summary":"Get Notifications","description":"Get notifications for current user with filtering","operationId":"get_notifications_notifications_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"unread_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Unread Only"}},{"name":"priority","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/unread-count":{"get":{"tags":["notifications","notifications"],"summary":"Get Unread Count","description":"Get count of unread notifications (cached for 10s)","operationId":"get_unread_count_notifications_unread_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/notifications/{notification_id}/mark-read":{"post":{"tags":["notifications","notifications"],"summary":"Mark Notification Read","description":"Mark a notification as read","operationId":"mark_notification_read_notifications__notification_id__mark_read_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"integer","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/notifications/mark-all-read":{"post":{"tags":["notifications","notifications"],"summary":"Mark All Read","description":"Mark all notifications as read","operationId":"mark_all_read_notifications_mark_all_read_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/notifications/{notification_id}":{"delete":{"tags":["notifications","notifications"],"summary":"Delete Notification","description":"Delete a notification","operationId":"delete_notification_notifications__notification_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"notification_id","in":"path","required":true,"schema":{"type":"integer","title":"Notification Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/document-stats":{"get":{"tags":["insights","insights"],"summary":"Get Document Stats","description":"Get comprehensive document statistics\n\nReturns:\n- Total documents\n- Documents by category\n- Documents by department\n- Documents by approval status\n- Documents by visibility level\n- Upload trends over time","operationId":"get_document_stats_insights_document_stats_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"department","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"}},{"name":"date_from","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date From"}},{"name":"date_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/trending-topics":{"get":{"tags":["insights","insights"],"summary":"Get Trending Topics","description":"Get trending topics from document keywords\n\nReturns:\n- Top keywords across all documents\n- Keyword frequency\n- Recent trending topics","operationId":"get_trending_topics_insights_trending_topics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":5,"default":20,"title":"Limit"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/recent-activity":{"get":{"tags":["insights","insights"],"summary":"Get Recent Activity","description":"Get recent system activity\n\nReturns:\n- Recent uploads\n- Recent queries\n- Recent approvals\n- User activity","operationId":"get_recent_activity_insights_recent_activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":10,"default":50,"title":"Limit"}},{"name":"activity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activity Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/search-analytics":{"get":{"tags":["insights","insights"],"summary":"Get Search Analytics","description":"Get search query analytics\n\nReturns:\n- Top search queries\n- Search frequency\n- Search trends over time","operationId":"get_search_analytics_insights_search_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/user-activity":{"get":{"tags":["insights","insights"],"summary":"Get User Activity","description":"Get user activity statistics\n\nReturns:\n- Most active users\n- User activity by role\n- Activity distribution","operationId":"get_user_activity_insights_user_activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/insights/institution-stats":{"get":{"tags":["insights","insights"],"summary":"Get Institution Stats","description":"Get institution-wise statistics\n\nReturns:\n- Documents by institution\n- Users by institution\n- Activity by institution","operationId":"get_institution_stats_insights_institution_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/insights/dashboard-summary":{"get":{"tags":["insights","insights"],"summary":"Get Dashboard Summary","description":"Get comprehensive dashboard summary\n\nReturns all key metrics in one call for dashboard display","operationId":"get_dashboard_summary_insights_dashboard_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/documents/{document_id}/chat/messages":{"post":{"tags":["document-chat","document-chat"],"summary":"Send Message","description":"Send a message to document chat","operationId":"send_message_documents__document_id__chat_messages_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/backend__routers__document_chat_router__MessageResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["document-chat","document-chat"],"summary":"Get Messages","description":"Get chat messages for a document","operationId":"get_messages_documents__document_id__chat_messages_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"before_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Before Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/backend__routers__document_chat_router__MessageResponse"},"title":"Response Get Messages Documents Document Id Chat Messages Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/chat/stream":{"get":{"tags":["document-chat","document-chat"],"summary":"Stream Messages","description":"SSE endpoint for real-time updates","operationId":"stream_messages_documents__document_id__chat_stream_get","parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"JWT token","title":"Token"},"description":"JWT token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/chat/participants":{"get":{"tags":["document-chat","document-chat"],"summary":"Get Participants","description":"Get list of active participants","operationId":"get_participants_documents__document_id__chat_participants_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantResponse"},"title":"Response Get Participants Documents Document Id Chat Participants Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/documents/{document_id}/chat/search-users":{"get":{"tags":["document-chat","document-chat"],"summary":"Search Users For Mention","description":"Search users for @mention autocomplete (cached for 60s)","operationId":"search_users_for_mention_documents__document_id__chat_search_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Query"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notes/":{"post":{"tags":["notes","notes"],"summary":"Create Note","description":"Create a new personal note","operationId":"create_note_api_notes__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["notes","notes"],"summary":"Get My Notes","description":"Get all notes for the current user, optionally filtered by document","operationId":"get_my_notes_api_notes__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Document Id"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NoteResponse"},"title":"Response Get My Notes Api Notes Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notes/{note_id}":{"get":{"tags":["notes","notes"],"summary":"Get Note","description":"Get a specific note by ID","operationId":"get_note_api_notes__note_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["notes","notes"],"summary":"Update Note","description":"Update an existing note","operationId":"update_note_api_notes__note_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notes","notes"],"summary":"Delete Note","description":"Delete a note","operationId":"delete_note_api_notes__note_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notes/stats/summary":{"get":{"tags":["notes","notes"],"summary":"Get Notes Stats","description":"Get statistics about user's notes","operationId":"get_notes_stats_api_notes_stats_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/web-scraping/sources":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Create Web Source","description":"Create a new web scraping source","operationId":"create_web_source_api_web_scraping_sources_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSourceCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["web-scraping","Web Scraping"],"summary":"List Web Sources","description":"List all web scraping sources","operationId":"list_web_sources_api_web_scraping_sources_get","parameters":[{"name":"enabled_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Enabled Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/WebSourceResponse"},"title":"Response List Web Sources Api Web Scraping Sources Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/sources/{source_id}":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Get Web Source","description":"Get a specific web source","operationId":"get_web_source_api_web_scraping_sources__source_id__get","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["web-scraping","Web Scraping"],"summary":"Update Web Source","description":"Update an existing web scraping source","operationId":"update_web_source_api_web_scraping_sources__source_id__put","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSourceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebSourceResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["web-scraping","Web Scraping"],"summary":"Delete Web Source","description":"Delete a web scraping source","operationId":"delete_web_source_api_web_scraping_sources__source_id__delete","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/scrape":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Scrape Now","description":"Trigger immediate scraping\nCan scrape from:\n1. Existing source (by source_id)\n2. Ad-hoc URL (by url)","operationId":"scrape_now_api_web_scraping_scrape_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/scrape-and-download":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Scrape And Download","description":"Scrape and download documents with optional keyword filtering","operationId":"scrape_and_download_api_web_scraping_scrape_and_download_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/scrape-and-process":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Scrape And Process Full Pipeline","description":"Complete pipeline: Scrape → Download → OCR → Metadata → Store → RAG Ready\n\nThis endpoint integrates with the full BEACON Agent pipeline:\n1. Scrapes documents from website\n2. Downloads PDFs/documents\n3. Extracts text (with OCR for images)\n4. Extracts metadata using AI\n5. Stores in database\n6. Makes ready for RAG (lazy embedding)","operationId":"scrape_and_process_full_pipeline_api_web_scraping_scrape_and_process_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/logs":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Get Scraping Logs","description":"Get scraping logs","operationId":"get_scraping_logs_api_web_scraping_logs_get","parameters":[{"name":"source_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/scraped-documents":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Get Scraped Documents","description":"Get list of scraped documents","operationId":"get_scraped_documents_api_web_scraping_scraped_documents_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/debug/scraped-docs-count":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Debug Scraped Docs Count","description":"Debug endpoint to check scraped documents count","operationId":"debug_scraped_docs_count_api_web_scraping_debug_scraped_docs_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/download-document":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Download Scraped Document","description":"Download a specific document by URL\nThis proxies the download through our server\n\nNote: Some government sites block downloads (403).\nFrontend will fallback to opening the original URL.","operationId":"download_scraped_document_api_web_scraping_download_document_get","parameters":[{"name":"url","in":"query","required":true,"schema":{"type":"string","title":"Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/preview":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Preview Source","description":"Preview what documents would be scraped from a URL","operationId":"preview_source_api_web_scraping_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/validate":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Validate Source","description":"Validate if a URL is a valid scraping source","operationId":"validate_source_api_web_scraping_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/stats":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Get Scraping Stats","description":"Get overall scraping statistics including filtering effectiveness","operationId":"get_scraping_stats_api_web_scraping_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/demo/education-gov":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Demo Education Gov","description":"Quick demo: Scrape UGC website (more reliable than education.gov.in)","operationId":"demo_education_gov_api_web_scraping_demo_education_gov_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/demo/ugc":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Demo Ugc","description":"Demo: Scrape UGC website","operationId":"demo_ugc_api_web_scraping_demo_ugc_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/demo/working-urls":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Get Working Demo Urls","description":"Get list of working government URLs for demo","operationId":"get_working_demo_urls_api_web_scraping_demo_working_urls_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/clear-session":{"post":{"tags":["web-scraping","Web Scraping"],"summary":"Clear Session","description":"Clear all session data (call on logout)","operationId":"clear_session_api_web_scraping_clear_session_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/session-stats":{"get":{"tags":["web-scraping","Web Scraping"],"summary":"Get Session Stats","description":"Get session storage statistics","operationId":"get_session_stats_api_web_scraping_session_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/web-scraping/scrape-enhanced":{"post":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Scrape Source Enhanced","description":"Enhanced scraping with family management and deduplication","operationId":"scrape_source_enhanced_api_web_scraping_scrape_enhanced_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnhancedScrapeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/web-scraping/stats-enhanced":{"get":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Get Enhanced Stats","description":"Get enhanced statistics including family and deduplication metrics","operationId":"get_enhanced_stats_api_web_scraping_stats_enhanced_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/web-scraping/document-families":{"get":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Get Document Families","description":"Get document families with metadata","operationId":"get_document_families_api_web_scraping_document_families_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/DocumentFamilyResponse"},"title":"Response Get Document Families Api Web Scraping Document Families Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/document-families/{family_id}/evolution":{"get":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Get Family Evolution","description":"Get the evolution history of a document family","operationId":"get_family_evolution_api_web_scraping_document_families__family_id__evolution_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"family_id","in":"path","required":true,"schema":{"type":"integer","title":"Family Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FamilyEvolutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/document-families/migrate-existing":{"post":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Migrate Existing Documents","description":"Migrate existing documents to family structure","operationId":"migrate_existing_documents_api_web_scraping_document_families_migrate_existing_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/web-scraping/document-families/{family_id}/documents":{"get":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Get Family Documents","description":"Get all documents in a family","operationId":"get_family_documents_api_web_scraping_document_families__family_id__documents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"family_id","in":"path","required":true,"schema":{"type":"integer","title":"Family Id"}},{"name":"include_superseded","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Superseded"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/web-scraping/stop-scraping":{"post":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Stop Scraping","description":"Stop an active scraping job","operationId":"stop_scraping_api_web_scraping_stop_scraping_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Request"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/web-scraping/available-scrapers":{"get":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Get Available Scrapers","description":"Get list of available site-specific scrapers","operationId":"get_available_scrapers_api_web_scraping_available_scrapers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/web-scraping/check-document-updates":{"post":{"tags":["enhanced-web-scraping","Enhanced Web Scraping"],"summary":"Check Document Updates","description":"Check if a document at URL has been updated","operationId":"check_document_updates_api_web_scraping_check_document_updates_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"source_url","in":"query","required":true,"schema":{"type":"string","title":"Source Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/document-analysis/analyze":{"post":{"tags":["document-analysis","Document Analysis"],"summary":"Analyze Documents","description":"Download, extract, and analyze multiple documents with AI\n\nArgs:\n request: Document URLs and titles to analyze\n current_user: Authenticated user\n db: Database session\n\nReturns:\n AI analysis with metadata","operationId":"analyze_documents_api_document_analysis_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeDocumentsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeDocumentsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/document-analysis/progress/{session_id}":{"get":{"tags":["document-analysis","Document Analysis"],"summary":"Get Analysis Progress","description":"Get progress for an analysis operation","operationId":"get_analysis_progress_api_document_analysis_progress__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/document-analysis/health":{"get":{"tags":["document-analysis","Document Analysis"],"summary":"Health Check","description":"Check if analysis service is ready","operationId":"health_check_api_document_analysis_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/scraping-logs/recent":{"get":{"tags":["scraping-logs","scraping-logs"],"summary":"Get Recent Logs","description":"Get recent scraping logs\n\nArgs:\n limit: Maximum number of logs to return (default: 50)\n\nReturns:\n List of recent scraping logs","operationId":"get_recent_logs_api_scraping_logs_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScrapingLogResponse"},"title":"Response Get Recent Logs Api Scraping Logs Recent Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scraping-logs/{log_id}":{"get":{"tags":["scraping-logs","scraping-logs"],"summary":"Get Log","description":"Get a specific scraping log\n\nArgs:\n log_id: Log entry ID\n\nReturns:\n Scraping log details","operationId":"get_log_api_scraping_logs__log_id__get","parameters":[{"name":"log_id","in":"path","required":true,"schema":{"type":"integer","title":"Log Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScrapingLogResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scraping-logs/source/{source_id}":{"get":{"tags":["scraping-logs","scraping-logs"],"summary":"Get Logs For Source","description":"Get scraping logs for a specific source\n\nArgs:\n source_id: Source ID\n limit: Maximum number of logs to return (default: 20)\n\nReturns:\n List of scraping logs for the source","operationId":"get_logs_for_source_api_scraping_logs_source__source_id__get","parameters":[{"name":"source_id","in":"path","required":true,"schema":{"type":"integer","title":"Source Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ScrapingLogResponse"},"title":"Response Get Logs For Source Api Scraping Logs Source Source Id Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scraping-logs/old":{"delete":{"tags":["scraping-logs","scraping-logs"],"summary":"Clear Old Logs","description":"Clear logs older than specified days\n\nArgs:\n days: Number of days to keep logs (default: 30)\n\nReturns:\n Success message","operationId":"clear_old_logs_api_scraping_logs_old_delete","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scraping-logs/stats/summary":{"get":{"tags":["scraping-logs","scraping-logs"],"summary":"Get Logs Summary","description":"Get summary statistics of scraping logs\n\nReturns:\n Summary statistics","operationId":"get_logs_summary_api_scraping_logs_stats_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/ocr/ocr/pending-review":{"get":{"tags":["ocr","ocr"],"summary":"Get Pending Ocr Reviews","description":"Get all OCR results that need manual review\nOnly accessible by admins and document officers","operationId":"get_pending_ocr_reviews_ocr_ocr_pending_review_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/OCRResultResponse"},"type":"array","title":"Response Get Pending Ocr Reviews Ocr Ocr Pending Review Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/ocr/ocr/document/{document_id}":{"get":{"tags":["ocr","ocr"],"summary":"Get Ocr Result By Document","description":"Get OCR result for a specific document","operationId":"get_ocr_result_by_document_ocr_ocr_document__document_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OCRResultResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocr/ocr/review/{ocr_id}":{"post":{"tags":["ocr","ocr"],"summary":"Review Ocr Result","description":"Submit manual review/correction for OCR result\nUpdates the document's extracted text with corrected version","operationId":"review_ocr_result_ocr_ocr_review__ocr_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ocr_id","in":"path","required":true,"schema":{"type":"integer","title":"Ocr Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OCRReviewRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocr/ocr/reprocess/{document_id}":{"post":{"tags":["ocr","ocr"],"summary":"Reprocess Document Ocr","description":"Re-run OCR extraction on a document with different settings\nUseful when initial extraction had low confidence","operationId":"reprocess_document_ocr_ocr_ocr_reprocess__document_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Body_reprocess_document_ocr_ocr_ocr_reprocess__document_id__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ocr/ocr/stats":{"get":{"tags":["ocr","ocr"],"summary":"Get Ocr Stats","description":"Get OCR statistics","operationId":"get_ocr_stats_ocr_ocr_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/ocr/ocr/tables/{document_id}":{"get":{"tags":["ocr","ocr"],"summary":"Get Document Tables","description":"Get extracted tables from a document\n\nArgs:\n document_id: Document ID\n format: Output format (json, markdown, csv, html)","operationId":"get_document_tables_ocr_ocr_tables__document_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"format","in":"query","required":false,"schema":{"type":"string","default":"json","title":"Format"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AnalyzeDocumentsRequest":{"properties":{"document_urls":{"items":{"type":"string"},"type":"array","title":"Document Urls"},"document_titles":{"items":{"type":"string"},"type":"array","title":"Document Titles"},"analysis_type":{"type":"string","title":"Analysis Type","default":"decision_support"}},"type":"object","required":["document_urls","document_titles"],"title":"AnalyzeDocumentsRequest"},"AnalyzeDocumentsResponse":{"properties":{"analysis":{"type":"string","title":"Analysis"},"documents_processed":{"type":"integer","title":"Documents Processed"},"total_chunks":{"type":"integer","title":"Total Chunks"},"analysis_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Analysis Id"},"ocr_used_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ocr Used Count","default":0},"extraction_details":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Extraction Details","default":[]}},"type":"object","required":["analysis","documents_processed","total_chunks"],"title":"AnalyzeDocumentsResponse"},"ApprovalAction":{"properties":{"rejection_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rejection Reason"}},"type":"object","title":"ApprovalAction","description":"Approve or reject request"},"ApprovalRequest":{"properties":{"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ApprovalRequest"},"AssignUserRequest":{"properties":{"institution_id":{"type":"integer","title":"Institution Id"}},"type":"object","required":["institution_id"],"title":"AssignUserRequest"},"Body_reprocess_document_ocr_ocr_ocr_reprocess__document_id__post":{"properties":{"preprocessing_level":{"type":"string","title":"Preprocessing Level","default":"heavy"}},"type":"object","title":"Body_reprocess_document_ocr_ocr_ocr_reprocess__document_id__post"},"Body_transcribe_audio_voice_transcribe_post":{"properties":{"audio":{"type":"string","format":"binary","title":"Audio"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"}},"type":"object","required":["audio"],"title":"Body_transcribe_audio_voice_transcribe_post"},"Body_upload_documents_documents_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","default":"Uncategorized"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department","default":"General"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility","default":"public"},"institution":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Institution"},"year":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Year"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Version","default":"1.0"},"download_allowed":{"type":"boolean","title":"Download Allowed","default":false}},"type":"object","required":["file"],"title":"Body_upload_documents_documents_upload_post"},"Body_voice_query_stream_voice_query_stream_post":{"properties":{"audio":{"type":"string","format":"binary","title":"Audio"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id"}},"type":"object","required":["audio"],"title":"Body_voice_query_stream_voice_query_stream_post"},"Body_voice_query_voice_query_post":{"properties":{"audio":{"type":"string","format":"binary","title":"Audio"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id"}},"type":"object","required":["audio"],"title":"Body_voice_query_voice_query_post"},"ChangesRequest":{"properties":{"changes_requested":{"type":"string","title":"Changes Requested"}},"type":"object","required":["changes_requested"],"title":"ChangesRequest"},"ChatRequest":{"properties":{"question":{"type":"string","title":"Question"},"thread_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Thread Id","default":"default"},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["question"],"title":"ChatRequest"},"ChatResponse":{"properties":{"answer":{"type":"string","title":"Answer"},"format":{"type":"string","title":"Format","default":"text"},"data":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Data"},"citations":{"items":{},"type":"array","title":"Citations"},"confidence":{"type":"number","title":"Confidence"},"status":{"type":"string","title":"Status"},"session_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Session Id"},"message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Id"}},"type":"object","required":["answer","citations","confidence","status"],"title":"ChatResponse"},"CompareRequest":{"properties":{"document_ids":{"items":{"type":"integer"},"type":"array","title":"Document Ids"},"comparison_aspects":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Comparison Aspects"}},"type":"object","required":["document_ids"],"title":"CompareRequest"},"ComplianceRequest":{"properties":{"checklist":{"items":{"type":"string"},"type":"array","title":"Checklist"},"strict_mode":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Strict Mode","default":false}},"type":"object","required":["checklist"],"title":"ComplianceRequest"},"ConnectionTest":{"properties":{"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":5432},"database_name":{"type":"string","title":"Database Name"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"}},"type":"object","required":["host","database_name","username","password"],"title":"ConnectionTest"},"CreateSessionRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title","description":"Optional session title"}},"type":"object","title":"CreateSessionRequest","description":"Request model for creating a new chat session"},"DataSourceCreate":{"properties":{"name":{"type":"string","title":"Name"},"ministry_name":{"type":"string","title":"Ministry Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":5432},"database_name":{"type":"string","title":"Database Name"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"table_name":{"type":"string","title":"Table Name"},"file_column":{"type":"string","title":"File Column"},"filename_column":{"type":"string","title":"Filename Column"},"metadata_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Columns"},"storage_type":{"type":"string","title":"Storage Type","default":"database"},"supabase_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Url"},"supabase_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Key"},"supabase_bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Bucket"},"file_path_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path Prefix"},"sync_enabled":{"type":"boolean","title":"Sync Enabled","default":true},"sync_frequency":{"type":"string","title":"Sync Frequency","default":"daily"}},"type":"object","required":["name","ministry_name","host","database_name","username","password","table_name","file_column","filename_column"],"title":"DataSourceCreate"},"DataSourceRequest":{"properties":{"name":{"type":"string","title":"Name"},"ministry_name":{"type":"string","title":"Ministry Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"host":{"type":"string","title":"Host"},"port":{"type":"integer","title":"Port","default":5432},"database_name":{"type":"string","title":"Database Name"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"table_name":{"type":"string","title":"Table Name"},"file_column":{"type":"string","title":"File Column"},"filename_column":{"type":"string","title":"Filename Column"},"metadata_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Columns"},"storage_type":{"type":"string","title":"Storage Type","default":"database"},"supabase_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Url"},"supabase_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Key"},"supabase_bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Bucket"},"file_path_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path Prefix"},"data_classification":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Data Classification"},"request_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Notes"}},"type":"object","required":["name","ministry_name","host","database_name","username","password","table_name","file_column","filename_column"],"title":"DataSourceRequest","description":"Request model for Ministry/University admins"},"DataSourceUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"ministry_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ministry Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"host":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host"},"port":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Port"},"database_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Database Name"},"username":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Username"},"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"table_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Table Name"},"file_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Column"},"filename_column":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename Column"},"metadata_columns":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Metadata Columns"},"storage_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Type"},"supabase_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Url"},"supabase_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Key"},"supabase_bucket":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supabase Bucket"},"file_path_prefix":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Path Prefix"},"sync_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Sync Enabled"},"sync_frequency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Frequency"}},"type":"object","title":"DataSourceUpdate"},"DeleteInstitutionRequest":{"properties":{"confirm":{"type":"boolean","title":"Confirm"}},"type":"object","required":["confirm"],"title":"DeleteInstitutionRequest"},"DocumentFamilyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"canonical_title":{"type":"string","title":"Canonical Title"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"ministry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ministry"},"document_count":{"type":"integer","title":"Document Count"},"latest_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest Version"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"}},"type":"object","required":["id","canonical_title","category","ministry","document_count","latest_version","created_at","updated_at"],"title":"DocumentFamilyResponse"},"DomainRequest":{"properties":{"institution_id":{"type":"integer","title":"Institution Id"},"domain":{"type":"string","title":"Domain"}},"type":"object","required":["institution_id","domain"],"title":"DomainRequest"},"EnhancedScrapeRequest":{"properties":{"source_id":{"type":"integer","title":"Source Id"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"max_documents":{"type":"integer","title":"Max Documents","default":1500},"pagination_enabled":{"type":"boolean","title":"Pagination Enabled","default":true},"max_pages":{"type":"integer","title":"Max Pages","default":100},"incremental":{"type":"boolean","title":"Incremental","default":true}},"type":"object","required":["source_id"],"title":"EnhancedScrapeRequest"},"FamilyEvolutionResponse":{"properties":{"family_id":{"type":"integer","title":"Family Id"},"canonical_title":{"type":"string","title":"Canonical Title"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"ministry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ministry"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"versions":{"items":{"type":"object"},"type":"array","title":"Versions"}},"type":"object","required":["family_id","canonical_title","category","ministry","created_at","updated_at","versions"],"title":"FamilyEvolutionResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InstitutionCreate":{"properties":{"name":{"type":"string","title":"Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"type":{"type":"string","title":"Type"},"parent_ministry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Ministry Id"}},"type":"object","required":["name","type"],"title":"InstitutionCreate"},"InstitutionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"type":{"type":"string","title":"Type"},"user_count":{"type":"integer","title":"User Count"},"parent_ministry_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Ministry Id"},"parent_ministry":{"anyOf":[{"$ref":"#/components/schemas/ParentMinistryInfo"},{"type":"null"}]},"child_universities_count":{"type":"integer","title":"Child Universities Count","default":0}},"type":"object","required":["id","name","location","type","user_count"],"title":"InstitutionResponse"},"LoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"MessagesResponse":{"properties":{"session_id":{"type":"integer","title":"Session Id"},"messages":{"items":{"$ref":"#/components/schemas/backend__routers__chat_history_router__MessageResponse"},"type":"array","title":"Messages"}},"type":"object","required":["session_id","messages"],"title":"MessagesResponse","description":"Response model for messages list"},"NoteCreate":{"properties":{"document_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Document Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"type":"string","title":"Content"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},"type":"object","required":["content"],"title":"NoteCreate"},"NoteResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"document_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Document Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"type":"string","title":"Content"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_pinned":{"type":"boolean","title":"Is Pinned"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"document_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Title"}},"type":"object","required":["id","user_id","document_id","title","content","tags","is_pinned","color","created_at","updated_at"],"title":"NoteResponse"},"NoteUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"is_pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pinned"},"color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Color"}},"type":"object","title":"NoteUpdate"},"OCRResultResponse":{"properties":{"id":{"type":"integer","title":"Id"},"document_id":{"type":"integer","title":"Document Id"},"document_filename":{"type":"string","title":"Document Filename"},"engine_used":{"type":"string","title":"Engine Used"},"confidence_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence Score"},"extraction_time":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Extraction Time"},"language_detected":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language Detected"},"needs_review":{"type":"boolean","title":"Needs Review"},"quality_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Quality Score"},"issues":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Issues"},"pages_with_ocr":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Pages With Ocr"},"pages_with_text":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Pages With Text"},"processed_result":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Processed Result"},"reviewed_by":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reviewed By"},"reviewed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed At"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","document_id","document_filename","engine_used","confidence_score","extraction_time","language_detected","needs_review","quality_score","issues","pages_with_ocr","pages_with_text","processed_result","reviewed_by","reviewed_at","created_at"],"title":"OCRResultResponse"},"OCRReviewRequest":{"properties":{"corrected_text":{"type":"string","title":"Corrected Text"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["corrected_text"],"title":"OCRReviewRequest"},"ParentMinistryInfo":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"}},"type":"object","required":["id","name"],"title":"ParentMinistryInfo"},"ParticipantResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"user_name":{"type":"string","title":"User Name"},"user_email":{"type":"string","title":"User Email"},"is_active":{"type":"boolean","title":"Is Active"},"last_seen":{"type":"string","format":"date-time","title":"Last Seen"}},"type":"object","required":["user_id","user_name","user_email","is_active","last_seen"],"title":"ParticipantResponse"},"PreviewRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"}},"type":"object","required":["url"],"title":"PreviewRequest"},"RegisterRequest":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"role":{"type":"string","title":"Role"},"institution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Institution Id"}},"type":"object","required":["name","email","password","role"],"title":"RegisterRequest"},"RejectRequest":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"RejectRequest"},"RoleChangeRequest":{"properties":{"new_role":{"type":"string","title":"New Role"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["new_role"],"title":"RoleChangeRequest"},"ScrapeRequest":{"properties":{"source_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Source Id"},"url":{"anyOf":[{"type":"string","maxLength":2083,"minLength":1,"format":"uri"},{"type":"null"}],"title":"Url"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"max_documents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Documents","default":1500},"pagination_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Pagination Enabled","default":true},"max_pages":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Pages","default":100},"incremental":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Incremental","default":false}},"type":"object","title":"ScrapeRequest"},"ScrapingLogResponse":{"properties":{"id":{"type":"integer","title":"Id"},"source_id":{"type":"integer","title":"Source Id"},"source_name":{"type":"string","title":"Source Name"},"source_url":{"type":"string","title":"Source Url"},"status":{"type":"string","title":"Status"},"started_at":{"type":"string","title":"Started At"},"completed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Completed At"},"max_documents":{"type":"integer","title":"Max Documents"},"max_pages":{"type":"integer","title":"Max Pages"},"documents_found":{"type":"integer","title":"Documents Found"},"pages_scraped":{"type":"integer","title":"Pages Scraped"},"current_page":{"type":"integer","title":"Current Page"},"execution_time":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Execution Time"},"errors":{"items":{"type":"object"},"type":"array","title":"Errors"},"messages":{"items":{"type":"string"},"type":"array","title":"Messages"}},"type":"object","required":["id","source_id","source_name","source_url","status","started_at","completed_at","max_documents","max_pages","documents_found","pages_scraped","current_page","execution_time","errors","messages"],"title":"ScrapingLogResponse","description":"Scraping log response model"},"SendMessageRequest":{"properties":{"content":{"type":"string","title":"Content"},"parent_message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Message Id"}},"type":"object","required":["content"],"title":"SendMessageRequest"},"SessionListResponse":{"properties":{"sessions":{"items":{"$ref":"#/components/schemas/SessionResponse"},"type":"array","title":"Sessions"},"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"}},"type":"object","required":["sessions","total","limit","offset"],"title":"SessionListResponse","description":"Response model for session list"},"SessionResponse":{"properties":{"session_id":{"type":"integer","title":"Session Id"},"title":{"type":"string","title":"Title"},"thread_id":{"type":"string","title":"Thread Id"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"message_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Message Count","default":0},"last_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Message"}},"type":"object","required":["session_id","title","thread_id","created_at","updated_at"],"title":"SessionResponse","description":"Response model for chat session"},"TokenResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user":{"type":"object","title":"User"}},"type":"object","required":["access_token","user"],"title":"TokenResponse"},"UpdateProfileRequest":{"properties":{"name":{"type":"string","maxLength":100,"minLength":1,"title":"Name"}},"type":"object","required":["name"],"title":"UpdateProfileRequest"},"UpdateTitleRequest":{"properties":{"title":{"type":"string","maxLength":200,"minLength":1,"title":"Title","description":"New session title"}},"type":"object","required":["title"],"title":"UpdateTitleRequest","description":"Request model for updating session title"},"UserListResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"institution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Institution Id"},"approved":{"type":"boolean","title":"Approved"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","email","role","institution_id","approved","created_at"],"title":"UserListResponse"},"UserResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"role":{"type":"string","title":"Role"},"institution_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Institution Id"},"approved":{"type":"boolean","title":"Approved"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","name","email","role","institution_id","approved","created_at"],"title":"UserResponse"},"ValidateRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"}},"type":"object","required":["url"],"title":"ValidateRequest"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WebSourceCreate":{"properties":{"name":{"type":"string","title":"Name"},"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"max_documents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Documents","default":50},"scraping_enabled":{"type":"boolean","title":"Scraping Enabled","default":true}},"type":"object","required":["name","url"],"title":"WebSourceCreate"},"WebSourceResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"url":{"type":"string","title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Keywords"},"max_documents":{"type":"integer","title":"Max Documents"},"scraping_enabled":{"type":"boolean","title":"Scraping Enabled"},"last_scraped_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scraped At"},"last_scrape_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Scrape Status"},"total_documents_scraped":{"type":"integer","title":"Total Documents Scraped"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","name","url","description","keywords","max_documents","scraping_enabled","last_scraped_at","last_scrape_status","total_documents_scraped","created_at"],"title":"WebSourceResponse"},"backend__routers__chat_history_router__MessageResponse":{"properties":{"id":{"type":"integer","title":"Id"},"role":{"type":"string","title":"Role"},"content":{"type":"string","title":"Content"},"citations":{"items":{"type":"object"},"type":"array","title":"Citations","default":[]},"confidence":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Confidence"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","role","content","created_at"],"title":"MessageResponse","description":"Response model for chat message"},"backend__routers__document_chat_router__MessageResponse":{"properties":{"id":{"type":"integer","title":"Id"},"document_id":{"type":"integer","title":"Document Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"content":{"type":"string","title":"Content"},"message_type":{"type":"string","title":"Message Type"},"parent_message_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Message Id"},"citations":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Citations"},"mentioned_user_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Mentioned User Ids"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","document_id","user_id","user_name","content","message_type","parent_message_id","citations","mentioned_user_ids","created_at"],"title":"MessageResponse"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}