{"openapi":"3.1.0","info":{"title":"Slack Lead Manager","description":"Backend service for Slack lead management","version":"1.0.0"},"paths":{"/api/create-lead":{"post":{"tags":["leads"],"summary":"Create Lead","description":"Create a new lead.\n\nArgs:\n    lead_data: Lead creation data\n    supabase: Supabase client\n\nReturns:\n    API response with created lead data","operationId":"create_lead_api_create_lead_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/get-leads":{"get":{"tags":["leads"],"summary":"Get Leads","description":"Get list of leads with pagination.\n\nArgs:\n    limit: Maximum number of leads to return\n    skip: Number of leads to skip\n    supabase: Supabase client\n    \nReturns:\n    API response with list of leads","operationId":"get_leads_api_get_leads_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/leads/{lead_id}":{"get":{"tags":["leads"],"summary":"Get Lead","description":"Get a specific lead by ID.\n\nArgs:\n    lead_id: Lead UUID\n    supabase: Supabase client\n    \nReturns:\n    API response with lead data","operationId":"get_lead_api_leads__lead_id__get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["leads"],"summary":"Update Lead","description":"Update an existing lead.\n\nArgs:\n    lead_id: Lead UUID\n    lead_data: Updated lead data\n    supabase: Supabase client\n    \nReturns:\n    API response with updated lead data","operationId":"update_lead_api_leads__lead_id__put","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["leads"],"summary":"Delete Lead","description":"Delete a lead.\n\nArgs:\n    lead_id: Lead UUID\n    supabase: Supabase client\n\nReturns:\n    API response confirming deletion","operationId":"delete_lead_api_leads__lead_id__delete","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/applications/from-google-form":{"post":{"tags":["applications"],"summary":"Receive Google Form Application","description":"Receive a Google Form submission and:\n1. Create or match a Lead record\n2. Save the full application with raw data to the applications table\n\nExpected payload keys (auto-generated from form question titles):\n    product        — \"DO\" | \"GL\" | \"Cyber\" | \"TechEO\" | \"TechEO_Cyber\"\n    source         — \"google_form\"\n    submitted_at   — ISO timestamp\n    email_address  — applicant email\n    legal_company_name — company name\n    first_name / last_name — contact name\n    phone_number   — phone\n    ... all other form fields as key:value pairs","operationId":"receive_google_form_application_api_applications_from_google_form_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Payload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/applications/{application_id}":{"get":{"tags":["applications"],"summary":"Get Application","description":"Retrieve a single application by ID.","operationId":"get_application_api_applications__application_id__get","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/applications/":{"get":{"tags":["applications"],"summary":"List Applications","description":"List applications with optional filters.","operationId":"list_applications_api_applications__get","parameters":[{"name":"product","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/applications/generate-pdf":{"post":{"tags":["applications"],"summary":"Generate Application Pdf","description":"Generate a PDF from questionnaire submission data.\n\nExpected payload:\n{\n    \"applicant_info\": {...},\n    \"cyber_info\": {...},\n    \"eo_info\": {...},\n    \"signature\": {...},\n    \"product_type\": \"cyber\" | \"tech-eo\" | \"gl\" | \"dno\"\n}\n\nReturns the PDF file path and application ID.","operationId":"generate_application_pdf_api_applications_generate_pdf_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Payload"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/APIResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/applications/download-pdf/{application_id}":{"get":{"tags":["applications"],"summary":"Download Application Pdf","description":"Download the PDF for a specific application.","operationId":"download_application_pdf_api_applications_download_pdf__application_id__get","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/otp/send":{"post":{"tags":["otp"],"summary":"Send Otp","description":"Send OTP to email address.\n\nArgs:\n    request: FastAPI request object\n    data: Send OTP request data\n    supabase: Supabase client\n\nReturns:\n    Success response with verification ID","operationId":"send_otp_api_otp_send_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__otp__SendOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/otp/verify":{"post":{"tags":["otp"],"summary":"Verify Otp","description":"Verify OTP code.\n\nArgs:\n    data: Verify OTP request data\n    supabase: Supabase client\n    \nReturns:\n    Verification result","operationId":"verify_otp_api_otp_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__otp__VerifyOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/otp/resend":{"post":{"tags":["otp"],"summary":"Resend Otp","description":"Resend OTP to email address.\n\nArgs:\n    request: FastAPI request object\n    data: Resend OTP request data\n    supabase: Supabase client\n    \nReturns:\n    Success response with new verification ID","operationId":"resend_otp_api_otp_resend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResendOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/otp/status/{email}":{"get":{"tags":["otp"],"summary":"Check Verification Status","description":"Check if email has been verified.\n\nArgs:\n    email: Email address to check\n    purpose: Purpose of verification\n    supabase: Supabase client\n    \nReturns:\n    Verification status","operationId":"check_verification_status_api_otp_status__email__get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}},{"name":"purpose","in":"query","required":false,"schema":{"type":"string","default":"email_verification","title":"Purpose"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/ascend/webhook":{"get":{"summary":"Ascend Webhook Info","description":"GET endpoint for webhook verification or health checks.\nReturns info about the webhook endpoint.","operationId":"ascend_webhook_info_ascend_webhook_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"summary":"Ascend Webhook","description":"Handle Ascend webhook events for payment status updates.\n\nAscend sends webhooks for:\n- invoice.paid\n- invoice.payment_failed\n- invoice.processing_payment\n- invoice.created","operationId":"ascend_webhook_ascend_webhook_post","parameters":[{"name":"x-ascend-signature","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Ascend-Signature"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads":{"get":{"tags":["admin-leads"],"summary":"Get Pipeline Leads","description":"Get pipeline leads for the admin portal lead picker.\nReturns all leads in active sales pipeline stages only.\nIncludes: Lead, Prequalified, Intake, Submitted, Quotes Ready, Binding\nExcludes: Active (Policy Active, Pending Renewal), Lost (Declined, etc.)","operationId":"get_pipeline_leads_api_admin_leads_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search by name, email, or company","default":"","title":"Search"},"description":"Search by name, email, or company"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/all":{"get":{"tags":["admin-leads"],"summary":"Get All Leads","description":"Get all leads for the admin portal Leads page with pagination.\nReturns complete lead data with all fields.","operationId":"get_all_leads_api_admin_leads_all_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search by name, email, or company","default":"","title":"Search"},"description":"Search by name, email, or company"},{"name":"stage","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Filter by stage (repeatable)","title":"Stage"},"description":"Filter by stage (repeatable)"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of leads per page","default":50,"title":"Limit"},"description":"Number of leads per page"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of leads to skip","default":0,"title":"Skip"},"description":"Number of leads to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/stats":{"get":{"tags":["admin-leads"],"summary":"Get Lead Stats","description":"Accurate headline counts for the Leads page, computed at the DB level\n(not capped by the paginated /leads/all list).\n\n- total:        all leads\n- by_stage:     count of leads per stage (includes Active, Lost, etc.)\n- won:          distinct leads that have a bound policy (the true \"Won\")","operationId":"get_lead_stats_api_admin_leads_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/leads/{lead_id}":{"get":{"tags":["admin-leads"],"summary":"Get Lead By Id","description":"Get a single lead by ID.\nReturns complete lead data with all fields.","operationId":"get_lead_by_id_api_admin_leads__lead_id__get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/quotes":{"get":{"tags":["admin-leads"],"summary":"Get Lead Quotes","description":"Get all quotes for a specific lead.\nReturns quotes with status, carrier, coverage, and pricing information.","operationId":"get_lead_quotes_api_admin_leads__lead_id__quotes_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/quote-drafts":{"get":{"tags":["admin-leads"],"summary":"Get Lead Quote Drafts","description":"Get all quote drafts for a specific lead.\nReturns in-progress quotes being created via Slack.","operationId":"get_lead_quote_drafts_api_admin_leads__lead_id__quote_drafts_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quotes":{"post":{"tags":["admin-leads"],"summary":"Create Quote","description":"Create a quote directly for a lead from the admin portal.\nNo draft, no Ascend, no email — just inserts into the quotes table.","operationId":"create_quote_api_admin_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQuoteInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/active-policies":{"get":{"tags":["admin-leads"],"summary":"Get Lead Active Policies","description":"Get all active (bound) policies for a specific lead.\nReturns applications with status='Bound'.","operationId":"get_lead_active_policies_api_admin_leads__lead_id__active_policies_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quotes/{quote_id}":{"get":{"tags":["admin-leads"],"summary":"Get Quote By Id","description":"Get a single quote by ID.","operationId":"get_quote_by_id_api_admin_quotes__quote_id__get","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-leads"],"summary":"Update Quote","description":"Update quote details.","operationId":"update_quote_api_admin_quotes__quote_id__put","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateQuoteInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-leads"],"summary":"Delete Quote","description":"Delete a quote by ID.","operationId":"delete_quote_api_admin_quotes__quote_id__delete","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quotes/{quote_id}/stage":{"patch":{"tags":["admin-leads"],"summary":"Update Quote Stage","description":"Move a quote to a new pipeline stage.\nAllowed transitions: Quotes Ready ↔ Binding ↔ Active, any → Lost - Declined.","operationId":"update_quote_stage_api_admin_quotes__quote_id__stage_patch","parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateQuoteStageInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/stage":{"patch":{"tags":["admin-leads"],"summary":"Update Lead Stage","description":"Move a lead to a new pipeline stage.\nChecks if lead has pending applications (not submitted) and returns warning.\nUse force=true to override the warning.","operationId":"update_lead_stage_api_admin_leads__lead_id__stage_patch","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLeadStageInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/substate":{"patch":{"tags":["admin-leads"],"summary":"Update Lead Substate","description":"Update the substate of a lead (e.g. Review / RFI / Declined for Sent to Carrier stage).","operationId":"update_lead_substate_api_admin_leads__lead_id__substate_patch","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLeadSubstateInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/follow-up":{"patch":{"tags":["admin-leads"],"summary":"Update Lead Last Follow Up","description":"Set (or clear) a lead's manually-entered Last Follow-up Date.\n\nDistinct from `follow_up_date` (the next scheduled follow-up). Used by the\nfollow-up tracking feature to flag leads that need attention.","operationId":"update_lead_last_follow_up_api_admin_leads__lead_id__follow_up_patch","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLastFollowUpInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/storage/signed-url":{"get":{"tags":["admin-leads"],"summary":"Get Signed Url","description":"Generate a short-lived signed URL for a private storage file.\nfile_path: the path inside the leads bucket, e.g. {lead_id}-{company}/quotes/filename.pdf","operationId":"get_signed_url_api_admin_storage_signed_url_get","parameters":[{"name":"file_path","in":"query","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quotes/upload-pdf":{"post":{"tags":["admin-leads"],"summary":"Upload Quote Pdf","description":"Upload a quote PDF to the lead's quotes folder in Supabase storage.\nReturns the public URL of the uploaded file.\nFolder path: {lead_id}-{sanitized_company_name}/quotes/{filename}","operationId":"upload_quote_pdf_api_admin_quotes_upload_pdf_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_quote_pdf_api_admin_quotes_upload_pdf_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quotes/upload-doc":{"post":{"tags":["admin-leads"],"summary":"Upload Quote Doc","description":"Upload a quote supporting document (binder, BOR letter, signed application).","operationId":"upload_quote_doc_api_admin_quotes_upload_doc_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_quote_doc_api_admin_quotes_upload_doc_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/binding-quotes":{"get":{"tags":["admin-policies"],"summary":"Get Binding Quotes","description":"Return quotes at stage 'Binding' that do NOT yet have a policy.\nThese are the quotes eligible to be turned into a policy.","operationId":"get_binding_quotes_api_admin_binding_quotes_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search by carrier, company, or contact","default":"","title":"Search"},"description":"Search by carrier, company, or contact"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"partner_id","in":"query","required":false,"schema":{"type":"string","description":"Filter quotes by partner lead source","default":"","title":"Partner Id"},"description":"Filter quotes by partner lead source"},{"name":"partner_only","in":"query","required":false,"schema":{"type":"boolean","description":"If true, return only quotes from partner leads","default":false,"title":"Partner Only"},"description":"If true, return only quotes from partner leads"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/policies":{"get":{"tags":["admin-policies"],"summary":"Get Lead Policies","description":"Get all policies for a lead.","operationId":"get_lead_policies_api_admin_leads__lead_id__policies_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/policies/{policy_id}":{"get":{"tags":["admin-policies"],"summary":"Get Policy","description":"Get a single policy by ID.","operationId":"get_policy_api_admin_policies__policy_id__get","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["admin-policies"],"summary":"Update Policy","description":"Update policy details and sync financial fields to the linked quote.","operationId":"update_policy_api_admin_policies__policy_id__put","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePolicyInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-policies"],"summary":"Delete Policy","description":"Delete a policy.","operationId":"delete_policy_api_admin_policies__policy_id__delete","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/policies":{"post":{"tags":["admin-policies"],"summary":"Create Policy","description":"Create a policy from a binding quote.\nAlso flips the source quote → stage 'Active' (status 'Accepted') and the\nlead → stage 'Active', so the pipeline reflects the bind.","operationId":"create_policy_api_admin_policies_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePolicyInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/policies/{policy_id}/substate":{"patch":{"tags":["admin-policies"],"summary":"Update Policy Substate","description":"Update the payment substate of a policy (Invoice Sent / Paid).","operationId":"update_policy_substate_api_admin_policies__policy_id__substate_patch","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePolicySubstateInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/policies/upload-doc":{"post":{"tags":["admin-policies"],"summary":"Upload Policy Doc","description":"Upload a policy document (policy PDF, receipt, or certificate) to the\nlead's policies folder. Path: {lead_id}-{company}/policies/{filename}","operationId":"upload_policy_doc_api_admin_policies_upload_doc_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_policy_doc_api_admin_policies_upload_doc_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/contacts/all":{"get":{"tags":["admin-contacts"],"summary":"Get All Contacts","description":"Get all contacts for the admin portal Contacts page with pagination.\nReturns complete contact data with all fields.","operationId":"get_all_contacts_api_admin_contacts_all_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search by name, email, company, or phone","default":"","title":"Search"},"description":"Search by name, email, company, or phone"},{"name":"contact_type","in":"query","required":false,"schema":{"type":"string","description":"Filter by contact type","title":"Contact Type"},"description":"Filter by contact type"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Number of contacts per page","default":50,"title":"Limit"},"description":"Number of contacts per page"},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of contacts to skip","default":0,"title":"Skip"},"description":"Number of contacts to skip"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/contacts/{contact_id}":{"get":{"tags":["admin-contacts"],"summary":"Get Contact By Id","description":"Get a single contact by ID.\nReturns complete contact data with all fields.","operationId":"get_contact_by_id_api_admin_contacts__contact_id__get","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"string","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/shareable-links":{"post":{"tags":["shareable-links"],"summary":"Generate Shareable Link","description":"Create a shareable questionnaire link.\nInserts an application row with a unique share_token.","operationId":"generate_shareable_link_api_admin_shareable_links_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__shareable_links__GenerateLinkRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["shareable-links"],"summary":"List Shareable Links","description":"List all shareable links (applications created via admin portal).","operationId":"list_shareable_links_api_admin_shareable_links_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/shareable-links/convert-to-bind":{"post":{"tags":["shareable-links"],"summary":"Convert To Bind","description":"Convert a completed D&O Quick Quote application to a D&O Bind application.\nCopies all form data (company info + D&O Quick Quote answers) to the new bind application.\nSets is_converted_bind=True so the wizard skips kickoff + company info steps.","operationId":"convert_to_bind_api_admin_shareable_links_convert_to_bind_post","requestBody":{"content":{"application/json":{"schema":{"type":"object","title":"Body"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/shareable-links/{token}":{"get":{"tags":["shareable-links"],"summary":"Get Shareable Link","description":"Resolve a token to its application/link data (used by the public quote page).","operationId":"get_shareable_link_api_admin_shareable_links__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/admin/shareable-links/{application_id}":{"delete":{"tags":["shareable-links"],"summary":"Delete Shareable Link","description":"Delete a shareable link.\n\nIf this was the lead's last questionnaire, move the lead back to\n\"Prequalified\" — the mirror of the Prequalified -> Intake bump done when a\nquestionnaire is created. Only reverts from \"Intake\" so leads that already\nadvanced (Submitted / Quotes Ready / Binding / Active / Lost) are untouched.","operationId":"delete_shareable_link_api_admin_shareable_links__application_id__delete","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/shareable-links/expiry/{application_id}":{"patch":{"tags":["shareable-links"],"summary":"Update Link Expiry","description":"Update the expiry date of a shareable link.","operationId":"update_link_expiry_api_admin_shareable_links_expiry__application_id__patch","parameters":[{"name":"application_id","in":"path","required":true,"schema":{"type":"string","title":"Application Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExpiryRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/dashboard/stats":{"get":{"tags":["admin-dashboard"],"summary":"Get Dashboard Stats","description":"Returns:\n- Questionnaire counts (total, not-started, in-progress, completed, expired)\n- 5 most recent shareable links\n- Lead counts by stage","operationId":"get_dashboard_stats_api_admin_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pipeline/carriers":{"get":{"tags":["admin-pipeline"],"summary":"Get Carriers","description":"Get unique list of carriers for filtering","operationId":"get_carriers_api_admin_pipeline_carriers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pipeline/sources":{"get":{"tags":["admin-pipeline"],"summary":"Get Sources","description":"Get list of partners (sources) for filtering pipeline by lead origin","operationId":"get_sources_api_admin_pipeline_sources_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/admin/pipeline":{"get":{"tags":["admin-pipeline"],"summary":"Get Pipeline Data","description":"Get pipeline data - HYBRID approach:\n- Early stages (Lead, Prequalified, Intake, Submitted): Show leads without quotes\n- Later stages (Quotes Ready, Binding, Active): Show individual quotes","operationId":"get_pipeline_data_api_admin_pipeline_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"Search by company name, email, or lead ID","default":"","title":"Search"},"description":"Search by company name, email, or lead ID"},{"name":"carrier","in":"query","required":false,"schema":{"type":"string","description":"Filter by carrier","default":"all","title":"Carrier"},"description":"Filter by carrier"},{"name":"date_filter","in":"query","required":false,"schema":{"type":"string","description":"Date filter (7, 30, 90, 365 for days, or 'all')","default":"all","title":"Date Filter"},"description":"Date filter (7, 30, 90, 365 for days, or 'all')"},{"name":"start_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom start date (ISO format)","title":"Start Date"},"description":"Custom start date (ISO format)"},{"name":"end_date","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Custom end date (ISO format)","title":"End Date"},"description":"Custom end date (ISO format)"},{"name":"source","in":"query","required":false,"schema":{"type":"string","description":"Filter by source: 'all', 'admin', or a partner_id","default":"all","title":"Source"},"description":"Filter by source: 'all', 'admin', or a partner_id"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pipeline/financial-summary":{"get":{"tags":["admin-pipeline"],"summary":"Get Financial Summary","description":"Executive financial summary for the pipeline PDF export.\n\nReturns:\n  - quoteToBind: distinct-lead quote→bind conversion (bind+active as placed)\n  - premiumPlaced: total base premium in Binding + Active\n  - weightedPipeline: expected value of pre-binding opportunities\n  - topCustomers: top 3 companies by realized revenue\n  - cumulativeGwp: month-by-month cumulative written premium\n  - forecastBar: [current placed GWP, placed GWP + weighted forecast]\n  - probabilities / assumptions used (for transparency in the report)","operationId":"get_financial_summary_api_admin_pipeline_financial_summary_get","parameters":[{"name":"exclude_leads","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated lead_ids to exclude from all calculations (e.g. non-responsive leads). Merged with the built-in default exclusion list.","default":"","title":"Exclude Leads"},"description":"Comma-separated lead_ids to exclude from all calculations (e.g. non-responsive leads). Merged with the built-in default exclusion list."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/tasks":{"get":{"tags":["admin-tasks"],"summary":"Get Tasks","description":"Get all pending tasks grouped by status: overdue, today, upcoming.\nJoins lead data when lead_id is present.","operationId":"get_tasks_api_admin_tasks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["admin-tasks"],"summary":"Create Task","description":"Create a task from the admin portal (e.g. a manual follow-up task logged\nalongside a follow-up entry). Inserts a pending row into the shared `tasks`\ntable — the existing hourly follow-up cron then surfaces it in Slack on its\ndue date, and it shows on the Tasks page immediately.","operationId":"create_task_api_admin_tasks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTaskInput"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/questionnaire/{token}":{"get":{"tags":["questionnaire"],"summary":"Get Questionnaire","description":"Fetch questionnaire data by token (public endpoint, no auth required).\nReturns questionnaire details including coverages and any saved form data.","operationId":"get_questionnaire_api_questionnaire__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/questionnaire/submit":{"post":{"tags":["questionnaire"],"summary":"Submit Questionnaire","description":"Submit a completed questionnaire (public endpoint, no auth required).\nUpdates the application with form data, marks it as submitted,\ngenerates PDF, and updates lead stage to 'Submitted'.","operationId":"submit_questionnaire_api_questionnaire_submit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitQuestionnaireRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/questionnaire/upload-coi":{"post":{"tags":["questionnaire"],"summary":"Upload Coi","description":"Upload Certificate of Insurance (COI) file for a questionnaire.\nStores file in Supabase Storage at: leads/{lead_id}/misc/coi-{coverage}-{filename}","operationId":"upload_coi_api_questionnaire_upload_coi_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_coi_api_questionnaire_upload_coi_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/questionnaire/upload-ai-doc":{"post":{"tags":["questionnaire"],"summary":"Upload Ai Doc","description":"Upload AI documentation file for a questionnaire.\nStores file in Supabase Storage at: leads/{lead_id}/applications/ai-{doc_type}-{filename}","operationId":"upload_ai_doc_api_questionnaire_upload_ai_doc_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_ai_doc_api_questionnaire_upload_ai_doc_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/questionnaire/upload-org-chart":{"post":{"tags":["questionnaire"],"summary":"Upload Org Chart","description":"Upload organization chart file for a questionnaire.\nStores file in Supabase Storage at: leads/{lead_id}/misc/org-chart-{filename}","operationId":"upload_org_chart_api_questionnaire_upload_org_chart_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_org_chart_api_questionnaire_upload_org_chart_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/questionnaire/{token}/save-progress":{"patch":{"tags":["questionnaire"],"summary":"Save Questionnaire Progress","description":"Save questionnaire progress without submitting (public endpoint, no auth required).\nAllows users to save their work and continue later.\nAuto-saves every field change to Supabase.","operationId":"save_questionnaire_progress_api_questionnaire__token__save_progress_patch","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SaveProgressRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/questionnaire/{token}/download-pdfs":{"get":{"tags":["questionnaire"],"summary":"Download Questionnaire Pdfs","description":"Download PDFs for a submitted questionnaire split by coverage groups.\nReturns a ZIP file containing multiple PDFs based on coverages:\n- Tech E&O + Cyber + Ransomware = 1 PDF\n- D&O = separate PDF\n- GL = separate PDF\n- AI Insurance = separate PDF","operationId":"download_questionnaire_pdfs_api_questionnaire__token__download_pdfs_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/questionnaire/{token}/download-pdf":{"get":{"tags":["questionnaire"],"summary":"Download Questionnaire Pdf","description":"Download the generated PDF for a submitted questionnaire (public endpoint, no auth required).\nUses signed URLs for secure access to private bucket.\nDEPRECATED: Use /download-pdfs instead for split PDFs by coverage.","operationId":"download_questionnaire_pdf_api_questionnaire__token__download_pdf_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/address/health":{"get":{"tags":["address"],"summary":"Address Health","description":"Check if AWS Location Service is configured.","operationId":"address_health_api_address_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/address/autocomplete":{"get":{"tags":["address"],"summary":"Autocomplete Address","description":"Autocomplete address using AWS Amazon Location Service with boto3.\n\nArgs:\n    query: Address search query (minimum 3 characters)\n    limit: Maximum number of results (1-10)\n    countries: Comma-separated country codes (default: USA)\n    \nReturns:\n    List of address suggestions","operationId":"autocomplete_address_api_address_autocomplete_get","parameters":[{"name":"query","in":"query","required":true,"schema":{"type":"string","minLength":3,"description":"Address search query","title":"Query"},"description":"Address search query"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":10,"minimum":1,"description":"Maximum number of results","default":5,"title":"Limit"},"description":"Maximum number of results"},{"name":"countries","in":"query","required":false,"schema":{"type":"string","description":"Comma-separated country codes","default":"USA","title":"Countries"},"description":"Comma-separated country codes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutocompleteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/address/lookup-zip/{zip_code}":{"get":{"tags":["address"],"summary":"Lookup Zip Code","description":"Lookup city and state by ZIP code using AWS Amazon Location Service.\n\nArgs:\n    zip_code: 5-digit US ZIP code\n    \nReturns:\n    City and state for the ZIP code","operationId":"lookup_zip_code_api_address_lookup_zip__zip_code__get","parameters":[{"name":"zip_code","in":"path","required":true,"schema":{"type":"string","title":"Zip Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZipLookupResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/payment-complete":{"get":{"tags":["payments"],"summary":"Payment Complete Page","description":"Custom success page shown to customers after completing payment on Ascend.\nThis page is displayed via the return_url parameter in Program creation.","operationId":"payment_complete_page_payment_complete_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/payment-failed":{"get":{"tags":["payments"],"summary":"Payment Failed Page","description":"Page shown when payment fails or is cancelled.","operationId":"payment_failed_page_payment_failed_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/contacts/slack-webhook":{"post":{"summary":"Contact Slack Webhook","description":"Proxy endpoint for contact form Slack notifications.\nReceives Slack message from Astro, adds \"Create Lead\" button, and forwards to Slack.\nNO DATABASE STORAGE - data is embedded in the button itself.","operationId":"contact_slack_webhook_api_contacts_slack_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/storage/leads/{lead_id}/files":{"get":{"tags":["storage"],"summary":"List Lead Files","description":"List all files and folders for a lead.\n\nArgs:\n    lead_id: Lead UUID\n    path: Subfolder path (optional, e.g., \"applications\", \"quotes/2024\")\n\nReturns:\n    FolderContents with files and folders","operationId":"list_lead_files_api_storage_leads__lead_id__files_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"path","in":"query","required":false,"schema":{"type":"string","default":"","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FolderContents"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["storage"],"summary":"Delete File","description":"Delete a file from lead storage.\n\nArgs:\n    lead_id: Lead UUID\n    file_path: Full path to file in storage\n\nReturns:\n    Success message","operationId":"delete_file_api_storage_leads__lead_id__files_delete","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"file_path","in":"query","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete File Api Storage Leads  Lead Id  Files Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/storage/leads/{lead_id}/misc-files":{"get":{"tags":["storage"],"summary":"List Misc Files For Quote","description":"List misc files for a lead, optionally scoped to a specific quote or policy.","operationId":"list_misc_files_for_quote_api_storage_leads__lead_id__misc_files_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"quote_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"}},{"name":"policy_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Misc Files For Quote Api Storage Leads  Lead Id  Misc Files Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["storage"],"summary":"Upload Misc Files","description":"Upload multiple files to lead's misc folder, scoped to a specific quote or policy.","operationId":"upload_misc_files_api_storage_leads__lead_id__misc_files_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_misc_files_api_storage_leads__lead_id__misc_files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Upload Misc Files Api Storage Leads  Lead Id  Misc Files Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/storage/signed-url":{"get":{"tags":["storage"],"summary":"Get Signed Url","description":"Get a signed URL for downloading a file.\n\nArgs:\n    file_path: Full path to file in storage\n    expires_in: Expiry time in seconds (default 1 hour)\n\nReturns:\n    Dict with signed_url","operationId":"get_signed_url_api_storage_signed_url_get","parameters":[{"name":"file_path","in":"query","required":true,"schema":{"type":"string","title":"File Path"}},{"name":"expires_in","in":"query","required":false,"schema":{"type":"integer","default":3600,"title":"Expires In"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Get Signed Url Api Storage Signed Url Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/storage/leads/{lead_id}/upload-files":{"post":{"tags":["storage"],"summary":"Upload Files To Subfolder","description":"Upload multiple files to lead's specified subfolder.\n\nArgs:\n    lead_id: Lead UUID\n    files: List of files to upload\n    subfolder: Target subfolder (applications, quotes, policies, coi, misc)\n\nReturns:\n    List of uploaded file info with signed URLs","operationId":"upload_files_to_subfolder_api_storage_leads__lead_id__upload_files_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_files_to_subfolder_api_storage_leads__lead_id__upload_files_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Upload Files To Subfolder Api Storage Leads  Lead Id  Upload Files Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/storage/leads/{lead_id}/folders":{"post":{"tags":["storage"],"summary":"Create Folder","description":"Create a new folder in lead storage.\n\nArgs:\n    lead_id: Lead UUID\n    request: CreateFolderRequest with folder_path\n\nReturns:\n    Success message with folder path","operationId":"create_folder_api_storage_leads__lead_id__folders_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFolderRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Create Folder Api Storage Leads  Lead Id  Folders Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["storage"],"summary":"Delete Folder","description":"Delete a folder and all its contents from lead storage.\n\nArgs:\n    lead_id: Lead UUID\n    folder_path: Relative path to folder (e.g., \"test\", \"applications/2024\")\n\nReturns:\n    Success message","operationId":"delete_folder_api_storage_leads__lead_id__folders_delete","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"folder_path","in":"query","required":true,"schema":{"type":"string","title":"Folder Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete Folder Api Storage Leads  Lead Id  Folders Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/storage/leads/{lead_id}/upload":{"post":{"tags":["storage"],"summary":"Upload Files","description":"Upload multiple files to lead's storage at specified path.\n\nArgs:\n    lead_id: Lead UUID\n    files: List of files to upload\n    path: Target path relative to lead folder (optional)\n\nReturns:\n    List of uploaded file info with signed URLs","operationId":"upload_files_api_storage_leads__lead_id__upload_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_files_api_storage_leads__lead_id__upload_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Upload Files Api Storage Leads  Lead Id  Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/notify/questionnaire-submitted":{"post":{"tags":["notify"],"summary":"Notify Questionnaire Submitted","operationId":"notify_questionnaire_submitted_api_notify_questionnaire_submitted_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionNotifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app-documents/categories":{"get":{"tags":["app-documents"],"summary":"List Categories","description":"List all available document categories (folders).\n\nReturns:\n    List of category names","operationId":"list_categories_api_app_documents_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Categories Api App Documents Categories Get"}}}}}}},"/api/app-documents/files":{"get":{"tags":["app-documents"],"summary":"List Files","description":"List all files in a category or root.\n\nArgs:\n    category: Category/folder name (optional)\n\nReturns:\n    List of files with download URLs","operationId":"list_files_api_app_documents_files_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"type":"string","default":"","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response List Files Api App Documents Files Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["app-documents"],"summary":"Delete File","description":"Delete a file from the app documents bucket.\n\nArgs:\n    file_path: Full path to file in storage\n\nReturns:\n    Success message","operationId":"delete_file_api_app_documents_files_delete","parameters":[{"name":"file_path","in":"query","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Delete File Api App Documents Files Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app-documents/upload":{"post":{"tags":["app-documents"],"summary":"Upload File","description":"Upload one or more files to the app documents bucket.\n\nArgs:\n    files: List of files to upload\n    category: Category/folder to organize files (default: \"general\")\n    custom_filename: Optional custom display name for file\n    notes: Optional notes/description for file\n\nReturns:\n    List of uploaded file info with download URLs","operationId":"upload_file_api_app_documents_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_file_api_app_documents_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Upload File Api App Documents Upload Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app-documents/signed-url":{"get":{"tags":["app-documents"],"summary":"Get Signed Url","description":"Get a signed URL for downloading a file.\n\nArgs:\n    file_path: Full path to file in storage\n    expires_in: Expiry time in seconds (default 1 hour)\n\nReturns:\n    Dict with signed_url","operationId":"get_signed_url_api_app_documents_signed_url_get","parameters":[{"name":"file_path","in":"query","required":true,"schema":{"type":"string","title":"File Path"}},{"name":"expires_in","in":"query","required":false,"schema":{"type":"integer","default":3600,"title":"Expires In"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Get Signed Url Api App Documents Signed Url Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/app-documents/create-category":{"post":{"tags":["app-documents"],"summary":"Create Category","description":"Create a new category (folder) in the app documents bucket.\n\nArgs:\n    category: Category name\n\nReturns:\n    Success message","operationId":"create_category_api_app_documents_create_category_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_create_category_api_app_documents_create_category_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","title":"Response Create Category Api App Documents Create Category Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quote-share-links":{"post":{"tags":["quote-share-links"],"summary":"Get Or Create Quote Link","description":"Get existing quote share link or create one if it doesn't exist yet.\nIdempotent — same entity always returns the same token.","operationId":"get_or_create_quote_link_api_admin_quote_share_links_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateQuoteLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quote-share-links/insured-persons":{"get":{"tags":["quote-share-links"],"summary":"Get Insured Persons","description":"Return all insured persons for a lead.","operationId":"get_insured_persons_api_admin_quote_share_links_insured_persons_get","parameters":[{"name":"lead_id","in":"query","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/quote-share-links/{link_id}":{"delete":{"tags":["quote-share-links"],"summary":"Revoke Quote Link","description":"Revoke a quote share link — it will no longer be accessible.","operationId":"revoke_quote_link_api_admin_quote_share_links__link_id__delete","parameters":[{"name":"link_id","in":"path","required":true,"schema":{"type":"string","title":"Link Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quotes/{token}":{"get":{"tags":["quotes-public"],"summary":"Resolve Quote Page","description":"Public endpoint — resolves a token and returns all quotes + entity info.\nUsed by the /quotes/:token consumer-facing page.\nNo authentication required.","operationId":"resolve_quote_page_api_quotes__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/quotes/{token}/bind":{"post":{"tags":["quotes-public"],"summary":"Public Bind Quotes","description":"Public endpoint — client selects quotes to bind.\nValidates the token, moves each quote to Binding stage,\nand posts a Slack notification.","operationId":"public_bind_quotes_api_quotes__token__bind_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BindRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/quotes/signed-url":{"get":{"tags":["quotes-public"],"summary":"Public Signed Url","description":"Public signed-URL endpoint — validates the share token then returns a\nshort-lived signed URL for the requested PDF file.  No auth cookie needed.","operationId":"public_signed_url_api_quotes_signed_url_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"file_path","in":"query","required":true,"schema":{"type":"string","title":"File Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners":{"get":{"tags":["admin-partners"],"summary":"List Partners","description":"List all partners.","operationId":"list_partners_api_admin_partners_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["admin-partners"],"summary":"Create Partner","description":"Onboard a new partner. Returns the raw API key once — store it securely.","operationId":"create_partner_api_admin_partners_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePartnerRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners/{partner_id}":{"get":{"tags":["admin-partners"],"summary":"Get Partner","description":"Get a single partner by partner_id.","operationId":"get_partner_api_admin_partners__partner_id__get","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin-partners"],"summary":"Update Partner","description":"Update partner fields (contact, coverages, webhook, status).","operationId":"update_partner_api_admin_partners__partner_id__patch","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePartnerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners/{partner_id}/regenerate-key":{"post":{"tags":["admin-partners"],"summary":"Regenerate Api Key","description":"Regenerate the API key for a partner. The old key is immediately invalidated.","operationId":"regenerate_api_key_api_admin_partners__partner_id__regenerate_key_post","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners/{partner_id}/leads":{"get":{"tags":["admin-partners"],"summary":"Admin List Partner Leads","description":"List leads belonging to this partner (for pickers in the admin UI).","operationId":"admin_list_partner_leads_api_admin_partners__partner_id__leads_get","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}},{"name":"search","in":"query","required":false,"schema":{"type":"string","default":"","title":"Search"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["admin-partners"],"summary":"Admin Create Partner Lead","description":"Create a lead tagged to this partner (Slack-support / manual flow).","operationId":"admin_create_partner_lead_api_admin_partners__partner_id__leads_post","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateLeadInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners/{partner_id}/generate-link":{"post":{"tags":["admin-partners"],"summary":"Admin Generate Partner Link","description":"Generate a questioner link on the partner's subdomain (admin-driven).","operationId":"admin_generate_partner_link_api_admin_partners__partner_id__generate_link_post","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminGenerateLinkInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners/{partner_id}/links":{"get":{"tags":["admin-partners"],"summary":"Admin List Partner Links","description":"List all questioner links for this partner.","operationId":"admin_list_partner_links_api_admin_partners__partner_id__links_get","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/partners/{partner_id}/quotes":{"post":{"tags":["admin-partners"],"summary":"Admin Create Partner Quote","description":"Create a quote for a partner lead (admin-driven, via PartnerQuoteEntryPage).","operationId":"admin_create_partner_quote_api_admin_partners__partner_id__quotes_post","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminCreateQuoteInput"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin-partners"],"summary":"Admin List Partner Quotes","description":"List all quotes for this partner's leads.","operationId":"admin_list_partner_quotes_api_admin_partners__partner_id__quotes_get","parameters":[{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/wholesalers":{"post":{"tags":["admin-wholesalers"],"summary":"Create Wholesaler","description":"Create a wholesaler with its To/Cc recipient lists.","operationId":"create_wholesaler_api_admin_wholesalers_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWholesalerRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["admin-wholesalers"],"summary":"List Wholesalers","description":"List wholesalers (most recent first). Pass active_only=true for the send picker.","operationId":"list_wholesalers_api_admin_wholesalers_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"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/admin/wholesalers/{wholesaler_id}":{"get":{"tags":["admin-wholesalers"],"summary":"Get Wholesaler","description":"Get a single wholesaler by id.","operationId":"get_wholesaler_api_admin_wholesalers__wholesaler_id__get","parameters":[{"name":"wholesaler_id","in":"path","required":true,"schema":{"type":"string","title":"Wholesaler Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["admin-wholesalers"],"summary":"Update Wholesaler","description":"Update wholesaler fields (recipients, template, status, notes).","operationId":"update_wholesaler_api_admin_wholesalers__wholesaler_id__patch","parameters":[{"name":"wholesaler_id","in":"path","required":true,"schema":{"type":"string","title":"Wholesaler Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateWholesalerRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin-wholesalers"],"summary":"Delete Wholesaler","description":"Delete a wholesaler.","operationId":"delete_wholesaler_api_admin_wholesalers__wholesaler_id__delete","parameters":[{"name":"wholesaler_id","in":"path","required":true,"schema":{"type":"string","title":"Wholesaler Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/applications/{token}/attachment-options":{"get":{"tags":["admin-application-email"],"summary":"Get Attachment Options","description":"Return the list of PDFs that would be generated for this application, so\nthe compose UI can show one checkbox per resulting PDF (bundles collapsed).","operationId":"get_attachment_options_api_admin_applications__token__attachment_options_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/admin/applications/send-to-wholesaler":{"post":{"tags":["admin-application-email"],"summary":"Send To Wholesaler","description":"Email the selected application PDFs to a wholesaler and log the send.","operationId":"send_to_wholesaler_api_admin_applications_send_to_wholesaler_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendApplicationRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/partner/leads":{"post":{"tags":["partner-api"],"summary":"Create a lead","description":"Create a new lead tagged to the calling partner.\nUpserts on contact_email — returns existing lead if already created by this partner.","operationId":"create_lead_api_partner_leads_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLeadRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["partner-api"],"summary":"List leads","description":"List all leads created by this partner, ordered newest-first. Optionally filter by stage.","operationId":"list_leads_api_partner_leads_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"stage","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by stage (e.g. Prequalified, Intake, Quoted)","title":"Stage"},"description":"Filter by stage (e.g. Prequalified, Intake, Quoted)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/partner/generate-link":{"post":{"tags":["partner-api"],"summary":"Generate a questioner link","description":"Generate a questioner link on the partner's subdomain.\nValidates requested coverages against partner's allowed_coverages.","operationId":"generate_link_api_partner_generate_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__partner_api__GenerateLinkRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateLinkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/partner/links":{"get":{"tags":["partner-api"],"summary":"List questioner links","description":"List all questioner links generated by this partner.","operationId":"list_links_api_partner_links_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkListResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/partner/quotes":{"get":{"tags":["partner-api"],"summary":"List quotes","description":"List all quotes for this partner's leads.","operationId":"list_quotes_api_partner_quotes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteListResponse"}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["partner-api"],"summary":"Create a quote","description":"Submit a quote for a partner lead.\nRequires can_create_quotes = true on the partner record.","operationId":"create_quote_api_partner_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateQuoteRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/partner/quotes/{quote_id}/upload-pdf":{"post":{"tags":["partner-api"],"summary":"Upload a PDF to a quote","description":"Attach a PDF file to an existing partner quote.","operationId":"upload_quote_pdf_api_partner_quotes__quote_id__upload_pdf_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"quote_id","in":"path","required":true,"schema":{"type":"string","title":"Quote Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_quote_pdf_api_partner_quotes__quote_id__upload_pdf_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PdfUploadResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docs-auth/admin/whitelist":{"get":{"tags":["docs-auth"],"summary":"List Whitelist","operationId":"list_whitelist_api_docs_auth_admin_whitelist_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["docs-auth"],"summary":"Add Whitelist","operationId":"add_whitelist_api_docs_auth_admin_whitelist_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocsAccessRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docs-auth/admin/whitelist/{email}":{"delete":{"tags":["docs-auth"],"summary":"Remove Whitelist","operationId":"remove_whitelist_api_docs_auth_admin_whitelist__email__delete","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/docs-auth/send-otp":{"post":{"tags":["docs-auth"],"summary":"Send Otp","operationId":"send_otp_api_docs_auth_send_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__docs_auth__SendOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/docs-auth/verify-otp":{"post":{"tags":["docs-auth"],"summary":"Verify Otp","operationId":"verify_otp_api_docs_auth_verify_otp_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__routes__docs_auth__VerifyOTPRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/emails":{"get":{"tags":["lead-emails"],"summary":"List Lead Emails","operationId":"list_lead_emails_api_admin_leads__lead_id__emails_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"policy_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"}},{"name":"quote_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["lead-emails"],"summary":"Create Lead Email","operationId":"create_lead_email_api_admin_leads__lead_id__emails_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/emails/{email_id}":{"put":{"tags":["lead-emails"],"summary":"Update Lead Email","operationId":"update_lead_email_api_admin_leads__lead_id__emails__email_id__put","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"email_id","in":"path","required":true,"schema":{"type":"string","title":"Email Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lead-emails"],"summary":"Delete Lead Email","operationId":"delete_lead_email_api_admin_leads__lead_id__emails__email_id__delete","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"email_id","in":"path","required":true,"schema":{"type":"string","title":"Email Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/emails/upload-attachment":{"post":{"tags":["lead-emails"],"summary":"Upload Email Attachment","operationId":"upload_email_attachment_api_admin_leads__lead_id__emails_upload_attachment_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_email_attachment_api_admin_leads__lead_id__emails_upload_attachment_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/follow-ups":{"get":{"tags":["lead-follow-ups"],"summary":"List Lead Follow Ups","description":"List a lead's follow-up entries, most recent follow-up first.","operationId":"list_lead_follow_ups_api_admin_leads__lead_id__follow_ups_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["lead-follow-ups"],"summary":"Create Lead Follow Up","description":"Add a follow-up entry (date + optional note + optional proof) and refresh\nthe lead's last_follow_up_date.","operationId":"create_lead_follow_up_api_admin_leads__lead_id__follow_ups_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFollowUpInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/follow-ups/{follow_up_id}":{"delete":{"tags":["lead-follow-ups"],"summary":"Delete Lead Follow Up","description":"Delete a follow-up entry and refresh the lead's last_follow_up_date.","operationId":"delete_lead_follow_up_api_admin_leads__lead_id__follow_ups__follow_up_id__delete","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"follow_up_id","in":"path","required":true,"schema":{"type":"string","title":"Follow Up Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/follow-ups/upload-proof":{"post":{"tags":["lead-follow-ups"],"summary":"Upload Follow Up Proof","description":"Upload a proof file (any type) for a follow-up. Returns a signed URL +\nstorage path to attach when creating the follow-up entry.","operationId":"upload_follow_up_proof_api_admin_leads__lead_id__follow_ups_upload_proof_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_follow_up_proof_api_admin_leads__lead_id__follow_ups_upload_proof_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/carrier-declines":{"get":{"tags":["carrier-declines"],"summary":"List Carrier Declines","operationId":"list_carrier_declines_api_admin_leads__lead_id__carrier_declines_get","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["carrier-declines"],"summary":"Create Carrier Decline","operationId":"create_carrier_decline_api_admin_leads__lead_id__carrier_declines_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDeclineInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/carrier-declines/{decline_id}":{"put":{"tags":["carrier-declines"],"summary":"Update Carrier Decline","operationId":"update_carrier_decline_api_admin_leads__lead_id__carrier_declines__decline_id__put","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"decline_id","in":"path","required":true,"schema":{"type":"string","title":"Decline Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDeclineInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["carrier-declines"],"summary":"Delete Carrier Decline","operationId":"delete_carrier_decline_api_admin_leads__lead_id__carrier_declines__decline_id__delete","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}},{"name":"decline_id","in":"path","required":true,"schema":{"type":"string","title":"Decline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/leads/{lead_id}/carrier-declines/upload-evidence":{"post":{"tags":["carrier-declines"],"summary":"Upload Decline Evidence","operationId":"upload_decline_evidence_api_admin_leads__lead_id__carrier_declines_upload_evidence_post","parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_decline_evidence_api_admin_leads__lead_id__carrier_declines_upload_evidence_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/auth/request-link":{"post":{"tags":["portal-auth"],"summary":"Request Link","operationId":"request_link_api_portal_auth_request_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestLinkBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/auth/verify":{"post":{"tags":["portal-auth"],"summary":"Verify","operationId":"verify_api_portal_auth_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/me":{"get":{"tags":["portal"],"summary":"Get Me","operationId":"get_me_api_portal_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["portal"],"summary":"Update Me","operationId":"update_me_api_portal_me_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMeBody"}}},"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/portal/policies":{"get":{"tags":["portal"],"summary":"List Policies","operationId":"list_policies_api_portal_policies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/policies/{policy_id}":{"get":{"tags":["portal"],"summary":"Get Policy","operationId":"get_policy_api_portal_policies__policy_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/policies/{policy_id}/documents":{"get":{"tags":["portal"],"summary":"Get Policy Docs","operationId":"get_policy_docs_api_portal_policies__policy_id__documents_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/portal/certificates":{"get":{"tags":["portal"],"summary":"List Certificates","operationId":"list_certificates_api_portal_certificates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/files":{"get":{"tags":["portal"],"summary":"List Files","operationId":"list_files_api_portal_files_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/portal/signed-url":{"get":{"tags":["portal"],"summary":"Signed Url","description":"Mint a short-lived signed download URL for an owned document/file.","operationId":"signed_url_api_portal_signed_url_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"kind","in":"query","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"id","in":"query","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/portal-users":{"get":{"tags":["portal-admin"],"summary":"List Portal Users","operationId":"list_portal_users_api_admin_portal_users_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"match company, contact, or email","default":"","title":"Search"},"description":"match company, contact, or email"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"default":50,"title":"Limit"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["portal-admin"],"summary":"Add Portal User","description":"Give an additional team member of a company access to the dashboard.\nCreates an 'invited' portal_users row for the company — NO email is sent\n(the broker clicks \"Send invite\" after, matching the manual-email rule).\nNo cap on members; email is unique across the whole portal.","operationId":"add_portal_user_api_admin_portal_users_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPortalUserBody"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/portal-users/eligible-companies":{"get":{"tags":["portal-admin"],"summary":"Eligible Companies","description":"Active customer companies the admin can GRANT dashboard access to — i.e.\ncompanies with a lead at stage 'Active' that don't already have a portal\naccount. Returns the lead's email (to confirm) and flags when it's missing\nso the admin can supply one.","operationId":"eligible_companies_api_admin_portal_users_eligible_companies_get","parameters":[{"name":"search","in":"query","required":false,"schema":{"type":"string","description":"match company, contact, or email","default":"","title":"Search"},"description":"match company, contact, or email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/portal-users/{user_id}":{"delete":{"tags":["portal-admin"],"summary":"Remove Portal User","description":"Revoke a member's dashboard access. Deletes their portal_users row; the\nrevocation check in get_current_customer kills any active session on their\nnext request. Also invalidates their outstanding sign-in links. Removing the\nlast member is allowed — the company simply has no portal access until re-added.","operationId":"remove_portal_user_api_admin_portal_users__user_id__delete","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/admin/portal-users/{user_id}/resend-invite":{"post":{"tags":["portal-admin"],"summary":"Resend Invite","operationId":"resend_invite_api_admin_portal_users__user_id__resend_invite_post","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"}}}}}}},"/":{"get":{"summary":"Root","description":"Root endpoint.","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"summary":"Health Check","description":"Health check endpoint.","operationId":"health_check_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"APIResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"message":{"type":"string","title":"Message"},"data":{"anyOf":[{},{"type":"null"}],"title":"Data"}},"type":"object","required":["success","message"],"title":"APIResponse","description":"Generic API response schema.","example":{"data":{},"message":"Operation completed successfully","success":true}},"AddPortalUserBody":{"properties":{"company_id":{"type":"string","title":"Company Id"},"email":{"type":"string","format":"email","title":"Email"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"}},"type":"object","required":["company_id","email"],"title":"AddPortalUserBody"},"AddressSuggestion":{"properties":{"displayName":{"type":"string","title":"Displayname"},"street":{"type":"string","title":"Street"},"city":{"type":"string","title":"City"},"state":{"type":"string","title":"State"},"zip":{"type":"string","title":"Zip"},"countryCode":{"type":"string","title":"Countrycode"}},"type":"object","required":["displayName","street","city","state","zip","countryCode"],"title":"AddressSuggestion"},"AdminCreateLeadInput":{"properties":{"contact_name":{"type":"string","title":"Contact Name"},"contact_email":{"type":"string","title":"Contact Email"},"company_name":{"type":"string","title":"Company Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin"},"primary_contact_insurance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Insurance"},"secondary_contact_insurance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Contact Insurance"},"estimated_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Premium"}},"type":"object","required":["contact_name","contact_email","company_name"],"title":"AdminCreateLeadInput"},"AdminCreateQuoteInput":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"carrier_name":{"type":"string","title":"Carrier Name"},"coverage_type":{"type":"string","title":"Coverage Type"},"annual_premium":{"type":"number","title":"Annual Premium"},"commission_rate":{"type":"number","title":"Commission Rate"},"quote_number":{"type":"string","title":"Quote Number"},"policy_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Limit"},"aggregate_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aggregate Limit"},"retention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention"},"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"taxes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Taxes"},"other_fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other Fees"},"wholesaler_mga_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wholesaler Mga Fee"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["lead_id","carrier_name","coverage_type","annual_premium","commission_rate","quote_number"],"title":"AdminCreateQuoteInput"},"AdminGenerateLinkInput":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"coverages":{"items":{"type":"string"},"type":"array","title":"Coverages"},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Days","default":30},"insured_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Insured Name"},"insured_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Insured Email"}},"type":"object","required":["lead_id","coverages"],"title":"AdminGenerateLinkInput"},"AutocompleteResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"results":{"items":{"$ref":"#/components/schemas/AddressSuggestion"},"type":"array","title":"Results"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success","results"],"title":"AutocompleteResponse"},"BindRequest":{"properties":{"quote_ids":{"items":{"type":"string"},"type":"array","title":"Quote Ids"}},"type":"object","required":["quote_ids"],"title":"BindRequest"},"Body_create_category_api_app_documents_create_category_post":{"properties":{"category":{"type":"string","title":"Category"}},"type":"object","required":["category"],"title":"Body_create_category_api_app_documents_create_category_post"},"Body_upload_ai_doc_api_questionnaire_upload_ai_doc_post":{"properties":{"token":{"type":"string","title":"Token"},"file":{"type":"string","format":"binary","title":"File"},"doc_type":{"type":"string","title":"Doc Type"}},"type":"object","required":["token","file","doc_type"],"title":"Body_upload_ai_doc_api_questionnaire_upload_ai_doc_post"},"Body_upload_coi_api_questionnaire_upload_coi_post":{"properties":{"token":{"type":"string","title":"Token"},"file":{"type":"string","format":"binary","title":"File"},"coverage_type":{"type":"string","title":"Coverage Type"}},"type":"object","required":["token","file","coverage_type"],"title":"Body_upload_coi_api_questionnaire_upload_coi_post"},"Body_upload_decline_evidence_api_admin_leads__lead_id__carrier_declines_upload_evidence_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_decline_evidence_api_admin_leads__lead_id__carrier_declines_upload_evidence_post"},"Body_upload_email_attachment_api_admin_leads__lead_id__emails_upload_attachment_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_email_attachment_api_admin_leads__lead_id__emails_upload_attachment_post"},"Body_upload_file_api_app_documents_upload_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"category":{"type":"string","title":"Category","default":"general"},"custom_filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Filename"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["files"],"title":"Body_upload_file_api_app_documents_upload_post"},"Body_upload_files_api_storage_leads__lead_id__upload_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"path":{"type":"string","title":"Path","default":""}},"type":"object","required":["files"],"title":"Body_upload_files_api_storage_leads__lead_id__upload_post"},"Body_upload_files_to_subfolder_api_storage_leads__lead_id__upload_files_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"subfolder":{"type":"string","title":"Subfolder","default":"misc"}},"type":"object","required":["files"],"title":"Body_upload_files_to_subfolder_api_storage_leads__lead_id__upload_files_post"},"Body_upload_follow_up_proof_api_admin_leads__lead_id__follow_ups_upload_proof_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_follow_up_proof_api_admin_leads__lead_id__follow_ups_upload_proof_post"},"Body_upload_misc_files_api_storage_leads__lead_id__misc_files_post":{"properties":{"files":{"items":{"type":"string","format":"binary"},"type":"array","title":"Files"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"},"policy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"}},"type":"object","required":["files"],"title":"Body_upload_misc_files_api_storage_leads__lead_id__misc_files_post"},"Body_upload_org_chart_api_questionnaire_upload_org_chart_post":{"properties":{"token":{"type":"string","title":"Token"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["token","file"],"title":"Body_upload_org_chart_api_questionnaire_upload_org_chart_post"},"Body_upload_policy_doc_api_admin_policies_upload_doc_post":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"doc_type":{"type":"string","title":"Doc Type","default":"policy"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["lead_id","file"],"title":"Body_upload_policy_doc_api_admin_policies_upload_doc_post"},"Body_upload_quote_doc_api_admin_quotes_upload_doc_post":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"doc_type":{"type":"string","title":"Doc Type"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["lead_id","doc_type","file"],"title":"Body_upload_quote_doc_api_admin_quotes_upload_doc_post"},"Body_upload_quote_pdf_api_admin_quotes_upload_pdf_post":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["lead_id","file"],"title":"Body_upload_quote_pdf_api_admin_quotes_upload_pdf_post"},"Body_upload_quote_pdf_api_partner_quotes__quote_id__upload_pdf_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_quote_pdf_api_partner_quotes__quote_id__upload_pdf_post"},"CreateDeclineInput":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"coverage_type":{"type":"string","title":"Coverage Type"},"carrier_name":{"type":"string","title":"Carrier Name"},"decline_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Reason"},"decline_date":{"type":"string","title":"Decline Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"evidence_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Url"},"evidence_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Name"}},"type":"object","required":["lead_id","coverage_type","carrier_name","decline_date"],"title":"CreateDeclineInput"},"CreateEmailInput":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"policy_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Id"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"},"direction":{"type":"string","title":"Direction"},"from_address":{"type":"string","title":"From Address"},"to_address":{"type":"string","title":"To Address"},"subject":{"type":"string","title":"Subject"},"sent_at":{"type":"string","title":"Sent At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"attachment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Url"},"attachment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Name"}},"type":"object","required":["lead_id","direction","from_address","to_address","subject","sent_at"],"title":"CreateEmailInput"},"CreateFolderRequest":{"properties":{"folder_path":{"type":"string","title":"Folder Path"}},"type":"object","required":["folder_path"],"title":"CreateFolderRequest","description":"Request model for creating a folder"},"CreateFollowUpInput":{"properties":{"follow_up_date":{"type":"string","title":"Follow Up Date"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"proof_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proof Url"},"proof_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proof Name"},"proof_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proof Path"}},"type":"object","required":["follow_up_date"],"title":"CreateFollowUpInput"},"CreateLeadRequest":{"properties":{"contact_name":{"type":"string","title":"Contact Name","description":"Full name of the lead's primary contact.","examples":["Jane Smith"]},"contact_email":{"type":"string","title":"Contact Email","description":"Contact email. Used as the upsert key — a repeated email returns the existing lead.","examples":["jane@acmecorp.com"]},"company_name":{"type":"string","title":"Company Name","description":"Legal or trading name of the lead's company.","examples":["Acme Corp"]},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone","description":"Contact phone number in E.164 or local format.","examples":["+1-555-0100"]},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry","description":"Industry or sector of the company.","examples":["SaaS"]},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Free-form internal notes about the lead.","examples":["Referred via SIVO onboarding flow"]}},"type":"object","required":["contact_name","contact_email","company_name"],"title":"CreateLeadRequest","examples":[{"company_name":"Acme Corp","contact_email":"jane@acmecorp.com","contact_name":"Jane Smith","industry":"SaaS","notes":"Referred via SIVO onboarding flow","phone":"+1-555-0100"}]},"CreatePartnerRequest":{"properties":{"name":{"type":"string","title":"Name"},"subdomain":{"type":"string","title":"Subdomain"},"contact_email":{"type":"string","title":"Contact Email"},"allowed_coverages":{"items":{"type":"string"},"type":"array","title":"Allowed Coverages"},"can_create_quotes":{"type":"boolean","title":"Can Create Quotes","default":false},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"}},"type":"object","required":["name","subdomain","contact_email","allowed_coverages"],"title":"CreatePartnerRequest"},"CreatePolicyInput":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"quote_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Id"},"policy_number":{"type":"string","title":"Policy Number"},"carrier_name":{"type":"string","title":"Carrier Name"},"coverage_type":{"type":"string","title":"Coverage Type"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market"},"inception_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inception Date"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"annual_premium":{"type":"number","title":"Annual Premium"},"taxes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Taxes"},"other_fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other Fees"},"wholesaler_mga_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wholesaler Mga Fee"},"wholesaler_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Name"},"policy_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Fee"},"agency_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agency Fee"},"policy_admin_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Admin Fee"},"commission_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Commission Rate"},"policy_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Limit"},"aggregate_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aggregate Limit"},"retention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention"},"financing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Financing Enabled"},"financing_down_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Down Payment"},"financing_amount_financed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Amount Financed"},"financing_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Percentage"},"coverage_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Coverage Details"},"policy_pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Pdf Url"},"policy_pdf_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Pdf Name"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"},"receipt_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Name"},"certificate_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Certificate Url"},"certificate_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Certificate Name"},"binder_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Url"},"binder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Name"},"invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Url"},"invoice_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Name"},"bor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Url"},"bor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Name"},"claims_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claims Url"},"claims_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claims Name"},"warranty_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warranty Url"},"warranty_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warranty Name"},"subjective_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjective Url"},"subjective_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjective Name"},"financing_agreement_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Url"},"financing_agreement_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["lead_id","policy_number","carrier_name","coverage_type","annual_premium"],"title":"CreatePolicyInput"},"CreateQuoteInput":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"carrier_name":{"type":"string","title":"Carrier Name"},"coverage_type":{"type":"string","title":"Coverage Type"},"annual_premium":{"type":"number","title":"Annual Premium"},"tech_eo_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tech Eo Premium"},"cyber_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cyber Premium"},"policy_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Limit"},"aggregate_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aggregate Limit"},"retention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention"},"taxes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Taxes"},"other_fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other Fees"},"wholesaler_mga_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wholesaler Mga Fee"},"wholesaler_mga_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Mga Name"},"policy_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Fee"},"policy_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Number"},"agency_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agency Fee"},"financing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Financing Enabled"},"financing_down_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Down Payment"},"financing_amount_financed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Amount Financed"},"financing_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Percentage"},"commission_rate":{"type":"number","title":"Commission Rate"},"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"quote_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Number"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"Sent"},"pdf_file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf File Url"},"pdf_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf File Name"},"binder_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Url"},"binder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Name"},"bor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Url"},"bor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Name"},"signed_app_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed App Url"},"signed_app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed App Name"},"financing_agreement_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Url"},"financing_agreement_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Name"},"coverage_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Coverage Details"}},"type":"object","required":["lead_id","carrier_name","coverage_type","annual_premium","commission_rate"],"title":"CreateQuoteInput"},"CreateQuoteRequest":{"properties":{"lead_id":{"type":"string","title":"Lead Id","description":"ID of the lead this quote belongs to. Must belong to your partner account.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"carrier_name":{"type":"string","title":"Carrier Name","description":"Name of the insurance carrier providing the quote.","examples":["Coface"]},"coverage_type":{"anyOf":[{"type":"string"},{"items":{"type":"string"},"type":"array"}],"title":"Coverage Type","description":"Coverage(s) the quote is for. Accepts a string or a list of strings.","examples":["Credit Insurance"]},"annual_premium":{"type":"number","title":"Annual Premium","description":"Total annual premium in USD.","examples":[12500.0]},"commission_rate":{"type":"number","title":"Commission Rate","description":"Commission rate as a percentage.","examples":[15]},"quote_number":{"type":"string","title":"Quote Number","description":"The carrier's quote reference number.","examples":["COF-2026-98765"]},"policy_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Limit","description":"Per-occurrence policy limit in USD.","examples":[1000000]},"aggregate_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aggregate Limit","description":"Aggregate policy limit in USD.","examples":[2000000]},"retention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention","description":"Deductible / retention in USD.","examples":[10000]},"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date","description":"Policy effective date (YYYY-MM-DD).","examples":["2026-08-01"]},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date","description":"Policy expiration date (YYYY-MM-DD).","examples":["2027-08-01"]},"taxes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Taxes","description":"Tax amount in USD.","examples":[250.0]},"other_fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other Fees","description":"Other fees in USD.","examples":[150.0]},"wholesaler_mga_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wholesaler Mga Fee","description":"Wholesaler / MGA fee in USD.","examples":[200.0]},"wholesaler_mga_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Mga Name","description":"Wholesaler / MGA name.","examples":["RT Specialty"]},"policy_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Fee","description":"Policy fee in USD.","examples":[150.0]},"agency_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agency Fee","description":"Agency / brokerage fee in USD (not financeable).","examples":[300.0]},"financing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Financing Enabled","description":"Whether premium financing is enabled.","examples":[true]},"financing_amount_financed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Amount Financed","description":"Amount financed in USD.","examples":[7500.0]},"financing_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Percentage","description":"Agency financing revenue percentage.","examples":[5.0]},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market","description":"Market type, e.g. Admitted or Surplus.","examples":["Surplus"]},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Free-form notes about the quote.","examples":["Good fit for SaaS profile"]},"coverage_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coverage Limit","description":"Coverage limit in USD.","examples":[1000000]},"premium_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Premium Amount","description":"Premium amount (if different from annual_premium).","examples":[200]},"currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Currency","description":"Currency code.","examples":["USD"]},"term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Term","description":"Policy term, e.g. annual or monthly.","examples":["annual"]}},"type":"object","required":["lead_id","carrier_name","coverage_type","annual_premium","commission_rate","quote_number"],"title":"CreateQuoteRequest","examples":[{"annual_premium":12500.0,"carrier_name":"Coface","commission_rate":15,"coverage_type":["Cyber","D&O","Credit Insurance"],"currency":"USD","effective_date":"2026-08-01","expiration_date":"2027-08-01","lead_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7","policy_limit":1000000,"quote_number":"COF-2026-98765","term":"annual"}]},"CreateTaskInput":{"properties":{"title":{"type":"string","title":"Title"},"follow_up_date":{"type":"string","title":"Follow Up Date"},"lead_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Id"},"comments":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Comments"},"priority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Priority"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category","default":"Follow-up"}},"type":"object","required":["title","follow_up_date"],"title":"CreateTaskInput"},"CreateWholesalerRequest":{"properties":{"name":{"type":"string","title":"Name"},"to_emails":{"items":{"type":"string"},"type":"array","title":"To Emails"},"cc_emails":{"items":{"type":"string"},"type":"array","title":"Cc Emails","default":[]},"template_key":{"type":"string","title":"Template Key","default":"personalized"},"subject_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject Template"},"body_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Template"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name","to_emails"],"title":"CreateWholesalerRequest"},"DocsAccessRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"note":{"type":"string","title":"Note","default":""}},"type":"object","required":["email"],"title":"DocsAccessRequest"},"FileInfo":{"properties":{"name":{"type":"string","title":"Name"},"path":{"type":"string","title":"Path"},"size":{"type":"integer","title":"Size"},"type":{"type":"string","title":"Type"},"created_at":{"type":"string","title":"Created At"},"updated_at":{"type":"string","title":"Updated At"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mime Type"},"download_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Download Url"}},"type":"object","required":["name","path","size","type","created_at","updated_at"],"title":"FileInfo","description":"File information model"},"FolderContents":{"properties":{"folder_path":{"type":"string","title":"Folder Path"},"files":{"items":{"$ref":"#/components/schemas/FileInfo"},"type":"array","title":"Files"},"folders":{"items":{"type":"string"},"type":"array","title":"Folders"},"total_files":{"type":"integer","title":"Total Files"},"total_folders":{"type":"integer","title":"Total Folders"}},"type":"object","required":["folder_path","files","folders","total_files","total_folders"],"title":"FolderContents","description":"Response model for folder contents"},"GenerateLinkResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"$ref":"#/components/schemas/LinkData"}},"type":"object","required":["data"],"title":"GenerateLinkResponse"},"GenerateQuoteLinkRequest":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"insured_person_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Insured Person Id"}},"type":"object","required":["lead_id"],"title":"GenerateQuoteLinkRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"LeadCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email","description":"Contact email address"},"company_name":{"type":"string","maxLength":255,"minLength":1,"title":"Company Name","description":"Company name"},"contact_name":{"type":"string","maxLength":255,"minLength":1,"title":"Contact Name","description":"Contact person name"},"contact_role":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Contact Role","description":"Contact person role"},"contact_number":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Contact Number","description":"Contact phone number"},"industry":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Industry","description":"Industry/sector"},"linkedin":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Linkedin","description":"LinkedIn profile URL"},"primary_contact_insurance":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Primary Contact Insurance","description":"Primary insurance contact person"},"secondary_contact_insurance":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Secondary Contact Insurance","description":"Secondary insurance contact person"},"address_street":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address Street","description":"Mailing street address"},"address_city":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Address City","description":"Mailing city"},"address_state":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Address State","description":"Mailing state (2-letter code)"},"address_zip":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Address Zip","description":"Mailing ZIP code"},"product_lines":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Product Lines","description":"Insurance product lines: tech-eo, cyber, gl, dno-us, dno-non-us, dno-us-full, dno-us-quick-quote, dno-us-bind, dno-non-us-full, dno-non-us-quick-quote, dno-non-us-bind, renewable-dno, epli, ai-insurance, fiduciary-liability, crime, professional-liability, ransomware, media-liability, property-insurance, product-liability, credit-insurance, key-person-life, home-insurance"},"other_product_lines":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Other Product Lines","description":"Free-text for product lines not in the standard list (e.g. Workers' Comp)"},"comments":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Comments","description":"Internal notes about the lead"},"follow_up_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Follow Up Date","description":"Date to follow up with the lead (YYYY-MM-DD format)"},"stage":{"anyOf":[{"$ref":"#/components/schemas/LeadStage"},{"type":"null"}],"description":"Lead stage in pipeline","default":"Lead"},"estimated_premium":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Estimated Premium","description":"Estimated annual premium in dollars"},"estimated_revenue":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Estimated Revenue","description":"Estimated commission revenue (10% of premium)"}},"type":"object","required":["email","company_name","contact_name"],"title":"LeadCreate","description":"Schema for creating a new lead.","example":{"address_city":"New York","address_state":"NY","address_street":"123 Main St","address_zip":"10001","company_name":"Acme Corp","contact_name":"John Doe","contact_number":"+1-555-123-4567","contact_role":"Operations Manager","email":"john@example.com","stage":"Lead"}},"LeadData":{"properties":{"lead_id":{"type":"string","title":"Lead Id","description":"Unique identifier for the lead.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"contact_name":{"type":"string","title":"Contact Name","examples":["Jane Smith"]},"contact_email":{"type":"string","title":"Contact Email","examples":["jane@acmecorp.com"]},"company_name":{"type":"string","title":"Company Name","examples":["Acme Corp"]},"stage":{"type":"string","title":"Stage","description":"Pipeline stage the lead is in.","examples":["Prequalified"]},"created_at":{"type":"string","title":"Created At","examples":["2026-06-12T10:00:00Z"]},"is_existing":{"type":"boolean","title":"Is Existing","description":"True if a lead with this email already existed and was returned instead of created.","examples":[false]}},"type":"object","required":["lead_id","contact_name","contact_email","company_name","stage","created_at","is_existing"],"title":"LeadData"},"LeadListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"items":{"$ref":"#/components/schemas/LeadData"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"LeadListResponse"},"LeadResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"$ref":"#/components/schemas/LeadData"}},"type":"object","required":["data"],"title":"LeadResponse"},"LeadStage":{"type":"string","enum":["Lead","Prequalified","Intake","Submitted"],"title":"LeadStage","description":"Enum for lead stages in the sales pipeline (early stages only)."},"LinkData":{"properties":{"application_id":{"type":"string","title":"Application Id","examples":["a1b2c3d4-0000-1111-2222-333344445555"]},"token":{"type":"string","title":"Token","description":"Opaque token embedded in the public questioner URL.","examples":["abc123xyz"]},"public_url":{"type":"string","title":"Public Url","description":"The hosted questioner URL.","examples":["https://apply.riskcube.com/q/abc123xyz"]},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","examples":["2026-07-12T00:00:00Z"]}},"type":"object","required":["application_id","token","public_url"],"title":"LinkData"},"LinkListItem":{"properties":{"application_id":{"type":"string","title":"Application Id","examples":["a1b2c3d4-0000-1111-2222-333344445555"]},"lead_id":{"type":"string","title":"Lead Id","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"token":{"type":"string","title":"Token","examples":["abc123xyz"]},"public_url":{"type":"string","title":"Public Url","examples":["https://apply.riskcube.com/q/abc123xyz"]},"contact_name":{"type":"string","title":"Contact Name","examples":["John Carter"]},"contact_email":{"type":"string","title":"Contact Email","examples":["john@globaltrade.com"]},"company_name":{"type":"string","title":"Company Name","examples":["Global Trade Co."]},"coverages":{"items":{"type":"string"},"type":"array","title":"Coverages","examples":[["credit-insurance"]]},"status":{"type":"string","title":"Status","description":"One of `not-started`, `in-progress`, `completed`.","examples":["in-progress"]},"progress_percentage":{"type":"integer","title":"Progress Percentage","examples":[50]},"created_at":{"type":"string","title":"Created At","examples":["2026-06-12T10:00:00Z"]},"submitted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted At","examples":["2026-06-13T14:22:00Z"]},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At","examples":["2026-07-12T00:00:00Z"]}},"type":"object","required":["application_id","lead_id","token","public_url","contact_name","contact_email","company_name","coverages","status","progress_percentage","created_at"],"title":"LinkListItem"},"LinkListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"items":{"$ref":"#/components/schemas/LinkListItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"LinkListResponse"},"PdfUploadData":{"properties":{"pdf_file_url":{"type":"string","title":"Pdf File Url","description":"Public URL of the uploaded PDF.","examples":["https://storage.riskcube.com/partner-quotes/.../quote.pdf"]}},"type":"object","required":["pdf_file_url"],"title":"PdfUploadData"},"PdfUploadResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"$ref":"#/components/schemas/PdfUploadData"}},"type":"object","required":["data"],"title":"PdfUploadResponse"},"QuoteData":{"properties":{"quote_id":{"type":"string","title":"Quote Id","examples":["9f8e7d6c-aaaa-bbbb-cccc-ddddeeeeffff"]},"lead_id":{"type":"string","title":"Lead Id","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"carrier_name":{"type":"string","title":"Carrier Name","examples":["Coface"]},"coverage_type":{"type":"string","title":"Coverage Type","examples":["Credit Insurance"]},"annual_premium":{"type":"number","title":"Annual Premium","examples":[12500.0]},"status":{"type":"string","title":"Status","examples":["Sent"]},"created_at":{"type":"string","title":"Created At","examples":["2026-06-12T11:30:00Z"]}},"type":"object","required":["quote_id","lead_id","carrier_name","coverage_type","annual_premium","status","created_at"],"title":"QuoteData"},"QuoteListItem":{"properties":{"quote_id":{"type":"string","title":"Quote Id","examples":["9f8e7d6c-aaaa-bbbb-cccc-ddddeeeeffff"]},"lead_id":{"type":"string","title":"Lead Id","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"contact_name":{"type":"string","title":"Contact Name","examples":["John Carter"]},"contact_email":{"type":"string","title":"Contact Email","examples":["john@globaltrade.com"]},"company_name":{"type":"string","title":"Company Name","examples":["Global Trade Co."]},"carrier_name":{"type":"string","title":"Carrier Name","examples":["Coface"]},"coverage_type":{"type":"string","title":"Coverage Type","examples":["Credit Insurance"]},"annual_premium":{"type":"number","title":"Annual Premium","examples":[12500.0]},"status":{"type":"string","title":"Status","examples":["Sent"]},"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date","examples":["2026-08-01"]},"created_at":{"type":"string","title":"Created At","examples":["2026-06-12T11:30:00Z"]},"pdf_file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf File Url","description":"Public URL of the attached PDF, if any.","examples":["https://...supabase.co/storage/v1/object/public/leads/.../quote.pdf"]},"pdf_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf File Name","description":"Original filename of the attached PDF.","examples":["quote_coface_2026.pdf"]},"wholesaler_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Name","examples":["RT Specialty"]},"policy_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Fee","examples":[150.0]},"agency_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agency Fee","examples":[300.0]},"financing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Financing Enabled","examples":[true]},"financing_amount_financed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Amount Financed","examples":[7500.0]},"financing_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Percentage","examples":[5.0]}},"type":"object","required":["quote_id","lead_id","contact_name","contact_email","company_name","carrier_name","coverage_type","annual_premium","status","created_at"],"title":"QuoteListItem"},"QuoteListResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"items":{"$ref":"#/components/schemas/QuoteListItem"},"type":"array","title":"Data"}},"type":"object","required":["data"],"title":"QuoteListResponse"},"QuoteResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true,"examples":[true]},"data":{"$ref":"#/components/schemas/QuoteData"}},"type":"object","required":["data"],"title":"QuoteResponse"},"RequestLinkBody":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"RequestLinkBody"},"ResendOTPRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"purpose":{"type":"string","title":"Purpose","default":"email_verification"}},"type":"object","required":["email"],"title":"ResendOTPRequest","description":"Request model for resending OTP."},"SaveProgressRequest":{"properties":{"form_data":{"type":"object","title":"Form Data"},"current_step":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Current Step","default":0},"total_steps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Steps","default":0},"progress_percentage":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Progress Percentage","default":0}},"type":"object","required":["form_data"],"title":"SaveProgressRequest"},"SendApplicationRequest":{"properties":{"token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Token"},"application_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"},"to_emails":{"items":{"type":"string"},"type":"array","title":"To Emails"},"cc_emails":{"items":{"type":"string"},"type":"array","title":"Cc Emails","default":[]},"subject":{"type":"string","title":"Subject"},"body":{"type":"string","title":"Body"},"coverage_keys":{"items":{"type":"string"},"type":"array","title":"Coverage Keys"},"wholesaler_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Id"}},"type":"object","required":["to_emails","subject","body","coverage_keys"],"title":"SendApplicationRequest"},"SubmissionNotifyRequest":{"properties":{"company_name":{"type":"string","title":"Company Name"},"contact_name":{"type":"string","title":"Contact Name"},"email":{"type":"string","title":"Email"},"coverages":{"items":{"type":"string"},"type":"array","title":"Coverages"},"application_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Id"}},"type":"object","required":["company_name","contact_name","email","coverages"],"title":"SubmissionNotifyRequest"},"SubmitQuestionnaireRequest":{"properties":{"token":{"type":"string","title":"Token"},"form_data":{"type":"object","title":"Form Data"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email","default":""},"contact_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact First Name","default":""},"contact_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Last Name","default":""},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name","default":""},"is_quick_quote":{"type":"boolean","title":"Is Quick Quote","default":false},"is_bind":{"type":"boolean","title":"Is Bind","default":false}},"type":"object","required":["token","form_data"],"title":"SubmitQuestionnaireRequest"},"UpdateDeclineInput":{"properties":{"coverage_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage Type"},"carrier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier Name"},"decline_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Reason"},"decline_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decline Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"evidence_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Url"},"evidence_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Name"}},"type":"object","title":"UpdateDeclineInput"},"UpdateEmailInput":{"properties":{"direction":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"},"from_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Address"},"to_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Address"},"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"sent_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"attachment_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Url"},"attachment_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Name"}},"type":"object","title":"UpdateEmailInput"},"UpdateExpiryRequest":{"properties":{"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"}},"type":"object","title":"UpdateExpiryRequest"},"UpdateLastFollowUpInput":{"properties":{"last_follow_up_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Follow Up Date"}},"type":"object","title":"UpdateLastFollowUpInput"},"UpdateLeadStageInput":{"properties":{"stage":{"type":"string","title":"Stage"},"force":{"type":"boolean","title":"Force","default":false}},"type":"object","required":["stage"],"title":"UpdateLeadStageInput"},"UpdateLeadSubstateInput":{"properties":{"substate":{"type":"string","title":"Substate"}},"type":"object","required":["substate"],"title":"UpdateLeadSubstateInput"},"UpdateMeBody":{"properties":{"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"contact_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Number"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"address_street":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Street"},"address_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address City"},"address_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address State"},"address_zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address Zip"}},"type":"object","title":"UpdateMeBody"},"UpdatePartnerRequest":{"properties":{"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"allowed_coverages":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Coverages"},"can_create_quotes":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Can Create Quotes"},"webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Url"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"UpdatePartnerRequest"},"UpdatePolicyInput":{"properties":{"policy_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Number"},"carrier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier Name"},"coverage_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage Type"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market"},"inception_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inception Date"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"annual_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Premium"},"taxes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Taxes"},"other_fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other Fees"},"wholesaler_mga_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wholesaler Mga Fee"},"wholesaler_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Name"},"policy_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Fee"},"agency_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agency Fee"},"policy_admin_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Admin Fee"},"commission_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Commission Rate"},"policy_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Limit"},"aggregate_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aggregate Limit"},"retention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention"},"financing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Financing Enabled"},"financing_down_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Down Payment"},"financing_amount_financed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Amount Financed"},"financing_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Percentage"},"coverage_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Coverage Details"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"policy_pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Pdf Url"},"policy_pdf_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Pdf Name"},"receipt_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Url"},"receipt_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Receipt Name"},"certificate_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Certificate Url"},"certificate_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Certificate Name"},"binder_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Url"},"binder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Name"},"invoice_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Url"},"invoice_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invoice Name"},"bor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Url"},"bor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Name"},"claims_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claims Url"},"claims_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Claims Name"},"warranty_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warranty Url"},"warranty_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Warranty Name"},"subjective_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjective Url"},"subjective_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subjective Name"},"financing_agreement_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Url"},"financing_agreement_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Name"}},"type":"object","title":"UpdatePolicyInput"},"UpdatePolicySubstateInput":{"properties":{"substate":{"type":"string","title":"Substate"}},"type":"object","required":["substate"],"title":"UpdatePolicySubstateInput"},"UpdateQuoteInput":{"properties":{"carrier_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Carrier Name"},"coverage_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Coverage Type"},"annual_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Premium"},"tech_eo_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Tech Eo Premium"},"cyber_premium":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cyber Premium"},"policy_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Limit"},"aggregate_limit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Aggregate Limit"},"retention":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Retention"},"taxes":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Taxes"},"other_fees":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Other Fees"},"wholesaler_mga_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Wholesaler Mga Fee"},"wholesaler_mga_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Wholesaler Mga Name"},"policy_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Policy Fee"},"policy_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Number"},"agency_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Agency Fee"},"financing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Financing Enabled"},"financing_down_payment":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Down Payment"},"financing_amount_financed":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Amount Financed"},"financing_percentage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Financing Percentage"},"commission_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Commission Rate"},"effective_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Date"},"expiration_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expiration Date"},"quote_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Number"},"market":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Market"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"coverage_details":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Coverage Details"},"pdf_file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf File Url"},"pdf_file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf File Name"},"binder_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Url"},"binder_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Binder Name"},"bor_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Url"},"bor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bor Name"},"signed_app_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed App Url"},"signed_app_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed App Name"},"financing_agreement_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Url"},"financing_agreement_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Agreement Name"}},"type":"object","title":"UpdateQuoteInput"},"UpdateQuoteStageInput":{"properties":{"stage":{"type":"string","title":"Stage"},"lost_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lost Reason"}},"type":"object","required":["stage"],"title":"UpdateQuoteStageInput"},"UpdateWholesalerRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"to_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"To Emails"},"cc_emails":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cc Emails"},"template_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Template Key"},"subject_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject Template"},"body_template":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body Template"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"UpdateWholesalerRequest"},"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"},"VerifyBody":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"VerifyBody"},"ZipLookupResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"result":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Result"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"ZipLookupResponse"},"app__routes__docs_auth__SendOTPRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"SendOTPRequest"},"app__routes__docs_auth__VerifyOTPRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"otp_code":{"type":"string","title":"Otp Code"}},"type":"object","required":["email","otp_code"],"title":"VerifyOTPRequest"},"app__routes__otp__SendOTPRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"purpose":{"type":"string","title":"Purpose","default":"email_verification"},"token":{"type":"string","title":"Token","default":""}},"type":"object","required":["email"],"title":"SendOTPRequest","description":"Request model for sending OTP."},"app__routes__otp__VerifyOTPRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"otp_code":{"type":"string","title":"Otp Code"},"purpose":{"type":"string","title":"Purpose","default":"email_verification"}},"type":"object","required":["email","otp_code"],"title":"VerifyOTPRequest","description":"Request model for verifying OTP."},"app__routes__partner_api__GenerateLinkRequest":{"properties":{"lead_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Id","description":"ID of the lead to attach the link to. Takes priority over `contact_email`.","examples":["7c9e6679-7425-40de-944b-e07fc1f90ae7"]},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email","description":"Resolve the lead by email instead of `lead_id`. Used only when `lead_id` is omitted.","examples":["jane@acmecorp.com"]},"coverages":{"items":{"type":"string"},"type":"array","title":"Coverages","description":"Coverage keys to include. Must be a subset of the coverages your partner account is allowed to offer.","examples":[["credit-insurance"]]},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Days","description":"Days until the link expires. Omit or set null for no expiry.","examples":[30]}},"type":"object","required":["coverages"],"title":"GenerateLinkRequest","examples":[{"coverages":["credit-insurance"],"lead_id":"7c9e6679-7425-40de-944b-e07fc1f90ae7"}]},"app__routes__shareable_links__GenerateLinkRequest":{"properties":{"lead_id":{"type":"string","title":"Lead Id"},"contact_name":{"type":"string","title":"Contact Name"},"email":{"type":"string","title":"Email"},"company_name":{"type":"string","title":"Company Name"},"coverages":{"items":{"type":"string"},"type":"array","title":"Coverages"},"expires_in_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expires In Days"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["lead_id","contact_name","email","company_name","coverages"],"title":"GenerateLinkRequest"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}