{"openapi":"3.1.0","info":{"title":"Perlucem.AI Backend","version":"1.0.0"},"paths":{"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/health":{"get":{"summary":"Health Check","description":"Simple health check - returns immediately.","operationId":"health_check_api_v1_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Simple health check - returns immediately.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/diagnostics":{"get":{"summary":"Diagnostics","description":"Detailed diagnostic endpoint for debugging deployment issues.\nReturns system info and connectivity status.","operationId":"diagnostics_diagnostics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/signup":{"post":{"tags":["Authentication"],"summary":"Signup","description":"Create a new user account.\n\n- **email**: User email address\n- **password**: User password (min 8 characters)\n- **is_demo**: Whether this is a demo account (default: True)","operationId":"signup_api_v1_auth_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSignup"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["Authentication"],"summary":"Login","description":"Login with email and password.\n\n- **email**: User email address\n- **password**: User password","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserLogin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Authentication"],"summary":"Get Current User Profile","description":"Get current user's profile.\n\nRequires authentication.","operationId":"get_current_user_profile_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserProfile"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/logout":{"post":{"tags":["Authentication"],"summary":"Logout","description":"Logout current user.\n\nNote: With JWT tokens, logout is handled client-side by removing the token.","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/me/banks":{"get":{"tags":["Authentication"],"summary":"Get My Banks","description":"Get current user's assigned banks and admin status.","operationId":"get_my_banks_api_v1_auth_me_banks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get My Banks Api V1 Auth Me Banks Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/me/trial-status":{"get":{"tags":["Authentication"],"summary":"Get My Trial Status","description":"Get trial status for the current user's assigned banks.\nReturns trial info if user is on a trial, or null if on paid plan or admin.","operationId":"get_my_trial_status_api_v1_auth_me_trial_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get My Trial Status Api V1 Auth Me Trial Status Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/auth/debug/token":{"get":{"tags":["Authentication"],"summary":"Debug Token","description":"Debug endpoint to inspect JWT token claims without verification.","operationId":"debug_token_api_v1_auth_debug_token_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Debug Token Api V1 Auth Debug Token Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/validate":{"get":{"tags":["Invitations"],"summary":"Validate Invitation","description":"Validate an invitation token.\n\nChecks if:\n- Token exists\n- Token is not expired\n- Token has not been used\n\nArgs:\n    token: Invitation token from URL\n\nReturns:\n    Invitation details if valid","operationId":"validate_invitation_api_v1_invitations_validate_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationValidateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/signup":{"post":{"tags":["Invitations"],"summary":"Signup Via Invitation","description":"Complete signup flow via invitation.\n\nProcess:\n1. Validate invitation token\n2. Create Cognito user account\n3. Create user_bank_assignment or admin record\n4. Mark invitation as accepted\n5. Return auth tokens\n\nArgs:\n    request: Signup data with invitation_token, password, and optional full_name\n\nReturns:\n    Success status, bank info, and auth tokens","operationId":"signup_via_invitation_api_v1_invitations_signup_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationSignupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationSignupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/accept":{"post":{"tags":["Invitations"],"summary":"Accept Invitation","description":"Accept an invitation after Cognito signup.\n\nProcess:\n1. Validate invitation token\n2. Create user_bank_assignment\n3. Mark invitation as accepted\n\nNote: User account is created via Cognito in the frontend.\nThis endpoint is called after successful Cognito signup.\n\nArgs:\n    request: Invitation acceptance data with Cognito user_id\n\nReturns:\n    Success status and bank info","operationId":"accept_invitation_api_v1_invitations_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationAcceptRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationAcceptResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/invitations/check-email/{email}":{"get":{"tags":["Invitations"],"summary":"Check Email Availability","description":"Check if an email is available for invitation.\n\nArgs:\n    email: Email address to check\n\nReturns:\n    Whether email is available","operationId":"check_email_availability_api_v1_invitations_check_email__email__get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/bedrock/kb/status":{"get":{"tags":["Admin"],"summary":"Get Bedrock Kb Status","description":"Get the status of the Bedrock Knowledge Base.\nReturns KB info, data sources, and document counts.","operationId":"get_bedrock_kb_status_api_v1_admin_bedrock_kb_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BedrockKBStatusResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/invitations/create":{"post":{"tags":["Admin"],"summary":"Create Invitation","description":"Create a new user invitation.\n\nFor super admin invitations (is_super_admin=True):\n- Only super_admin level users can create these\n- rssd_id and bank_name are not required\n- Invitee becomes a Perlucem staff admin\n\nFor bank user invitations (is_super_admin=False):\n- rssd_id and bank_name are required\n- Invitee gets access to the specified bank","operationId":"create_invitation_api_v1_admin_invitations_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInvitationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvitationResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/invitations/list":{"get":{"tags":["Admin"],"summary":"List Invitations","description":"List all invitations.","operationId":"list_invitations_api_v1_admin_invitations_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/InvitationResponse"},"title":"Response List Invitations Api V1 Admin Invitations List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/invitations/{invitation_id}":{"delete":{"tags":["Admin"],"summary":"Delete Invitation","description":"Delete an invitation permanently from the database.","operationId":"delete_invitation_api_v1_admin_invitations__invitation_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/invitations/{invitation_id}/resend":{"post":{"tags":["Admin"],"summary":"Resend Invitation","description":"Resend an invitation email.","operationId":"resend_invitation_api_v1_admin_invitations__invitation_id__resend_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invitation_id","in":"path","required":true,"schema":{"type":"string","title":"Invitation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/assign-bank":{"post":{"tags":["Admin"],"summary":"Assign Bank To User","description":"Assign a bank to an existing user.","operationId":"assign_bank_to_user_api_v1_admin_users__user_id__assign_bank_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignBankRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/remove-bank/{rssd_id}":{"delete":{"tags":["Admin"],"summary":"Remove Bank From User","description":"Remove a bank assignment from a user (soft delete).","operationId":"remove_bank_from_user_api_v1_admin_users__user_id__remove_bank__rssd_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/list":{"get":{"tags":["Admin"],"summary":"List Users","description":"List all users with their bank assignments.\n\nFilters:\n- rssd_id: Filter to only users assigned to this bank\n- user_type: 'admin' (any admin), 'bank_user' (non-admins), 'perlucem_staff' (Perlucem employees)","operationId":"list_users_api_v1_admin_users_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},{"name":"user_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/UserAssignmentResponse"},"title":"Response List Users Api V1 Admin Users List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}":{"delete":{"tags":["Admin"],"summary":"Delete User","description":"Fully delete a user from the system including Cognito.\n\nDeletes from:\n- AWS Cognito (authentication)\n- user_bank_assignments\n- admin_users\n- user_2fa_settings\n- trusted_devices\n- user_profiles","operationId":"delete_user_api_v1_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/activity/log":{"get":{"tags":["Admin"],"summary":"Get Activity Log","description":"Get activity log entries with optional filters.\n\nFilters:\n- user_id: Filter to specific user's activities\n- rssd_id: Filter to activities related to a specific bank\n- activity_type: Filter by activity type (login, page_view, chat_message, etc.)","operationId":"get_activity_log_api_v1_admin_activity_log_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Id"}},{"name":"rssd_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},{"name":"activity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Activity Type"}},{"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/ActivityLogEntry"},"title":"Response Get Activity Log Api V1 Admin Activity Log Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Admin"],"summary":"Log Activity","description":"Log a user activity. Called from frontend to track user actions.\n\nActivity types:\n- login: User logged in\n- logout: User logged out\n- page_view: User viewed a page\n- chat_message: User sent a chat message\n- report_access: User accessed a report\n- analysis_run: User ran an analysis","operationId":"log_activity_api_v1_admin_activity_log_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogActivityRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/impersonate/validate":{"post":{"tags":["Admin"],"summary":"Validate Impersonation Token","description":"Validate an impersonation token and return target user info.\n\nThis endpoint is used by the frontend to validate the token and get\nthe target user's information for the impersonation session.","operationId":"validate_impersonation_token_api_v1_admin_impersonate_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ValidateImpersonationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/impersonate/end":{"post":{"tags":["Admin"],"summary":"End Impersonation","description":"End an impersonation session by invalidating the token.","operationId":"end_impersonation_api_v1_admin_impersonate_end_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"token","in":"query","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"}}}}}}},"/api/v1/admin/impersonate/{user_id}":{"post":{"tags":["Admin"],"summary":"Create Impersonation Token","description":"Generate a temporary token for super admin to login as another user.\n\nOnly super_admin level users can use this endpoint.\nToken expires in 1 hour.","operationId":"create_impersonation_token_api_v1_admin_impersonate__user_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpersonationTokenResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/create-admin":{"post":{"tags":["Admin"],"summary":"Create Admin User","description":"Create or promote a user to admin status.\n\nOnly super_admin level users can create other admins.","operationId":"create_admin_user_api_v1_admin_users_create_admin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAdminRequest"}}},"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/v1/admin/users/{user_id}/admin":{"delete":{"tags":["Admin"],"summary":"Remove Admin Status","description":"Remove admin status from a user.","operationId":"remove_admin_status_api_v1_admin_users__user_id__admin_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/users/{user_id}/activity":{"get":{"tags":["Admin"],"summary":"Get User Activity","description":"Get activity log for a specific user.","operationId":"get_user_activity_api_v1_admin_users__user_id__activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"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/ActivityLogEntry"},"title":"Response Get User Activity Api V1 Admin Users  User Id  Activity Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reports/upload":{"post":{"tags":["Admin"],"summary":"Upload Report","description":"Upload a bank report for processing.","operationId":"upload_report_api_v1_admin_reports_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_report_api_v1_admin_reports_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/reports/list":{"get":{"tags":["Admin"],"summary":"List Reports","description":"List all uploaded reports.","operationId":"list_reports_api_v1_admin_reports_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},{"name":"pillar","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReportListResponse"},"title":"Response List Reports Api V1 Admin Reports List Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reports/{report_id}":{"get":{"tags":["Admin"],"summary":"Get Report","description":"Get report details.","operationId":"get_report_api_v1_admin_reports__report_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete Report","description":"Delete a report from Bedrock KB and database.","operationId":"delete_report_api_v1_admin_reports__report_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/reports/{report_id}/reprocess":{"post":{"tags":["Admin"],"summary":"Reprocess Report","description":"Reprocess a report by triggering Bedrock KB sync.","operationId":"reprocess_report_api_v1_admin_reports__report_id__reprocess_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/personas/list":{"get":{"tags":["Admin"],"summary":"List Personas","description":"List all Expert AI Analyst personas","operationId":"list_personas_api_v1_admin_personas_list_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pillar","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/personas/create":{"post":{"tags":["Admin"],"summary":"Create Persona","description":"Create a new Expert AI Analyst persona","operationId":"create_persona_api_v1_admin_personas_create_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePersonaRequest"}}},"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/v1/admin/personas/{persona_id}":{"put":{"tags":["Admin"],"summary":"Update Persona","description":"Update an Expert AI Analyst persona","operationId":"update_persona_api_v1_admin_personas__persona_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePersonaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Admin"],"summary":"Delete Persona","description":"Soft delete a persona","operationId":"delete_persona_api_v1_admin_personas__persona_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/personas/{persona_id}/set-default":{"post":{"tags":["Admin"],"summary":"Set Default Persona","description":"Set a persona as default for its pillar","operationId":"set_default_persona_api_v1_admin_personas__persona_id__set_default_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/personas/{persona_id}/test":{"post":{"tags":["Admin"],"summary":"Test Persona","description":"Test an Expert AI Analyst persona via Bedrock (keeps data in AWS)","operationId":"test_persona_api_v1_admin_personas__persona_id__test_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TestPersonaRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ffiec/stats":{"get":{"tags":["Admin"],"summary":"Get Ffiec Database Stats","description":"Get FFIEC database statistics.","operationId":"get_ffiec_database_stats_api_v1_admin_ffiec_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FFIECDatabaseStats"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ffiec/banks/search":{"get":{"tags":["Admin"],"summary":"Search Ffiec Banks","description":"Search for banks in FFIEC database by name or RSSD ID.","operationId":"search_ffiec_banks_api_v1_admin_ffiec_banks_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FFIECBankSearchResult"},"title":"Response Search Ffiec Banks Api V1 Admin Ffiec Banks Search Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ffiec/banks/{rssd_id}/info":{"get":{"tags":["Admin"],"summary":"Get Ffiec Bank Info","description":"Get detailed info for a bank.","operationId":"get_ffiec_bank_info_api_v1_admin_ffiec_banks__rssd_id__info_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"integer","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ffiec/banks/{rssd_id}/quarters":{"get":{"tags":["Admin"],"summary":"Get Ffiec Bank Quarters","description":"Get available quarters for a bank.","operationId":"get_ffiec_bank_quarters_api_v1_admin_ffiec_banks__rssd_id__quarters_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"integer","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FFIECQuartersResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/ffiec/generate":{"post":{"tags":["Admin"],"summary":"Generate Ffiec Data","description":"Generate FFIEC data files for a bank.\n\nOutput types:\n- tbpi_csv: TBPI-Ready CSV (LLM-optimized format)\n- tbpi_json: TBPI-Ready JSON (structured data)\n- aie_summary: AIE Summary CSV (40+ calculated metrics)","operationId":"generate_ffiec_data_api_v1_admin_ffiec_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FFIECGenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FFIECGenerateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/ffiec/generate-snapshot":{"post":{"tags":["Admin"],"summary":"Generate Ffiec Snapshot","description":"Generate FFIEC data files (AIE, Peer, TBPI) and save as an immutable\ndata snapshot in S3 + RDS. This is for creating custom snapshots from\nthe FFIEC Data panel.","operationId":"generate_ffiec_snapshot_api_v1_admin_ffiec_generate_snapshot_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FFIECSnapshotRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/peer/resolve":{"post":{"tags":["Peer Analysis"],"summary":"Resolve Peer Group","description":"Resolve peer group to bank list.\n\nReturns list of banks matching the peer group criteria.\nSynchronous - just DB queries, no heavy computation.","operationId":"resolve_peer_group_api_v1_peer_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveRequest"}}},"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/v1/peer/analyze":{"post":{"tags":["Peer Analysis"],"summary":"Analyze Peer Group","description":"Initiate full peer analysis (background task).\n\nReturns analysis_id for progress tracking. The analysis runs in a\nbackground thread and can be polled via /progress/{analysis_id}.","operationId":"analyze_peer_group_api_v1_peer_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__peer__AnalyzeRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/peer/progress/{analysis_id}":{"get":{"tags":["Peer Analysis"],"summary":"Get Progress","description":"Poll analysis progress.\n\nReturns current status, peer count, progress percentage, and message.","operationId":"get_progress_api_v1_peer_progress__analysis_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"analysis_id","in":"path","required":true,"schema":{"type":"string","title":"Analysis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/peer/results/{analysis_id}":{"get":{"tags":["Peer Analysis"],"summary":"Get Results","description":"Get completed peer analysis results.\n\nReturns full analysis data including subject, peer group, quarters,\nstatistics, and per-bank metrics.","operationId":"get_results_api_v1_peer_results__analysis_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"analysis_id","in":"path","required":true,"schema":{"type":"string","title":"Analysis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/peer/results/{analysis_id}/csv":{"get":{"tags":["Peer Analysis"],"summary":"Get Results Csv","description":"Download peer analysis report as CSV.\n\nReturns a CSV file with content-disposition header for download.","operationId":"get_results_csv_api_v1_peer_results__analysis_id__csv_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"analysis_id","in":"path","required":true,"schema":{"type":"string","title":"Analysis Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/bedrock/documents":{"get":{"tags":["Bedrock Documents"],"summary":"List All Documents","description":"List all documents in Bedrock KB, optionally filtered by bank or type.\nReturns both bank-specific and global documents.","operationId":"list_all_documents_api_v1_admin_bedrock_documents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},{"name":"document_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"}},{"name":"pillar","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"}},{"name":"include_global","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Global"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/bedrock/documents/bank/{rssd_id}":{"get":{"tags":["Bedrock Documents"],"summary":"List Bank Documents","description":"List all documents for a specific bank","operationId":"list_bank_documents_api_v1_admin_bedrock_documents_bank__rssd_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/bedrock/documents/upload":{"post":{"tags":["Bedrock Documents"],"summary":"Upload Document","description":"Upload a document to Bedrock KB.\n\nTwo modes:\n1. Bank-specific (is_global=False): Requires rssd_id and bank_name\n   - For pillar documents: set document_type=\"pillar_analysis\" and pillar=revenue|cost|risk|capital|operations\n   - For other reports: set document_type to board_report, quarterly_review, or custom\n\n2. Global (is_global=True): No rssd_id/bank_name needed\n   - Available to all banks when semantically relevant\n   - Example: Housing market analysis, interest rate reports\n\nOptional: Link to persona_id for an Expert AI Analyst whose expertise\nwill be used when discussing this document.","operationId":"upload_document_api_v1_admin_bedrock_documents_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_document_api_v1_admin_bedrock_documents_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadDocumentResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/bedrock/documents/{document_id}/view-url":{"get":{"tags":["Bedrock Documents"],"summary":"Get Document View Url","description":"Generate a presigned S3 URL for viewing/downloading a document","operationId":"get_document_view_url_api_v1_admin_bedrock_documents__document_id__view_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/bedrock/documents/{document_id}":{"put":{"tags":["Bedrock Documents"],"summary":"Update Document","description":"Update document metadata","operationId":"update_document_api_v1_admin_bedrock_documents__document_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDocumentRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Bedrock Documents"],"summary":"Delete Document","description":"Delete a document from Bedrock KB","operationId":"delete_document_api_v1_admin_bedrock_documents__document_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"document_id","in":"path","required":true,"schema":{"type":"string","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/bedrock/sync":{"post":{"tags":["Bedrock Documents"],"summary":"Trigger Sync","description":"Manually trigger Bedrock KB sync","operationId":"trigger_sync_api_v1_admin_bedrock_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/bedrock/sync/status":{"get":{"tags":["Bedrock Documents"],"summary":"Get Sync Status","description":"Get recent sync job statuses","operationId":"get_sync_status_api_v1_admin_bedrock_sync_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/admin/bedrock/stats":{"get":{"tags":["Bedrock Documents"],"summary":"Get Document Stats","description":"Get overall document statistics","operationId":"get_document_stats_api_v1_admin_bedrock_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tbpi/analyze":{"post":{"tags":["TBPI Analysis"],"summary":"Analyze Pillar","description":"Initiate TBPI analysis for a specific pillar\n\nThis endpoint starts an asynchronous analysis process. The analysis\nruns in the background and can take 60-90 seconds to complete.\n\n**Process:**\n1. Validates RSSD ID and pillar\n2. Creates analysis session\n3. Launches background analysis task\n4. Returns session ID for progress tracking\n\n**Usage:**\n```\nPOST /api/v1/tbpi/analyze\n{\n    \"rssd_id\": \"59754\",\n    \"pillar\": \"revenue\"\n}\n```\n\nPoll `/progress/{session_id}` to track progress.","operationId":"analyze_pillar_api_v1_tbpi_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__endpoints__tbpi__AnalyzeRequest"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyzeResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/tbpi/progress/{session_id}":{"get":{"tags":["TBPI Analysis"],"summary":"Get Progress","description":"Get analysis progress for a session\n\nReturns real-time progress information including:\n- Current step being executed\n- Progress percentage\n- Status (pending, in_progress, completed, failed)\n- Error message if failed\n\n**Polling Interval:** Poll every 2-3 seconds for updates\n\n**Status Values:**\n- `pending`: Analysis queued but not started\n- `in_progress`: Analysis currently running\n- `completed`: Analysis finished successfully\n- `failed`: Analysis encountered an error","operationId":"get_progress_api_v1_tbpi_progress__session_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProgressResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tbpi/analyses/{rssd_id}":{"get":{"tags":["TBPI Analysis"],"summary":"List Analyses","description":"List all pillar analyses for a bank\n\nReturns summaries of all completed analyses for the specified bank.\nResults are ordered by generation time (most recent first).\n\n**Use Cases:**\n- Display completed pillars on analysis page\n- Show historical analyses\n- Get overview of bank performance across pillars","operationId":"list_analyses_api_v1_tbpi_analyses__rssd_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AnalysisSummary"},"title":"Response List Analyses Api V1 Tbpi Analyses  Rssd Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tbpi/analyses/{rssd_id}/{pillar}":{"get":{"tags":["TBPI Analysis"],"summary":"Get Analysis Detail","description":"Get detailed analysis for a specific pillar\n\nReturns the complete 8-section analysis for the specified pillar,\nincluding all findings, ratings, and recommendations.\n\n**Sections Returned:**\n1. Executive Summary\n2-4. Domain-specific analysis sections\n5. Peer Benchmarking\n6. Trend Analysis\n7. Cross-Pillar Connections\n8. Priority Recommendations\n\n**Use Cases:**\n- Display full pillar analysis to user\n- Export analysis to PDF\n- Share analysis with stakeholders","operationId":"get_analysis_detail_api_v1_tbpi_analyses__rssd_id___pillar__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}},{"name":"pillar","in":"path","required":true,"schema":{"type":"string","title":"Pillar"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalysisDetail"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tbpi/available-periods/{rssd_id}":{"get":{"tags":["TBPI Analysis"],"summary":"Get Available Periods","description":"Get all available reporting periods for a bank\n\nReturns list of quarters with data in the time series table,\nsorted from oldest to newest.\n\n**Response:**\n```json\n{\n    \"rssd_id\": \"59754\",\n    \"periods\": [\"12/31/2020\", \"3/31/2021\", \"6/30/2021\", ...],\n    \"oldest\": \"12/31/2020\",\n    \"newest\": \"9/30/2025\",\n    \"total_quarters\": 20\n}\n```","operationId":"get_available_periods_api_v1_tbpi_available_periods__rssd_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tbpi/chat":{"post":{"tags":["TBPI Analysis"],"summary":"Chat With Ai","description":"Chat with AI about bank data and analyses using Expert AI Analysts.\n\nFeatures:\n- Auto-selects persona based on pillar context\n- Retrieves TBPI framework context from Bedrock Knowledge Base\n- Includes completed TBPI analyses as context\n- Maintains conversation history for follow-up questions\n- Uses persona's system prompt, temperature, and model settings\n- Supports streaming responses (stream=true)\n- Optional chart data for visualizations\n- Returns sources for transparency","operationId":"chat_with_ai_api_v1_tbpi_chat_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":[]}]}},"/api/v1/tbpi/chat/feedback":{"post":{"tags":["TBPI Analysis"],"summary":"Chat Feedback","description":"Record feedback for a chat response — rating + optional comment.","operationId":"chat_feedback_api_v1_tbpi_chat_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChatFeedbackRequest"}}},"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/v1/tbpi/chat/{rssd_id}/history":{"get":{"tags":["TBPI Analysis"],"summary":"Get Chat History","description":"Get chat history for a bank\n\nReturns recent chat messages and responses, ordered by timestamp.\nIncludes persona name and context sources for assistant messages.\n\nArgs:\n    rssd_id: Bank RSSD ID\n    limit: Maximum number of messages to return\n    session_id: Optional - filter to specific chat session","operationId":"get_chat_history_api_v1_tbpi_chat__rssd_id__history_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}},{"name":"session_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"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/v1/tbpi/chat/{rssd_id}/sessions":{"get":{"tags":["TBPI Analysis"],"summary":"Get Chat Sessions","description":"Get list of chat sessions for a bank\n\nReturns recent chat sessions with title (first user message) and last activity.","operationId":"get_chat_sessions_api_v1_tbpi_chat__rssd_id__sessions_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tbpi/chat/{rssd_id}/session/{session_id}":{"delete":{"tags":["TBPI Analysis"],"summary":"Delete Chat Session","description":"Delete a chat session and all its messages\n\nPermanently removes all messages for the specified session.","operationId":"delete_chat_session_api_v1_tbpi_chat__rssd_id__session__session_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}},{"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/v1/tbpi/debug/{session_id}":{"get":{"tags":["TBPI Analysis"],"summary":"Get Debug Data","description":"Get comprehensive debug data for a TBPI analysis session\n\nReturns all step executions with framework chunks, metrics, calculations,\nprompts, AI responses, and data quality information.\n\nArgs:\n    session_id: Analysis session UUID\n    current_user: Authenticated user from token\n\nReturns:\n    Debug data including session metadata and step-by-step execution details","operationId":"get_debug_data_api_v1_tbpi_debug__session_id__get","security":[{"HTTPBearer":[]}],"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/v1/tbpi/rssd/{rssd}/pillar/{pillar}/analyze/stream":{"get":{"tags":["TBPI Analysis"],"summary":"Stream Pillar Analysis","description":"Stream pillar analysis with real-time updates via Server-Sent Events (SSE).\n\nThis endpoint provides live streaming of the analysis as it's generated:\n- Text appears word-by-word as Claude generates it\n- Progress updates for each step\n- Synthesis streams the final 8-section report\n- Feels instant like Claude desktop\n\nArgs:\n    rssd: Bank RSSD ID\n    pillar: Pillar to analyze (revenue|cost|risk|capital|operations)\n    user: Current authenticated user\n\nReturns:\n    StreamingResponse with Server-Sent Events (SSE):\n    - event: started - Analysis session created\n    - event: step_started - Step N beginning\n    - event: step_N_chunk - Real-time text chunks from step N\n    - event: step_N_complete - Step N finished\n    - event: synthesis_started - Final synthesis beginning\n    - event: synthesis_chunk - Real-time synthesis text\n    - event: complete - Full analysis finished\n    - event: error - Error occurred\n    - event: heartbeat - Keep-alive ping","operationId":"stream_pillar_analysis_api_v1_tbpi_rssd__rssd__pillar__pillar__analyze_stream_get","parameters":[{"name":"rssd","in":"path","required":true,"schema":{"type":"string","title":"Rssd"}},{"name":"pillar","in":"path","required":true,"schema":{"type":"string","title":"Pillar"}},{"name":"token","in":"query","required":true,"schema":{"type":"string","description":"JWT access token","title":"Token"},"description":"JWT access token"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/tbpi/health":{"get":{"tags":["TBPI Analysis"],"summary":"Health Check","description":"Health check endpoint for TBPI service\n\nReturns service status and configuration","operationId":"health_check_api_v1_tbpi_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/2fa/initiate":{"post":{"tags":["Two-Factor Authentication"],"summary":"Initiate 2Fa","description":"Initiate 2FA after successful password authentication.\n\nProcess:\n1. Verify Cognito tokens\n2. Check if device is trusted\n3. If trusted, return tokens immediately\n4. If not trusted, send SMS and return session token","operationId":"initiate_2fa_api_v1_auth_2fa_initiate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAInitiateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAInitiateResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/setup-phone":{"post":{"tags":["Two-Factor Authentication"],"summary":"Setup Phone 2Fa","description":"Set up phone number for 2FA during login.\n\nCalled when user doesn't have a phone number on file.\nStores the phone and immediately sends verification SMS.","operationId":"setup_phone_2fa_api_v1_auth_2fa_setup_phone_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneSetupRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PhoneSetupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/verify":{"post":{"tags":["Two-Factor Authentication"],"summary":"Verify 2Fa","description":"Verify SMS code and complete authentication.\n\nProcess:\n1. Validate session token\n2. Verify SMS code with Twilio\n3. If valid, optionally trust device\n4. Return Cognito tokens","operationId":"verify_2fa_api_v1_auth_2fa_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAVerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAVerifyResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/resend":{"post":{"tags":["Two-Factor Authentication"],"summary":"Resend 2Fa Code","description":"Resend SMS verification code.","operationId":"resend_2fa_code_api_v1_auth_2fa_resend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAResendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TwoFAResendResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/trusted-devices":{"get":{"tags":["Two-Factor Authentication"],"summary":"List Trusted Devices","description":"List user's trusted devices.\n\nRequires authentication.","operationId":"list_trusted_devices_api_v1_auth_2fa_trusted_devices_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/2fa/trusted-devices/{device_id}":{"delete":{"tags":["Two-Factor Authentication"],"summary":"Remove Trusted Device","description":"Remove a trusted device.\n\nRequires authentication.","operationId":"remove_trusted_device_api_v1_auth_2fa_trusted_devices__device_id__delete","parameters":[{"name":"device_id","in":"path","required":true,"schema":{"type":"string","title":"Device Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/profile":{"get":{"tags":["Account Management"],"summary":"Get Profile","description":"Get current user's profile information.\n\nReturns profile data including display name, job title, department, phone,\nand notification preferences.","operationId":"get_profile_api_v1_account_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["Account Management"],"summary":"Update Profile","description":"Update current user's profile information.\n\nAllows updating: display_name, job_title, department, phone.\nEmail is read-only (managed by Cognito).","operationId":"update_profile_api_v1_account_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdateRequest"}}},"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/v1/account/notification-preferences":{"put":{"tags":["Account Management"],"summary":"Update Notification Preferences","description":"Update current user's notification preferences.\n\nOptions:\n- email: Enable/disable email notifications\n- weekly_summary: Enable/disable weekly usage summary emails\n- product_updates: Enable/disable product update emails","operationId":"update_notification_preferences_api_v1_account_notification_preferences_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotificationPreferencesRequest"}}},"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/v1/account/onboarding":{"get":{"tags":["Account Management"],"summary":"Get Onboarding","description":"Onboarding state for the current user: registry steps with per-user\ncompletion, the server-resolved bank, latest TBPI scores (null until a\ngeneration completes), and seeded first-question prompts.\n\nAdmins and pre-launch users get {\"exempt\": true} — the frontend renders\nnothing for them. Degrades by section (bank: null, scores: null) rather\nthan erroring; onboarding must never block login or chat.","operationId":"get_onboarding_api_v1_account_onboarding_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/account/onboarding/{step_id}/complete":{"post":{"tags":["Account Management"],"summary":"Complete Onboarding Step","description":"Idempotently mark an onboarding step completed or skipped.\n\n404 for step_ids not in the registry, 409 for flag-disabled steps,\n400 for invalid status. Repeat POSTs return 200 (single row kept).\nWrites a user_activity_log row alongside (fail-soft).","operationId":"complete_onboarding_step_api_v1_account_onboarding__step_id__complete_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"step_id","in":"path","required":true,"schema":{"type":"string","title":"Step Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingStepCompleteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/account/onboarding/dismissal":{"delete":{"tags":["Account Management"],"summary":"Reopen Getting Started","description":"Un-dismiss the Getting Started card (account-menu re-entry).","operationId":"reopen_getting_started_api_v1_account_onboarding_dismissal_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/account/change-password":{"post":{"tags":["Account Management"],"summary":"Change Password","description":"Change current user's password via Cognito.\n\nRequires current password for verification.\nNew password must meet Cognito policy requirements.","operationId":"change_password_api_v1_account_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"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/v1/support/submit":{"post":{"tags":["Support"],"summary":"Submit Support Ticket","description":"Submit a support request.\n\nCreates a support ticket in the database and sends notification\nemail to the support team.","operationId":"submit_support_ticket_api_v1_support_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SupportTicketRequest"}}},"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/v1/support/tickets":{"get":{"tags":["Support"],"summary":"Get User Tickets","description":"Get current user's support tickets.\n\nReturns list of support tickets submitted by the authenticated user.","operationId":"get_user_tickets_api_v1_support_tickets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/data-room/ticket/{token}":{"get":{"tags":["Data Room"],"summary":"Get Ticket Info","description":"Bootstrap the upload page: bank, template expectations, ticket state.","operationId":"get_ticket_info_api_v1_data_room_ticket__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"}}}}}}},"/api/v1/data-room/upload/{token}":{"post":{"tags":["Data Room"],"summary":"Upload File","description":"Receive the file and run the full ingestion pipeline synchronously.","operationId":"upload_file_api_v1_data_room_upload__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_v1_data_room_upload__token__post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/data-room/admin/{rssd_id}/provision":{"post":{"tags":["Data Room"],"summary":"Provision Data Room","description":"Super-admin backfill: provision (idempotently) for an existing bank.","operationId":"provision_data_room_api_v1_data_room_admin__rssd_id__provision_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"rssd_id","in":"path","required":true,"schema":{"type":"string","title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/data-room/templates":{"get":{"tags":["Data Room"],"summary":"List Templates","description":"Available upload templates (any authenticated user).","operationId":"list_templates_api_v1_data_room_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/bank-admin/dashboard":{"get":{"tags":["Bank Admin"],"summary":"Get Dashboard","description":"Get bank admin dashboard overview.\n\nReturns stats scoped to the admin's bank only.\n\nFor super admins, pass bank_id query parameter to view a specific bank.","operationId":"get_dashboard_api_v1_bank_admin_dashboard_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/recent-activity":{"get":{"tags":["Bank Admin"],"summary":"Get Recent Activity","description":"Get recent activity feed for the bank.\n\nFor super admins, pass bank_id query parameter to view a specific bank.","operationId":"get_recent_activity_api_v1_bank_admin_recent_activity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/users":{"get":{"tags":["Bank Admin"],"summary":"List Users","description":"List all users in the bank admin's organization.\n\nFor super admins, pass bank_id query parameter to view a specific bank.","operationId":"list_users_api_v1_bank_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"status_filter","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Filter"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/users/invite":{"post":{"tags":["Bank Admin"],"summary":"Invite User","description":"Invite a new user to the bank.\n\nChecks seat limit before sending invitation.\nFor super admins, pass bank_id query parameter to invite to a specific bank.","operationId":"invite_user_api_v1_bank_admin_users_invite_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteUserRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/users/{user_id}/role":{"put":{"tags":["Bank Admin"],"summary":"Update User Role","description":"Update a user's role within the organization.\n\nFor super admins, pass bank_id query parameter.","operationId":"update_user_role_api_v1_bank_admin_users__user_id__role_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserRoleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/users/{user_id}/deactivate":{"post":{"tags":["Bank Admin"],"summary":"Deactivate User","description":"Deactivate a user to revoke their access.\n\nFor super admins, pass bank_id query parameter.","operationId":"deactivate_user_api_v1_bank_admin_users__user_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/users/{user_id}/reactivate":{"post":{"tags":["Bank Admin"],"summary":"Reactivate User","description":"Reactivate a previously deactivated user.\n\nFor super admins, pass bank_id query parameter.","operationId":"reactivate_user_api_v1_bank_admin_users__user_id__reactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"string","title":"User Id"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/subscription":{"get":{"tags":["Bank Admin"],"summary":"Get Subscription","description":"Get the bank's subscription details (read-only).\n\nFor super admins, pass bank_id query parameter.","operationId":"get_subscription_api_v1_bank_admin_subscription_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/analytics":{"get":{"tags":["Bank Admin"],"summary":"Get Analytics","description":"Get usage analytics for the bank.\n\nFor super admins, pass bank_id query parameter.","operationId":"get_analytics_api_v1_bank_admin_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/bank-admin/analytics/export":{"get":{"tags":["Bank Admin"],"summary":"Export Analytics","description":"Export analytics data as CSV.\n\nUS-006-05: Data Export Controls\n- Applies rate limits based on user role\n- Logs export for audit trail\n\nFor super admins, pass bank_id query parameter.","operationId":"export_analytics_api_v1_bank_admin_analytics_export_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"period","in":"query","required":false,"schema":{"type":"string","default":"30d","title":"Period"}},{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/dashboard":{"get":{"tags":["Super Admin"],"summary":"Get Super Admin Dashboard","description":"US-003-02: All Banks Dashboard\nGet aggregate stats across all client banks (banks with assigned users).","operationId":"get_super_admin_dashboard_api_v1_super_admin_dashboard_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/super-admin/banks/search":{"get":{"tags":["Super Admin"],"summary":"Search Banks","description":"Search banks by name.","operationId":"search_banks_api_v1_super_admin_banks_search_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","description":"Search query","default":"","title":"Q"},"description":"Search query"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"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/v1/super-admin/banks":{"post":{"tags":["Super Admin"],"summary":"Create Bank","description":"US-003-03: Create New Bank\nOnboard a new bank tenant with subscription and initial admin invite.","operationId":"create_bank_api_v1_super_admin_banks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBankRequest"}}},"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/v1/super-admin/banks/{bank_id}":{"get":{"tags":["Super Admin"],"summary":"Get Bank Details","description":"US-003-04: View Bank Details\nGet comprehensive details for a specific bank.","operationId":"get_bank_details_api_v1_super_admin_banks__bank_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Super Admin"],"summary":"Update Bank","description":"US-003-04: Edit Bank Details\nUpdate bank information.","operationId":"update_bank_api_v1_super_admin_banks__bank_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateBankRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/modules":{"get":{"tags":["Super Admin"],"summary":"Get All Modules","description":"Get all available modules.","operationId":"get_all_modules_api_v1_super_admin_modules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["Super Admin"],"summary":"Create Module","description":"US-004-02: Create Module\nCreate a new module/product.","operationId":"create_module_api_v1_super_admin_modules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateModuleRequest"}}},"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/v1/super-admin/modules/{module_id}":{"get":{"tags":["Super Admin"],"summary":"Get Module","description":"Get a specific module with its pricing history.","operationId":"get_module_api_v1_super_admin_modules__module_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"module_id","in":"path","required":true,"schema":{"type":"string","title":"Module Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["Super Admin"],"summary":"Update Module","description":"US-004-04: Edit Module\nUpdate module details (not pricing - use /pricing endpoint).","operationId":"update_module_api_v1_super_admin_modules__module_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"module_id","in":"path","required":true,"schema":{"type":"string","title":"Module Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateModuleRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/modules/{module_id}/pricing":{"post":{"tags":["Super Admin"],"summary":"Set Module Pricing","description":"US-004-03: Pricing Rules Configuration\nSet or update pricing for a module.","operationId":"set_module_pricing_api_v1_super_admin_modules__module_id__pricing_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"module_id","in":"path","required":true,"schema":{"type":"string","title":"Module Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetPricingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/modules":{"put":{"tags":["Super Admin"],"summary":"Assign Modules","description":"US-003-05: Assign/Remove Modules from Bank\nUpdate the modules assigned to a bank's subscription.","operationId":"assign_modules_api_v1_super_admin_banks__bank_id__modules_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignModulesRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/seats":{"put":{"tags":["Super Admin"],"summary":"Update Seats","description":"US-003-06: Adjust Bank Seat Count\nUpdate the seat allocation for a bank.","operationId":"update_seats_api_v1_super_admin_banks__bank_id__seats_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSeatsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/deactivate":{"post":{"tags":["Super Admin"],"summary":"Deactivate Bank","description":"US-003-07: Deactivate Bank\nSet bank status to inactive, preventing user access.","operationId":"deactivate_bank_api_v1_super_admin_banks__bank_id__deactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/reactivate":{"post":{"tags":["Super Admin"],"summary":"Reactivate Bank","description":"US-003-07: Reactivate Bank\nSet bank status back to active.","operationId":"reactivate_bank_api_v1_super_admin_banks__bank_id__reactivate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/impersonate":{"post":{"tags":["Super Admin"],"summary":"Start Impersonation","description":"US-003-08: Impersonate Bank Admin\nStart impersonation session for support purposes.","operationId":"start_impersonation_api_v1_super_admin_impersonate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImpersonateRequest"}}},"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/v1/super-admin/impersonate/end":{"post":{"tags":["Super Admin"],"summary":"End Impersonation","description":"End impersonation session.","operationId":"end_impersonation_api_v1_super_admin_impersonate_end_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/v1/super-admin/invoices/generate":{"post":{"tags":["Super Admin"],"summary":"Generate Invoice","description":"US-005-01: Invoice Generation\nGenerate an invoice for a bank based on their subscription and usage.","operationId":"generate_invoice_api_v1_super_admin_invoices_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateInvoiceRequest"}}},"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/v1/super-admin/payments":{"post":{"tags":["Super Admin"],"summary":"Record Payment","description":"US-005-02: Record Payment\nRecord a payment against an invoice.","operationId":"record_payment_api_v1_super_admin_payments_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecordPaymentRequest"}}},"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/v1/super-admin/invoices":{"get":{"tags":["Super Admin"],"summary":"List Invoices","description":"US-005-05: List Invoices\nList all invoices with optional filters.","operationId":"list_invoices_api_v1_super_admin_invoices_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"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/v1/super-admin/invoices/{invoice_id}":{"get":{"tags":["Super Admin"],"summary":"Get Invoice","description":"US-005-05: Get Invoice Details\nGet detailed invoice information including line items and payments.","operationId":"get_invoice_api_v1_super_admin_invoices__invoice_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/billing":{"get":{"tags":["Super Admin"],"summary":"Get Bank Billing","description":"US-005-05: Bank Billing Overview\nGet billing summary for a specific bank.","operationId":"get_bank_billing_api_v1_super_admin_banks__bank_id__billing_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/invoices/{invoice_id}/void":{"post":{"tags":["Super Admin"],"summary":"Void Invoice","description":"US-005-06: Void Invoice\nVoid an unpaid invoice.","operationId":"void_invoice_api_v1_super_admin_invoices__invoice_id__void_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"invoice_id","in":"path","required":true,"schema":{"type":"string","title":"Invoice Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/subscriptions/{bank_id}/status":{"post":{"tags":["Super Admin"],"summary":"Update Subscription Status","description":"US-005-03 & US-005-06: Update Subscription Status\nUpdate subscription status (e.g., for payment failures).","operationId":"update_subscription_status_api_v1_super_admin_subscriptions__bank_id__status_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"new_status","in":"query","required":true,"schema":{"type":"string","description":"New status: active, past_due, suspended, canceled","title":"New Status"},"description":"New status: active, past_due, suspended, canceled"},{"name":"reason","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/trial":{"put":{"tags":["Super Admin"],"summary":"Set Bank Trial","description":"Set or update trial period for a bank.\nProvide either 'days' (from today) or 'end_date'.","operationId":"set_bank_trial_api_v1_super_admin_banks__bank_id__trial_put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetTrialRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Super Admin"],"summary":"End Bank Trial","description":"End trial immediately - either expire it or convert to paid.","operationId":"end_bank_trial_api_v1_super_admin_banks__bank_id__trial_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"convert_to_paid","in":"query","required":false,"schema":{"type":"boolean","description":"Convert to paid subscription instead of expiring","default":false,"title":"Convert To Paid"},"description":"Convert to paid subscription instead of expiring"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/trials/expiring":{"get":{"tags":["Super Admin"],"summary":"Get Expiring Trials","description":"Get list of trials expiring within the specified number of days.\nUsed for sending warning emails.","operationId":"get_expiring_trials_api_v1_super_admin_trials_expiring_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days_ahead","in":"query","required":false,"schema":{"type":"integer","maximum":30,"minimum":1,"description":"Days to look ahead","default":7,"title":"Days Ahead"},"description":"Days to look ahead"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/trials/send-warnings":{"post":{"tags":["Super Admin"],"summary":"Send Trial Warning Emails","description":"Send warning emails to banks whose trials expire in exactly 'days_remaining' days.\nTypically called with days_remaining=3 and days_remaining=1.","operationId":"send_trial_warning_emails_api_v1_super_admin_trials_send_warnings_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days_remaining","in":"query","required":true,"schema":{"type":"integer","maximum":7,"minimum":1,"description":"Send to trials expiring in exactly this many days","title":"Days Remaining"},"description":"Send to trials expiring in exactly this many days"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/generate-tbpi":{"post":{"tags":["Super Admin"],"summary":"Generate Tbpi Reports","description":"Trigger TBPI report generation for a bank.\n\nCreates all 7 documents: 5 pillar deep dives + executive + peer analysis.\nReturns immediately with job_id. Poll status endpoint for progress.","operationId":"generate_tbpi_reports_api_v1_super_admin_banks__bank_id__generate_tbpi_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateTBPIRequest"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/regenerate-tbpi-document":{"post":{"tags":["Super Admin"],"summary":"Regenerate Tbpi Document","description":"Regenerate a single TBPI document for a bank.\n\nAccepts { document_title: str } in the request body.\nThe document_title must match one of the DOCUMENT_DEFINITIONS titles.","operationId":"regenerate_tbpi_document_api_v1_super_admin_banks__bank_id__regenerate_tbpi_document_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Request"}}}},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/generate-tbpi/{job_id}/status":{"get":{"tags":["Super Admin"],"summary":"Get Tbpi Generation Status","description":"Get TBPI generation job status with per-document progress.","operationId":"get_tbpi_generation_status_api_v1_super_admin_banks__bank_id__generate_tbpi__job_id__status_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/generate-tbpi/{job_id}/retry":{"post":{"tags":["Super Admin"],"summary":"Retry Tbpi Generation","description":"Retry failed documents in a TBPI generation job.","operationId":"retry_tbpi_generation_api_v1_super_admin_banks__bank_id__generate_tbpi__job_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/generate-tbpi/{job_id}/cancel":{"post":{"tags":["Super Admin"],"summary":"Cancel Tbpi Generation","description":"Cancel an in-progress TBPI generation job.\n\nMarks the job and any non-completed documents as failed/cancelled.\nThe background thread will eventually notice and stop, but the DB\nstate is updated immediately so the frontend can move on.","operationId":"cancel_tbpi_generation_api_v1_super_admin_banks__bank_id__generate_tbpi__job_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/documents/{doc_id}/markdown":{"get":{"tags":["Super Admin"],"summary":"Get Document Markdown","description":"Get TBPI document markdown content and metadata for preview.","operationId":"get_document_markdown_api_v1_super_admin_banks__bank_id__documents__doc_id__markdown_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/generate-tbpi/jobs":{"get":{"tags":["Super Admin"],"summary":"List Tbpi Generation Jobs","description":"List all TBPI generation jobs for a bank.","operationId":"list_tbpi_generation_jobs_api_v1_super_admin_banks__bank_id__generate_tbpi_jobs_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/snapshots":{"get":{"tags":["Super Admin"],"summary":"List Snapshots","description":"List data snapshots for a bank.","operationId":"list_snapshots_api_v1_super_admin_banks__bank_id__snapshots_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"snapshot_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by type: baseline or custom","title":"Snapshot Type"},"description":"Filter by type: baseline or custom"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/snapshots/{snapshot_id}":{"get":{"tags":["Super Admin"],"summary":"Get Snapshot","description":"Get snapshot detail including config, checksums, and linked documents.","operationId":"get_snapshot_api_v1_super_admin_snapshots__snapshot_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/snapshots/{snapshot_id}/csv/{csv_type}":{"get":{"tags":["Super Admin"],"summary":"Get Snapshot Csv","description":"Get a presigned S3 URL to download a specific CSV from a snapshot.\n\ncsv_type must be one of: aie_summary, peer_analysis, tbpi_ready","operationId":"get_snapshot_csv_api_v1_super_admin_snapshots__snapshot_id__csv__csv_type__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}},{"name":"csv_type","in":"path","required":true,"schema":{"type":"string","title":"Csv Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/snapshots/create-baseline":{"post":{"tags":["Super Admin"],"summary":"Create Baseline Snapshot","description":"Create a baseline data snapshot for a bank without running the full TBPI pipeline.\n\nGenerates the three CSVs (AIE Summary, Peer Analysis, TBPI Ready) and\nstores them as a baseline snapshot in S3 + RDS.","operationId":"create_baseline_snapshot_api_v1_super_admin_banks__bank_id__snapshots_create_baseline_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}}],"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/metrics/{metric_id}/mdrm-sources":{"get":{"tags":["Super Admin"],"summary":"Get Metric Mdrm Sources","description":"Return MDRM source codes and metadata for an AIE metric.\n\nProvides the metric definition (name, pillar, unit, aliases, validation\nnotes) and the raw MDRM component codes that feed into the calculation.","operationId":"get_metric_mdrm_sources_api_v1_super_admin_metrics__metric_id__mdrm_sources_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric_id","in":"path","required":true,"schema":{"type":"string","title":"Metric Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/metrics":{"get":{"tags":["Super Admin"],"summary":"List Metrics","description":"List all available AIE metrics, optionally filtered by pillar.","operationId":"list_metrics_api_v1_super_admin_metrics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"pillar","in":"query","required":false,"schema":{"type":"string","title":"Pillar"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/banks/{bank_id}/documents/{doc_id}/styled-html":{"get":{"tags":["Super Admin"],"summary":"Get Document Styled Html","description":"Get TBPI document as fully-styled HTML matching the PDF output.\n\nReturns an HTML document with embedded CSS that mirrors the PDF renderer,\nsuitable for iframe embedding in the frontend preview.","operationId":"get_document_styled_html_api_v1_super_admin_banks__bank_id__documents__doc_id__styled_html_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_id","in":"path","required":true,"schema":{"type":"string","title":"Bank Id"}},{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/chat-analytics":{"get":{"tags":["Super Admin"],"summary":"Chat Analytics","description":"Chat telemetry analytics — totals, by-day, by-model, by-intent, errors, per-bank.","operationId":"chat_analytics_api_v1_super_admin_chat_analytics_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_rssd","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Rssd"}},{"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/v1/super-admin/chat-analytics/recent":{"get":{"tags":["Super Admin"],"summary":"Chat Analytics Recent","description":"Recent chat telemetry rows for the filterable table.","operationId":"chat_analytics_recent_api_v1_super_admin_chat_analytics_recent_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"bank_rssd","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Rssd"}},{"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/v1/super-admin/conversations":{"get":{"tags":["Super Admin"],"summary":"List Conversations","operationId":"list_conversations_api_v1_super_admin_conversations_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"text search in questions/answers","title":"Q"},"description":"text search in questions/answers"},{"name":"rssd_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},{"name":"user","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"email substring","title":"User"},"description":"email substring"},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"web | mcp","title":"Source"},"description":"web | mcp"},{"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"}},{"name":"errors_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Errors Only"}},{"name":"flagged_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Flagged Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"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"}}}}}}},"/api/v1/super-admin/conversations/web/{session_id}":{"get":{"tags":["Super Admin"],"summary":"Get Web Transcript","operationId":"get_web_transcript_api_v1_super_admin_conversations_web__session_id__get","security":[{"HTTPBearer":[]}],"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/v1/super-admin/conversations/mcp/{session_id}":{"get":{"tags":["Super Admin"],"summary":"Get Mcp Transcript","operationId":"get_mcp_transcript_api_v1_super_admin_conversations_mcp__session_id__get","security":[{"HTTPBearer":[]}],"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/v1/super-admin/conversations/mcp-call/{ref_id}":{"get":{"tags":["Super Admin"],"summary":"Get Mcp Single Call","description":"Single MCP call transcript — many audit rows carry no session id\n(direct API calls, older clients), so the drawer falls back to the\ncall itself rather than a session thread.","operationId":"get_mcp_single_call_api_v1_super_admin_conversations_mcp_call__ref_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"ref_id","in":"path","required":true,"schema":{"type":"integer","title":"Ref Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/tuner/insights":{"get":{"tags":["Super Admin"],"summary":"Tuner Insights","operationId":"tuner_insights_api_v1_super_admin_tuner_insights_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":180,"default":30,"title":"Days"}},{"name":"rssd_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/super-admin/tuner/run":{"post":{"tags":["Super Admin"],"summary":"Trigger Tuner","description":"Manual tuner run (staging/testing; cron covers production cadence).\nRuns in a background thread — poll /tuner/insights for results.\nAlready-classified items are skipped, so backfills are idempotent.","operationId":"trigger_tuner_api_v1_super_admin_tuner_run_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":365},{"type":"null"}],"description":"backfill window; omit for incremental","title":"Days"},"description":"backfill window; omit for incremental"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/.well-known/openid-configuration":{"get":{"tags":["MCP"],"summary":"Authorization Server Metadata","description":"RFC 8414 AS metadata. Registered here for the path-appended probes\n({issuer}/.well-known/...); main.py registers the root-level RFC 8414\npath-inserted variants (/.well-known/.../api/v1/mcp) with these same\nhandlers, since those URLs live outside the /api/v1 router prefix.","operationId":"authorization_server_metadata_api_v1_mcp__well_known_openid_configuration_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/.well-known/oauth-authorization-server":{"get":{"tags":["MCP"],"summary":"Authorization Server Metadata","description":"RFC 8414 AS metadata. Registered here for the path-appended probes\n({issuer}/.well-known/...); main.py registers the root-level RFC 8414\npath-inserted variants (/.well-known/.../api/v1/mcp) with these same\nhandlers, since those URLs live outside the /api/v1 router prefix.","operationId":"authorization_server_metadata_api_v1_mcp__well_known_oauth_authorization_server_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/oauth/userinfo":{"get":{"tags":["MCP"],"summary":"Oidc Userinfo","description":"OIDC UserInfo. The facade's bearer tokens are Cognito ACCESS tokens,\nso Cognito itself validates them (GetUser fails on anything expired,\nrevoked, or foreign) and is the authoritative source for the email\nclaim. Required by ChatGPT Enterprise domain restrictions, which need\na verified email to pin a connector to a workspace's domain.","operationId":"oidc_userinfo_api_v1_mcp_oauth_userinfo_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/.well-known/oauth-protected-resource":{"get":{"tags":["MCP"],"summary":"Protected Resource Metadata","operationId":"protected_resource_metadata_api_v1_mcp__well_known_oauth_protected_resource_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/oauth/register":{"post":{"tags":["MCP"],"summary":"Register Client","operationId":"register_client_api_v1_mcp_oauth_register_post","responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/oauth/authorize":{"get":{"tags":["MCP"],"summary":"Authorize","operationId":"authorize_api_v1_mcp_oauth_authorize_get","parameters":[{"name":"response_type","in":"query","required":false,"schema":{"type":"string","default":"","title":"Response Type"}},{"name":"client_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Client Id"}},{"name":"redirect_uri","in":"query","required":false,"schema":{"type":"string","default":"","title":"Redirect Uri"}},{"name":"code_challenge","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code Challenge"}},{"name":"code_challenge_method","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code Challenge Method"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"scope","in":"query","required":false,"schema":{"type":"string","default":"","title":"Scope"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/oauth/callback":{"get":{"tags":["MCP"],"summary":"Callback","operationId":"callback_api_v1_mcp_oauth_callback_get","parameters":[{"name":"code","in":"query","required":false,"schema":{"type":"string","default":"","title":"Code"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"","title":"State"}},{"name":"error","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error"}},{"name":"error_description","in":"query","required":false,"schema":{"type":"string","default":"","title":"Error Description"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/mcp/oauth/token":{"post":{"tags":["MCP"],"summary":"Token","operationId":"token_api_v1_mcp_oauth_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp/":{"get":{"tags":["MCP"],"summary":"Mcp Endpoint Get","operationId":"mcp_endpoint_get_api_v1_mcp__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["MCP"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_api_v1_mcp__post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/mcp":{"get":{"tags":["MCP"],"summary":"Mcp Endpoint Get","operationId":"mcp_endpoint_get_api_v1_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["MCP"],"summary":"Mcp Endpoint","operationId":"mcp_endpoint_api_v1_mcp_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-authorization-server/api/v1/mcp":{"get":{"summary":"Authorization Server Metadata","description":"RFC 8414 AS metadata. Registered here for the path-appended probes\n({issuer}/.well-known/...); main.py registers the root-level RFC 8414\npath-inserted variants (/.well-known/.../api/v1/mcp) with these same\nhandlers, since those URLs live outside the /api/v1 router prefix.","operationId":"authorization_server_metadata__well_known_oauth_authorization_server_api_v1_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/openid-configuration/api/v1/mcp":{"get":{"summary":"Authorization Server Metadata","description":"RFC 8414 AS metadata. Registered here for the path-appended probes\n({issuer}/.well-known/...); main.py registers the root-level RFC 8414\npath-inserted variants (/.well-known/.../api/v1/mcp) with these same\nhandlers, since those URLs live outside the /api/v1 router prefix.","operationId":"authorization_server_metadata__well_known_openid_configuration_api_v1_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/oauth-protected-resource/api/v1/mcp":{"get":{"summary":"Protected Resource Metadata","operationId":"protected_resource_metadata__well_known_oauth_protected_resource_api_v1_mcp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/openai-apps-challenge":{"get":{"summary":" Openai Apps Challenge","operationId":"_openai_apps_challenge__well_known_openai_apps_challenge_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"ActivityLogEntry":{"properties":{"id":{"type":"string","title":"Id"},"user_id":{"type":"string","title":"User Id"},"activity_type":{"type":"string","title":"Activity Type"},"activity_details":{"additionalProperties":true,"type":"object","title":"Activity Details","default":{}},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","user_id","activity_type","created_at"],"title":"ActivityLogEntry","description":"Single activity log entry"},"AnalysisDetail":{"properties":{"id":{"type":"string","title":"Id"},"session_id":{"type":"string","title":"Session Id"},"rssd_id":{"type":"string","title":"Rssd Id"},"pillar":{"type":"string","title":"Pillar"},"section_1_executive_summary":{"type":"string","title":"Section 1 Executive Summary"},"section_2_domain_analysis_1":{"type":"string","title":"Section 2 Domain Analysis 1"},"section_3_domain_analysis_2":{"type":"string","title":"Section 3 Domain Analysis 2"},"section_4_domain_analysis_3":{"type":"string","title":"Section 4 Domain Analysis 3"},"section_5_peer_benchmarking":{"type":"string","title":"Section 5 Peer Benchmarking"},"section_6_trend_analysis":{"type":"string","title":"Section 6 Trend Analysis"},"section_7_cross_pillar":{"type":"string","title":"Section 7 Cross Pillar"},"section_8_recommendations":{"type":"string","title":"Section 8 Recommendations"},"overall_rating":{"type":"integer","title":"Overall Rating"},"confidence_score":{"type":"integer","title":"Confidence Score"},"data_quality_score":{"type":"integer","title":"Data Quality Score"},"key_findings":{"items":{"type":"string"},"type":"array","title":"Key Findings"},"risk_factors":{"items":{"type":"string"},"type":"array","title":"Risk Factors"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","session_id","rssd_id","pillar","section_1_executive_summary","section_2_domain_analysis_1","section_3_domain_analysis_2","section_4_domain_analysis_3","section_5_peer_benchmarking","section_6_trend_analysis","section_7_cross_pillar","section_8_recommendations","overall_rating","confidence_score","data_quality_score","key_findings","risk_factors","created_at"],"title":"AnalysisDetail","description":"Detailed pillar analysis"},"AnalysisSummary":{"properties":{"id":{"type":"string","title":"Id"},"pillar":{"type":"string","title":"Pillar"},"overall_rating":{"type":"integer","title":"Overall Rating"},"confidence_score":{"type":"integer","title":"Confidence Score"},"data_quality_score":{"type":"integer","title":"Data Quality Score"},"key_findings":{"items":{"type":"string"},"type":"array","title":"Key Findings"},"risk_factors":{"items":{"type":"string"},"type":"array","title":"Risk Factors"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","pillar","overall_rating","confidence_score","data_quality_score","key_findings","risk_factors","created_at"],"title":"AnalysisSummary","description":"Summary of pillar analysis"},"AnalyzeResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"rssd_id":{"type":"string","title":"Rssd Id"},"pillar":{"type":"string","title":"Pillar"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["session_id","rssd_id","pillar","status","message"],"title":"AnalyzeResponse","description":"Response for initiated analysis","example":{"message":"Analysis initiated successfully. Poll /progress/{session_id} for updates.","pillar":"revenue","rssd_id":"59754","session_id":"123e4567-e89b-12d3-a456-426614174000","status":"in_progress"}},"AssignBankRequest":{"properties":{"rssd_id":{"type":"string","title":"Rssd Id"},"bank_name":{"type":"string","title":"Bank Name"}},"type":"object","required":["rssd_id","bank_name"],"title":"AssignBankRequest","description":"Request to assign a bank to a user"},"AssignModulesRequest":{"properties":{"module_ids":{"items":{"type":"string"},"type":"array","title":"Module Ids"}},"type":"object","required":["module_ids"],"title":"AssignModulesRequest"},"AuthResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type","default":"bearer"},"user":{"$ref":"#/components/schemas/UserProfile"}},"type":"object","required":["access_token","user"],"title":"AuthResponse","description":"Authentication response model."},"BankDocumentSummary":{"properties":{"rssd_id":{"type":"string","title":"Rssd Id"},"bank_name":{"type":"string","title":"Bank Name"},"total_documents":{"type":"integer","title":"Total Documents"},"pillar_docs":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Pillar Docs"},"additional_reports":{"type":"integer","title":"Additional Reports"},"last_updated":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Updated"}},"type":"object","required":["rssd_id","bank_name","total_documents","pillar_docs","additional_reports"],"title":"BankDocumentSummary","description":"Summary of documents for a bank"},"BedrockKBStatusResponse":{"properties":{"kb_id":{"type":"string","title":"Kb Id"},"kb_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kb Name"},"status":{"type":"string","title":"Status"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"data_sources":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Data Sources","default":[]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["kb_id","status"],"title":"BedrockKBStatusResponse","description":"Bedrock Knowledge Base status information"},"Body_upload_document_api_v1_admin_bedrock_documents_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"document_type":{"type":"string","title":"Document Type"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"is_global":{"type":"boolean","title":"Is Global","default":false},"persona_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Id"}},"type":"object","required":["file","document_type"],"title":"Body_upload_document_api_v1_admin_bedrock_documents_upload_post"},"Body_upload_file_api_v1_data_room_upload__token__post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_file_api_v1_data_room_upload__token__post"},"Body_upload_report_api_v1_admin_reports_upload_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"},"rssd_id":{"type":"string","title":"Rssd Id"},"bank_name":{"type":"string","title":"Bank Name"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"},"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"report_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Title"},"reporting_period_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporting Period Start"},"reporting_period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporting Period End"}},"type":"object","required":["file","rssd_id","bank_name"],"title":"Body_upload_report_api_v1_admin_reports_upload_post"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest","description":"Request to change password."},"ChatFeedbackRequest":{"properties":{"message_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message Id"},"chat_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Session Id"},"rating":{"type":"integer","title":"Rating"},"comment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comment"}},"type":"object","required":["rating"],"title":"ChatFeedbackRequest"},"ChatRequest":{"properties":{"rssd_id":{"type":"string","title":"Rssd Id","description":"Bank RSSD ID"},"message":{"type":"string","title":"Message","description":"User's chat message"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar","description":"Current pillar context for persona selection"},"stream":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Stream","description":"Enable streaming response","default":false},"include_chart_data":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Include Chart Data","description":"Include chart data if relevant","default":false},"chat_session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chat Session Id","description":"Existing chat session ID to continue conversation"},"deep_analysis":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Deep Analysis","description":"Enable deep analysis mode (Opus 4.5 with higher thinking budget)","default":false}},"type":"object","required":["rssd_id","message"],"title":"ChatRequest","description":"Request body for chat message","example":{"chat_session_id":"123e4567-e89b-12d3-a456-426614174000","message":"What are the key strengths of this bank?","pillar":"revenue","rssd_id":"59754","stream":true}},"CreateAdminRequest":{"properties":{"user_id":{"type":"string","title":"User Id"},"admin_level":{"type":"string","title":"Admin Level","default":"admin"},"is_perlucem_staff":{"type":"boolean","title":"Is Perlucem Staff","default":false},"can_manage_users":{"type":"boolean","title":"Can Manage Users","default":true},"can_upload_reports":{"type":"boolean","title":"Can Upload Reports","default":true},"can_manage_personas":{"type":"boolean","title":"Can Manage Personas","default":false}},"type":"object","required":["user_id"],"title":"CreateAdminRequest","description":"Request to create or promote an admin user"},"CreateBankRequest":{"properties":{"rssd_id":{"type":"integer","title":"Rssd Id"},"primary_contact_name":{"type":"string","title":"Primary Contact Name"},"primary_contact_email":{"type":"string","format":"email","title":"Primary Contact Email"},"billing_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Billing Email"},"billing_address_line1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Line1"},"billing_address_line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Line2"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing State"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"base_plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Plan Id"},"addon_module_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Addon Module Ids","default":[]},"seat_count":{"type":"integer","title":"Seat Count","default":5},"billing_start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Billing Start Date"}},"type":"object","required":["rssd_id","primary_contact_name","primary_contact_email"],"title":"CreateBankRequest"},"CreateInvitationRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"is_super_admin":{"type":"boolean","title":"Is Super Admin","default":false},"expiry_days":{"type":"integer","title":"Expiry Days","default":7}},"type":"object","required":["email"],"title":"CreateInvitationRequest","description":"Request to create a new user invitation"},"CreateModuleRequest":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"type":"string","title":"Type","default":"addon"},"is_base_plan":{"type":"boolean","title":"Is Base Plan","default":false},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features"},"pricing_model":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Model"},"pricing_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Pricing Config"}},"type":"object","required":["name"],"title":"CreateModuleRequest"},"CreatePersonaRequest":{"properties":{"persona_name":{"type":"string","title":"Persona Name"},"persona_description":{"type":"string","title":"Persona Description"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"},"system_prompt":{"type":"string","title":"System Prompt"},"temperature":{"type":"number","title":"Temperature","default":0.7},"max_tokens":{"type":"integer","title":"Max Tokens","default":2000},"model_name":{"type":"string","title":"Model Name","default":"claude-sonnet-4-5-20250929"},"is_default":{"type":"boolean","title":"Is Default","default":false}},"type":"object","required":["persona_name","persona_description","system_prompt"],"title":"CreatePersonaRequest"},"DocumentListResponse":{"properties":{"total_banks":{"type":"integer","title":"Total Banks"},"total_documents":{"type":"integer","title":"Total Documents"},"total_global_documents":{"type":"integer","title":"Total Global Documents","default":0},"banks":{"items":{"$ref":"#/components/schemas/BankDocumentSummary"},"type":"array","title":"Banks"},"documents":{"items":{"$ref":"#/components/schemas/DocumentMetadata"},"type":"array","title":"Documents"},"global_documents":{"items":{"$ref":"#/components/schemas/DocumentMetadata"},"type":"array","title":"Global Documents","default":[]}},"type":"object","required":["total_banks","total_documents","banks","documents"],"title":"DocumentListResponse","description":"Response for listing documents"},"DocumentMetadata":{"properties":{"id":{"type":"string","title":"Id"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"document_type":{"type":"string","title":"Document Type"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"},"title":{"type":"string","title":"Title"},"filename":{"type":"string","title":"Filename"},"file_type":{"type":"string","title":"File Type"},"file_size_bytes":{"type":"integer","title":"File Size Bytes"},"s3_path":{"type":"string","title":"S3 Path"},"processing_status":{"type":"string","title":"Processing Status"},"uploaded_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploaded By"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"is_global":{"type":"boolean","title":"Is Global","default":false},"persona_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Id"},"persona_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Name"}},"type":"object","required":["id","document_type","title","filename","file_type","file_size_bytes","s3_path","processing_status","created_at"],"title":"DocumentMetadata","description":"Document metadata"},"FFIECBankSearchResult":{"properties":{"rssd_id":{"type":"integer","title":"Rssd Id"},"name":{"type":"string","title":"Name"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"peer_group_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Peer Group Code"},"has_subscription":{"type":"boolean","title":"Has Subscription","default":false}},"type":"object","required":["rssd_id","name"],"title":"FFIECBankSearchResult","description":"Bank search result from FFIEC data"},"FFIECDatabaseStats":{"properties":{"total_banks":{"type":"integer","title":"Total Banks"},"call_report_values":{"type":"integer","title":"Call Report Values"},"ubpr_values":{"type":"integer","title":"Ubpr Values"},"total_data_points":{"type":"integer","title":"Total Data Points"},"banks_by_state":{"additionalProperties":true,"type":"object","title":"Banks By State"}},"type":"object","required":["total_banks","call_report_values","ubpr_values","total_data_points","banks_by_state"],"title":"FFIECDatabaseStats","description":"Database statistics"},"FFIECGenerateRequest":{"properties":{"rssd_id":{"type":"integer","title":"Rssd Id"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"},"output_types":{"items":{"type":"string"},"type":"array","title":"Output Types","default":["tbpi_csv","tbpi_json","aie_summary"]}},"type":"object","required":["rssd_id","start_date","end_date"],"title":"FFIECGenerateRequest","description":"Request to generate FFIEC data files"},"FFIECGenerateResponse":{"properties":{"rssd_id":{"type":"integer","title":"Rssd Id"},"bank_name":{"type":"string","title":"Bank Name"},"quarters_processed":{"items":{"type":"string"},"type":"array","title":"Quarters Processed"},"files":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Files"},"validation_results":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Validation Results"}},"type":"object","required":["rssd_id","bank_name","quarters_processed","files"],"title":"FFIECGenerateResponse","description":"Response with generated files"},"FFIECQuartersResponse":{"properties":{"rssd_id":{"type":"integer","title":"Rssd Id"},"call_report_quarters":{"items":{"type":"string"},"type":"array","title":"Call Report Quarters"},"ubpr_quarters":{"items":{"type":"string"},"type":"array","title":"Ubpr Quarters"}},"type":"object","required":["rssd_id","call_report_quarters","ubpr_quarters"],"title":"FFIECQuartersResponse","description":"Available quarters for a bank"},"FFIECSnapshotRequest":{"properties":{"rssd_id":{"type":"integer","title":"Rssd Id"},"start_date":{"type":"string","title":"Start Date"},"end_date":{"type":"string","title":"End Date"}},"type":"object","required":["rssd_id","start_date","end_date"],"title":"FFIECSnapshotRequest","description":"Request to generate and save FFIEC data as a snapshot."},"GenerateInvoiceRequest":{"properties":{"bank_id":{"type":"string","title":"Bank Id"},"period_start":{"type":"string","format":"date","title":"Period Start"},"period_end":{"type":"string","format":"date","title":"Period End"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["bank_id","period_start","period_end"],"title":"GenerateInvoiceRequest"},"GenerateTBPIRequest":{"properties":{"quarter":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quarter"},"lookback_quarters":{"type":"integer","title":"Lookback Quarters","default":20},"documents":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Documents"}},"type":"object","title":"GenerateTBPIRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"ImpersonateRequest":{"properties":{"bank_id":{"type":"string","title":"Bank Id"}},"type":"object","required":["bank_id"],"title":"ImpersonateRequest"},"ImpersonationTokenResponse":{"properties":{"impersonation_token":{"type":"string","title":"Impersonation Token"},"target_user_id":{"type":"string","title":"Target User Id"},"target_user_email":{"type":"string","title":"Target User Email"},"expires_at":{"type":"string","title":"Expires At"}},"type":"object","required":["impersonation_token","target_user_id","target_user_email","expires_at"],"title":"ImpersonationTokenResponse","description":"Response for impersonation token creation"},"InvitationAcceptRequest":{"properties":{"invitation_token":{"type":"string","title":"Invitation Token"},"user_id":{"type":"string","title":"User Id"}},"type":"object","required":["invitation_token","user_id"],"title":"InvitationAcceptRequest","description":"Request to accept an invitation after Cognito signup"},"InvitationAcceptResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},"type":"object","required":["success","message"],"title":"InvitationAcceptResponse","description":"Response after accepting invitation"},"InvitationResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"invitation_token":{"type":"string","title":"Invitation Token"},"invitation_url":{"type":"string","title":"Invitation Url"},"status":{"type":"string","title":"Status"},"invited_by":{"type":"string","title":"Invited By"},"invited_at":{"type":"string","title":"Invited At"},"expires_at":{"type":"string","title":"Expires At"},"is_super_admin_invite":{"type":"boolean","title":"Is Super Admin Invite","default":false}},"type":"object","required":["id","email","invitation_token","invitation_url","status","invited_by","invited_at","expires_at"],"title":"InvitationResponse","description":"Invitation details"},"InvitationSignupRequest":{"properties":{"invitation_token":{"type":"string","title":"Invitation Token"},"password":{"type":"string","title":"Password"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"}},"type":"object","required":["invitation_token","password"],"title":"InvitationSignupRequest","description":"Request to signup via invitation (creates account + accepts invitation)"},"InvitationSignupResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"refresh_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Refresh Token"}},"type":"object","required":["success","message"],"title":"InvitationSignupResponse","description":"Response after successful signup via invitation"},"InvitationValidateResponse":{"properties":{"valid":{"type":"boolean","title":"Valid"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"bank_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bank Name"},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["valid"],"title":"InvitationValidateResponse","description":"Response for invitation validation"},"InviteUserRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"role":{"type":"string","title":"Role","default":"bank_user"}},"type":"object","required":["email"],"title":"InviteUserRequest","description":"Request to invite a new user."},"LogActivityRequest":{"properties":{"activity_type":{"type":"string","title":"Activity Type"},"activity_details":{"additionalProperties":true,"type":"object","title":"Activity Details","default":{}},"rssd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rssd Id"}},"type":"object","required":["activity_type"],"title":"LogActivityRequest","description":"Request to log an activity"},"NotificationPreferencesRequest":{"properties":{"email":{"type":"boolean","title":"Email","default":true},"weekly_summary":{"type":"boolean","title":"Weekly Summary","default":true},"product_updates":{"type":"boolean","title":"Product Updates","default":false}},"type":"object","title":"NotificationPreferencesRequest","description":"Request to update notification preferences."},"OnboardingStepCompleteRequest":{"properties":{"status":{"type":"string","title":"Status","default":"completed"},"metadata":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Metadata"}},"type":"object","title":"OnboardingStepCompleteRequest","description":"Request to mark an onboarding step completed or skipped."},"PhoneSetupRequest":{"properties":{"cognito_id_token":{"type":"string","title":"Cognito Id Token"},"cognito_access_token":{"type":"string","title":"Cognito Access Token"},"phone_number":{"type":"string","title":"Phone Number"},"device_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Fingerprint"}},"type":"object","required":["cognito_id_token","cognito_access_token","phone_number"],"title":"PhoneSetupRequest","description":"Request to add phone number during login."},"PhoneSetupResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"requires_2fa":{"type":"boolean","title":"Requires 2Fa","default":false},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token"},"phone_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Masked"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"PhoneSetupResponse","description":"Response from phone setup."},"ProfileUpdateRequest":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"}},"type":"object","title":"ProfileUpdateRequest","description":"Request to update profile fields."},"ProgressResponse":{"properties":{"session_id":{"type":"string","title":"Session Id"},"rssd_id":{"type":"string","title":"Rssd Id"},"pillar":{"type":"string","title":"Pillar"},"status":{"type":"string","title":"Status"},"current_step":{"type":"integer","title":"Current Step"},"total_steps":{"type":"integer","title":"Total Steps"},"progress_percent":{"type":"number","title":"Progress Percent"},"current_step_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Step Name"},"started_at":{"type":"string","title":"Started At"},"updated_at":{"type":"string","title":"Updated At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["session_id","rssd_id","pillar","status","current_step","total_steps","progress_percent","started_at","updated_at"],"title":"ProgressResponse","description":"Response for progress check","example":{"current_step":3,"current_step_name":"Peer Benchmarking","pillar":"revenue","progress_percent":42.9,"rssd_id":"59754","session_id":"123e4567-e89b-12d3-a456-426614174000","started_at":"2025-12-05T15:00:00Z","status":"in_progress","total_steps":7,"updated_at":"2025-12-05T15:01:30Z"}},"RecordPaymentRequest":{"properties":{"invoice_id":{"type":"string","title":"Invoice Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"payment_method":{"type":"string","title":"Payment Method"},"reference_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reference Number"},"payment_date":{"type":"string","format":"date","title":"Payment Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["invoice_id","amount_cents","payment_method","payment_date"],"title":"RecordPaymentRequest"},"ReportListResponse":{"properties":{"id":{"type":"string","title":"Id"},"rssd_id":{"type":"string","title":"Rssd Id"},"bank_name":{"type":"string","title":"Bank Name"},"original_filename":{"type":"string","title":"Original Filename"},"file_type":{"type":"string","title":"File Type"},"file_size_bytes":{"type":"integer","title":"File Size Bytes"},"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"},"reporting_period_start":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporting Period Start"},"reporting_period_end":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporting Period End"},"report_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Title"},"processing_status":{"type":"string","title":"Processing Status"},"chunks_created":{"type":"integer","title":"Chunks Created","default":0},"uploaded_by":{"type":"string","title":"Uploaded By"},"created_at":{"type":"string","title":"Created At"},"error_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error Message"}},"type":"object","required":["id","rssd_id","bank_name","original_filename","file_type","file_size_bytes","processing_status","uploaded_by","created_at"],"title":"ReportListResponse","description":"Report metadata for list view"},"ReportUploadResponse":{"properties":{"report_id":{"type":"string","title":"Report Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["report_id","status","message"],"title":"ReportUploadResponse","description":"Response after uploading a report"},"ResolveRequest":{"properties":{"method":{"type":"string","title":"Method","description":"Peer group method: ffiec, parametric, or custom"},"peer_group_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Peer Group Code","description":"FFIEC peer group code (1-27)"},"states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"States","description":"State codes for parametric"},"asset_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asset Min","description":"Min assets in $K"},"asset_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asset Max","description":"Max assets in $K"},"institution_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Institution Type","description":"commercial or savings"},"metro":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Metro","description":"Metro/non-metro filter"},"rssd_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Rssd Ids","description":"Custom RSSD IDs"},"quarter":{"type":"string","title":"Quarter","description":"Reference quarter (YYYY-MM-DD)"}},"type":"object","required":["method","quarter"],"title":"ResolveRequest","description":"Request body for resolving a peer group."},"SetPricingRequest":{"properties":{"pricing_model":{"type":"string","title":"Pricing Model"},"pricing_config":{"additionalProperties":true,"type":"object","title":"Pricing Config"},"effective_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Effective Date"}},"type":"object","required":["pricing_model","pricing_config"],"title":"SetPricingRequest"},"SetTrialRequest":{"properties":{"days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Days"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"},"send_welcome_email":{"type":"boolean","title":"Send Welcome Email","default":true}},"type":"object","title":"SetTrialRequest"},"SupportTicketRequest":{"properties":{"subject":{"type":"string","title":"Subject"},"category":{"type":"string","title":"Category"},"message":{"type":"string","title":"Message"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority","default":"normal"}},"type":"object","required":["subject","category","message"],"title":"SupportTicketRequest","description":"Request to submit a support ticket."},"TestPersonaRequest":{"properties":{"message":{"type":"string","title":"Message","default":"What are the key revenue metrics I should be tracking for a community bank?"}},"type":"object","title":"TestPersonaRequest"},"TwoFAInitiateRequest":{"properties":{"cognito_id_token":{"type":"string","title":"Cognito Id Token"},"cognito_access_token":{"type":"string","title":"Cognito Access Token"},"device_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Fingerprint"}},"type":"object","required":["cognito_id_token","cognito_access_token"],"title":"TwoFAInitiateRequest","description":"Request to initiate 2FA after password auth."},"TwoFAInitiateResponse":{"properties":{"requires_2fa":{"type":"boolean","title":"Requires 2Fa"},"requires_phone_setup":{"type":"boolean","title":"Requires Phone Setup","default":false},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token"},"phone_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Masked"},"trusted_device":{"type":"boolean","title":"Trusted Device","default":false},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["requires_2fa"],"title":"TwoFAInitiateResponse","description":"Response from 2FA initiation."},"TwoFAResendRequest":{"properties":{"session_token":{"type":"string","title":"Session Token"}},"type":"object","required":["session_token"],"title":"TwoFAResendRequest","description":"Request to resend SMS code."},"TwoFAResendResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"phone_masked":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Masked"},"attempts_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Attempts Remaining"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"TwoFAResendResponse","description":"Response from SMS resend."},"TwoFAVerifyRequest":{"properties":{"session_token":{"type":"string","title":"Session Token"},"code":{"type":"string","title":"Code"},"trust_device":{"type":"boolean","title":"Trust Device","default":false},"device_fingerprint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Fingerprint"},"device_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Device Name"}},"type":"object","required":["session_token","code"],"title":"TwoFAVerifyRequest","description":"Request to verify SMS code."},"TwoFAVerifyResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"id_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id Token"},"access_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Access Token"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"attempts_remaining":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Attempts Remaining"}},"type":"object","required":["success"],"title":"TwoFAVerifyResponse","description":"Response from 2FA verification."},"UpdateBankRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"billing_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Billing Email"},"billing_contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Contact Name"},"billing_address_line1":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Line1"},"billing_address_line2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Address Line2"},"billing_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing City"},"billing_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing State"},"billing_postal_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Postal Code"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"status_message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status Message"}},"type":"object","title":"UpdateBankRequest"},"UpdateDocumentRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"}},"type":"object","title":"UpdateDocumentRequest","description":"Request to update document metadata"},"UpdateModuleRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"features":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Features"}},"type":"object","title":"UpdateModuleRequest"},"UpdatePersonaRequest":{"properties":{"persona_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Name"},"persona_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Description"},"pillar":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pillar"},"system_prompt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"System Prompt"},"temperature":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Temperature"},"max_tokens":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Tokens"},"model_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Model Name"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_default":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Default"}},"type":"object","title":"UpdatePersonaRequest"},"UpdateSeatsRequest":{"properties":{"seat_count":{"type":"integer","title":"Seat Count"}},"type":"object","required":["seat_count"],"title":"UpdateSeatsRequest"},"UpdateUserRoleRequest":{"properties":{"role":{"type":"string","title":"Role"}},"type":"object","required":["role"],"title":"UpdateUserRoleRequest","description":"Request to update a user's role."},"UploadDocumentResponse":{"properties":{"document_id":{"type":"string","title":"Document Id"},"status":{"type":"string","title":"Status"},"message":{"type":"string","title":"Message"},"sync_job_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sync Job Id"}},"type":"object","required":["document_id","status","message"],"title":"UploadDocumentResponse","description":"Response after uploading a document"},"UserAssignmentResponse":{"properties":{"user_id":{"type":"string","title":"User Id"},"email":{"type":"string","title":"Email"},"full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Full Name"},"created_at":{"type":"string","title":"Created At"},"banks":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Banks","default":[]},"is_admin":{"type":"boolean","title":"Is Admin","default":false},"admin_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Admin Level"},"is_perlucem_staff":{"type":"boolean","title":"Is Perlucem Staff","default":false},"last_activity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Activity"}},"type":"object","required":["user_id","email","created_at"],"title":"UserAssignmentResponse","description":"User with their bank assignments"},"UserLogin":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"UserLogin","description":"User login request model."},"UserProfile":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"is_bank_admin":{"type":"boolean","title":"Is Bank Admin","default":false},"demo_expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Demo Expires At"},"usage_count":{"type":"integer","title":"Usage Count","default":0},"max_usage_limit":{"type":"integer","title":"Max Usage Limit","default":10},"is_demo_user":{"type":"boolean","title":"Is Demo User","default":true},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["id","email","created_at"],"title":"UserProfile","description":"User profile model."},"UserSignup":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"is_demo":{"type":"boolean","title":"Is Demo","default":true}},"type":"object","required":["email","password"],"title":"UserSignup","description":"User signup request model."},"ValidateImpersonationRequest":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"ValidateImpersonationRequest","description":"Request to validate impersonation token"},"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"},"app__api__v1__endpoints__peer__AnalyzeRequest":{"properties":{"subject_rssd_id":{"type":"integer","title":"Subject Rssd Id","description":"Subject bank RSSD ID"},"method":{"type":"string","title":"Method","description":"Peer group method: ffiec, parametric, or custom"},"peer_group_code":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Peer Group Code"},"states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"States"},"asset_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asset Min"},"asset_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asset Max"},"institution_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Institution Type"},"metro":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Metro"},"rssd_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Rssd Ids"},"quarters":{"items":{"type":"string"},"type":"array","title":"Quarters","description":"Quarters to analyze (YYYY-MM-DD)"}},"type":"object","required":["subject_rssd_id","method","quarters"],"title":"AnalyzeRequest","description":"Request body for initiating peer analysis."},"app__api__v1__endpoints__tbpi__AnalyzeRequest":{"properties":{"rssd_id":{"type":"string","title":"Rssd Id","description":"Bank RSSD ID"},"pillar":{"type":"string","pattern":"^(revenue|cost|risk|capital|operations)$","title":"Pillar","description":"Pillar to analyze"},"start_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Period","description":"Start period (e.g., '12/31/2024')"},"end_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Period","description":"End period (e.g., '9/30/2025')"}},"type":"object","required":["rssd_id","pillar"],"title":"AnalyzeRequest","description":"Request body for initiating TBPI analysis","example":{"end_period":"9/30/2025","pillar":"revenue","rssd_id":"59754","start_period":"12/31/2024"}}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}