{"openapi":"3.1.0","info":{"title":"NachoCrunch","description":"**NachoCrunch** is the AI-native mortgage pricing platform — an ingestion engine that turns\nPDF/Excel rate sheets from every major correspondent investor into structured pricing, paired\nwith a best-execution pricing engine, a lock desk, an agent surface, and consumer rate-quote\ntooling.\n\n## Organization\n\nThe API is grouped into three logical families:\n\n* **Public** (`/api/v1/public/*`) — anonymous, IP rate-limited endpoints for consumer rate\n  quotes, embeddable widgets, and public invite acceptance.\n* **Pricing** (`/api/v1/pricing/*`) — programmatic best-execution, natural-language, and bulk\n  pricing for loan officers, LOS integrations, and partner platforms. **Requires API key.**\n* **Admin Internal** (`/api/v1/admin/internal/*`) — the operator surface: rate-sheet ingestion,\n  investor intel, lock desk, delivery pools, MI, analytics, reports, agent tools.\n\n## Authentication\n\nMost non-public endpoints require an API key in the `X-API-Key` header:\n\n```\ncurl https://app.nachocrunch.com/api/v1/pricing/investors \\\n  -H \"X-API-Key: nck_live_XXXXXXXXXXXXXXXX\"\n```\n\nKeys are issued per-tenant. Usage is logged (key_id, endpoint, status, response_ms,\ninvestor_ids_accessed) for audit and billing.\n\n## Webhooks\n\nNachoCrunch fires HMAC-SHA256 signed webhooks for every meaningful state change —\n`sheet.*`, `lock.*`, `rate_quote.*`, `delivery.*`, `alert.*`. Configure via\n`POST /api/v1/admin/internal/webhooks`. Each delivery carries the `X-NachoCrunch-Signature`\nheader; verify with your shared secret before trusting the payload.\n\n## Rate Limiting\n\n* Public rate-quote endpoint: **10 req/minute/IP**\n* Pricing (API key): **600 req/minute**, 60k req/day\n* Bulk pricing: **5,000 scenarios** per request\n* Agent chat: **120 req/minute/tenant**\n\nEvery response includes the `X-API-Version` header (currently `0.2.0`).\n\n## Versioning\n\nBreaking changes ship under a new path prefix (`/api/v2/*`). Additive/non-breaking changes\nhappen in place. Check `/health` for the running version and the developer portal at\n[`/developers`](/developers) for code examples in curl, Python, and JavaScript.","contact":{"name":"NachoCrunch Support","email":"engineering@aspirehomeloans.com"},"license":{"name":"Proprietary"},"version":"0.2.0"},"servers":[{"url":"http://localhost:8000","description":"Local dev"},{"url":"https://app.nachocrunch.com","description":"Production"}],"paths":{"/api/v1/pricing/best-execution":{"post":{"tags":["pricing"],"summary":"Best-execution pricing across all investors","description":"Find the best pricing across all investors for a loan scenario.\n\nRequires API key authentication via X-API-Key header. Results are sorted\nby net price (best first) and include per-LLPA breakdown + staleness warnings.","operationId":"best_execution_api_v1_pricing_best_execution_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingRequest-Input"}}},"required":true},"responses":{"200":{"description":"Ranked investor pricing.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BestExecutionResponse"},"example":{"request":{"loan_type":"conventional","loan_amount":500000,"rate_pct":6.5,"lock_days":30,"fico_score":760,"ltv_pct":80,"property_type":"single_family","occupancy":"primary","loan_purpose":"purchase","state":"CA"},"results":[{"investor_id":"inv_uwm","investor_name":"United Wholesale Mortgage","product_code":"CONV_30YR","rate_pct":"6.500","base_price":"101.875","total_llpa_adjustment":"-0.375","net_price":"101.500","lock_days":30,"sheet_effective_ts":"2026-04-14T13:05:00Z","llpa_breakdown":{"fico_ltv":"-0.250","property_type":"-0.125"},"investor_sent_at":"2026-04-14T13:00:00Z","staleness_seconds":300}],"investor_count":8,"generated_at":"2026-04-14T13:05:12Z"}}}},"401":{"description":"Missing or invalid API key."},"422":{"description":"Invalid loan scenario."},"503":{"description":"Pricing engine temporarily unavailable."}}}},"/api/v1/pricing/internal/best-execution":{"post":{"tags":["pricing"],"summary":"Best-execution (internal, unauthenticated)","description":"Internal best-execution for dashboard simulator (no auth required).","operationId":"internal_best_execution_api_v1_pricing_internal_best_execution_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingRequest-Input"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BestExecutionResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/investors":{"get":{"tags":["pricing"],"summary":"List investors available for pricing","description":"List all investors. Requires API key authentication.","operationId":"list_investors_api_v1_pricing_investors_get","responses":{"200":{"description":"Investors, sorted alphabetically.","content":{"application/json":{"schema":{},"example":[{"investor_id":"inv_uwm","name":"United Wholesale Mortgage"},{"investor_id":"inv_pnc","name":"PennyMac Correspondent"}]}}},"401":{"description":"Missing or invalid API key."}}}},"/api/v1/pricing/internal/investors":{"get":{"tags":["pricing"],"summary":"Internal: list investors (no auth)","description":"Internal investor list for dashboard (no auth required).","operationId":"internal_list_investors_api_v1_pricing_internal_investors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/pricing/formatted-rates":{"get":{"tags":["pricing"],"summary":"Formatted live rates (table-ready)","description":"Return a display-ready rate ladder pulled from current base pricing.\n\nFormat matches what a pricing UI wants to render directly:\n  [{rate, points, payment_per_100k, apr_estimate, lock_period_days,\n    investor, sla_color}, ...]\n\nSorted by rate ascending, then price (points) descending (better price first).","operationId":"formatted_rates_api_v1_pricing_formatted_rates_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program"}},{"name":"lock_period","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Period"}},{"name":"occupancy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/formatted-rates":{"get":{"tags":["pricing"],"summary":"Internal: formatted rates (no auth)","description":"Internal (dashboard, no auth) mirror of /formatted-rates.","operationId":"internal_formatted_rates_api_v1_pricing_internal_formatted_rates_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program"}},{"name":"lock_period","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Period"}},{"name":"occupancy","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/natural":{"post":{"tags":["pricing"],"summary":"Natural-language pricing query","description":"Parse English → structured pricing request → best execution.\n\nExample: \"Best rate for a 740 FICO 80 LTV Texas purchase on $400k 30-day lock\"","operationId":"natural_pricing_api_v1_pricing_natural_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NaturalPricingRequest"}}},"required":true},"responses":{"200":{"description":"Parsed scenario + best-ex result.","content":{"application/json":{"schema":{},"example":{"parsed_scenario":{"loan_amount":500000,"fico_score":760,"ltv_pct":80},"results":[{"investor_name":"UWM","net_price":"101.500"}]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/agent-tools":{"get":{"tags":["pricing"],"summary":"Agent tool definitions (OpenAI / Anthropic schema)","description":"Return OpenAI function-calling / Anthropic tool-use compatible schema.\n\nAny LLM agent (Claude, GPT, Gemini, custom) can call this to discover\nNachoCrunch's capabilities and invoke them via function calling.\n\nThis makes NachoCrunch a first-class citizen in every AI agent ecosystem —\na positioning Polly/OB/Lender Price do NOT have.","operationId":"agent_tool_definitions_api_v1_pricing_agent_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/pricing/internal/natural":{"post":{"tags":["pricing"],"summary":"Internal: natural pricing (no auth)","description":"Internal natural-language pricing for dashboard (no auth).","operationId":"internal_natural_pricing_api_v1_pricing_internal_natural_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NaturalPricingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/agent-tools":{"get":{"tags":["pricing"],"summary":"Internal: agent tool definitions","description":"Internal alias for ``/agent-tools`` (no auth required).","operationId":"internal_agent_tools_api_v1_pricing_internal_agent_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/pricing/rate-ladder":{"get":{"tags":["pricing"],"summary":"Rate ladder (1/8% increments × investor columns) — LO shop rates","description":"Rate ladder — the LO showroom floor.\n\nReturns 9 rates in 1/8% (0.125) increments around the estimated par rate,\nwith each investor's price/points shown as a cell. Best investor per\nrow is flagged with ``is_best=true``. 60s warm cache.","operationId":"rate_ladder_api_v1_pricing_rate_ladder_get","parameters":[{"name":"fico_score","in":"query","required":false,"schema":{"type":"integer","default":740,"title":"Fico Score"}},{"name":"ltv_pct","in":"query","required":false,"schema":{"type":"number","default":80.0,"title":"Ltv Pct"}},{"name":"loan_amount","in":"query","required":false,"schema":{"type":"number","default":400000.0,"title":"Loan Amount"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"CA","title":"State"}},{"name":"occupancy","in":"query","required":false,"schema":{"type":"string","default":"primary","title":"Occupancy"}},{"name":"loan_purpose","in":"query","required":false,"schema":{"type":"string","default":"purchase","title":"Loan Purpose"}},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","default":"single_family","title":"Property Type"}},{"name":"lock_period","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Lock Period"}},{"name":"loan_type","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Loan Type"}}],"responses":{"200":{"description":"9-row rate ladder, each row lists investor cells with price/points/APR.","content":{"application/json":{"schema":{},"example":{"scenario":{"fico_score":740,"ltv_pct":80,"loan_amount":400000,"lock_period":30},"ladder_rows":[{"rate":6.875,"best_price":99.875,"best_investor":"PennyMac","payment_per_100k":657.88,"apr_estimate":7.012,"investor_options":[{"investor_name":"PennyMac","price":99.875,"points":0.125,"is_best":true,"sla_color":"green"},{"investor_name":"Verus","price":99.5,"points":0.5,"is_best":false,"sla_color":"green"}]}],"recommended_row_index":4,"rate_step":0.125}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/rate-ladder":{"get":{"tags":["pricing"],"summary":"Internal: rate ladder (dashboard, no auth)","description":"Unauthenticated mirror of ``/rate-ladder`` for the dashboard UI.","operationId":"internal_rate_ladder_api_v1_pricing_internal_rate_ladder_get","parameters":[{"name":"fico_score","in":"query","required":false,"schema":{"type":"integer","default":740,"title":"Fico Score"}},{"name":"ltv_pct","in":"query","required":false,"schema":{"type":"number","default":80.0,"title":"Ltv Pct"}},{"name":"loan_amount","in":"query","required":false,"schema":{"type":"number","default":400000.0,"title":"Loan Amount"}},{"name":"state","in":"query","required":false,"schema":{"type":"string","default":"CA","title":"State"}},{"name":"occupancy","in":"query","required":false,"schema":{"type":"string","default":"primary","title":"Occupancy"}},{"name":"loan_purpose","in":"query","required":false,"schema":{"type":"string","default":"purchase","title":"Loan Purpose"}},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","default":"single_family","title":"Property Type"}},{"name":"lock_period","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Lock Period"}},{"name":"loan_type","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Loan Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sheets":{"get":{"tags":["admin"],"summary":"List rate sheets","description":"List rate sheets, optionally filtered by status.","operationId":"list_sheets_api_v1_admin_sheets_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sheets/{sheet_id}/data":{"get":{"tags":["admin"],"summary":"Sheet base pricing + LLPA data","description":"Get the actual parsed data (base pricing + LLPA cells) for a sheet.","operationId":"get_sheet_data_api_v1_admin_sheets__sheet_id__data_get","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sheets/{sheet_id}/audit":{"get":{"tags":["admin"],"summary":"Sheet audit trail (parse log)","description":"Get the full audit trail for a rate sheet.","operationId":"get_sheet_audit_api_v1_admin_sheets__sheet_id__audit_get","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/sheets/{sheet_id}/override":{"post":{"tags":["admin"],"summary":"Manually override sheet status","description":"HITL override: manually approve or reject a quarantined sheet.","operationId":"override_sheet_api_v1_admin_sheets__sheet_id__override_post","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}},{"name":"action","in":"query","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/dashboard/stats":{"get":{"tags":["admin"],"summary":"Top-of-dashboard counters","description":"Get dashboard statistics for the HITL UI.","operationId":"dashboard_stats_api_v1_admin_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/sheets/{sheet_id}/correct":{"post":{"tags":["admin"],"summary":"Submit a sheet correction","description":"Submit a HITL correction for a parsed cell value.\n\nBody: {cell_location, wrong_value, correct_value, grid_category}","operationId":"submit_correction_api_v1_admin_sheets__sheet_id__correct_post","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/login":{"post":{"tags":["auth"],"summary":"Login","description":"Login with email/password, returns JWT.","operationId":"login_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/keys":{"post":{"tags":["auth"],"summary":"Create Api Key","description":"Create a new API key. Returns plaintext key ONCE.","operationId":"create_api_key_auth_keys_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_auth_admin__CreateKeyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["auth"],"summary":"List Api Keys","description":"List all API keys with usage counts.","operationId":"list_api_keys_auth_keys_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/keys/{key_id}/revoke":{"post":{"tags":["auth"],"summary":"Revoke Key","description":"Revoke an API key.","operationId":"revoke_key_auth_keys__key_id__revoke_post","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/auth/usage":{"get":{"tags":["auth"],"summary":"Get Usage","description":"Usage stats per key (last 24h and total).","operationId":"get_usage_auth_usage_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locks/request":{"post":{"summary":"Request Lock","operationId":"request_lock_api_v1_locks_request_post","parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locks/queue":{"get":{"summary":"List Locks","operationId":"list_locks_api_v1_locks_queue_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"pending","title":"Status"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locks/{lock_id}/approve":{"post":{"summary":"Approve Lock","operationId":"approve_lock_api_v1_locks__lock_id__approve_post","parameters":[{"name":"lock_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Id"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locks/{lock_id}/reject":{"post":{"summary":"Reject Lock","operationId":"reject_lock_api_v1_locks__lock_id__reject_post","parameters":[{"name":"lock_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Id"}},{"name":"reason","in":"query","required":false,"schema":{"type":"string","default":"Market moved","title":"Reason"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/locks/{lock_id}/pdf":{"get":{"summary":"Lock Confirmation Pdf","description":"Generate compliance PDF for an approved lock.","operationId":"lock_confirmation_pdf_api_v1_locks__lock_id__pdf_get","parameters":[{"name":"lock_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Id"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/guidelines/check":{"post":{"summary":"Check Guidelines","description":"Check borrower eligibility against program guidelines.","operationId":"check_guidelines_api_v1_guidelines_check_post","parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GuidelinesCheck"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/margins":{"get":{"summary":"List Margins","operationId":"list_margins_api_v1_margins_get","parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"summary":"Create Margin","operationId":"create_margin_api_v1_margins_post","parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarginRule"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/margins/apply":{"post":{"summary":"Apply Margins","description":"Apply all active margin rules to a base price.","operationId":"apply_margins_api_v1_margins_apply_post","parameters":[{"name":"base_price","in":"query","required":false,"schema":{"type":"number","default":100.0,"title":"Base Price"}},{"name":"loan_type","in":"query","required":false,"schema":{"type":"string","default":"conventional","title":"Loan Type"}},{"name":"branch_id","in":"query","required":false,"schema":{"type":"string","default":"","title":"Branch Id"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/rates":{"get":{"tags":["pricing-simple"],"summary":"Get Rates","description":"Get active base pricing rows. Filterable by investor, lock, rate range.","operationId":"get_rates_api_v1_pricing_internal_rates_get","parameters":[{"name":"investor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by investor name (partial match)","title":"Investor"},"description":"Filter by investor name (partial match)"},{"name":"lock_days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Filter by lock period","title":"Lock Days"},"description":"Filter by lock period"},{"name":"min_rate","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Rate"}},{"name":"max_rate","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Rate"}},{"name":"near_par","in":"query","required":false,"schema":{"type":"boolean","description":"Only show rates with price 99.5-100.5","default":false,"title":"Near Par"},"description":"Only show rates with price 99.5-100.5"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/rates/summary":{"get":{"tags":["pricing-simple"],"summary":"Rates Summary","description":"Quick summary of what's in the database.","operationId":"rates_summary_api_v1_pricing_internal_rates_summary_get","parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/quote":{"post":{"tags":["pricing-simple"],"summary":"Get Quote","description":"Find the best rate closest to a target price point for each investor.","operationId":"get_quote_api_v1_pricing_internal_quote_post","parameters":[{"name":"lock_days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Lock Days"}},{"name":"target_price","in":"query","required":false,"schema":{"type":"number","description":"Target price point (100=par)","default":100.0,"title":"Target Price"},"description":"Target price point (100=par)"},{"name":"investor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/engine":{"post":{"tags":["pricing-simple"],"summary":"Pricing Engine","description":"Full pricing engine: borrower profile → final adjusted prices with LLPA breakdown.\n\nReturns ranked list of investor quotes with:\n- Base price (from rate sheet)\n- Each LLPA adjustment applied\n- Final adjusted price (base + Σ LLPAs)\n- Best execution ranking (highest final price = best deal)","operationId":"pricing_engine_api_v1_pricing_internal_engine_post","parameters":[{"name":"fico_score","in":"query","required":true,"schema":{"type":"integer","maximum":850,"minimum":300,"description":"Borrower FICO score","title":"Fico Score"},"description":"Borrower FICO score"},{"name":"ltv_pct","in":"query","required":true,"schema":{"type":"number","maximum":100,"minimum":1,"description":"Loan-to-value percentage","title":"Ltv Pct"},"description":"Loan-to-value percentage"},{"name":"loan_type","in":"query","required":true,"schema":{"type":"string","description":"conventional, fha, va, usda, jumbo, nonqm","title":"Loan Type"},"description":"conventional, fha, va, usda, jumbo, nonqm"},{"name":"loan_purpose","in":"query","required":false,"schema":{"type":"string","description":"purchase, rate_term_refi, cash_out","default":"purchase","title":"Loan Purpose"},"description":"purchase, rate_term_refi, cash_out"},{"name":"lock_days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Lock Days"}},{"name":"property_type","in":"query","required":false,"schema":{"type":"string","default":"single_family","title":"Property Type"}},{"name":"loan_amount","in":"query","required":false,"schema":{"type":"number","default":300000,"title":"Loan Amount"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"default":20,"title":"Limit"}},{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/products":{"get":{"tags":["pricing-simple"],"summary":"List Products","operationId":"list_products_api_v1_pricing_internal_products_get","parameters":[{"name":"api_key","in":"query","required":false,"schema":{"type":"string","title":"Api Key"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"type":"string","title":"X-Api-Key"}},{"name":"authorization","in":"header","required":false,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/pricing":{"get":{"summary":"Pricing Ui","operationId":"pricing_ui_pricing_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/sheets":{"get":{"tags":["admin-internal"],"summary":"Internal List Sheets","operationId":"internal_list_sheets_api_v1_admin_internal_sheets_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sheets/{sheet_id}/data":{"get":{"tags":["admin-internal"],"summary":"Internal Get Sheet Data","operationId":"internal_get_sheet_data_api_v1_admin_internal_sheets__sheet_id__data_get","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sheets/{sheet_id}/audit":{"get":{"tags":["admin-internal"],"summary":"Internal Get Sheet Audit","operationId":"internal_get_sheet_audit_api_v1_admin_internal_sheets__sheet_id__audit_get","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sheets/{sheet_id}/override":{"post":{"tags":["admin-internal"],"summary":"Internal Override Sheet","operationId":"internal_override_sheet_api_v1_admin_internal_sheets__sheet_id__override_post","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}},{"name":"action","in":"query","required":true,"schema":{"type":"string","title":"Action"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/dashboard/stats":{"get":{"tags":["admin-internal"],"summary":"Internal Dashboard Stats","operationId":"internal_dashboard_stats_api_v1_admin_internal_dashboard_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/sheets/{sheet_id}/correct":{"post":{"tags":["admin-internal"],"summary":"Internal Submit Correction","operationId":"internal_submit_correction_api_v1_admin_internal_sheets__sheet_id__correct_post","parameters":[{"name":"sheet_id","in":"path","required":true,"schema":{"type":"string","title":"Sheet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pipeline/inbox-stats":{"get":{"tags":["admin-internal"],"summary":"Pipeline inbox stats (IMAP)","description":"Get the real count of emails in the IMAP inbox + how many have attachments.\n\nChecks the nachocrunch.rates@gmail.com inbox directly.","operationId":"internal_inbox_stats_api_v1_admin_internal_pipeline_inbox_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pipeline/anomalies":{"get":{"tags":["admin-internal"],"summary":"Pricing anomalies (peer-median scan)","description":"Scan all active rate sheets for peer-median pricing anomalies.\n\nReturns findings grouped by investor:\n{\n  \"by_investor\": {\n    \"<investor_name>\": {\n      \"anomaly_count\": int,\n      \"severity_counts\": {\"info\": int, \"warning\": int, \"critical\": int},\n      \"anomalies\": [ ... ],\n    },\n  },\n  \"total_anomalies\": int,\n  \"investor_count\": int,\n}","operationId":"internal_pipeline_anomalies_api_v1_admin_internal_pipeline_anomalies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pipeline/poll-now":{"post":{"tags":["admin-internal"],"summary":"Trigger an immediate IMAP poll","description":"Trigger an immediate pipeline run in a background task.\n\nReturns immediately with a task ID; ingestion happens asynchronously.","operationId":"internal_poll_now_api_v1_admin_internal_pipeline_poll_now_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/keys":{"get":{"tags":["admin-internal"],"summary":"Internal List Keys","description":"List all API keys (for dashboard). Dual-emit per key.","operationId":"internal_list_keys_api_v1_admin_internal_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["admin-internal"],"summary":"Internal Create Key","description":"Create a new API key from the dashboard (no auth required).\n\nPolly-compat (Wave Q1): accepts BOTH snake_case (rate_limit) AND\ncamelCase (rateLimit) in the body. Response dual-emits every key\n(keyId + id alias on key_id, apiKey, rateLimit, createdAt, etc).","operationId":"internal_create_key_api_v1_admin_internal_keys_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/keys/{key_id}":{"delete":{"tags":["admin-internal"],"summary":"Internal Revoke Key","description":"Revoke an API key (from dashboard).","operationId":"internal_revoke_key_api_v1_admin_internal_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/keys":{"get":{"tags":["keys"],"summary":"List API keys (prefix + metadata)","description":"List all API keys (prefix + name, never full key).","operationId":"list_keys_api_v1_admin_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["keys"],"summary":"Issue a new API key (dual-emit Polly-compat response)","description":"Generate a new API key. The plaintext key is returned ONCE.\n\nReturns a plain dict (not a Pydantic response_model) so the\ndual-emit pattern works — FastAPI's response_model filter would\nstrip the camelCase aliases otherwise.","operationId":"create_key_api_v1_admin_keys_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_keys__CreateKeyRequest"}}},"required":true},"responses":{"200":{"description":"Plaintext key returned ONCE. Response carries snake + camel + id aliases.","content":{"application/json":{"schema":{},"example":{"key_id":"key_01HX...","id":"key_01HX...","keyId":"key_01HX...","api_key":"nck_live_aBc12...","apiKey":"nck_live_aBc12...","name":"LO laptop","prefix":"nck_live_aBc12","permissions":["pricing.read"],"rate_limit":600,"rateLimit":600,"message":"Save this key now — it will not be shown again."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/keys/{key_id}":{"delete":{"tags":["keys"],"summary":"Revoke an API key","description":"Revoke an API key. It will immediately stop working.","operationId":"revoke_key_api_v1_admin_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/keys/{key_id}/usage":{"get":{"tags":["keys"],"summary":"Per-key usage stats","description":"Get usage stats for a specific API key.","operationId":"key_usage_api_v1_admin_keys__key_id__usage_get","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/summary":{"get":{"tags":["analytics"],"summary":"Analytics Summary","description":"High-level usage analytics for the dashboard.","operationId":"analytics_summary_api_v1_admin_analytics_summary_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/by-investor/{investor_id}":{"get":{"tags":["analytics"],"summary":"Analytics By Investor","description":"How much a specific investor's data is being consumed.\n\nThis gives investors proof of value:\n\"Your rate sheets were queried X times by Y different partners.\"","operationId":"analytics_by_investor_api_v1_admin_analytics_by_investor__investor_id__get","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":168,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/analytics/by-key/{key_id}":{"get":{"tags":["analytics"],"summary":"Analytics By Key","description":"Detailed usage for a specific API key consumer.","operationId":"analytics_by_key_api_v1_admin_analytics_by_key__key_id__get","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"string","title":"Key Id"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/analytics/auth":{"post":{"tags":["analytics-internal"],"summary":"Metabase Embed Auth","description":"Issue a short-lived signed JWT for embedding a Metabase dashboard.\n\nMatches Metabase's documented embed-signing scheme:\n  payload = {resource: {dashboard: N}, params: {...}, exp: ...}\n  token   = HS256(payload, NACHO_METABASE_SECRET)\n  url     = https://metabase.example.com/embed/dashboard/{token}","operationId":"metabase_embed_auth_api_v1_admin_internal_analytics_auth_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MetabaseAuthRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/seed-data/categories":{"get":{"tags":["devtools"],"summary":"List Categories","operationId":"list_categories_api_v1_admin_internal_devtools_seed_data_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["devtools"],"summary":"Create Category","operationId":"create_category_api_v1_admin_internal_devtools_seed_data_categories_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/seed-data/categories/{category_id}":{"delete":{"tags":["devtools"],"summary":"Delete Category","operationId":"delete_category_api_v1_admin_internal_devtools_seed_data_categories__category_id__delete","parameters":[{"name":"category_id","in":"path","required":true,"schema":{"type":"string","title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/seed-data/scenarios":{"get":{"tags":["devtools"],"summary":"List Scenarios","operationId":"list_scenarios_api_v1_admin_internal_devtools_seed_data_scenarios_get","parameters":[{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["devtools"],"summary":"Create Scenario","operationId":"create_scenario_api_v1_admin_internal_devtools_seed_data_scenarios_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/seed-data/scenarios/{scenario_id}":{"get":{"tags":["devtools"],"summary":"Get Scenario","operationId":"get_scenario_api_v1_admin_internal_devtools_seed_data_scenarios__scenario_id__get","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["devtools"],"summary":"Patch Scenario","operationId":"patch_scenario_api_v1_admin_internal_devtools_seed_data_scenarios__scenario_id__patch","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["devtools"],"summary":"Delete Scenario","operationId":"delete_scenario_api_v1_admin_internal_devtools_seed_data_scenarios__scenario_id__delete","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/seed-data/scenarios/{scenario_id}/apply":{"post":{"tags":["devtools"],"summary":"Apply Scenario","description":"Record an apply of this scenario and return its payload.\n\nThe caller decides what to do with the payload — this endpoint\ndoes NOT mutate any other tables. That keeps devtools safe by\ndefault and lets scenarios be composed by agent workflows.","operationId":"apply_scenario_api_v1_admin_internal_devtools_seed_data_scenarios__scenario_id__apply_post","parameters":[{"name":"scenario_id","in":"path","required":true,"schema":{"type":"string","title":"Scenario Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/model-options":{"get":{"tags":["devtools"],"summary":"List Model Options","description":"Return every SQLAlchemy-defined table with its columns + indexes.","operationId":"list_model_options_api_v1_admin_internal_devtools_model_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/devtools/model-options/{table_name}":{"get":{"tags":["devtools"],"summary":"Get Model Option","description":"Describe a single SQLAlchemy-defined table.","operationId":"get_model_option_api_v1_admin_internal_devtools_model_options__table_name__get","parameters":[{"name":"table_name","in":"path","required":true,"schema":{"type":"string","title":"Table Name"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/devtools/webhook-events":{"get":{"tags":["devtools"],"summary":"Devtools mirror of the webhook event catalog","description":"Expose the versioned webhook event catalog for devtools users.\n\nEquivalent to ``/webhooks/events/catalog`` but scoped under devtools so\ndashboard tooling has a consistent place to reach for it.","operationId":"devtools_webhook_events_api_v1_admin_internal_devtools_webhook_events_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/accounts":{"post":{"tags":["accounts"],"summary":"Create an account (admin onboarding)","description":"Create a new account from the dashboard onboarding form.","operationId":"create_account_api_v1_admin_internal_accounts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["accounts"],"summary":"List accounts","description":"List all accounts, optionally filtered by type or status.","operationId":"list_accounts_api_v1_admin_internal_accounts_get","parameters":[{"name":"account_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by account type","title":"Account Type"},"description":"Filter by account type"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/accounts/{account_id}":{"get":{"tags":["accounts"],"summary":"Get account by ID","description":"Get account details by ID.","operationId":"get_account_api_v1_admin_internal_accounts__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["accounts"],"summary":"Update account (partial)","description":"Update account info (partial update).","operationId":"update_account_api_v1_admin_internal_accounts__account_id__patch","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccountUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/accounts/{account_id}/approve":{"post":{"tags":["accounts"],"summary":"Approve a pending account","description":"Approve a pending account, setting it to active.","operationId":"approve_account_api_v1_admin_internal_accounts__account_id__approve_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/accounts/{account_id}/generate-key":{"post":{"tags":["accounts"],"summary":"Issue an API key for an account","description":"Generate an API key for an approved account.","operationId":"generate_key_for_account_api_v1_admin_internal_accounts__account_id__generate_key_post","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateKeyRequest","default":{"name":"Default Key","permissions":["read"],"rate_limit":1000}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/accounts/me/orgs":{"get":{"tags":["accounts"],"summary":"List orgs the caller belongs to","description":"List orgs the current user (caller) belongs to.\n\nResolves account from X-API-Key or ``account_id`` query arg.","operationId":"list_my_orgs_api_v1_admin_internal_accounts_me_orgs_get","parameters":[{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Internal override","title":"Account Id"},"description":"Internal override"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/accounts/change-default-org":{"post":{"tags":["accounts"],"summary":"Change caller's default org","description":"Set the caller's default tenant.\n\nClears is_default on all other user_orgs rows for this account, then\nsets it to true on the target (account_id, tenant_id) row. Emits\n``account.default_org_changed``.","operationId":"change_default_org_api_v1_admin_internal_accounts_change_default_org_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeDefaultOrgRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/audit/pricing-snapshot":{"get":{"tags":["audit"],"summary":"Pricing Snapshot At","description":"Reconstruct the pricing state at a historical moment.\n\nAlgorithm:\n  For each investor, find the rate sheet that was 'active' at time `at`:\n    - parsed_at <= at\n    - AND (no newer sheet from same investor was parsed_at before `at`)\n  Then return the base_pricing rows from that sheet matching filters.\n\nResult includes sheet metadata so an auditor can click through to the\noriginal document, timestamps, and parse confidence.","operationId":"pricing_snapshot_at_api_v1_admin_internal_audit_pricing_snapshot_get","parameters":[{"name":"at","in":"query","required":true,"schema":{"type":"string","format":"date-time","description":"The point in time to reconstruct (ISO 8601)","title":"At"},"description":"The point in time to reconstruct (ISO 8601)"},{"name":"lock_days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Lock Days"}},{"name":"rate_pct","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate Pct"}},{"name":"investor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/audit/sheet-timeline/{investor_id}":{"get":{"tags":["audit"],"summary":"Sheet Timeline For Investor","description":"Full timeline of all rate sheets for one investor — when each was\nactive, when superseded, by what. Used for drill-down during an audit.","operationId":"sheet_timeline_for_investor_api_v1_admin_internal_audit_sheet_timeline__investor_id__get","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/audit/events":{"get":{"tags":["audit"],"summary":"Audit Events","description":"Query the immutable parse_audit_log.\n\nEvery state change to every sheet is recorded here: parsed, validated,\npublished, superseded, retracted, overridden, corrected.","operationId":"audit_events_api_v1_admin_internal_audit_events_get","parameters":[{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"description":"Only events after this time","title":"Since"},"description":"Only events after this time"},{"name":"event_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Event Type"}},{"name":"actor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lockdesk/queue":{"get":{"tags":["lockdesk"],"summary":"Lock-desk price-exception queue","description":"Return the live queue of price exceptions pending action.\n\nDefault: all non-terminal statuses (pending, branch_approved,\nregional_approved, secondary_approved). Terminal statuses (final_approved,\nrejected, withdrawn) are excluded.","operationId":"lock_desk_queue_api_v1_admin_internal_lockdesk_queue_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status","title":"Status"},"description":"Filter by status"},{"name":"min_concession_bps","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Concession Bps"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lockdesk/queue/heatmap":{"get":{"tags":["lockdesk"],"summary":"Queue heatmap (concessions over time)","description":"Hourly count of incoming exception requests over the last N hours.\n\nLets lock desk managers spot rush-hour patterns and staff accordingly.","operationId":"lock_desk_heatmap_api_v1_admin_internal_lockdesk_queue_heatmap_get","parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lockdesk/loans/action-required/summary":{"get":{"tags":["lockdesk"],"summary":"Loans needing action — summary","description":"Grouped-by-type counts + SLA bucket totals + breach count over the\nfull lock-request pipeline (not just price exceptions). Powers the\nLock Desk per-type stats strip and the top-of-page SLA tiles.","operationId":"loans_action_required_summary_api_v1_admin_internal_lockdesk_loans_action_required_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/lockdesk/loans/action-required/count":{"get":{"tags":["lockdesk"],"summary":"Loans needing action — count","description":"Lightweight badge driver — single int.","operationId":"loans_action_required_count_api_v1_admin_internal_lockdesk_loans_action_required_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/lockdesk/loans/{loan_id}/history":{"get":{"tags":["lockdesk"],"summary":"Lock history for a loan","description":"Full LockRequestEvent timeline for one loan, joined against the\nparent lock_requests row for context. Ordered newest first.","operationId":"loan_lock_history_api_v1_admin_internal_lockdesk_loans__loan_id__history_get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lockdesk/attachment-types":{"get":{"tags":["lockdesk"],"summary":"List lock-desk attachment types","operationId":"list_attachment_types_api_v1_admin_internal_lockdesk_attachment_types_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"}}}}}},"post":{"tags":["lockdesk"],"summary":"Create a lock-desk attachment type","operationId":"create_attachment_type_api_v1_admin_internal_lockdesk_attachment_types_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentTypeCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lockdesk/attachment-types/{type_id}":{"get":{"tags":["lockdesk"],"summary":"Get one attachment type","operationId":"get_attachment_type_api_v1_admin_internal_lockdesk_attachment_types__type_id__get","parameters":[{"name":"type_id","in":"path","required":true,"schema":{"type":"string","title":"Type Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["lockdesk"],"summary":"Update an attachment type","operationId":"update_attachment_type_api_v1_admin_internal_lockdesk_attachment_types__type_id__patch","parameters":[{"name":"type_id","in":"path","required":true,"schema":{"type":"string","title":"Type Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentTypePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lockdesk"],"summary":"Delete an attachment type","operationId":"delete_attachment_type_api_v1_admin_internal_lockdesk_attachment_types__type_id__delete","parameters":[{"name":"type_id","in":"path","required":true,"schema":{"type":"string","title":"Type Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exceptions":{"post":{"tags":["exceptions"],"summary":"Create Exception","description":"Create a new price exception request.","operationId":"create_exception_api_v1_admin_internal_exceptions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExceptionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["exceptions"],"summary":"List Exceptions","description":"List exceptions, optionally filtered by status.","operationId":"list_exceptions_api_v1_admin_internal_exceptions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exceptions/analytics/disparity":{"get":{"tags":["exceptions"],"summary":"Disparity Analytics","description":"Fair-lending disparity check.\n\nCompute per-LO (requested_by_account_id):\n  - request_count\n  - approval_rate (fraction ending in any *_approved status)\n  - avg_concession_bps (over approved exceptions)\n\nFlag any LO whose approval rate or avg concession differs more than\n2 standard deviations from the org average.","operationId":"disparity_analytics_api_v1_admin_internal_exceptions_analytics_disparity_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/exceptions/{exception_id}":{"get":{"tags":["exceptions"],"summary":"Get Exception","description":"Get a single exception.","operationId":"get_exception_api_v1_admin_internal_exceptions__exception_id__get","parameters":[{"name":"exception_id","in":"path","required":true,"schema":{"type":"string","title":"Exception Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exceptions/{exception_id}/approve":{"post":{"tags":["exceptions"],"summary":"Approve Exception","description":"Approve an exception, advancing it to the next approval level.\n\nIf `next_level` is supplied, jumps to that status (must be an *_approved\nvalue). Otherwise advances one step along the standard chain.","operationId":"approve_exception_api_v1_admin_internal_exceptions__exception_id__approve_post","parameters":[{"name":"exception_id","in":"path","required":true,"schema":{"type":"string","title":"Exception Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExceptionApprove"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exceptions/{exception_id}/reject":{"post":{"tags":["exceptions"],"summary":"Reject Exception","description":"Reject an exception with a reason.","operationId":"reject_exception_api_v1_admin_internal_exceptions__exception_id__reject_post","parameters":[{"name":"exception_id","in":"path","required":true,"schema":{"type":"string","title":"Exception Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExceptionReject"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/approval-groups":{"get":{"tags":["exception-management"],"summary":"List Approval Groups","description":"List approval groups with member counts.","operationId":"list_approval_groups_api_v1_admin_internal_exception_management_approval_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["exception-management"],"summary":"Create Approval Group","description":"Create a new approval group.","operationId":"create_approval_group_api_v1_admin_internal_exception_management_approval_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalGroupCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/approval-groups/{group_id}":{"get":{"tags":["exception-management"],"summary":"Get Approval Group","description":"Get an approval group with its members.","operationId":"get_approval_group_api_v1_admin_internal_exception_management_approval_groups__group_id__get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["exception-management"],"summary":"Update Approval Group","operationId":"update_approval_group_api_v1_admin_internal_exception_management_approval_groups__group_id__patch","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApprovalGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["exception-management"],"summary":"Delete Approval Group","description":"Soft-delete an approval group.","operationId":"delete_approval_group_api_v1_admin_internal_exception_management_approval_groups__group_id__delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/approval-groups/{group_id}/members":{"post":{"tags":["exception-management"],"summary":"Add Approval Group Member","description":"Add a user to an approval group.","operationId":"add_approval_group_member_api_v1_admin_internal_exception_management_approval_groups__group_id__members_post","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMemberAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/approval-groups/{group_id}/members/{account_id}":{"delete":{"tags":["exception-management"],"summary":"Remove Approval Group Member","operationId":"remove_approval_group_member_api_v1_admin_internal_exception_management_approval_groups__group_id__members__account_id__delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/requestor-groups":{"get":{"tags":["exception-management"],"summary":"List Requestor Groups","operationId":"list_requestor_groups_api_v1_admin_internal_exception_management_requestor_groups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["exception-management"],"summary":"Create Requestor Group","operationId":"create_requestor_group_api_v1_admin_internal_exception_management_requestor_groups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestorGroupCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/requestor-groups/{group_id}":{"get":{"tags":["exception-management"],"summary":"Get Requestor Group","operationId":"get_requestor_group_api_v1_admin_internal_exception_management_requestor_groups__group_id__get","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["exception-management"],"summary":"Update Requestor Group","operationId":"update_requestor_group_api_v1_admin_internal_exception_management_requestor_groups__group_id__patch","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestorGroupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["exception-management"],"summary":"Delete Requestor Group","description":"Soft-delete a requestor group.","operationId":"delete_requestor_group_api_v1_admin_internal_exception_management_requestor_groups__group_id__delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/requestor-groups/{group_id}/members":{"post":{"tags":["exception-management"],"summary":"Add Requestor Group Member","operationId":"add_requestor_group_member_api_v1_admin_internal_exception_management_requestor_groups__group_id__members_post","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupMemberAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/requestor-groups/{group_id}/members/{account_id}":{"delete":{"tags":["exception-management"],"summary":"Remove Requestor Group Member","operationId":"remove_requestor_group_member_api_v1_admin_internal_exception_management_requestor_groups__group_id__members__account_id__delete","parameters":[{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}},{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/delegations":{"get":{"tags":["exception-management"],"summary":"List Delegations","description":"List delegations. If active=true, only currently effective ones.","operationId":"list_delegations_api_v1_admin_internal_exception_management_delegations_get","parameters":[{"name":"active","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["exception-management"],"summary":"Create Delegation","description":"Create a delegation of approval authority.","operationId":"create_delegation_api_v1_admin_internal_exception_management_delegations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_exception_mgmt__DelegationCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/delegations/{delegation_id}":{"patch":{"tags":["exception-management"],"summary":"Update Delegation","description":"Update a delegation — including the admin-only gate.","operationId":"update_delegation_api_v1_admin_internal_exception_management_delegations__delegation_id__patch","parameters":[{"name":"delegation_id","in":"path","required":true,"schema":{"type":"string","title":"Delegation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegationUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["exception-management"],"summary":"Revoke Delegation","description":"Revoke a delegation early (soft — sets is_active=false).","operationId":"revoke_delegation_api_v1_admin_internal_exception_management_delegations__delegation_id__delete","parameters":[{"name":"delegation_id","in":"path","required":true,"schema":{"type":"string","title":"Delegation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/reasons":{"get":{"tags":["exception-management"],"summary":"List Reasons","description":"List all reason codes. Falls back to 'default' tenant catalog if the\nrequesting tenant has none of its own.","operationId":"list_reasons_api_v1_admin_internal_exception_management_reasons_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"}}}}}},"post":{"tags":["exception-management"],"summary":"Create Reason","operationId":"create_reason_api_v1_admin_internal_exception_management_reasons_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReasonCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/reasons/{reason_id}":{"patch":{"tags":["exception-management"],"summary":"Update Reason","operationId":"update_reason_api_v1_admin_internal_exception_management_reasons__reason_id__patch","parameters":[{"name":"reason_id","in":"path","required":true,"schema":{"type":"string","title":"Reason Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReasonUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["exception-management"],"summary":"Delete Reason","description":"Soft-delete (deactivate) a reason.","operationId":"delete_reason_api_v1_admin_internal_exception_management_reasons__reason_id__delete","parameters":[{"name":"reason_id","in":"path","required":true,"schema":{"type":"string","title":"Reason Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/approvers":{"get":{"tags":["exception-management"],"summary":"List Approvers","description":"For a given requestor group, list all approval groups + their members.\n\nIf requestor_group_id is omitted, returns all active approval groups with\ntheir members for this tenant.","operationId":"list_approvers_api_v1_admin_internal_exception_management_approvers_get","parameters":[{"name":"requestor_group_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requestor Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/loan-officers":{"get":{"tags":["exception-management"],"summary":"List Loan Officers","description":"List all individual/LO-type accounts in the tenant.","operationId":"list_loan_officers_api_v1_admin_internal_exception_management_loan_officers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/exception-management/sequences":{"get":{"tags":["exception-management"],"summary":"List Sequences","description":"List exception sequences (with step counts).","operationId":"list_sequences_api_v1_admin_internal_exception_management_sequences_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"}}}}}},"post":{"tags":["exception-management"],"summary":"Create Sequence","description":"Create a new sequence with optional initial steps.","operationId":"create_sequence_api_v1_admin_internal_exception_management_sequences_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SequenceCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/sequences/{sequence_id}":{"get":{"tags":["exception-management"],"summary":"Get Sequence","description":"Sequence detail with ordered steps and member counts per group.","operationId":"get_sequence_api_v1_admin_internal_exception_management_sequences__sequence_id__get","parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","title":"Sequence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["exception-management"],"summary":"Update Sequence","operationId":"update_sequence_api_v1_admin_internal_exception_management_sequences__sequence_id__patch","parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","title":"Sequence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SequenceUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["exception-management"],"summary":"Delete Sequence","description":"Soft-delete (deactivate) a sequence.","operationId":"delete_sequence_api_v1_admin_internal_exception_management_sequences__sequence_id__delete","parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","title":"Sequence Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/sequences/{sequence_id}/steps":{"post":{"tags":["exception-management"],"summary":"Add Sequence Step","operationId":"add_sequence_step_api_v1_admin_internal_exception_management_sequences__sequence_id__steps_post","parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","title":"Sequence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/sequences/{sequence_id}/steps/{step_id}":{"delete":{"tags":["exception-management"],"summary":"Remove Sequence Step","operationId":"remove_sequence_step_api_v1_admin_internal_exception_management_sequences__sequence_id__steps__step_id__delete","parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","title":"Sequence Id"}},{"name":"step_id","in":"path","required":true,"schema":{"type":"string","title":"Step Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/sequences/{sequence_id}/steps/reorder":{"put":{"tags":["exception-management"],"summary":"Reorder Sequence Steps","description":"Reorder steps by providing a list of step_ids in desired order.","operationId":"reorder_sequence_steps_api_v1_admin_internal_exception_management_sequences__sequence_id__steps_reorder_put","parameters":[{"name":"sequence_id","in":"path","required":true,"schema":{"type":"string","title":"Sequence Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StepsReorder"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/price-exceptions/{exc_id}/reviewal-info":{"get":{"tags":["exception-management"],"summary":"Get Exception Reviewal Info","description":"Return exception + sequence + current step + SLA + eligible approvers.","operationId":"get_exception_reviewal_info_api_v1_admin_internal_exception_management_price_exceptions__exc_id__reviewal_info_get","parameters":[{"name":"exc_id","in":"path","required":true,"schema":{"type":"string","title":"Exc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/exception-management/price-exceptions/{exc_id}/advance":{"post":{"tags":["exception-management"],"summary":"Advance Exception","description":"Record a decision at the current step. Advance or terminate progress.","operationId":"advance_exception_api_v1_admin_internal_exception_management_price_exceptions__exc_id__advance_post","parameters":[{"name":"exc_id","in":"path","required":true,"schema":{"type":"string","title":"Exc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProgressAdvance"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/guidelines/ingest":{"post":{"tags":["guidelines"],"summary":"Ingest Guideline Route","description":"Upload a guideline PDF → chunk + embed + insert.","operationId":"ingest_guideline_route_api_v1_admin_internal_guidelines_ingest_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_ingest_guideline_route_api_v1_admin_internal_guidelines_ingest_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/v1/admin/internal/guidelines":{"get":{"tags":["guidelines"],"summary":"List Guidelines","description":"List ingested guideline documents, grouped by source file.\n\nReturns one row per (investor_id, source_filename, document_type)\nwith chunk counts and ingest timestamp.","operationId":"list_guidelines_api_v1_admin_internal_guidelines_get","parameters":[{"name":"investor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/guidelines/{guideline_id}":{"delete":{"tags":["guidelines"],"summary":"Soft Delete Guideline","description":"Soft-delete a guideline chunk by flipping is_active=false.","operationId":"soft_delete_guideline_api_v1_admin_internal_guidelines__guideline_id__delete","parameters":[{"name":"guideline_id","in":"path","required":true,"schema":{"type":"string","title":"Guideline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/guidelines/ask":{"post":{"tags":["guidelines"],"summary":"Ask Guideline","description":"Ask a natural-language question against ingested guidelines.","operationId":"ask_guideline_api_v1_admin_internal_guidelines_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/compare":{"post":{"tags":["compare"],"summary":"Compare Scenarios","description":"Run N scenarios through best-execution in parallel and return a comparison grid.\n\nThe first scenario is treated as the \"base\" — every other scenario's deltas\nare computed against it. The \"best_scenario\" field calls out the row with\nthe highest top-investor net price across the whole batch.","operationId":"compare_scenarios_api_v1_pricing_internal_compare_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompareResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investors/{investor_id}/profile":{"get":{"tags":["investor-intel"],"summary":"Investor Profile","description":"Complete profile for a single investor: product mix, volume, timing stats.\n\nShows:\n- Total sheets ingested (all time)\n- Avg parse confidence\n- Median time-to-parse (investor_sent → parsed)\n- Product mix (rate distribution, lock period distribution)\n- Freshness metrics (oldest / newest sheet)\n- Rate range per lock period","operationId":"investor_profile_api_v1_admin_internal_investors__investor_id__profile_get","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investors/{investor_id}/rate-trend":{"get":{"tags":["investor-intel"],"summary":"Investor Rate Trend","description":"Rate trend over time for an investor — plot of their rate sheet prices.\n\nMines superseded sheets to reconstruct price history. Competitors can't\ndo this because they don't retain sheet history with timestamps.\n\nReturns time-series data: [{timestamp, rate_pct, lock_days, price, sheet_id}]","operationId":"investor_rate_trend_api_v1_admin_internal_investors__investor_id__rate_trend_get","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}},{"name":"rate_pct","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Filter to a specific rate","title":"Rate Pct"},"description":"Filter to a specific rate"},{"name":"lock_days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Lock Days"}},{"name":"days_back","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days Back"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investors/":{"get":{"tags":["investor-intel"],"summary":"List Investors With Summary","description":"List all investors with quick summary stats for each.\n\nUsed to build a grid view like \"Investor Directory\" with sheet counts,\nlatest data, staleness, avg confidence.","operationId":"list_investors_with_summary_api_v1_admin_internal_investors__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/investors":{"get":{"tags":["investor-intel"],"summary":"List Investors With Summary","description":"List all investors with quick summary stats for each.\n\nUsed to build a grid view like \"Investor Directory\" with sheet counts,\nlatest data, staleness, avg confidence.","operationId":"list_investors_with_summary_api_v1_admin_internal_investors_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/investors/latest-daily-rate-set":{"get":{"tags":["investor-intel"],"summary":"Per-investor latest active rate-sheet summary (NachoCrunch shape)","description":"Flatten each investor's most-recent active sheet into a single\npayload. ONE RECORD PER INVESTOR with investor metadata and the\ntimestamp chain so a caller can detect stale contributions.\n\nThis is NOT Polly's `/pe/api/latest-daily-rate-set/` — that endpoint\nreturns floating-rate benchmark rates (SOFR/CMT). For that, use\n`/api/v1/admin/internal/pe/benchmark-rates/latest` or the Polly-\ncompat alias `/api/v1/admin/internal/pe/latest-daily-rate-set`.","operationId":"latest_daily_rate_set_api_v1_admin_internal_investors_latest_daily_rate_set_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/investors/{investor_id}/rates/recent":{"get":{"tags":["investor-intel"],"summary":"Polly-parity: recent rate-sheet history for one investor","description":"Every rate-sheet snapshot parsed for this investor in the last\n`days` days — active AND superseded, so a caller can reconstruct\nthe investor's rate trajectory. Matches Polly's `/investor-rates/\n{id}/recent/` shape, ordered newest-first.","operationId":"investor_recent_rates_api_v1_admin_internal_investors__investor_id__rates_recent_get","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"description":"Window in days — default 30. Max 365.","default":30,"title":"Days"},"description":"Window in days — default 30. Max 365."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/settings":{"get":{"tags":["lender-intel"],"summary":"Get this tenant's intel settings","operationId":"get_settings_api_v1_admin_internal_intel_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["lender-intel"],"summary":"Update this tenant's intel opt-in","description":"Symmetric opt-in: setting `opted_in=true` lets the tenant contribute\ndata AND query peer benchmarks. Opting out stops future contribution\n(prior snapshots already have no tenant identifiers, so they're safe)\nand blocks further querying.","operationId":"put_settings_api_v1_admin_internal_intel_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IntelSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/snapshots/rebuild":{"post":{"tags":["lender-intel"],"summary":"Recompute peer benchmark snapshots across opt-in tenants","description":"Walk every locked/funded loan from every opt-in tenant in the rolling\nwindow, group by scenario bucket, and write one snapshot row per bucket\nthat satisfies k_contributors >= K_ANONYMITY_FLOOR.\n\nRequires the calling tenant to be opt-in — we won't let a non-contributing\ntenant trigger a rebuild that they can then query.","operationId":"rebuild_snapshots_api_v1_admin_internal_intel_snapshots_rebuild_post","parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":30,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/peer-pricing":{"get":{"tags":["lender-intel"],"summary":"Peer-pricing benchmarks for a specific scenario bucket","description":"Return the latest peer-pricing snapshot for the bucket this scenario\nfalls into. If no snapshot exists (or the latest doesn't satisfy k-anon),\nreturn `insufficient_peers` — never leak partial data below threshold.","operationId":"peer_pricing_api_v1_admin_internal_intel_peer_pricing_get","parameters":[{"name":"loan_type","in":"query","required":true,"schema":{"type":"string","description":"conventional, fha, va, usda, jumbo, non_qm","title":"Loan Type"},"description":"conventional, fha, va, usda, jumbo, non_qm"},{"name":"fico_score","in":"query","required":true,"schema":{"type":"integer","maximum":850,"minimum":300,"title":"Fico Score"}},{"name":"ltv_pct","in":"query","required":true,"schema":{"type":"number","maximum":105,"minimum":0,"title":"Ltv Pct"}},{"name":"lock_days","in":"query","required":true,"schema":{"type":"integer","maximum":365,"minimum":1,"title":"Lock Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/peer-pricing/summary":{"get":{"tags":["lender-intel"],"summary":"Every peer-pricing snapshot currently safe to share","description":"List the latest-per-bucket snapshots that satisfy k-anon. Useful for\ndashboards — only k-safe rows are ever returned.","operationId":"peer_pricing_summary_api_v1_admin_internal_intel_peer_pricing_summary_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohorts":{"get":{"tags":["lender-intel"],"summary":"List all registered cohort definitions","description":"Enumerate every active PeerCohortDefinition. Open to any caller —\ncohort *definitions* are public taxonomy, only the aggregate data\nbehind them is k-anon gated.","operationId":"list_cohorts_api_v1_admin_internal_intel_cohorts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/intel/my-profile":{"get":{"tags":["lender-intel"],"summary":"This tenant's own intel profile (cohort-classification inputs)","description":"Return the tenant's cached profile (volume_tier, channel_mix, geo,\nproduct_mix_hash) — useful so a tenant can see how they'll be\nclassified into cohorts before querying benchmarks.","operationId":"get_my_profile_api_v1_admin_internal_intel_my_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/intel/pricing-competitiveness-index":{"get":{"tags":["lender-intel"],"summary":"Headline competitiveness index vs. a peer cohort","description":"Single-number headline: tenant's median locked_net_price minus the\ncohort's p50, expressed in bps. Returns `insufficient_peers` if the\ncohort's latest locked_net_price snapshot doesn't satisfy k-anon.","operationId":"pricing_competitiveness_index_api_v1_admin_internal_intel_pricing_competitiveness_index_get","parameters":[{"name":"cohort_slug","in":"query","required":false,"schema":{"type":"string","default":"by_volume_tier_and_channel_retail_mid","title":"Cohort Slug"}},{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":90,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohort-snapshots/rebuild":{"post":{"tags":["lender-intel"],"summary":"Recompute all cohort × metric snapshots (manual trigger)","description":"Manual trigger for the cohort-snapshot aggregator. Mirrors the\nWave I `POST /snapshots/rebuild` shape: opt-in required, returns a\nsummary of how many snapshots were written vs. skipped-for-floor.","operationId":"rebuild_cohort_snapshots_api_v1_admin_internal_intel_cohort_snapshots_rebuild_post","parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":7,"default":90,"title":"Window Days"}},{"name":"refresh_profiles","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Refresh Profiles"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohort-snapshots/{snapshot_id}":{"get":{"tags":["lender-intel"],"summary":"Fetch a single cohort snapshot by id","description":"Single-snapshot read (useful for webhook consumers replaying\n`intel.cohort_snapshot_rebuilt` or `intel.outlier_detected` events).","operationId":"get_cohort_snapshot_api_v1_admin_internal_intel_cohort_snapshots__snapshot_id__get","parameters":[{"name":"snapshot_id","in":"path","required":true,"schema":{"type":"string","title":"Snapshot Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohort-benchmarks/{slug}":{"get":{"tags":["lender-intel"],"summary":"All metrics for one cohort, latest snapshot","description":"Return the latest snapshot per metric for the given cohort. Rows\nthat fail k-anon are silently excluded (the collection is safe to\nrender without per-cell guarding).","operationId":"cohort_benchmarks_api_v1_admin_internal_intel_cohort_benchmarks__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohort-benchmarks/{slug}/membership-preview":{"get":{"tags":["lender-intel"],"summary":"Cohort size preview (never returns tenant IDs)","description":"Tell the caller how many opt-in tenants fall in this cohort and\nwhether that passes the k-anonymity floor. Used by the UI to decide\nwhether to show the `insufficient_peers` state or the full dashboard.\nNever returns tenant IDs — only counts.","operationId":"cohort_membership_preview_api_v1_admin_internal_intel_cohort_benchmarks__slug__membership_preview_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohort-benchmarks/{slug}/outliers":{"get":{"tags":["lender-intel"],"summary":"Metrics where this tenant sits outside the cohort [p10, p90]","description":"Per-metric outlier analysis. Returns only the metrics where the\ncalling tenant's own median sits outside the cohort's p10/p90 band,\nseverity-sorted. Fires `intel.outlier_detected` for any metric that\nwasn't in the outlier set at the previous read time (best-effort —\nsimple anti-spam, not a state machine).","operationId":"cohort_outliers_api_v1_admin_internal_intel_cohort_benchmarks__slug__outliers_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/intel/cohort-benchmarks/{slug}/{metric_name}":{"get":{"tags":["lender-intel"],"summary":"One metric for one cohort, plus history","description":"Single-metric view with a rolling history series (one p50 per\ncomputed_at), for trend lines. Only k-anon-safe rows are ever returned.","operationId":"cohort_metric_with_history_api_v1_admin_internal_intel_cohort_benchmarks__slug___metric_name__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"metric_name","in":"path","required":true,"schema":{"type":"string","title":"Metric Name"}},{"name":"history_points","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"History Points"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/apor/upload":{"post":{"tags":["compliance"],"summary":"Upsert APOR observations (idempotent on as_of_date+product_type+term_years)","description":"Bulk-load FFIEC APOR observations. The unique key\n(as_of_date, product_type, term_years) means callers can safely re-POST\nthe same week — `ON CONFLICT DO UPDATE` refreshes `apor_pct` in place.","operationId":"upload_apor_api_v1_admin_internal_compliance_apor_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/APORUpload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/apor/lookup":{"get":{"tags":["compliance"],"summary":"Resolve the APOR 'in effect' for a lock date","operationId":"lookup_apor_api_v1_admin_internal_compliance_apor_lookup_get","parameters":[{"name":"lock_date","in":"query","required":true,"schema":{"type":"string","format":"date","title":"Lock Date"}},{"name":"product_type","in":"query","required":true,"schema":{"type":"string","description":"fixed|variable","title":"Product Type"},"description":"fixed|variable"},{"name":"term_years","in":"query","required":true,"schema":{"type":"integer","maximum":50,"minimum":1,"title":"Term Years"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/apor/latest":{"get":{"tags":["compliance"],"summary":"Latest APOR publication date + every rate in that week","operationId":"latest_apor_api_v1_admin_internal_compliance_apor_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/compliance/hpml/evaluate":{"post":{"tags":["compliance"],"summary":"Evaluate HPML status for a scenario; log the verdict","description":"Run the Reg Z §1026.35 HPML test: compare APR to the applicable\nAPOR + threshold. The verdict is stored as an `HPMLEvaluation` row so\ncompliance audits can reconstruct the inputs. Emits\n`compliance.hpml_detected` when `is_hpml=true`.","operationId":"evaluate_hpml_api_v1_admin_internal_compliance_hpml_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HPMLEvaluateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hpml/evaluations":{"get":{"tags":["compliance"],"summary":"Audit log of HPML evaluations","operationId":"list_hpml_evaluations_api_v1_admin_internal_compliance_hpml_evaluations_get","parameters":[{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}},{"name":"is_hpml","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hpml"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hoepa/evaluate":{"post":{"tags":["compliance"],"summary":"Evaluate HOEPA high-cost status for a scenario; log the verdict","operationId":"evaluate_hoepa_api_v1_admin_internal_compliance_hoepa_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HOEPAEvaluateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hoepa/evaluations":{"get":{"tags":["compliance"],"summary":"Audit log of HOEPA evaluations","operationId":"list_hoepa_evaluations_api_v1_admin_internal_compliance_hoepa_evaluations_get","parameters":[{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}},{"name":"record_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Record Id"}},{"name":"is_high_cost","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is High Cost"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/lar/{record_id}/compute-hoepa":{"post":{"tags":["compliance"],"summary":"Run HOEPA test against a LAR record; persist hoepa_status","description":"Compute HOEPA high-cost verdict for an existing LAR record using\nthat record's captured APR + action-taken date + loan_amount. The\nverdict is persisted as `hmda_lar_records.hoepa_status` and removes\n\"hoepa_status\" from missing_fields when set.","operationId":"compute_lar_hoepa_api_v1_admin_internal_compliance_hmda_lar__record_id__compute_hoepa_post","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputeLARHoepaBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/generate-lar":{"post":{"tags":["compliance"],"summary":"Generate/refresh HMDA LAR records for a filing year","description":"Walk every loan whose action_taken_date falls in `filing_year` and\nupsert an HMDA LAR record. Idempotent on (tenant_id, loan_id,\nfiling_year) — re-running refreshes existing rows.\n\nRate spread is computed for each loan via the APOR engine we already\nhave; loans without rate data, state, or action_taken are still written\nas draft records with those fields recorded in `missing_fields`.","operationId":"generate_hmda_lar_api_v1_admin_internal_compliance_hmda_generate_lar_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateLARBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/lar":{"get":{"tags":["compliance"],"summary":"List HMDA LAR records, optionally filtered by year + status","operationId":"list_hmda_lar_api_v1_admin_internal_compliance_hmda_lar_get","parameters":[{"name":"filing_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Filing Year"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/lar/export":{"get":{"tags":["compliance"],"summary":"CFPB pipe-delimited LAR export for a filing year","operationId":"export_hmda_lar_route_api_v1_admin_internal_compliance_hmda_lar_export_get","parameters":[{"name":"filing_year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":2020,"title":"Filing Year"}},{"name":"lei","in":"query","required":false,"schema":{"type":"string","minLength":1,"maxLength":20,"description":"Tenant LEI (Legal Entity Identifier). 20-char ISO 17442 string. Default is a placeholder — supply the real LEI before submission.","default":"0000000000000000000","title":"Lei"},"description":"Tenant LEI (Legal Entity Identifier). 20-char ISO 17442 string. Default is a placeholder — supply the real LEI before submission."}],"responses":{"200":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/lar/{record_id}":{"get":{"tags":["compliance"],"summary":"Detail of a single HMDA LAR record","operationId":"get_hmda_lar_api_v1_admin_internal_compliance_hmda_lar__record_id__get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/lar/{record_id}/denial-reasons":{"get":{"tags":["compliance"],"summary":"List Reg C §1003.4(a)(16) denial reasons on a LAR record","operationId":"list_denial_reasons_api_v1_admin_internal_compliance_hmda_lar__record_id__denial_reasons_get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["compliance"],"summary":"Replace Reg C §1003.4(a)(16) denial reasons on a LAR record","operationId":"replace_denial_reasons_api_v1_admin_internal_compliance_hmda_lar__record_id__denial_reasons_put","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DenialReasonsPutBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["compliance"],"summary":"Clear all Reg C §1003.4(a)(16) denial reasons on a LAR record","operationId":"clear_denial_reasons_api_v1_admin_internal_compliance_hmda_lar__record_id__denial_reasons_delete","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/lar/{record_id}/pre-approval":{"put":{"tags":["compliance"],"summary":"Set the Reg C §1003.4(a)(4) pre-approval indicator on a LAR record","operationId":"set_pre_approval_api_v1_admin_internal_compliance_hmda_lar__record_id__pre_approval_put","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreApprovalPutBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["compliance"],"summary":"Read the Reg C §1003.4(a)(4) pre-approval indicator","operationId":"get_pre_approval_api_v1_admin_internal_compliance_hmda_lar__record_id__pre_approval_get","parameters":[{"name":"record_id","in":"path","required":true,"schema":{"type":"string","title":"Record Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/demographics/{loan_id}":{"put":{"tags":["compliance"],"summary":"Upsert HMDA demographics for a loan (Reg C §1003.4(a)(10)-(12))","description":"Create-or-update demographics for one loan. Validates CFPB code\nvalues before writing. Any subsequent run of `generate-lar` lifts the\nmatching LAR record's status from 'draft' to 'ready' if every\nrequired field is now populated.","operationId":"upsert_hmda_demographics_api_v1_admin_internal_compliance_hmda_demographics__loan_id__put","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DemographicsUpsert"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["compliance"],"summary":"Fetch captured HMDA demographics for a loan","operationId":"get_hmda_demographics_api_v1_admin_internal_compliance_hmda_demographics__loan_id__get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/fair-lending/approval-rates":{"get":{"tags":["compliance"],"summary":"Per-protected-class approval rate with CFPB 4/5ths rule flag","description":"Group decisioned applications by protected class; for each class\ncompute approval rate = approved / (approved + denied). The highest-\nrate class is treated as the control; classes below 80% of that\nrate are flagged as disparate-impact candidates per the CFPB 4/5ths\nrule.\n\nClasses below MIN_SAMPLE_SIZE (30) decisioned applications return\n``status='insufficient_sample'`` — partial data never anchors a false\nflag.","operationId":"fair_lending_approval_rates_api_v1_admin_internal_compliance_fair_lending_approval_rates_get","parameters":[{"name":"filing_year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":2020,"title":"Filing Year"}},{"name":"protected_class","in":"query","required":true,"schema":{"type":"string","description":"race | ethnicity | sex","title":"Protected Class"},"description":"race | ethnicity | sex"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/fair-lending/pricing-disparity":{"get":{"tags":["compliance"],"summary":"Per-protected-class rate-spread distribution (p25/p50/p75)","description":"Group originated loans by protected class; report rate_spread_bps\ndistribution per class + median delta vs. the lowest-median class.\n\nClasses below MIN_SAMPLE_SIZE return `insufficient_sample`.","operationId":"fair_lending_pricing_disparity_api_v1_admin_internal_compliance_fair_lending_pricing_disparity_get","parameters":[{"name":"filing_year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":2020,"title":"Filing Year"}},{"name":"protected_class","in":"query","required":true,"schema":{"type":"string","description":"race | ethnicity | sex","title":"Protected Class"},"description":"race | ethnicity | sex"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/settings":{"get":{"tags":["compliance"],"summary":"Fetch this tenant's HMDA filing metadata","operationId":"get_hmda_settings_api_v1_admin_internal_compliance_hmda_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["compliance"],"summary":"Upsert this tenant's HMDA filing metadata","description":"Create-or-update tenant HMDA settings. These fill the TS (Transmittal\nSheet) row on every subsequent LAR export. Validates LEI length + CFPB\nfederal-agency-code enum; other fields are free-form text.","operationId":"upsert_hmda_settings_api_v1_admin_internal_compliance_hmda_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HMDASettingsUpsert"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/dashboard":{"get":{"tags":["compliance"],"summary":"Rollup of every compliance surface for one tenant/year","description":"One glance-able health view across the compliance trilogy.\n\nReports:\n  * HMDA LAR readiness — total / draft / ready counts + %\n  * Demographics coverage — % of LAR records with captured demographics\n  * Fair-lending — count of classes currently flagged for 4/5ths\n    disparate impact across all three protected classes (race,\n    ethnicity, sex)\n  * HPML — count of loans flagged as Higher-Priced Mortgage Loans\n  * APOR freshness — date of most recent APOR publication\n  * Tenant settings — which TS-row fields are populated","operationId":"compliance_dashboard_api_v1_admin_internal_compliance_dashboard_get","parameters":[{"name":"filing_year","in":"query","required":true,"schema":{"type":"integer","maximum":2100,"minimum":2020,"title":"Filing Year"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/hmda/validate-lar":{"post":{"tags":["compliance"],"summary":"Run CFPB-style edit rules against a filing-year's LAR","description":"Apply the built-in 12-rule subset against every LAR record for the\nfiling year. Returns per-record violations + a summary breakdown by\nseverity. Run this before calling /hmda/lar/export to avoid CFPB\nvalidator rejections at submission time.","operationId":"validate_hmda_lar_api_v1_admin_internal_compliance_hmda_validate_lar_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HMDAValidateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/doc-gen/templates":{"get":{"tags":["doc-gen"],"summary":"List Templates","operationId":"list_templates_api_v1_admin_internal_doc_gen_templates_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"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"}}}}}},"post":{"tags":["doc-gen"],"summary":"Create Template","operationId":"create_template_api_v1_admin_internal_doc_gen_templates_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_doc_gen__TemplateCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/doc-gen/templates/{template_id}":{"get":{"tags":["doc-gen"],"summary":"Get Template","operationId":"get_template_api_v1_admin_internal_doc_gen_templates__template_id__get","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["doc-gen"],"summary":"Update Template","operationId":"update_template_api_v1_admin_internal_doc_gen_templates__template_id__patch","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplatePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["doc-gen"],"summary":"Delete Template","operationId":"delete_template_api_v1_admin_internal_doc_gen_templates__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/doc-gen/templates/{template_id}/render":{"post":{"tags":["doc-gen"],"summary":"Render Template","description":"Render a template with supplied context. By default, unresolved\nplaceholders stay as `{{var}}` literals + listed in the response's\n`unresolved` array so the caller can decide whether to fail. When\n`require_all_variables=true`, any unresolved variable causes 422.","operationId":"render_template_api_v1_admin_internal_doc_gen_templates__template_id__render_post","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateRender"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loan-subtypes/":{"get":{"tags":["loan-subtypes"],"summary":"List Subtypes","description":"List every loan subtype. Industry-standard reference data,\nglobally scoped (not tenant-partitioned). Matches Polly's\n`/api/v1/loan_subtypes/` envelope shape.","operationId":"list_subtypes_api_v1_admin_internal_loan_subtypes__get","parameters":[{"name":"program_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: conv | fha | va | usda | non_qm | jumbo","title":"Program Type"},"description":"Filter: conv | fha | va | usda | non_qm | jumbo"},{"name":"is_streamline","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Streamline"}},{"name":"is_renovation","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Renovation"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loan-subtypes":{"get":{"tags":["loan-subtypes"],"summary":"List loan subtypes (Polly-parity /api/v1/loan_subtypes/ shape)","description":"List every loan subtype. Industry-standard reference data,\nglobally scoped (not tenant-partitioned). Matches Polly's\n`/api/v1/loan_subtypes/` envelope shape.","operationId":"list_subtypes_api_v1_admin_internal_loan_subtypes_get","parameters":[{"name":"program_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: conv | fha | va | usda | non_qm | jumbo","title":"Program Type"},"description":"Filter: conv | fha | va | usda | non_qm | jumbo"},{"name":"is_streamline","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Streamline"}},{"name":"is_renovation","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Renovation"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loan-subtypes/by-code/{code}":{"get":{"tags":["loan-subtypes"],"summary":"Look up a loan subtype by its code (e.g. 'HomeReady')","operationId":"get_subtype_by_code_api_v1_admin_internal_loan_subtypes_by_code__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loan-subtypes/{subtype_id}":{"get":{"tags":["loan-subtypes"],"summary":"Look up a loan subtype by numeric id","operationId":"get_subtype_api_v1_admin_internal_loan_subtypes__subtype_id__get","parameters":[{"name":"subtype_id","in":"path","required":true,"schema":{"type":"integer","title":"Subtype Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loan-subtypes/program-types/summary":{"get":{"tags":["loan-subtypes"],"summary":"Count of subtypes grouped by program_type","description":"Small rollup used by UI selectors. Returns a dict mapping each\nprogram_type → count of subtypes in that program.","operationId":"program_type_summary_api_v1_admin_internal_loan_subtypes_program_types_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/ai/personas/":{"get":{"tags":["ai-personas"],"summary":"List Personas","description":"List personas visible to this tenant. Always includes system\npersonas (tenant_id NULL) unless explicitly excluded — they're\neffectively shared read-only reference data.","operationId":"list_personas_api_v1_admin_internal_ai_personas__get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}},{"name":"include_system","in":"query","required":false,"schema":{"type":"boolean","description":"Include the 5 system personas (lo_copilot, etc.)","default":true,"title":"Include System"},"description":"Include the 5 system personas (lo_copilot, etc.)"},{"name":"include_custom","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Custom"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ai-personas"],"summary":"Create Custom Persona","description":"Create a tenant-custom persona. is_system is always false; slug\nmust be unique within this tenant (system-persona slugs don't\nconflict — tenant-custom always shadows system with the same slug\nvia _resolve_persona_by_slug's precedence).","operationId":"create_custom_persona_api_v1_admin_internal_ai_personas__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonaCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/personas":{"get":{"tags":["ai-personas"],"summary":"List Personas","description":"List personas visible to this tenant. Always includes system\npersonas (tenant_id NULL) unless explicitly excluded — they're\neffectively shared read-only reference data.","operationId":"list_personas_api_v1_admin_internal_ai_personas_get","parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}},{"name":"include_system","in":"query","required":false,"schema":{"type":"boolean","description":"Include the 5 system personas (lo_copilot, etc.)","default":true,"title":"Include System"},"description":"Include the 5 system personas (lo_copilot, etc.)"},{"name":"include_custom","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Custom"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["ai-personas"],"summary":"Create Custom Persona","description":"Create a tenant-custom persona. is_system is always false; slug\nmust be unique within this tenant (system-persona slugs don't\nconflict — tenant-custom always shadows system with the same slug\nvia _resolve_persona_by_slug's precedence).","operationId":"create_custom_persona_api_v1_admin_internal_ai_personas_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonaCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/personas/by-slug/{slug}":{"get":{"tags":["ai-personas"],"summary":"Get Persona By Slug","operationId":"get_persona_by_slug_api_v1_admin_internal_ai_personas_by_slug__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/personas/by-slug/{slug}/tools":{"get":{"tags":["ai-personas"],"summary":"Get Persona Tools","description":"Return the OpenAI/Anthropic-compatible tool schema filtered to\nthe persona's tool_names. Callers use this to bootstrap an agent\nwith the right role-scoped toolset.","operationId":"get_persona_tools_api_v1_admin_internal_ai_personas_by_slug__slug__tools_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/personas/{persona_id}":{"get":{"tags":["ai-personas"],"summary":"Get Persona","operationId":"get_persona_api_v1_admin_internal_ai_personas__persona_id__get","parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["ai-personas"],"summary":"Update Custom Persona","operationId":"update_custom_persona_api_v1_admin_internal_ai_personas__persona_id__patch","parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonaPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ai-personas"],"summary":"Delete Custom Persona","operationId":"delete_custom_persona_api_v1_admin_internal_ai_personas__persona_id__delete","parameters":[{"name":"persona_id","in":"path","required":true,"schema":{"type":"string","title":"Persona Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/compliance-status/":{"get":{"tags":["compliance-attestations-public"],"summary":"Public Compliance Status","description":"Unauthenticated read of compliance posture. Returns:\n  * `platform`: NachoCrunch platform-level attestations (always)\n  * `tenant`: tenant-scoped attestations IFF tenant_id provided AND\n    is_public=True for that tenant; absent / opted-out → null\n\nNo auth required. Rate-limited at the app layer.","operationId":"public_compliance_status_api_v1_public_compliance_status__get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional tenant_id to look up tenant-scoped attestations. Omit for platform-only response.","title":"Tenant Id"},"description":"Optional tenant_id to look up tenant-scoped attestations. Omit for platform-only response."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/compliance-status":{"get":{"tags":["compliance-attestations-public"],"summary":"Public Compliance Status","description":"Unauthenticated read of compliance posture. Returns:\n  * `platform`: NachoCrunch platform-level attestations (always)\n  * `tenant`: tenant-scoped attestations IFF tenant_id provided AND\n    is_public=True for that tenant; absent / opted-out → null\n\nNo auth required. Rate-limited at the app layer.","operationId":"public_compliance_status_api_v1_public_compliance_status_get","parameters":[{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional tenant_id to look up tenant-scoped attestations. Omit for platform-only response.","title":"Tenant Id"},"description":"Optional tenant_id to look up tenant-scoped attestations. Omit for platform-only response."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/attestations":{"get":{"tags":["compliance-attestations"],"summary":"Get Internal Attestations","description":"Authenticated retrieval — includes is_public flag + audit fields.\nReturns a defaulted-empty shape if no row exists yet.","operationId":"get_internal_attestations_api_v1_admin_internal_compliance_attestations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["compliance-attestations"],"summary":"Upsert Attestations","description":"Upsert this tenant's compliance attestations. Validates SOC 2 /\nISO 27001 / pen-test cadence enums + URL/email field lengths.","operationId":"upsert_attestations_api_v1_admin_internal_compliance_attestations_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttestationUpsert"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/rate-tables/{tenant_id}/current":{"get":{"tags":["rate-tables-public"],"summary":"Public Rate Table","description":"Unauthenticated read of a tenant's published rate table.\nComputes best-ex at the configured baseline scenario for each\npublished (loan_type, lock_days) product, returns top 3 investors'\n(rate_pct, base_price, net_price) per product.\n\nResponses cache in-memory for the tenant's configured\nrefresh_cadence_seconds to protect the pricing engine from scrape\nabuse. Downstream partners get stable, fast JSON.","operationId":"public_rate_table_api_v1_public_rate_tables__tenant_id__current_get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-tables/config":{"get":{"tags":["rate-tables"],"summary":"Get Config","operationId":"get_config_api_v1_admin_internal_rate_tables_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["rate-tables"],"summary":"Put Config","operationId":"put_config_api_v1_admin_internal_rate_tables_config_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateTableConfigUpsert"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/notes/":{"get":{"tags":["notes"],"summary":"List Notes","description":"List notes with flexible filters.\n\nOrdering: pinned notes first, then created_at desc. Soft-deleted\nnotes excluded by default — use include_deleted=true to see them.","operationId":"list_notes_api_v1_admin_internal_notes__get","parameters":[{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"entity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"only_pinned","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Pinned"}},{"name":"visibility","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a specific visibility tier","title":"Visibility"},"description":"Filter to a specific visibility tier"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["notes"],"summary":"Create Note","operationId":"create_note_api_v1_admin_internal_notes__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/notes":{"get":{"tags":["notes"],"summary":"List Notes","description":"List notes with flexible filters.\n\nOrdering: pinned notes first, then created_at desc. Soft-deleted\nnotes excluded by default — use include_deleted=true to see them.","operationId":"list_notes_api_v1_admin_internal_notes_get","parameters":[{"name":"entity_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"}},{"name":"entity_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Id"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}},{"name":"only_pinned","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Only Pinned"}},{"name":"visibility","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a specific visibility tier","title":"Visibility"},"description":"Filter to a specific visibility tier"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["notes"],"summary":"Create Note","operationId":"create_note_api_v1_admin_internal_notes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/notes/{note_id}":{"get":{"tags":["notes"],"summary":"Get Note","operationId":"get_note_api_v1_admin_internal_notes__note_id__get","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Deleted"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["notes"],"summary":"Update Note","operationId":"update_note_api_v1_admin_internal_notes__note_id__patch","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NotePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["notes"],"summary":"Delete Note","description":"Soft-delete a note (sets deleted_at + deleted_by). Preserves the\nrow for audit. Subsequent GETs return 404 unless include_deleted=true.","operationId":"delete_note_api_v1_admin_internal_notes__note_id__delete","parameters":[{"name":"note_id","in":"path","required":true,"schema":{"type":"string","title":"Note Id"}},{"name":"deleted_by_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deleted By Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/string-value-groups/groups":{"get":{"tags":["string-value-groups"],"summary":"List Groups","operationId":"list_groups_api_v1_admin_internal_string_value_groups_groups_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"}}}}}},"post":{"tags":["string-value-groups"],"summary":"Create Group","operationId":"create_group_api_v1_admin_internal_string_value_groups_groups_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/string-value-groups/groups/{slug}":{"get":{"tags":["string-value-groups"],"summary":"Get Group","operationId":"get_group_api_v1_admin_internal_string_value_groups_groups__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"include_entries","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Entries"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["string-value-groups"],"summary":"Update Group","operationId":"update_group_api_v1_admin_internal_string_value_groups_groups__slug__patch","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["string-value-groups"],"summary":"Delete Group","operationId":"delete_group_api_v1_admin_internal_string_value_groups_groups__slug__delete","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/string-value-groups/groups/{slug}/entries":{"get":{"tags":["string-value-groups"],"summary":"List Entries","operationId":"list_entries_api_v1_admin_internal_string_value_groups_groups__slug__entries_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"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"}}}}}},"post":{"tags":["string-value-groups"],"summary":"Create Entry","operationId":"create_entry_api_v1_admin_internal_string_value_groups_groups__slug__entries_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/string-value-groups/groups/{slug}/entries/{entry_value}":{"patch":{"tags":["string-value-groups"],"summary":"Update Entry","operationId":"update_entry_api_v1_admin_internal_string_value_groups_groups__slug__entries__entry_value__patch","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"entry_value","in":"path","required":true,"schema":{"type":"string","title":"Entry Value"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EntryPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["string-value-groups"],"summary":"Delete Entry","operationId":"delete_entry_api_v1_admin_internal_string_value_groups_groups__slug__entries__entry_value__delete","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"entry_value","in":"path","required":true,"schema":{"type":"string","title":"Entry Value"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/string-value-groups/groups/{slug}/validate":{"get":{"tags":["string-value-groups"],"summary":"Validate Value","description":"Check if a value is a current, active entry in the group.\n\nReturns {valid: bool, reason: str, entry: {...} | null}. Callers\n(pricing rules, doc-gen templates, workflow policies) use this to\nvalidate user input against the current enum state.","operationId":"validate_value_api_v1_admin_internal_string_value_groups_groups__slug__validate_get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}},{"name":"value","in":"query","required":true,"schema":{"type":"string","title":"Value"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/fee-rules/rules":{"get":{"tags":["fee-rules"],"summary":"List Rules","operationId":"list_rules_api_v1_admin_internal_fee_rules_rules_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"}}}}}},"post":{"tags":["fee-rules"],"summary":"Create Rule","operationId":"create_rule_api_v1_admin_internal_fee_rules_rules_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_fee_rules__RuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/fee-rules/rules/{code}":{"get":{"tags":["fee-rules"],"summary":"Get Rule","operationId":"get_rule_api_v1_admin_internal_fee_rules_rules__code__get","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["fee-rules"],"summary":"Update Rule","operationId":"update_rule_api_v1_admin_internal_fee_rules_rules__code__patch","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_fee_rules__RulePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["fee-rules"],"summary":"Delete Rule","operationId":"delete_rule_api_v1_admin_internal_fee_rules_rules__code__delete","parameters":[{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/fee-rules/evaluate":{"post":{"tags":["fee-rules"],"summary":"Evaluate Rules","description":"Return every active, in-scope fee rule's computed amount.\n\nRules are evaluated in priority order (lower = earlier). Returns\n{applicable_fees: [...], skipped_rules: [...], total_usd}.","operationId":"evaluate_rules_api_v1_admin_internal_fee_rules_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_fee_rules__EvaluateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/census-tract-anomaly/scan":{"post":{"tags":["compliance-census-tract-anomaly"],"summary":"Run a census-tract anomaly scan for a filing year","description":"Score every bucket (county / state / tract) against the tenant\nbaseline for `filing_year`. Flagged buckets produce finding rows\nwith metric + z-score + severity. Tight coupling to LAR status:\nonly records with a non-null action_taken contribute rates.","operationId":"run_scan_api_v1_admin_internal_compliance_census_tract_anomaly_scan_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/census-tract-anomaly/scans":{"get":{"tags":["compliance-census-tract-anomaly"],"summary":"List recent census-tract anomaly scans","operationId":"list_scans_api_v1_admin_internal_compliance_census_tract_anomaly_scans_get","parameters":[{"name":"filing_year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":2100,"minimum":2020},{"type":"null"}],"title":"Filing Year"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/compliance/census-tract-anomaly/scans/{scan_id}":{"get":{"tags":["compliance-census-tract-anomaly"],"summary":"Scan detail including the full findings list","operationId":"get_scan_api_v1_admin_internal_compliance_census_tract_anomaly_scans__scan_id__get","parameters":[{"name":"scan_id","in":"path","required":true,"schema":{"type":"string","title":"Scan Id"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter findings by severity (low|medium|high)","title":"Severity"},"description":"Filter findings by severity (low|medium|high)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mission-score-tiers":{"get":{"tags":["mission-score-tiers"],"summary":"List Tiers","description":"List mission-score tiers. Optionally filter by investor + agency.","operationId":"list_tiers_api_v1_admin_internal_mission_score_tiers_get","parameters":[{"name":"investor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"}},{"name":"agency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mission-score-tiers"],"summary":"Create Tier","operationId":"create_tier_api_v1_admin_internal_mission_score_tiers_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mission-score-tiers/{tier_id}":{"get":{"tags":["mission-score-tiers"],"summary":"Get Tier","operationId":"get_tier_api_v1_admin_internal_mission_score_tiers__tier_id__get","parameters":[{"name":"tier_id","in":"path","required":true,"schema":{"type":"string","title":"Tier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["mission-score-tiers"],"summary":"Patch Tier","operationId":"patch_tier_api_v1_admin_internal_mission_score_tiers__tier_id__patch","parameters":[{"name":"tier_id","in":"path","required":true,"schema":{"type":"string","title":"Tier Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TierPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mission-score-tiers"],"summary":"Delete Tier","operationId":"delete_tier_api_v1_admin_internal_mission_score_tiers__tier_id__delete","parameters":[{"name":"tier_id","in":"path","required":true,"schema":{"type":"string","title":"Tier Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/classify-fee":{"post":{"tags":["trid"],"summary":"Classify Fee","description":"Classify a single fee label against CFPB Appendix C tolerance\nbuckets. Read-only; no DB access.","operationId":"classify_fee_api_v1_admin_internal_trid_classify_fee_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/classify-fees":{"post":{"tags":["trid"],"summary":"Classify Fees","description":"Classify a batch of items. Returns the items annotated with\n``tolerance_bucket`` (when matched) and ``_classification`` debug\nmetadata, plus a per-bucket count summary.","operationId":"classify_fees_api_v1_admin_internal_trid_classify_fees_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeeBatchClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/classify-blob":{"post":{"tags":["trid"],"summary":"Classify Blob Endpoint","description":"Walk a closing-costs-shaped JSONB blob and classify every\nitem-shaped dict in place. Returns the new blob; preserves any\nexisting ``tolerance_bucket`` tags. Read-only.","operationId":"classify_blob_endpoint_api_v1_admin_internal_trid_classify_blob_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlobClassifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates":{"post":{"tags":["trid"],"summary":"Create Loan Estimate","operationId":"create_loan_estimate_api_v1_admin_internal_trid_loan_estimates_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanEstimateCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["trid"],"summary":"List Loan Estimates","operationId":"list_loan_estimates_api_v1_admin_internal_trid_loan_estimates_get","parameters":[{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates/at-risk":{"get":{"tags":["trid"],"summary":"List At Risk Loan Estimates","description":"List LEs flagged as NOT compliant with the TRID 3-business-day-\nafter-application rule. Includes only issued (or post-issue) LEs\nwith both application_date and issued_at populated.\n\nRoute ordering: literal MUST appear before /loan-estimates/{le_id}\nor FastAPI's catch-all matcher would treat \"at-risk\" as an le_id\n(CLAUDE.md §4.4).","operationId":"list_at_risk_loan_estimates_api_v1_admin_internal_trid_loan_estimates_at_risk_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates/{le_id}":{"get":{"tags":["trid"],"summary":"Get Loan Estimate","operationId":"get_loan_estimate_api_v1_admin_internal_trid_loan_estimates__le_id__get","parameters":[{"name":"le_id","in":"path","required":true,"schema":{"type":"string","title":"Le Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["trid"],"summary":"Patch Loan Estimate","operationId":"patch_loan_estimate_api_v1_admin_internal_trid_loan_estimates__le_id__patch","parameters":[{"name":"le_id","in":"path","required":true,"schema":{"type":"string","title":"Le Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanEstimatePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates/{le_id}/issue":{"post":{"tags":["trid"],"summary":"Issue Loan Estimate","description":"Transition draft → issued. Records issued_at for the 3-business-\nday delivery rule (enforcement deferred to follow-up).","operationId":"issue_loan_estimate_api_v1_admin_internal_trid_loan_estimates__le_id__issue_post","parameters":[{"name":"le_id","in":"path","required":true,"schema":{"type":"string","title":"Le Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates/{le_id}/generate-pdf":{"post":{"tags":["trid"],"summary":"Generate Loan Estimate Pdf Endpoint","description":"Render the LE as a CFPB-form-organized PDF and persist the bytes.\n\nCaller can re-run this endpoint at any time; each call replaces\n``pdf_bytes`` and stamps ``pdf_generated_at``. Compliance status\n(3-BD-after-application rule) is included in the rendered PDF\nwhen application_date + issued_at are both populated.","operationId":"generate_loan_estimate_pdf_endpoint_api_v1_admin_internal_trid_loan_estimates__le_id__generate_pdf_post","parameters":[{"name":"le_id","in":"path","required":true,"schema":{"type":"string","title":"Le Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates/{le_id}/pdf":{"get":{"tags":["trid"],"summary":"Get Loan Estimate Pdf","description":"Returns the persisted LE PDF inline (Content-Type application/pdf).\n\nReturns 404 with a hint to call /generate-pdf if the row exists but\npdf_bytes hasn't been rendered yet — distinguishing missing-resource\nfrom never-rendered is useful for callers driving a UI download\nbutton.","operationId":"get_loan_estimate_pdf_api_v1_admin_internal_trid_loan_estimates__le_id__pdf_get","parameters":[{"name":"le_id","in":"path","required":true,"schema":{"type":"string","title":"Le Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/loan-estimates/{le_id}/auto-classify":{"post":{"tags":["trid"],"summary":"Auto Classify Loan Estimate","description":"Auto-tag every line item in this LE's ``closing_costs_json``\nthat lacks a ``tolerance_bucket``, using the CFPB-Appendix-C\nclassifier. Items already tagged by a human are preserved.\n\n``dry_run=true`` returns the proposed blob + classification\nsummary without persisting; the default mutates the LE and\nfires a ``loan_estimate.updated`` event. Only allowed in\n``draft`` or ``revised_pending`` status (mirrors PATCH).","operationId":"auto_classify_loan_estimate_api_v1_admin_internal_trid_loan_estimates__le_id__auto_classify_post","parameters":[{"name":"le_id","in":"path","required":true,"schema":{"type":"string","title":"Le Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoClassifyRequest","default":{"dry_run":false}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures":{"post":{"tags":["trid"],"summary":"Create Closing Disclosure","operationId":"create_closing_disclosure_api_v1_admin_internal_trid_closing_disclosures_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClosingDisclosureCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["trid"],"summary":"List Closing Disclosures","operationId":"list_closing_disclosures_api_v1_admin_internal_trid_closing_disclosures_get","parameters":[{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}},{"name":"le_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Le Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/{cd_id}/tolerance-cure":{"get":{"tags":["trid"],"summary":"Get Cd Tolerance Cure","description":"Compute the TRID tolerance-cure amount required for this CD vs\nits governing LE per 12 CFR § 1026.19(f)(2)(v). If cd.le_id is set,\nwe use that as the governing LE; otherwise fall back to the most\nrecent LE on the same loan_id; if neither exists, returns\ncure_required=None.\n\nRoute ordering: this literal nested path is fine — it's longer\nthan /{cd_id} so FastAPI's prefix-matching handles it correctly,\nbut place it BEFORE /{cd_id} for safety/consistency.","operationId":"get_cd_tolerance_cure_api_v1_admin_internal_trid_closing_disclosures__cd_id__tolerance_cure_get","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/cure-required":{"get":{"tags":["trid"],"summary":"List Cure Required Closing Disclosures","description":"List CDs requiring a tolerance cure per 12 CFR § 1026.19(f)(2)(v).\n\nFor each issued (or post-issue) CD with a resolvable governing LE,\ncomputes the per-bucket cure obligation. Returns only CDs whose\ncure_required is True, sorted by cure_amount descending so the\nbiggest obligations float to the top of the compliance officer's\nwork queue. Includes the per-bucket breakdown for each row so the\nUI can render the breakdown without an extra round-trip.\n\nRoute ordering: literal MUST appear before /closing-disclosures/{cd_id}.","operationId":"list_cure_required_closing_disclosures_api_v1_admin_internal_trid_closing_disclosures_cure_required_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/at-risk":{"get":{"tags":["trid"],"summary":"List At Risk Closing Disclosures","description":"List CDs flagged as NOT compliant with the TRID 3-business-day\nrule. Includes only issued (not draft) CDs with both issued_at and\nclosing_date populated — the only ones whose compliance can be\ndeterministically evaluated. Sorted soonest-closing first so the\nmost urgent appear at the top of a compliance dashboard.\n\nRoute ordering: this literal MUST appear before /closing-disclosures/\n{cd_id} or FastAPI's declaration-order matcher would treat the\nstring \"at-risk\" as a cd_id (CLAUDE.md §4.4).","operationId":"list_at_risk_closing_disclosures_api_v1_admin_internal_trid_closing_disclosures_at_risk_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/{cd_id}":{"get":{"tags":["trid"],"summary":"Get Closing Disclosure","operationId":"get_closing_disclosure_api_v1_admin_internal_trid_closing_disclosures__cd_id__get","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["trid"],"summary":"Patch Closing Disclosure","operationId":"patch_closing_disclosure_api_v1_admin_internal_trid_closing_disclosures__cd_id__patch","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClosingDisclosurePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/{cd_id}/issue":{"post":{"tags":["trid"],"summary":"Issue Closing Disclosure","description":"Transition draft → issued. Records issued_at for the 3-business-\nday-before-consummation rule (enforcement deferred to follow-up).","operationId":"issue_closing_disclosure_api_v1_admin_internal_trid_closing_disclosures__cd_id__issue_post","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/{cd_id}/generate-pdf":{"post":{"tags":["trid"],"summary":"Generate Closing Disclosure Pdf Endpoint","description":"Render the CD as a CFPB-form-organized PDF and persist the bytes.\n\nResolves the governing LE the same way /tolerance-cure does (explicit\nle_id link → newest LE on same loan → none) and passes it to the\ngenerator so the page-2 cost-detail table renders the LE-vs-Final\ncomparison columns. Both the 3-BD-before-consummation rule status\nand the tolerance-cure result are embedded in the internal-use\ncompliance section at the back of the PDF.","operationId":"generate_closing_disclosure_pdf_endpoint_api_v1_admin_internal_trid_closing_disclosures__cd_id__generate_pdf_post","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/{cd_id}/pdf":{"get":{"tags":["trid"],"summary":"Get Closing Disclosure Pdf","description":"Returns the persisted CD PDF inline (Content-Type application/pdf).","operationId":"get_closing_disclosure_pdf_api_v1_admin_internal_trid_closing_disclosures__cd_id__pdf_get","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/trid/closing-disclosures/{cd_id}/auto-classify":{"post":{"tags":["trid"],"summary":"Auto Classify Closing Disclosure","description":"Auto-tag every line item in this CD's ``closing_costs_json`` per\nCFPB Appendix C. Preserves human-set ``tolerance_bucket`` values.\n\nThe response also recomputes ``tolerance_cure`` against the\ngoverning LE so the caller can see in one round-trip whether the\nfresh classification triggers a cure obligation per § 1026.19(f)(2)(v).","operationId":"auto_classify_closing_disclosure_api_v1_admin_internal_trid_closing_disclosures__cd_id__auto_classify_post","parameters":[{"name":"cd_id","in":"path","required":true,"schema":{"type":"string","title":"Cd Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoClassifyRequest","default":{"dry_run":false}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reusable-grids/grids":{"get":{"tags":["reusable-grids"],"summary":"List Grids","operationId":"list_grids_api_v1_admin_internal_reusable_grids_grids_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"}}}}}},"post":{"tags":["reusable-grids"],"summary":"Create Grid","operationId":"create_grid_api_v1_admin_internal_reusable_grids_grids_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reusable-grids/grids/{slug}":{"get":{"tags":["reusable-grids"],"summary":"Get Grid","operationId":"get_grid_api_v1_admin_internal_reusable_grids_grids__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["reusable-grids"],"summary":"Update Grid","operationId":"update_grid_api_v1_admin_internal_reusable_grids_grids__slug__patch","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GridPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reusable-grids"],"summary":"Delete Grid","operationId":"delete_grid_api_v1_admin_internal_reusable_grids_grids__slug__delete","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reusable-grids/grids/{slug}/lookup":{"post":{"tags":["reusable-grids"],"summary":"Lookup Grid","description":"Resolve an (x_value, y_value) pair to an adjustment bps reading\nfrom the named grid. Returns the resolved axis indices and a\nhuman-readable bucket label for audit.","operationId":"lookup_grid_api_v1_admin_internal_reusable_grids_grids__slug__lookup_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buyer-auto-bid-rules/rules":{"get":{"tags":["buyer-auto-bid-rules"],"summary":"List Rules","operationId":"list_rules_api_v1_admin_internal_buyer_auto_bid_rules_rules_get","parameters":[{"name":"investor_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"}},{"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"}}}}}},"post":{"tags":["buyer-auto-bid-rules"],"summary":"Create Rule","operationId":"create_rule_api_v1_admin_internal_buyer_auto_bid_rules_rules_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_buyer_auto_bid_rules__RuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buyer-auto-bid-rules/rules/{investor_id}/{slug}":{"get":{"tags":["buyer-auto-bid-rules"],"summary":"Get Rule","operationId":"get_rule_api_v1_admin_internal_buyer_auto_bid_rules_rules__investor_id___slug__get","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["buyer-auto-bid-rules"],"summary":"Update Rule","operationId":"update_rule_api_v1_admin_internal_buyer_auto_bid_rules_rules__investor_id___slug__patch","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_buyer_auto_bid_rules__RulePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["buyer-auto-bid-rules"],"summary":"Delete Rule","operationId":"delete_rule_api_v1_admin_internal_buyer_auto_bid_rules_rules__investor_id___slug__delete","parameters":[{"name":"investor_id","in":"path","required":true,"schema":{"type":"string","title":"Investor Id"}},{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buyer-auto-bid-rules/evaluate":{"post":{"tags":["buyer-auto-bid-rules"],"summary":"Evaluate Rules","description":"Return every active rule (optionally filtered to a specific\ninvestor) that matches the loan context, in priority order.\nEach match emits a bid snapshot: {adjustment_bps, final_price,\nfee_usd, commit_time_days}.","operationId":"evaluate_rules_api_v1_admin_internal_buyer_auto_bid_rules_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_buyer_auto_bid_rules__EvaluateBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/prepay-penalty/lock-requests/{lock_request_id}/prepay-penalty":{"get":{"tags":["prepay-penalty"],"summary":"Get Schedule","operationId":"get_schedule_api_v1_admin_internal_prepay_penalty_lock_requests__lock_request_id__prepay_penalty_get","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["prepay-penalty"],"summary":"Put Schedule","operationId":"put_schedule_api_v1_admin_internal_prepay_penalty_lock_requests__lock_request_id__prepay_penalty_put","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchedulePutBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["prepay-penalty"],"summary":"Delete Schedule","operationId":"delete_schedule_api_v1_admin_internal_prepay_penalty_lock_requests__lock_request_id__prepay_penalty_delete","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/prepay-penalty/compute":{"post":{"tags":["prepay-penalty"],"summary":"Compute Penalty","description":"What-if preview: given a schedule + prepay context, return the\napplicable penalty_pct + dollar amount. Used by LO dashboards to\nanswer 'what would my borrower owe if they paid off in year N?'.\nNo DB write; no auth required beyond tenant hook if present.","operationId":"compute_penalty_api_v1_admin_internal_prepay_penalty_compute_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComputePenaltyBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/writeback-dashboard/dashboard":{"get":{"tags":["writeback-dashboard"],"summary":"Get Dashboard","description":"Return a single JSON blob summarizing writeback health for the\ntenant. Response shape:\n\n  {\n    \"generated_at\": ISO-8601,\n    \"window_hours\": N,\n    \"overall\": {\n      \"by_status\": {pending: N, succeeded: N, failed: N, retrying: N},\n      \"total\": N,\n      \"failure_rate_in_window\": 0.0 .. 1.0,\n      \"successes_in_window\": N,\n      \"failures_in_window\": N,\n      \"oldest_pending_seconds\": N | null,\n    },\n    \"by_system\": [\n      {\n        \"target_system\": str,\n        \"by_status\": {pending: N, ...},\n        \"total\": N,\n        \"latest_attempt_at\": ISO | null,\n      },\n      ...\n    ],\n    \"recent_failures\": [writeback_row, ...],\n  }","operationId":"get_dashboard_api_v1_admin_internal_writeback_dashboard_dashboard_get","parameters":[{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"description":"Rolling window (in hours) over which failure rate and recent-activity counts are computed. Default 24h.","default":24,"title":"Window Hours"},"description":"Rolling window (in hours) over which failure rate and recent-activity counts are computed. Default 24h."},{"name":"recent_failures_limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Recent Failures Limit"}},{"name":"target_system","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target System"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/writeback-dashboard/recent-failures":{"get":{"tags":["writeback-dashboard"],"summary":"List Recent Failures","description":"Paginated list of the most recent failed writebacks. Lighter\nthan the full dashboard; useful for a dedicated triage view.","operationId":"list_recent_failures_api_v1_admin_internal_writeback_dashboard_recent_failures_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"target_system","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target System"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/agency-products":{"get":{"tags":["agency-products"],"summary":"List Products","operationId":"list_products_api_v1_admin_internal_agency_products_get","parameters":[{"name":"agency_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":9999,"minimum":1},{"type":"null"}],"title":"Agency Id"}},{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"}},{"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"}}}}}},"post":{"tags":["agency-products"],"summary":"Create Product","operationId":"create_product_api_v1_admin_internal_agency_products_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_agency_products__ProductCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/agency-products/lookup":{"get":{"tags":["agency-products"],"summary":"Lookup Product","operationId":"lookup_product_api_v1_admin_internal_agency_products_lookup_get","parameters":[{"name":"agency_id","in":"query","required":true,"schema":{"type":"integer","maximum":9999,"minimum":1,"title":"Agency Id"}},{"name":"code","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":16,"title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/agency-products/{agency_id}/{code}":{"patch":{"tags":["agency-products"],"summary":"Update Product","operationId":"update_product_api_v1_admin_internal_agency_products__agency_id___code__patch","parameters":[{"name":"agency_id","in":"path","required":true,"schema":{"type":"integer","title":"Agency Id"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agency-products"],"summary":"Delete Product","operationId":"delete_product_api_v1_admin_internal_agency_products__agency_id___code__delete","parameters":[{"name":"agency_id","in":"path","required":true,"schema":{"type":"integer","title":"Agency Id"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/approval-delegations/delegations":{"get":{"tags":["approval-delegations"],"summary":"List Delegations","operationId":"list_delegations_api_v1_admin_internal_approval_delegations_delegations_get","parameters":[{"name":"from_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"From Account Id"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["approval-delegations"],"summary":"Create Delegation","operationId":"create_delegation_api_v1_admin_internal_approval_delegations_delegations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_approval_delegations__DelegationCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/approval-delegations/delegations/active-for/{account_id}":{"get":{"tags":["approval-delegations"],"summary":"Active Delegations For","operationId":"active_delegations_for_api_v1_admin_internal_approval_delegations_delegations_active_for__account_id__get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}},{"name":"at_time","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At Time"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/approval-delegations/delegations/resolve":{"post":{"tags":["approval-delegations"],"summary":"Resolve Effective Approver","description":"Walk the delegation chain for (original_approver, scope,\nat_time) and return the effective approver + the chain +\nhop count + a truncated flag if we hit a cycle or the max\nhop limit.","operationId":"resolve_effective_approver_api_v1_admin_internal_approval_delegations_delegations_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResolveBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/approval-delegations/delegations/{delegation_id}":{"get":{"tags":["approval-delegations"],"summary":"Get Delegation","operationId":"get_delegation_api_v1_admin_internal_approval_delegations_delegations__delegation_id__get","parameters":[{"name":"delegation_id","in":"path","required":true,"schema":{"type":"string","title":"Delegation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["approval-delegations"],"summary":"Update Delegation","operationId":"update_delegation_api_v1_admin_internal_approval_delegations_delegations__delegation_id__patch","parameters":[{"name":"delegation_id","in":"path","required":true,"schema":{"type":"string","title":"Delegation Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DelegationPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["approval-delegations"],"summary":"Delete Delegation","operationId":"delete_delegation_api_v1_admin_internal_approval_delegations_delegations__delegation_id__delete","parameters":[{"name":"delegation_id","in":"path","required":true,"schema":{"type":"string","title":"Delegation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/market/rate-matrix":{"get":{"tags":["market"],"summary":"Market Rate Matrix","description":"2D matrix of median net prices by (rate_pct × lock_days) across ALL active sheets.\n\nLimits to the 20 most common rate_pct values to keep things readable.","operationId":"market_rate_matrix_api_v1_admin_internal_market_rate_matrix_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/market/movement":{"get":{"tags":["market"],"summary":"Market Movement","description":"Per-investor price movement vs. the most-recent superseded sheet within window.\n\nReturns investors sorted by abs(delta_bps) desc — biggest movers first.","operationId":"market_movement_api_v1_admin_internal_market_movement_get","parameters":[{"name":"window_hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":24,"title":"Window Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/market/summary":{"get":{"tags":["market"],"summary":"Market Summary","description":"High-level market stats for the top of the Market View.","operationId":"market_summary_api_v1_admin_internal_market_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/market/history":{"get":{"tags":["market"],"summary":"Market History","description":"Historical per-investor median price from daily_snapshots.","operationId":"market_history_api_v1_admin_internal_market_history_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/benchmarks":{"get":{"tags":["mbs"],"summary":"List Benchmarks","operationId":"list_benchmarks_api_v1_admin_internal_mbs_benchmarks_get","parameters":[{"name":"is_favorite","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mbs"],"summary":"Create Benchmark","operationId":"create_benchmark_api_v1_admin_internal_mbs_benchmarks_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/benchmarks/{benchmark_id}":{"patch":{"tags":["mbs"],"summary":"Patch Benchmark","operationId":"patch_benchmark_api_v1_admin_internal_mbs_benchmarks__benchmark_id__patch","parameters":[{"name":"benchmark_id","in":"path","required":true,"schema":{"type":"string","title":"Benchmark Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/benchmarks/{benchmark_id}/favorite":{"post":{"tags":["mbs"],"summary":"Toggle Favorite","operationId":"toggle_favorite_api_v1_admin_internal_mbs_benchmarks__benchmark_id__favorite_post","parameters":[{"name":"benchmark_id","in":"path","required":true,"schema":{"type":"string","title":"Benchmark Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/bids":{"get":{"tags":["mbs"],"summary":"List Bids","operationId":"list_bids_api_v1_admin_internal_mbs_bids_get","parameters":[{"name":"benchmark_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark Id"}},{"name":"hours_back","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":24,"title":"Hours Back"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mbs"],"summary":"Ingest Bids","operationId":"ingest_bids_api_v1_admin_internal_mbs_bids_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BidIn"},"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/bids/ingest-bulk":{"post":{"tags":["mbs"],"summary":"Ingest Bulk","description":"Batch ingest — same shape as /bids, but explicit endpoint for external feeds.","operationId":"ingest_bulk_api_v1_admin_internal_mbs_bids_ingest_bulk_post","requestBody":{"content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BidIn"},"type":"array","title":"Body"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/bids/current":{"get":{"tags":["mbs"],"summary":"Bids Current","description":"Latest bid per (benchmark_id, period_index) for this tenant.","operationId":"bids_current_api_v1_admin_internal_mbs_bids_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/mbs/bids/trend":{"get":{"tags":["mbs"],"summary":"Bids Trend","operationId":"bids_trend_api_v1_admin_internal_mbs_bids_trend_get","parameters":[{"name":"benchmark_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark Id"}},{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":720,"minimum":1,"default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/overrides":{"get":{"tags":["mbs"],"summary":"List Overrides","operationId":"list_overrides_api_v1_admin_internal_mbs_overrides_get","parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mbs"],"summary":"Create Override","operationId":"create_override_api_v1_admin_internal_mbs_overrides_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverrideCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/overrides/{override_id}":{"patch":{"tags":["mbs"],"summary":"Patch Override","operationId":"patch_override_api_v1_admin_internal_mbs_overrides__override_id__patch","parameters":[{"name":"override_id","in":"path","required":true,"schema":{"type":"string","title":"Override Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverridePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mbs"],"summary":"Delete Override","operationId":"delete_override_api_v1_admin_internal_mbs_overrides__override_id__delete","parameters":[{"name":"override_id","in":"path","required":true,"schema":{"type":"string","title":"Override Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/transactions":{"get":{"tags":["mbs"],"summary":"List Transactions","operationId":"list_transactions_api_v1_admin_internal_mbs_transactions_get","parameters":[{"name":"direction","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Direction"}},{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mbs"],"summary":"Create Transaction","operationId":"create_transaction_api_v1_admin_internal_mbs_transactions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransactionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/transactions/net-position":{"get":{"tags":["mbs"],"summary":"Net Position","description":"Aggregate net long/short by benchmark (buy notional - sell notional).","operationId":"net_position_api_v1_admin_internal_mbs_transactions_net_position_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/mbs/transactions/pnl":{"get":{"tags":["mbs"],"summary":"Transactions Pnl","description":"Daily P&L summary: realized P&L approx = sell_proceeds - buy_cost per day.\n\nThis is a simple aggregation, not mark-to-market. For deeper P&L modeling,\npair off buys and sells explicitly via `related_tx_id`.","operationId":"transactions_pnl_api_v1_admin_internal_mbs_transactions_pnl_get","parameters":[{"name":"from","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"From"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/market-summary":{"get":{"tags":["mbs"],"summary":"Market Summary","description":"Dashboard-ready aggregate for the TBA Market view.","operationId":"market_summary_api_v1_admin_internal_mbs_market_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/mbs/investor-usage/refresh":{"post":{"tags":["mbs"],"summary":"Refresh Investor Usage","description":"Aggregate mbs_bids into per-(investor, coupon) rollups for the period.\n\nReplaces existing rows for the same (tenant, period_start, period_end).","operationId":"refresh_investor_usage_api_v1_admin_internal_mbs_investor_usage_refresh_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestorUsageRefresh"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/investor-usage":{"get":{"tags":["mbs"],"summary":"List Investor Usage","operationId":"list_investor_usage_api_v1_admin_internal_mbs_investor_usage_get","parameters":[{"name":"period_start","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Period Start"}},{"name":"period_end","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Period End"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mbs/investor-usage/summary":{"get":{"tags":["mbs"],"summary":"Investor Usage Summary","description":"Top-10 investors by quote count and by total volume across all periods.","operationId":"investor_usage_summary_api_v1_admin_internal_mbs_investor_usage_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/pricing/bulk":{"post":{"tags":["bulk-pricing"],"summary":"Bulk pricing across many scenarios","description":"Authenticated bulk pricing — for API consumers' LO pipelines.\n\nRate-limited per key. Returns ranked results for every scenario in\nparallel using asyncio.gather.","operationId":"bulk_pricing_api_v1_pricing_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkPricingRequest"}}},"required":true},"responses":{"200":{"description":"Per-scenario ranked results.","content":{"application/json":{"schema":{},"example":{"scenario_count":2,"results":[{"scenario_id":"s1","best":{"investor_name":"UWM","net_price":"101.500"}},{"scenario_id":"s2","best":{"investor_name":"PennyMac","net_price":"100.875"}}]}}}},"413":{"description":"Too many scenarios (max 5,000 per request)."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/pricing/internal/bulk":{"post":{"tags":["bulk-pricing-internal"],"summary":"Internal bulk pricing (no auth)","description":"Internal bulk pricing (no auth) — for dashboard.","operationId":"bulk_pricing_internal_api_v1_pricing_internal_bulk_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkPricingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks":{"get":{"tags":["webhooks"],"summary":"List webhook subscriptions","operationId":"list_webhooks_api_v1_admin_internal_webhooks_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["webhooks"],"summary":"Register a webhook subscription","description":"Register a new webhook subscription. Returns the signing secret ONCE.","operationId":"create_webhook_api_v1_admin_internal_webhooks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateWebhookRequest"}}},"required":true},"responses":{"200":{"description":"Subscription created. Signing secret returned ONCE.","content":{"application/json":{"schema":{},"example":{"subscription_id":"wh_01HX...","name":"LOS lock listener","target_url":"https://los.example.com/hooks/nachocrunch","event_types":["lock.lock_approved","lock.lock_rejected"],"signing_secret":"whsec_aBc12..."}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks/{webhook_id}":{"delete":{"tags":["webhooks"],"summary":"Delete a webhook subscription","operationId":"delete_webhook_api_v1_admin_internal_webhooks__webhook_id__delete","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks/{webhook_id}/deliveries":{"get":{"tags":["webhooks"],"summary":"Webhook delivery log","operationId":"webhook_deliveries_api_v1_admin_internal_webhooks__webhook_id__deliveries_get","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks/events/supported":{"get":{"tags":["webhooks"],"summary":"List supported webhook events","description":"List all event types an integration can subscribe to.","operationId":"supported_events_api_v1_admin_internal_webhooks_events_supported_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/webhooks/{webhook_id}/test":{"post":{"tags":["webhooks"],"summary":"Send a test event to a webhook","description":"Send a test ping event to verify delivery.","operationId":"test_webhook_api_v1_admin_internal_webhooks__webhook_id__test_post","parameters":[{"name":"webhook_id","in":"path","required":true,"schema":{"type":"string","title":"Webhook Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks/events/catalog":{"get":{"tags":["webhooks"],"summary":"Full webhook event catalog","description":"Return every catalog entry grouped by category.\n\nFilters: ``category``, ``include_deprecated`` (default true),\n``include_beta`` (default true).","operationId":"webhook_event_catalog_api_v1_admin_internal_webhooks_events_catalog_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"include_deprecated","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Deprecated"}},{"name":"include_beta","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Include Beta"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks/events/categories":{"get":{"tags":["webhooks"],"summary":"Webhook event categories with counts","operationId":"webhook_event_categories_api_v1_admin_internal_webhooks_events_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/webhooks/events/catalog/{event_type}":{"get":{"tags":["webhooks"],"summary":"Single webhook event catalog entry","operationId":"webhook_event_catalog_detail_api_v1_admin_internal_webhooks_events_catalog__event_type__get","parameters":[{"name":"event_type","in":"path","required":true,"schema":{"type":"string","title":"Event Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/webhooks/events/validate":{"post":{"tags":["webhooks"],"summary":"Validate a payload against a catalog entry's schema","description":"Lightweight JSON-Schema-ish validator.\n\nWe don't pull in a full JSON-Schema engine — instead we check that the\npayload is an object, top-level required keys are present, and basic\ntype-matches hold. Good enough for integration partners to spot obvious\nmistakes before wiring up production webhooks.","operationId":"webhook_event_validate_api_v1_admin_internal_webhooks_events_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans":{"post":{"tags":["loans"],"summary":"Create a loan record","description":"Create a pre-approved loan.","operationId":"create_loan_api_v1_admin_internal_loans_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["loans"],"summary":"List loans","description":"List loans, optionally filtered by status and/or LO account.","operationId":"list_loans_api_v1_admin_internal_loans_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"lo_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lo Account Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/manager":{"get":{"tags":["loans"],"summary":"Loan manager list view","description":"Manager-friendly bulk view for the Loan Manager UI.","operationId":"manager_list_api_v1_admin_internal_loans_manager_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"owner","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/manager/bulk-edit":{"post":{"tags":["loans"],"summary":"Bulk-edit loans","description":"Apply the same updates to many loans in one shot.\n\nReturns per-loan results so the UI can show which succeeded and which\nfailed validation.","operationId":"manager_bulk_edit_api_v1_admin_internal_loans_manager_bulk_edit_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanManagerBulkEdit"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/manager/bulk-export":{"post":{"tags":["loans"],"summary":"Manager Bulk Export","description":"Export a set of loans as CSV. Accepts either explicit loan_ids or a\nfilter dict ({status, owner_account_id}).","operationId":"manager_bulk_export_api_v1_admin_internal_loans_manager_bulk_export_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanManagerBulkExport"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/analytics/pull-through":{"get":{"tags":["loans"],"summary":"Pull Through Analytics","description":"Pull-through rate per investor — THE KPI for closed-loop learning.\n\npull_through = funded_count / locked_count\n\n\"locked_count\" includes any loan that ever reached the locked stage —\ni.e. status IN (locked, funded, fell_out, repurchased). Cancelled loans\nare excluded because they never produced a lock with that investor.\n\nShows which investors not only price well but also actually deliver loans\nto the closing table — combining execution quality with operational\nfollow-through.","operationId":"pull_through_analytics_api_v1_admin_internal_loans_analytics_pull_through_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/loans/my-pipeline":{"get":{"tags":["loans"],"summary":"My Pipeline — loans for the current LO","description":"LO-scoped pipeline + summary stats.","operationId":"my_pipeline_early_api_v1_admin_internal_loans_my_pipeline_get","parameters":[{"name":"lo_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"LO account id","title":"Lo Account Id"},"description":"LO account id"},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Search"}},{"name":"expiring_within_days","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Expiring Within Days"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/{loan_id}":{"get":{"tags":["loans"],"summary":"Get Loan","description":"Get a single loan.","operationId":"get_loan_api_v1_admin_internal_loans__loan_id__get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/{loan_id}/lock":{"post":{"tags":["loans"],"summary":"Lock Loan","description":"Lock the rate with a chosen investor. Snapshots pricing so it doesn't\ndrift if the underlying sheet changes later.","operationId":"lock_loan_api_v1_admin_internal_loans__loan_id__lock_post","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanLock"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/{loan_id}/fund":{"post":{"tags":["loans"],"summary":"Fund Loan","description":"Mark the loan as funded. Captures actual price at funding (may differ\nfrom locked price if extensions or exceptions were applied).","operationId":"fund_loan_api_v1_admin_internal_loans__loan_id__fund_post","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanFund"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/{loan_id}/fall-out":{"post":{"tags":["loans"],"summary":"Fall Out Loan","description":"Borrower walked. Records the reason for fallout-rate analytics.","operationId":"fall_out_loan_api_v1_admin_internal_loans__loan_id__fall_out_post","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanFallOut"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/{loan_id}/cancel":{"post":{"tags":["loans"],"summary":"Cancel Loan","description":"Cancel the loan before funding. Allowed from any non-terminal status.","operationId":"cancel_loan_api_v1_admin_internal_loans__loan_id__cancel_post","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoanCancel"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/loans/{loan_id}/timeline":{"get":{"tags":["loans"],"summary":"Loan timeline — merged status transitions + lock events","description":"Return a chronological timeline of events for this loan.\n\nMerges:\n  1. Loan status transitions (created, locked, funded, fell_out, cancelled)\n     from the loan row itself.\n  2. lock_request_events rows where the lock_request is tied to this loan.","operationId":"loan_timeline_api_v1_admin_internal_loans__loan_id__timeline_get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/lock":{"post":{"tags":["lock-requests"],"summary":"Submit a primary lock request","description":"Primary lock request.","operationId":"submit_lock_api_v1_admin_internal_lock_requests_lock_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Lock request created.","content":{"application/json":{"schema":{},"example":{"lock_request_id":"lr_01HX8K9P3F","request_type":"lock","loan_id":"ln_01HX7V2J0A","status":"submitted","submitted_at":"2026-04-14T13:12:00Z","requested_by_account_id":"acct_user_42","type_details":{"product":"CONV_30YR","rate_pct":6.5,"lock_days":30}}}}},"422":{"description":"Invalid body / missing loan."}}}},"/api/v1/admin/internal/lock-requests/extension":{"post":{"tags":["lock-requests"],"summary":"Submit a lock extension","description":"Extend existing lock. type_details: {days_requested, fee}","operationId":"submit_extension_api_v1_admin_internal_lock_requests_extension_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/float-down":{"post":{"tags":["lock-requests"],"summary":"Submit a float-down request","description":"Capture rate improvement. type_details: {previous_rate, new_rate, delta_bps}","operationId":"submit_float_down_api_v1_admin_internal_lock_requests_float_down_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/price-exception":{"post":{"tags":["lock-requests"],"summary":"Submit a price-exception request","description":"Request concession. type_details: {concession_bps, reason_code, reason_notes}","operationId":"submit_price_exception_api_v1_admin_internal_lock_requests_price_exception_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/product-change":{"post":{"tags":["lock-requests"],"summary":"Submit a product-change request","description":"Switch product mid-lock. type_details: {old_product, new_product, reason}","operationId":"submit_product_change_api_v1_admin_internal_lock_requests_product_change_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/relock":{"post":{"tags":["lock-requests"],"summary":"Submit a relock request","description":"Relock after expiration. type_details: {previous_lock_id}","operationId":"submit_relock_api_v1_admin_internal_lock_requests_relock_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/reset":{"post":{"tags":["lock-requests"],"summary":"Reset lock to current market","description":"Reset lock to current market.","operationId":"submit_reset_api_v1_admin_internal_lock_requests_reset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/cancellation":{"post":{"tags":["lock-requests"],"summary":"Cancel an existing lock","description":"Cancel existing lock. type_details: {reason}","operationId":"submit_cancellation_api_v1_admin_internal_lock_requests_cancellation_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/float":{"post":{"tags":["lock-requests"],"summary":"Register a float (unlocked pipeline position)","description":"Register a float (unlocked pipeline position).","operationId":"submit_float_api_v1_admin_internal_lock_requests_float_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockRequestBase"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests":{"get":{"tags":["lock-requests"],"summary":"List lock requests","description":"List lock requests with optional filters.","operationId":"list_lock_requests_api_v1_admin_internal_lock_requests_get","parameters":[{"name":"request_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Type"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/queue/action-required":{"get":{"tags":["lock-requests"],"summary":"Queue Action Required","description":"Manager's live 'needs my review' queue — all non-terminal requests,\npriority-sorted (oldest first), with SLA aging buckets.","operationId":"queue_action_required_api_v1_admin_internal_lock_requests_queue_action_required_get","parameters":[{"name":"request_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Request Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/queue/action-required/count":{"get":{"tags":["lock-requests"],"summary":"Queue Action Required Count","description":"Just the badge count — lightweight for polling.","operationId":"queue_action_required_count_api_v1_admin_internal_lock_requests_queue_action_required_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/lock-requests/queue/action-required/summary":{"get":{"tags":["lock-requests"],"summary":"Queue Action Required Summary","description":"Grouped-by-type counts for the queue.","operationId":"queue_action_required_summary_api_v1_admin_internal_lock_requests_queue_action_required_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/lock-requests/lock-desk-settings":{"get":{"tags":["lock-requests"],"summary":"Get Lock Desk Settings","description":"Return the tenant's lock-desk settings, lazily creating a row\nwith defaults the first time it's requested. The default\n``only_use_calendar_for_extensions=False`` matches Polly's default\n(lock-extension days are interpreted as business days).","operationId":"get_lock_desk_settings_api_v1_admin_internal_lock_requests_lock_desk_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"tags":["lock-requests"],"summary":"Patch Lock Desk Settings","description":"Update the tenant's lock-desk settings. Only fields the caller\nsends (via populate_by_name + exclude_unset) are touched. Lazily\ncreates the row if absent.","operationId":"patch_lock_desk_settings_api_v1_admin_internal_lock_requests_lock_desk_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockDeskSettingsPatchBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}":{"get":{"tags":["lock-requests"],"summary":"Get Lock Request","description":"Get a single lock request.","operationId":"get_lock_request_api_v1_admin_internal_lock_requests__lock_request_id__get","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/history":{"get":{"tags":["lock-requests"],"summary":"Lock Request History","description":"Audit trail for a single lock request.","operationId":"lock_request_history_api_v1_admin_internal_lock_requests__lock_request_id__history_get","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/approve":{"post":{"tags":["lock-requests"],"summary":"Approve (or counter) a lock request","description":"Approve a lock request. If counter_details is supplied, records a\ncounter-offer and sets status=countered instead.","operationId":"approve_lock_request_api_v1_admin_internal_lock_requests__lock_request_id__approve_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveBody"}}}},"responses":{"200":{"description":"Lock request updated.","content":{"application/json":{"schema":{},"example":{"lock_request_id":"lr_01HX8K9P3F","status":"approved","approved_at":"2026-04-14T13:14:00Z","approver_name":"Jane Operator"}}}},"404":{"description":"Lock request not found."},"409":{"description":"Lock request already in a terminal status."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/reject":{"post":{"tags":["lock-requests"],"summary":"Reject a lock request","description":"Reject a lock request with a reason.","operationId":"reject_lock_request_api_v1_admin_internal_lock_requests__lock_request_id__reject_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectBody"}}}},"responses":{"200":{"description":"Lock request marked rejected.","content":{"application/json":{"schema":{}}}},"404":{"description":"Lock request not found."},"409":{"description":"Lock request already in a terminal status."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/counter":{"post":{"tags":["lock-requests"],"summary":"Counter Lock Request","description":"Record an explicit counter-offer on a lock request.","operationId":"counter_lock_request_api_v1_admin_internal_lock_requests__lock_request_id__counter_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_lock_requests__CounterBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/counter-split":{"post":{"tags":["lock-requests"],"summary":"Counter Split Price Exception","description":"Split counter-offer on a price-exception lock request.\n\nThe reviewer accepts `accepted_concession_bps` and declines\n`rejected_concession_bps`. Both values are persisted into\n`counter_details` as a structured object so the audit trail\nreconstructs the full negotiation.\n\nPolly flag parity: `price_exception_split_counter_offer` flipped ON\nat paying tenants per v8 auth refresh. Only valid on\n`request_type == 'price_exception'` — returns 400 on other types.\nTerminal-status requests return 409 (no re-counter).","operationId":"counter_split_price_exception_api_v1_admin_internal_lock_requests__lock_request_id__counter_split_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitCounterBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/float-down-draft":{"post":{"tags":["lock-requests"],"summary":"Save Float Down Draft","description":"Save a draft counter adjustment on a float-down request.\n\nOnly valid on `request_type='float_down'` AND non-terminal status.\nDraft lives in `type_details['draft_adjustments']` so the core\nstatus machine stays untouched — reviewer can save, leave, return\nlater without locking the record. Each save overwrites the prior\ndraft (single-slot per request).","operationId":"save_float_down_draft_api_v1_admin_internal_lock_requests__lock_request_id__float_down_draft_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FloatDownDraftBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["lock-requests"],"summary":"Get Float Down Draft","description":"Retrieve the current draft (or 404 if none saved).","operationId":"get_float_down_draft_api_v1_admin_internal_lock_requests__lock_request_id__float_down_draft_get","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["lock-requests"],"summary":"Clear Float Down Draft","description":"Clear any saved draft on this float-down request.","operationId":"clear_float_down_draft_api_v1_admin_internal_lock_requests__lock_request_id__float_down_draft_delete","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/cancel":{"post":{"tags":["lock-requests"],"summary":"Cancel Lock Request","description":"Cancel a lock request (by the original requester).","operationId":"cancel_lock_request_api_v1_admin_internal_lock_requests__lock_request_id__cancel_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/reset-lock":{"post":{"tags":["lock-requests"],"summary":"Submit Lock Reset","description":"Submit a lock_reset request — reset an existing lock to today's market.\n\ntype_details stores {original_lock_id, new_lock_period_days}; the reason\nis persisted both in reset_reason column (for reporting) and in\ntype_details for backwards compatibility with the JSON-first readers.","operationId":"submit_lock_reset_api_v1_admin_internal_lock_requests_reset_lock_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockResetBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/reviewal-info":{"get":{"tags":["lock-requests"],"summary":"Reviewal Info","description":"Full packet for the reviewer UI: the request, prior versions on the\nsame loan, related loan context, current SLA clock and a recommendation.","operationId":"reviewal_info_api_v1_admin_internal_lock_requests__lock_request_id__reviewal_info_get","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/reviewal/approve":{"post":{"tags":["lock-requests"],"summary":"Reviewal Approve","description":"Reviewer approval (parallel to /approve but emits a reviewal-scoped event).","operationId":"reviewal_approve_api_v1_admin_internal_lock_requests__lock_request_id__reviewal_approve_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewalApproveBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/reviewal/reject":{"post":{"tags":["lock-requests"],"summary":"Reviewal Reject","description":"Reviewer rejection (parallel to /reject).","operationId":"reviewal_reject_api_v1_admin_internal_lock_requests__lock_request_id__reviewal_reject_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewalRejectBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-requests/{lock_request_id}/reviewal/info-request":{"post":{"tags":["lock-requests"],"summary":"Reviewal Info Request","description":"Reviewer asks the requester for more information. Sets status=awaiting_info.","operationId":"reviewal_info_request_api_v1_admin_internal_lock_requests__lock_request_id__reviewal_info_request_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReviewalInfoRequestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs":{"post":{"tags":["pricing-configs"],"summary":"Create Config","description":"Create a new pricing configuration.","operationId":"create_config_api_v1_admin_internal_pricing_configs_configs_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["pricing-configs"],"summary":"List Configs","description":"List pricing configurations.","operationId":"list_configs_api_v1_admin_internal_pricing_configs_configs_get","parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"channel","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"}},{"name":"is_template","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Template"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}":{"get":{"tags":["pricing-configs"],"summary":"Get Config","description":"Get a config with counts of child resources.","operationId":"get_config_api_v1_admin_internal_pricing_configs_configs__config_id__get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["pricing-configs"],"summary":"Update Config","description":"Update fields on a pricing configuration.","operationId":"update_config_api_v1_admin_internal_pricing_configs_configs__config_id__patch","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pricing-configs"],"summary":"Delete Config","description":"Soft delete: set is_active=false.","operationId":"delete_config_api_v1_admin_internal_pricing_configs_configs__config_id__delete","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/clone":{"post":{"tags":["pricing-configs"],"summary":"Clone Config","description":"Duplicate a config and all of its child resources.","operationId":"clone_config_api_v1_admin_internal_pricing_configs_configs__config_id__clone_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/products":{"get":{"tags":["pricing-configs"],"summary":"List Products","operationId":"list_products_api_v1_admin_internal_pricing_configs_configs__config_id__products_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Product","operationId":"create_product_api_v1_admin_internal_pricing_configs_configs__config_id__products_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_configs__ProductCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/products/{product_id}":{"patch":{"tags":["pricing-configs"],"summary":"Update Product","operationId":"update_product_api_v1_admin_internal_pricing_configs_configs__config_id__products__product_id__patch","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pricing-configs"],"summary":"Delete Product","operationId":"delete_product_api_v1_admin_internal_pricing_configs_configs__config_id__products__product_id__delete","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/rule-groups":{"get":{"tags":["pricing-configs"],"summary":"List Rule Groups","operationId":"list_rule_groups_api_v1_admin_internal_pricing_configs_configs__config_id__rule_groups_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Rule Group","operationId":"create_rule_group_api_v1_admin_internal_pricing_configs_configs__config_id__rule_groups_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleGroupCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/rule-groups/{group_id}/rules":{"get":{"tags":["pricing-configs"],"summary":"List Rules","operationId":"list_rules_api_v1_admin_internal_pricing_configs_configs__config_id__rule_groups__group_id__rules_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Rule","operationId":"create_rule_api_v1_admin_internal_pricing_configs_configs__config_id__rule_groups__group_id__rules_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"group_id","in":"path","required":true,"schema":{"type":"string","title":"Group Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_configs__RuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/spreads":{"get":{"tags":["pricing-configs"],"summary":"List Spreads","operationId":"list_spreads_api_v1_admin_internal_pricing_configs_configs__config_id__spreads_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Spread","operationId":"create_spread_api_v1_admin_internal_pricing_configs_configs__config_id__spreads_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SpreadCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/par-rate-grids":{"get":{"tags":["pricing-configs"],"summary":"List Par Rate Grids","operationId":"list_par_rate_grids_api_v1_admin_internal_pricing_configs_configs__config_id__par_rate_grids_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Par Rate Grid","operationId":"create_par_rate_grid_api_v1_admin_internal_pricing_configs_configs__config_id__par_rate_grids_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParRateGridCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/custom-parameters":{"get":{"tags":["pricing-configs"],"summary":"List Custom Parameters","operationId":"list_custom_parameters_api_v1_admin_internal_pricing_configs_configs__config_id__custom_parameters_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Custom Parameter","operationId":"create_custom_parameter_api_v1_admin_internal_pricing_configs_configs__config_id__custom_parameters_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomParameterCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/workflow-policies":{"get":{"tags":["pricing-configs"],"summary":"List Workflow Policies","operationId":"list_workflow_policies_api_v1_admin_internal_pricing_configs_configs__config_id__workflow_policies_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Workflow Policy","operationId":"create_workflow_policy_api_v1_admin_internal_pricing_configs_configs__config_id__workflow_policies_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WorkflowPolicyCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/channels":{"get":{"tags":["pricing-configs"],"summary":"List Channels","description":"List channels on a pricing config.","operationId":"list_channels_api_v1_admin_internal_pricing_configs_configs__config_id__channels_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pricing-configs"],"summary":"Create Channel","description":"Create a channel on a pricing config.\n\nEach (config_id, kind) must be unique, so the default seed covers the\nfour standard kinds — additional creates are only allowed when a kind\nis missing (e.g. after a manual delete).","operationId":"create_channel_api_v1_admin_internal_pricing_configs_configs__config_id__channels_post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/channels/{channel_id}":{"get":{"tags":["pricing-configs"],"summary":"Get Channel","operationId":"get_channel_api_v1_admin_internal_pricing_configs_configs__config_id__channels__channel_id__get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["pricing-configs"],"summary":"Update Channel","operationId":"update_channel_api_v1_admin_internal_pricing_configs_configs__config_id__channels__channel_id__patch","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pricing-configs"],"summary":"Delete Channel","description":"Hard delete a channel. Products/rules that referenced it get channel_id NULL\n(via ON DELETE SET NULL).","operationId":"delete_channel_api_v1_admin_internal_pricing_configs_configs__config_id__channels__channel_id__delete","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/channels/{channel_id}/products":{"get":{"tags":["pricing-configs"],"summary":"List Channel Products","operationId":"list_channel_products_api_v1_admin_internal_pricing_configs_configs__config_id__channels__channel_id__products_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/channels/{channel_id}/rules":{"get":{"tags":["pricing-configs"],"summary":"List Channel Rules","operationId":"list_channel_rules_api_v1_admin_internal_pricing_configs_configs__config_id__channels__channel_id__rules_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/channels/{channel_id}/inherited-rules":{"get":{"tags":["pricing-configs"],"summary":"List Inherited Rules","description":"Inherited rules — those not assigned to any channel, so they apply to\nevery channel on this config (including this one).","operationId":"list_inherited_rules_api_v1_admin_internal_pricing_configs_configs__config_id__channels__channel_id__inherited_rules_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"path","required":true,"schema":{"type":"string","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/audience-scoped-products":{"get":{"tags":["pricing-configs"],"summary":"List Audience Scoped Products","description":"Products filtered by audience (channel). If no channel_id is given,\nreturns every product on the config (same as /products) but annotates\neach row with its audience (channel) for clarity in the UI.","operationId":"list_audience_scoped_products_api_v1_admin_internal_pricing_configs_configs__config_id__audience_scoped_products_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"channel_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/products/{product_id}/inherited-rules":{"get":{"tags":["pricing-configs"],"summary":"List Product Inherited Rules","description":"Rules that apply to this product by inheritance.\n\nInheritance sources (annotated on every returned row):\n  - 'channel': rule.channel_id matches the product's channel_id\n  - 'all':     rule.channel_id IS NULL (applies to every channel)\n  - 'product': rule.criteria filters on product's category /\n               loan_program_code (so it's product-scoped)","operationId":"list_product_inherited_rules_api_v1_admin_internal_pricing_configs_configs__config_id__products__product_id__inherited_rules_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/rules/{rule_id}/visibility":{"get":{"tags":["pricing-configs"],"summary":"List Rule Visibility","description":"Return all visibility rows for this rule (all-partners row + per-partner rows).","operationId":"list_rule_visibility_api_v1_admin_internal_pricing_configs_configs__config_id__rules__rule_id__visibility_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["pricing-configs"],"summary":"Put Rule Visibility","description":"Replace all visibility rows for this rule with the supplied set.\n\nbody.default_visible → applies to the \"all partners\" row (partner_id NULL).\nbody.partner_overrides → list of per-partner rows.","operationId":"put_rule_visibility_api_v1_admin_internal_pricing_configs_configs__config_id__rules__rule_id__visibility_put","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityPutBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pricing-configs/configs/{config_id}/rules/{rule_id}/visibility/partner/{partner_id}":{"post":{"tags":["pricing-configs"],"summary":"Set Rule Visibility For Partner","description":"Upsert a single partner's visibility for this rule.","operationId":"set_rule_visibility_for_partner_api_v1_admin_internal_pricing_configs_configs__config_id__rules__rule_id__visibility_partner__partner_id__post","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"name":"partner_id","in":"path","required":true,"schema":{"type":"string","title":"Partner Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VisibilityPartnerBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pricing-configs"],"summary":"Delete Rule Visibility For Partner","description":"Remove a partner-specific override. Partner reverts to the default row.","operationId":"delete_rule_visibility_for_partner_api_v1_admin_internal_pricing_configs_configs__config_id__rules__rule_id__visibility_partner__partner_id__delete","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}},{"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/v1/admin/internal/pricing-configs/configs/{config_id}/visibility-summary":{"get":{"tags":["pricing-configs"],"summary":"Visibility Summary","description":"Return a matrix (rules × partners) of visibility state for the config.\n\nResponse:\n  {\n    \"rules\":    [{rule_id, name, default_visible}, ...],\n    \"partners\": [partner_id, ...],\n    \"matrix\":   { rule_id: { partner_id: {is_visible, reason} } }\n  }","operationId":"visibility_summary_api_v1_admin_internal_pricing_configs_configs__config_id__visibility_summary_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/rule-tool":{"post":{"tags":["pricing-engine"],"summary":"Rule Tool Dry Run","description":"Dry-run a single rule against a scenario.\n\nMVP approach:\n  1. Pull the rule and compute its adjustment_bps from action JSON.\n  2. Evaluate its criteria against the scenario (boolean match).\n  3. Compute a baseline price via best_execution for the scenario.\n  4. Apply the rule only if it matches — before/after reflect that.","operationId":"rule_tool_dry_run_api_v1_admin_internal_pe_rule_tool_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleToolRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleToolResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/pricer/calc-pricing-fields":{"post":{"tags":["pricing-engine"],"summary":"Calc Pricing Fields","description":"Compute every derived field the pricing UI needs from a partial loan dict.\n\nPure computation — no DB writes. Uses County lookup if state+county\nprovided. Returns {resolved: {...}, inputs_used: {...}} so the caller\ncan render the form with derived values populated.","operationId":"calc_pricing_fields_api_v1_admin_internal_pe_pricer_calc_pricing_fields_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CalcFieldsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/pricer/expire-pricing":{"post":{"tags":["pricing-engine"],"summary":"Expire Pricing","description":"Admin nuke button: mark matching rate sheets stale + wipe caches.","operationId":"expire_pricing_api_v1_admin_internal_pe_pricer_expire_pricing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExpirePricingRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/scenario-analysis":{"post":{"tags":["pricing-engine"],"summary":"Scenario Analysis","description":"Single-scenario, Polly-shaped analysis: per-investor eligibility + price.\n\nReuses compute_best_execution for the numbers, then reshapes into the\n\"investors: [...]\" structure with near-miss hints for eliminated investors.","operationId":"scenario_analysis_api_v1_admin_internal_pe_scenario_analysis_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScenarioAnalysisRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/base-rate-requests":{"post":{"tags":["pricing-engine"],"summary":"Queue a base-rate request; result resolved inline, audited as a row","description":"POST a pricing scenario → get back request_id + inline result.\nCompute runs synchronously (our best-ex is already fast enough that\nblocking on it is cheaper than an async queue), but the row + webhook\ngive integrations the option to stop blocking.","operationId":"create_base_rate_request_api_v1_admin_internal_pe_base_rate_requests_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseRateRequestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["pricing-engine"],"summary":"List recent base-rate requests (newest first)","operationId":"list_base_rate_requests_api_v1_admin_internal_pe_base_rate_requests_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/base-rate-requests/{request_id}":{"get":{"tags":["pricing-engine"],"summary":"Fetch a base-rate request by id","operationId":"get_base_rate_request_api_v1_admin_internal_pe_base_rate_requests__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/benchmark-rates/latest":{"get":{"tags":["pricing-engine"],"summary":"Latest SOFR/CMT benchmark rate set (Polly-shape)","description":"Return the most-recent benchmark rate set in Polly's exact shape.\nCross-tenant reference data (benchmark rates are public market data,\nnot tenant-scoped). Returns `{\"data\": {\"rates\": [{\"value\", \"code\"}]}}`.","operationId":"benchmark_rates_latest_api_v1_admin_internal_pe_benchmark_rates_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pe/latest-daily-rate-set":{"get":{"tags":["pricing-engine"],"summary":"Polly-compat alias for /benchmark-rates/latest","operationId":"latest_daily_rate_set_polly_compat_api_v1_admin_internal_pe_latest_daily_rate_set_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pe/benchmark-rates/upload":{"post":{"tags":["pricing-engine"],"summary":"Upsert benchmark rate observations (SOFR/CMT)","description":"Bulk-upsert benchmark rate observations. Idempotent on\n(as_of_date, code) — safe to re-POST the same day. Production source\nis the Fed H.15 daily release (SOFR via FRB NY, CMT via Treasury).","operationId":"benchmark_rates_upload_api_v1_admin_internal_pe_benchmark_rates_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkRateUpload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/near-miss/":{"post":{"tags":["pricing-engine"],"summary":"Polly-compat shim: single-endpoint near-miss (delegates to /eligibility)","description":"Polly ships ONE endpoint — `POST /pe/api/near-miss/` — for its\nnear-miss analysis. NachoCrunch's near-miss is a trilogy\n(`/eligibility`, `/pricing`, `/resolver`) for richer analytics. A\ndefecting Polly integration that posts to the bare `/near-miss`\npath otherwise 404s today.\n\nThis shim forwards to `/near-miss/eligibility` — the closest\nsemantic match (dimensional-unlock analysis is what Polly's single\nendpoint returns). The eligibility response shape is richer than\nPolly's but a superset-compatible: Polly clients read `status`,\n`gaps`, `suggestions`; we return all of those plus extras.\n\nUse `/near-miss/eligibility` directly for the canonical shape,\n`/near-miss/pricing` for LLPA-optimization, `/near-miss/resolver`\nfor multi-dimensional blocked-scenario resolution.","operationId":"near_miss_polly_compat_api_v1_admin_internal_pe_near_miss__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_engine__NearMissRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/near-miss":{"post":{"tags":["pricing-engine"],"summary":"Polly-compat shim: single-endpoint near-miss (delegates to /eligibility)","description":"Polly ships ONE endpoint — `POST /pe/api/near-miss/` — for its\nnear-miss analysis. NachoCrunch's near-miss is a trilogy\n(`/eligibility`, `/pricing`, `/resolver`) for richer analytics. A\ndefecting Polly integration that posts to the bare `/near-miss`\npath otherwise 404s today.\n\nThis shim forwards to `/near-miss/eligibility` — the closest\nsemantic match (dimensional-unlock analysis is what Polly's single\nendpoint returns). The eligibility response shape is richer than\nPolly's but a superset-compatible: Polly clients read `status`,\n`gaps`, `suggestions`; we return all of those plus extras.\n\nUse `/near-miss/eligibility` directly for the canonical shape,\n`/near-miss/pricing` for LLPA-optimization, `/near-miss/resolver`\nfor multi-dimensional blocked-scenario resolution.","operationId":"near_miss_polly_compat_api_v1_admin_internal_pe_near_miss_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_engine__NearMissRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/near-miss/eligibility":{"post":{"tags":["pricing-engine"],"summary":"Diagnose why a scenario failed best-ex + smallest unlock","description":"Run best-ex for the caller's scenario. If it returns zero\ninvestors (or a small count), probe ~9 alternative dimensional\nvariants to identify which dimension is blocking. Return structured\ngaps + actionable suggestions.\n\nStatus semantics:\n  * `eligible` — current scenario already returns >=1 investor\n  * `near_miss` — at least one probe unlocks investors\n  * `ineligible` — no probe unlocks investors (portfolio-level fit)\n\nEvery call fires `pricing.near_miss_analyzed`, giving downstream\nCRM / LO-copilot surfaces a hook to trigger borrower-outreach\nworkflows (\"your credit score needs to improve by N points...\").","operationId":"near_miss_eligibility_api_v1_admin_internal_pe_near_miss_eligibility_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_engine__NearMissRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/near-miss/pricing":{"post":{"tags":["pricing-engine"],"summary":"Diagnose LLPA drag + probe which change improves top net price","description":"For a scenario that already prices, diagnose which dimensional\nchange would most improve the top investor's net price.\n\nResponse:\n  * `status`: \"priced\" | \"no_pricing_to_optimize\" (→ hand off to M3.1)\n  * `current_top_investor`: top-ranked investor name + net_price\n  * `llpa_breakdown`: {category → adjustment} for the top investor\n  * `improvement_scenarios`: probes that improved net price by\n    >= MIN_MEANINGFUL_IMPROVEMENT_BPS (5 bps), sorted best-first\n  * `suggestions`: LO-facing actionable suggestions\n\nFires `pricing.near_miss_pricing_analyzed` with top-line metrics.","operationId":"near_miss_pricing_api_v1_admin_internal_pe_near_miss_pricing_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_engine__NearMissRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/near-miss/ineligibility":{"post":{"tags":["pricing-engine"],"summary":"Multi-dim ineligibility probe when single-dim unlock fails","description":"Deeper ineligibility diagnosis. If the caller's scenario returns\nzero investors AND single-dim probes also fail, probe ~13 PAIRS\nof dimensional relaxations to identify multi-change unlocks.\n\nStatus semantics:\n  * `already_priced` — scenario already has investors; hand off to\n    /near-miss/pricing for LLPA-optimization analysis\n  * `single_dim_unlock_available` — a single-dim probe unlocks the\n    scenario; hand off to /near-miss/eligibility for the one-change\n    recommendation (this endpoint's depth is unnecessary)\n  * `multi_dim_near_miss` — at least one pair probe unlocks the\n    scenario; returned as prioritized multi-change suggestions\n  * `fundamental_fit` — NO pair probe unlocks. Scenario is outside\n    the investor network's overlap — portfolio-level incompatibility\n    requiring a different investor pool, not a dimensional change\n\nPair probes run in parallel (asyncio.gather + fresh sessions per\nprobe), so latency scales with worst probe, not sum of all probes.","operationId":"near_miss_ineligibility_api_v1_admin_internal_pe_near_miss_ineligibility_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pricing_engine__NearMissRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/suggestion-actions/resolve":{"post":{"tags":["pricing-engine"],"summary":"Resolve a near-miss action code into concrete next-step guidance","description":"Map a machine-readable action code (emitted by the M3 trilogy)\nto specific LO-facing guidance: title, ordered next_steps, partner\nrefs, templated long-form message.\n\nUnknown codes return a generic passthrough shape (no 404) so\nagent compositions don't crash on new codes we add later. Context\nsubstitution is simple {{var}} replacement — missing context keys\nstay as literals (for the caller to backfill).","operationId":"resolve_suggestion_action_api_v1_admin_internal_pe_suggestion_actions_resolve_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionActionResolve"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe/suggestion-actions/catalog":{"get":{"tags":["pricing-engine"],"summary":"List every action code the resolver understands","description":"UI picker: enumerate every known action code + title for building\na help reference or a debug inspector.","operationId":"suggestion_actions_catalog_api_v1_admin_internal_pe_suggestion_actions_catalog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/disconnected-loans":{"get":{"tags":["pipeline-monitoring"],"summary":"List Disconnected Loans","description":"List disconnected loans. Defaults to unresolved only.","operationId":"list_disconnected_loans_api_v1_admin_internal_pipeline_monitoring_disconnected_loans_get","parameters":[{"name":"is_resolved","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"title":"Is Resolved"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pipeline-monitoring"],"summary":"Report Disconnected Loan","description":"Report a new LOS disconnect. Idempotent if external_loan_ref + los_system\nalready has an unresolved row — we just bump the attempt counter.","operationId":"report_disconnected_loan_api_v1_admin_internal_pipeline_monitoring_disconnected_loans_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectedLoanCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/disconnected-loans/count":{"get":{"tags":["pipeline-monitoring"],"summary":"Disconnected Loans Count","description":"Badge count for the dashboard — number of unresolved disconnects.","operationId":"disconnected_loans_count_api_v1_admin_internal_pipeline_monitoring_disconnected_loans_count_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/disconnected-loans/summary":{"get":{"tags":["pipeline-monitoring"],"summary":"Disconnected Loans Summary","description":"Aggregate unresolved disconnects by LOS system.","operationId":"disconnected_loans_summary_api_v1_admin_internal_pipeline_monitoring_disconnected_loans_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/disconnected-loans/{dl_id}/retry":{"post":{"tags":["pipeline-monitoring"],"summary":"Retry Disconnected Loan","description":"Trigger a reconnect attempt. Records the attempt timestamp — the actual\nreconnect is performed by the LOS adapter polling this counter or by the\ncaller hitting its own retry endpoint.","operationId":"retry_disconnected_loan_api_v1_admin_internal_pipeline_monitoring_disconnected_loans__dl_id__retry_post","parameters":[{"name":"dl_id","in":"path","required":true,"schema":{"type":"string","title":"Dl Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/disconnected-loans/{dl_id}/resolve":{"post":{"tags":["pipeline-monitoring"],"summary":"Resolve Disconnected Loan","description":"Mark a disconnect as resolved.","operationId":"resolve_disconnected_loan_api_v1_admin_internal_pipeline_monitoring_disconnected_loans__dl_id__resolve_post","parameters":[{"name":"dl_id","in":"path","required":true,"schema":{"type":"string","title":"Dl Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DisconnectedLoanResolve"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/los-status":{"get":{"tags":["pipeline-monitoring"],"summary":"List Los Status","description":"Current connection status per LOS system + account.","operationId":"list_los_status_api_v1_admin_internal_pipeline_monitoring_los_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/los-status/heartbeat":{"post":{"tags":["pipeline-monitoring"],"summary":"Los Heartbeat","description":"Upsert heartbeat from an LOS adapter.\n\nEmits los.connection_failed when we flip from connected -> failed and\nlos.connection_restored when we flip back from failed -> connected.","operationId":"los_heartbeat_api_v1_admin_internal_pipeline_monitoring_los_status_heartbeat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LosHeartbeat"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pipeline-monitoring/near-miss":{"post":{"tags":["pipeline-monitoring"],"summary":"Near Miss","description":"Explain why a scenario returned 0 best-execution hits.\n\nDedups by scenario fingerprint — if an identical scenario was analyzed\nwithin the last hour, we return the cached row to avoid re-scanning the\ninvestor pricing tables.","operationId":"near_miss_api_v1_admin_internal_pipeline_monitoring_near_miss_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pipeline_monitoring__NearMissRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["pipeline-monitoring"],"summary":"Near Miss Lookup","description":"Fetch the most recent cached near-miss analysis for a fingerprint.","operationId":"near_miss_lookup_api_v1_admin_internal_pipeline_monitoring_near_miss_get","parameters":[{"name":"scenario_fingerprint","in":"query","required":true,"schema":{"type":"string","minLength":8,"maxLength":64,"title":"Scenario Fingerprint"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ingestion/health":{"get":{"tags":["ingestion"],"summary":"Ingestion-pipeline freshness signal for the dashboard widget","operationId":"ingestion_health_api_v1_admin_internal_ingestion_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Ingestion Health Api V1 Admin Internal Ingestion Health Get"}}}}}}},"/api/v1/admin/internal/ingestion/quarantine":{"get":{"tags":["ingestion"],"summary":"List recent parses that didn't auto-publish for operator review","description":"Phase 3.2 visibility surface — see what dual-parse + validation rejected.\n\nEach record carries the parser outputs and reasons so the operator can\ndecide whether to approve, discard, or trigger an adapter build for the\ninvestor in question. The light-weight payload here intentionally omits\n`normalized_payload` (which can be large); fetch a single row by id for\nthe full content.","operationId":"list_quarantine_api_v1_admin_internal_ingestion_quarantine_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"verdict","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by verdict (needs_review/quarantined/rejected)","title":"Verdict"},"description":"Filter by verdict (needs_review/quarantined/rejected)"},{"name":"unresolved_only","in":"query","required":false,"schema":{"type":"boolean","description":"Only show parses awaiting operator decision","default":true,"title":"Unresolved Only"},"description":"Only show parses awaiting operator decision"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response List Quarantine Api V1 Admin Internal Ingestion Quarantine Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ingestion/quarantine/{quarantine_id}":{"get":{"tags":["ingestion"],"summary":"Full quarantine record including the parser output payload","operationId":"get_quarantine_record_api_v1_admin_internal_ingestion_quarantine__quarantine_id__get","parameters":[{"name":"quarantine_id","in":"path","required":true,"schema":{"type":"string","title":"Quarantine Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Get Quarantine Record Api V1 Admin Internal Ingestion Quarantine  Quarantine Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ingestion/quarantine/{quarantine_id}/resolve":{"post":{"tags":["ingestion"],"summary":"Operator action on a quarantine record (approve / discard / adapter_added)","description":"Operator decides what to do with a quarantined parse:\n\n* **approve** — re-runs publish_sheet against the stored normalized_payload,\n  treating it as if it had passed validation. Use when the parsed data is\n  good and the only reason it quarantined was confidence scoring.\n* **discard** — leaves the record marked resolved but does NOT publish.\n  Use when the parse is genuinely wrong / unusable.\n* **adapter_added** — same as discard for now, but tags the record so\n  future tooling can grep \"we built an adapter for this case\".","operationId":"resolve_quarantine_api_v1_admin_internal_ingestion_quarantine__quarantine_id__resolve_post","parameters":[{"name":"quarantine_id","in":"path","required":true,"schema":{"type":"string","title":"Quarantine Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuarantineResolveBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Resolve Quarantine Api V1 Admin Internal Ingestion Quarantine  Quarantine Id  Resolve Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards":{"get":{"tags":["mi"],"summary":"List Cards","description":"List all MI rate cards for the tenant.","operationId":"list_cards_api_v1_admin_internal_mi_rate_cards_cards_get","parameters":[{"name":"mi_provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Provider"}},{"name":"product_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mi"],"summary":"Create Card","description":"Create a new MI rate card (no versions yet).","operationId":"create_card_api_v1_admin_internal_mi_rate_cards_cards_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}":{"get":{"tags":["mi"],"summary":"Get Card","description":"Get a card with its current published version + premiums + rules.","operationId":"get_card_api_v1_admin_internal_mi_rate_cards_cards__card_id__get","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["mi"],"summary":"Update Card","description":"Update card metadata (name, provider, product_type, is_active).","operationId":"update_card_api_v1_admin_internal_mi_rate_cards_cards__card_id__patch","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mi"],"summary":"Delete Card","description":"Soft-delete by toggling is_active=false (preserves audit trail).","operationId":"delete_card_api_v1_admin_internal_mi_rate_cards_cards__card_id__delete","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions":{"post":{"tags":["mi"],"summary":"Create Version","description":"Create a new draft version, optionally cloning premiums+rules from another.","operationId":"create_version_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions_post","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VersionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["mi"],"summary":"List Versions","description":"List all versions of a card (newest first).","operationId":"list_versions_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions_get","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions/{version_id}":{"get":{"tags":["mi"],"summary":"Get Version","description":"Get a version with all premiums + rules.","operationId":"get_version_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__get","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions/{version_id}/publish":{"post":{"tags":["mi"],"summary":"Publish Version","description":"Publish a version: mark it published + flip card.current_version_id.","operationId":"publish_version_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__publish_post","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"published_by","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published By"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions/{version_id}/premiums":{"post":{"tags":["mi"],"summary":"Add Premium","description":"Add a premium row to a version.","operationId":"add_premium_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__premiums_post","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PremiumBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions/{version_id}/premiums/{premium_id}":{"patch":{"tags":["mi"],"summary":"Update Premium","description":"Edit an existing premium row.","operationId":"update_premium_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__premiums__premium_id__patch","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"premium_id","in":"path","required":true,"schema":{"type":"string","title":"Premium Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PremiumBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mi"],"summary":"Delete Premium","description":"Delete a premium row.","operationId":"delete_premium_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__premiums__premium_id__delete","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"premium_id","in":"path","required":true,"schema":{"type":"string","title":"Premium Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions/{version_id}/rules":{"post":{"tags":["mi"],"summary":"Add Rule","description":"Add an eligibility rule.","operationId":"add_rule_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__rules_post","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/cards/{card_id}/versions/{version_id}/rules/{rule_id}":{"patch":{"tags":["mi"],"summary":"Update Rule","description":"Edit an eligibility rule.","operationId":"update_rule_api_v1_admin_internal_mi_rate_cards_cards__card_id__versions__version_id__rules__rule_id__patch","parameters":[{"name":"card_id","in":"path","required":true,"schema":{"type":"string","title":"Card Id"}},{"name":"version_id","in":"path","required":true,"schema":{"type":"string","title":"Version Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/quote":{"post":{"tags":["mi"],"summary":"Quote MI premium for a borrower scenario","description":"Return the MI premium for a borrower scenario AND persist to mi_quotes.\n\nBody: {card_id, ltv, fico, term_months, property_type, occupancy, loan_purpose,\n       loan_amount?, state?, account_id?, mi_config_id?}\nResponse: {eligible, annual_premium_bps, upfront_premium_pct, coverage_pct,\n           reason_if_ineligible, quote_id}","operationId":"quote_api_v1_admin_internal_mi_rate_cards_quote_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteBody"}}},"required":true},"responses":{"200":{"description":"MI premium quote.","content":{"application/json":{"schema":{},"example":{"eligible":true,"annual_premium_bps":62,"upfront_premium_pct":0.0,"coverage_pct":25,"quote_id":"miq_01HX8P2..."}}}},"404":{"description":"MI card or configuration not found."},"422":{"description":"Invalid scenario."}}}},"/api/v1/admin/internal/mi-rate-cards/mi-configurations":{"get":{"tags":["mi"],"summary":"List Mi Configurations","description":"List all MI configurations for the tenant.","operationId":"list_mi_configurations_api_v1_admin_internal_mi_rate_cards_mi_configurations_get","parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"provider","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mi"],"summary":"Create Mi Configuration","description":"Create a new MI configuration.","operationId":"create_mi_configuration_api_v1_admin_internal_mi_rate_cards_mi_configurations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MiConfigCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/mi-configurations/{cfg_id}":{"get":{"tags":["mi"],"summary":"Get Mi Configuration","operationId":"get_mi_configuration_api_v1_admin_internal_mi_rate_cards_mi_configurations__cfg_id__get","parameters":[{"name":"cfg_id","in":"path","required":true,"schema":{"type":"string","title":"Cfg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["mi"],"summary":"Update Mi Configuration","operationId":"update_mi_configuration_api_v1_admin_internal_mi_rate_cards_mi_configurations__cfg_id__patch","parameters":[{"name":"cfg_id","in":"path","required":true,"schema":{"type":"string","title":"Cfg Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MiConfigUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["mi"],"summary":"Delete Mi Configuration","operationId":"delete_mi_configuration_api_v1_admin_internal_mi_rate_cards_mi_configurations__cfg_id__delete","parameters":[{"name":"cfg_id","in":"path","required":true,"schema":{"type":"string","title":"Cfg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/mi-configurations/{cfg_id}/quote":{"post":{"tags":["mi"],"summary":"Quote Via Configuration","description":"Quote against a configuration. Filters by config eligibility first,\nthen quotes against default_card (if set) or all active cards, returns\nranked options (cheapest first).","operationId":"quote_via_configuration_api_v1_admin_internal_mi_rate_cards_mi_configurations__cfg_id__quote_post","parameters":[{"name":"cfg_id","in":"path","required":true,"schema":{"type":"string","title":"Cfg Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigQuoteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/mi-quotes":{"get":{"tags":["mi"],"summary":"List Mi Quotes","description":"List MI quotes with optional filters (mi_card_id, mi_config_id, since).","operationId":"list_mi_quotes_api_v1_admin_internal_mi_rate_cards_mi_quotes_get","parameters":[{"name":"mi_card_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Card Id"}},{"name":"mi_config_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Config Id"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mi-rate-cards/mi-quotes/{quote_id}":{"get":{"tags":["mi"],"summary":"Get Mi Quote","operationId":"get_mi_quote_api_v1_admin_internal_mi_rate_cards_mi_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"}}}}}}},"/api/v1/admin/internal/agent/chat":{"post":{"tags":["agent"],"summary":"Conversational agent chat","description":"Conversational agent endpoint.\n\nTakes a plain English query, uses GPT-4o function calling to pick + invoke\nthe right tools, then summarizes the result.","operationId":"agent_chat_api_v1_admin_internal_agent_chat_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentChatRequest"}}},"required":true},"responses":{"200":{"description":"Agent response with tool trace.","content":{"application/json":{"schema":{},"example":{"reply":"The best price I found is UWM at 101.500 net on a 30-day lock.","tools_called":[{"name":"best_execution","args":{"fico_score":760,"ltv_pct":80}}],"elapsed_ms":1450}}}},"400":{"description":"OpenAI API key missing / misconfigured."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/watches":{"post":{"tags":["watches"],"summary":"Create Watch","description":"Create a scenario watch. Immediately computes baseline price.","operationId":"create_watch_api_v1_admin_internal_watches_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["watches"],"summary":"List Watches","operationId":"list_watches_api_v1_admin_internal_watches_get","parameters":[{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/watches/{watch_id}":{"delete":{"tags":["watches"],"summary":"Delete Watch","operationId":"delete_watch_api_v1_admin_internal_watches__watch_id__delete","parameters":[{"name":"watch_id","in":"path","required":true,"schema":{"type":"string","title":"Watch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/watches/{watch_id}/evaluate":{"post":{"tags":["watches"],"summary":"Evaluate Watch","description":"Force-evaluate a single watch right now. Returns delta + whether alert fires.","operationId":"evaluate_watch_api_v1_admin_internal_watches__watch_id__evaluate_post","parameters":[{"name":"watch_id","in":"path","required":true,"schema":{"type":"string","title":"Watch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts":{"get":{"tags":["rate-alerts"],"summary":"List Rate Alerts","operationId":"list_rate_alerts_api_v1_admin_internal_rate_alerts_get","parameters":[{"name":"owner_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Account Id"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},{"name":"trigger_context","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Context"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["rate-alerts"],"summary":"Create Rate Alert","operationId":"create_rate_alert_api_v1_admin_internal_rate_alerts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateAlertCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts/{alert_id}":{"get":{"tags":["rate-alerts"],"summary":"Get Rate Alert","operationId":"get_rate_alert_api_v1_admin_internal_rate_alerts__alert_id__get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["rate-alerts"],"summary":"Patch Rate Alert","operationId":"patch_rate_alert_api_v1_admin_internal_rate_alerts__alert_id__patch","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateAlertPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["rate-alerts"],"summary":"Delete Rate Alert","operationId":"delete_rate_alert_api_v1_admin_internal_rate_alerts__alert_id__delete","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts/{alert_id}/enable":{"post":{"tags":["rate-alerts"],"summary":"Enable Rate Alert","operationId":"enable_rate_alert_api_v1_admin_internal_rate_alerts__alert_id__enable_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts/{alert_id}/disable":{"post":{"tags":["rate-alerts"],"summary":"Disable Rate Alert","operationId":"disable_rate_alert_api_v1_admin_internal_rate_alerts__alert_id__disable_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts/{alert_id}/test-fire":{"post":{"tags":["rate-alerts"],"summary":"Test Fire Rate Alert","description":"Manually fire the alert right now, bypassing cooldown.","operationId":"test_fire_rate_alert_api_v1_admin_internal_rate_alerts__alert_id__test_fire_post","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts/{alert_id}/history":{"get":{"tags":["rate-alerts"],"summary":"Rate Alert History","operationId":"rate_alert_history_api_v1_admin_internal_rate_alerts__alert_id__history_get","parameters":[{"name":"alert_id","in":"path","required":true,"schema":{"type":"string","title":"Alert Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-alerts/evaluate-now":{"post":{"tags":["rate-alerts"],"summary":"Evaluate All Rate Alerts Endpoint","description":"Force-evaluate all active alerts for this tenant. Returns count fired.","operationId":"evaluate_all_rate_alerts_endpoint_api_v1_admin_internal_rate_alerts_evaluate_now_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/rate-alerts/match":{"post":{"tags":["rate-alerts"],"summary":"Match Rate Alerts","description":"Return the active rate alerts whose trigger_context is\ncompatible with `lock_state` AND whose criteria fields (program /\nlock_period_days / occupancy / loan_purpose / property_type /\nstate) match the provided scenario hints. Planning endpoint — does\nnot fire the alerts.","operationId":"match_rate_alerts_api_v1_admin_internal_rate_alerts_match_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RateAlertMatchBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/loan-uploads":{"post":{"tags":["sell"],"summary":"Create Loan Upload","description":"Create a new loan upload — multipart CSV OR JSON body with a loans array.","operationId":"create_loan_upload_api_v1_admin_internal_sell_loan_uploads_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_create_loan_upload_api_v1_admin_internal_sell_loan_uploads_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["sell"],"summary":"List Loan Uploads","operationId":"list_loan_uploads_api_v1_admin_internal_sell_loan_uploads_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/loan-uploads/{upload_id}/issues":{"get":{"tags":["sell"],"summary":"Get Upload Issues","operationId":"get_upload_issues_api_v1_admin_internal_sell_loan_uploads__upload_id__issues_get","parameters":[{"name":"upload_id","in":"path","required":true,"schema":{"type":"string","title":"Upload Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/loans":{"get":{"tags":["sell"],"summary":"List Tradeable Loans","operationId":"list_tradeable_loans_api_v1_admin_internal_sell_loans_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"sort_by","in":"query","required":false,"schema":{"type":"string","default":"created_at","title":"Sort By"}},{"name":"sort_dir","in":"query","required":false,"schema":{"type":"string","default":"desc","title":"Sort Dir"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/loans/search":{"get":{"tags":["sell"],"summary":"Search Tradeable Loans","operationId":"search_tradeable_loans_api_v1_admin_internal_sell_loans_search_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"fico_min","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Min"}},{"name":"fico_max","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Max"}},{"name":"ltv_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Min"}},{"name":"ltv_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Max"}},{"name":"amount_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Min"}},{"name":"amount_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Amount Max"}},{"name":"rate_min","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate Min"}},{"name":"rate_max","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate Max"}},{"name":"program","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"available","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/loans/{tl_id}":{"get":{"tags":["sell"],"summary":"Get Tradeable Loan","operationId":"get_tradeable_loan_api_v1_admin_internal_sell_loans__tl_id__get","parameters":[{"name":"tl_id","in":"path","required":true,"schema":{"type":"string","title":"Tl Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/loans/{tl_id}/withdraw":{"post":{"tags":["sell"],"summary":"Withdraw Tradeable Loan","operationId":"withdraw_tradeable_loan_api_v1_admin_internal_sell_loans__tl_id__withdraw_post","parameters":[{"name":"tl_id","in":"path","required":true,"schema":{"type":"string","title":"Tl Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/sample-loan-upload":{"get":{"tags":["sell"],"summary":"Get Sample Loan Upload Csv","operationId":"get_sample_loan_upload_csv_api_v1_admin_internal_sell_sample_loan_upload_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["sell"],"summary":"Sample Loan Upload","description":"Return a sample CSV template (header + 3 example rows) as text.","operationId":"sample_loan_upload_api_v1_admin_internal_sell_sample_loan_upload_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/sell/carts":{"get":{"tags":["sell"],"summary":"List Carts","operationId":"list_carts_api_v1_admin_internal_sell_carts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["sell"],"summary":"Create Cart","operationId":"create_cart_api_v1_admin_internal_sell_carts_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/carts/{cart_id}":{"get":{"tags":["sell"],"summary":"Get Cart","operationId":"get_cart_api_v1_admin_internal_sell_carts__cart_id__get","parameters":[{"name":"cart_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/carts/{cart_id}/items":{"post":{"tags":["sell"],"summary":"Add Cart Item","operationId":"add_cart_item_api_v1_admin_internal_sell_carts__cart_id__items_post","parameters":[{"name":"cart_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartItemAdd"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/carts/{cart_id}/items/{item_id}":{"delete":{"tags":["sell"],"summary":"Remove Cart Item","operationId":"remove_cart_item_api_v1_admin_internal_sell_carts__cart_id__items__item_id__delete","parameters":[{"name":"cart_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Id"}},{"name":"item_id","in":"path","required":true,"schema":{"type":"string","title":"Item Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/carts/{cart_id}/refresh-best-ex":{"post":{"tags":["sell"],"summary":"Refresh Cart Best Ex","description":"Re-run best-execution for every loan in a cart, update bid_price on\neach item with the top-ranked investor's net price, and emit\n`cart.best_ex_refreshed`.\n\nPolly parity: mirrors `POST /sell/api/refresh_commitment_cart_bids`.\nFan-out is parallel (asyncio.gather) using fresh sessions per item.","operationId":"refresh_cart_best_ex_api_v1_admin_internal_sell_carts__cart_id__refresh_best_ex_post","parameters":[{"name":"cart_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/carts/{cart_id}/create-pool":{"post":{"tags":["sell"],"summary":"Cart To Pool","operationId":"cart_to_pool_api_v1_admin_internal_sell_carts__cart_id__create_pool_post","parameters":[{"name":"cart_id","in":"path","required":true,"schema":{"type":"string","title":"Cart Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CartToPool"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pools":{"post":{"tags":["sell"],"summary":"Create Pool","operationId":"create_pool_api_v1_admin_internal_sell_pools_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["sell"],"summary":"List Pools","operationId":"list_pools_api_v1_admin_internal_sell_pools_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pools/{pool_id}":{"get":{"tags":["sell"],"summary":"Get Pool","operationId":"get_pool_api_v1_admin_internal_sell_pools__pool_id__get","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pools/{pool_id}/commit":{"post":{"tags":["sell"],"summary":"Commit Pool","operationId":"commit_pool_api_v1_admin_internal_sell_pools__pool_id__commit_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pools/{pool_id}/cancel":{"post":{"tags":["sell"],"summary":"Cancel Pool","operationId":"cancel_pool_api_v1_admin_internal_sell_pools__pool_id__cancel_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pools/{pool_id}/settle":{"post":{"tags":["sell"],"summary":"Settle Pool","operationId":"settle_pool_api_v1_admin_internal_sell_pools__pool_id__settle_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pools/{pool_id}/calculate-forward-gainloss":{"get":{"tags":["sell"],"summary":"Calculate Forward Gainloss","description":"Forward gain/loss = expected proceeds − hedge-implied benchmark.\n\nMinimal model: benchmark = sum(loan_amount) * par (100.000).  Hedge bps\nshifts benchmark by (hedge_bps / 100 bps per point) × UPB. Positive\nforward_gainloss = committed pricing better than hedge.","operationId":"calculate_forward_gainloss_api_v1_admin_internal_sell_pools__pool_id__calculate_forward_gainloss_get","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}},{"name":"hedge_bps","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Hedge position in bps (override)","title":"Hedge Bps"},"description":"Hedge position in bps (override)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pipeline/summary":{"get":{"tags":["sell"],"summary":"Pipeline Summary","description":"Aggregate view of all tradeable loans by status.","operationId":"pipeline_summary_api_v1_admin_internal_sell_pipeline_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/sell/bids/{bid_id}/counter":{"post":{"tags":["sell"],"summary":"Counter Bid","operationId":"counter_bid_api_v1_admin_internal_sell_bids__bid_id__counter_post","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterBidReq"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/bulk/counter/partner":{"post":{"tags":["sell"],"summary":"Bulk Counter Partner","operationId":"bulk_counter_partner_api_v1_admin_internal_sell_bulk_counter_partner_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCounterReq"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/force-refresh-agency-bids":{"post":{"tags":["sell"],"summary":"Force Refresh Agency Bids","description":"Clear any cached agency bid data and re-pull.\n\nStub impl: mark all active bids belonging to accounts flagged as\nagency (heuristic: notes tag ``agency=true`` or all active bids if\nno flag) with a needs_refresh marker in notes, then emit\npricing.bids_refreshed and sell.bids_refreshed.","operationId":"force_refresh_agency_bids_api_v1_admin_internal_sell_force_refresh_agency_bids_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/sell/loans/{loan_id}/forward-bids":{"get":{"tags":["sell"],"summary":"List Forward Bids For Loan","operationId":"list_forward_bids_for_loan_api_v1_admin_internal_sell_loans__loan_id__forward_bids_get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/calculate-forward-gainlosses":{"post":{"tags":["sell"],"summary":"Calculate Forward Gainlosses","description":"Weighted avg (current_price − entry_price) × notional × hedge_ratio.","operationId":"calculate_forward_gainlosses_api_v1_admin_internal_sell_calculate_forward_gainlosses_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForwardGLReq"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/pair-off":{"post":{"tags":["sell"],"summary":"Pair Off Positions","operationId":"pair_off_positions_api_v1_admin_internal_sell_pair_off_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PairOffReq"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/repool-bid":{"post":{"tags":["sell"],"summary":"Repool Bid","operationId":"repool_bid_api_v1_admin_internal_sell_repool_bid_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RepoolBidReq"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/download-hedge-data":{"get":{"tags":["sell"],"summary":"Download Hedge Data","operationId":"download_hedge_data_api_v1_admin_internal_sell_download_hedge_data_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/sell/hedge-positions":{"get":{"tags":["sell"],"summary":"List Hedge Positions","operationId":"list_hedge_positions_api_v1_admin_internal_sell_hedge_positions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["sell"],"summary":"Create Hedge Position","operationId":"create_hedge_position_api_v1_admin_internal_sell_hedge_positions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HedgePositionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/hedge-positions/{hid}":{"patch":{"tags":["sell"],"summary":"Patch Hedge Position","operationId":"patch_hedge_position_api_v1_admin_internal_sell_hedge_positions__hid__patch","parameters":[{"name":"hid","in":"path","required":true,"schema":{"type":"string","title":"Hid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HedgePositionPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/hedge-positions/{hid}/close":{"post":{"tags":["sell"],"summary":"Close Hedge Position","operationId":"close_hedge_position_api_v1_admin_internal_sell_hedge_positions__hid__close_post","parameters":[{"name":"hid","in":"path","required":true,"schema":{"type":"string","title":"Hid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/sell/active-bids/download":{"get":{"tags":["sell"],"summary":"Download Active Bids Csv","description":"CSV of all active bids ON this tenant's tradeable loans.\n\nThis is the SELLER's view of the bid book — bids placed BY buyers ON\nloans the seller listed. Complements `/buy/bids/download` which is the\nbuyer's view.","operationId":"download_active_bids_csv_api_v1_admin_internal_sell_active_bids_download_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/api/v1/admin/internal/sell/bid-tapes/{tape_id}/download":{"get":{"tags":["sell"],"summary":"Download Bid Tape Alias","description":"Alias for the buy-side bid-tape download — mirror for seller UIs.","operationId":"download_bid_tape_alias_api_v1_admin_internal_sell_bid_tapes__tape_id__download_get","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/discovery":{"get":{"tags":["buy"],"summary":"List Discovery","description":"List tradeable loans available for sale with current best bid.","operationId":"list_discovery_api_v1_admin_internal_buy_discovery_get","parameters":[{"name":"program","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program"}},{"name":"min_upb","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Upb"}},{"name":"max_upb","in":"query","required":false,"schema":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Upb"}},{"name":"min_fico","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Fico"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/discovery/{loan_id}":{"get":{"tags":["buy"],"summary":"Get Discovery Detail","operationId":"get_discovery_detail_api_v1_admin_internal_buy_discovery__loan_id__get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids":{"get":{"tags":["buy"],"summary":"List Bids","operationId":"list_bids_api_v1_admin_internal_buy_bids_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["buy"],"summary":"Place Bid","operationId":"place_bid_api_v1_admin_internal_buy_bids_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlaceBidBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/download":{"get":{"tags":["buy"],"summary":"Download Bids Csv","description":"CSV download of bids, optionally filtered by status/since.","operationId":"download_bids_csv_api_v1_admin_internal_buy_bids_download_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"all","title":"Status"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Since"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/{bid_id}":{"get":{"tags":["buy"],"summary":"Get Bid","operationId":"get_bid_api_v1_admin_internal_buy_bids__bid_id__get","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/{bid_id}/cancel":{"post":{"tags":["buy"],"summary":"Cancel Bid","operationId":"cancel_bid_api_v1_admin_internal_buy_bids__bid_id__cancel_post","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/{bid_id}/reactivate":{"post":{"tags":["buy"],"summary":"Reactivate Bid","description":"Reactivate a cancelled or expired bid. Clears expiration.","operationId":"reactivate_bid_api_v1_admin_internal_buy_bids__bid_id__reactivate_post","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/{bid_id}/counter":{"post":{"tags":["buy"],"summary":"Counter Bid","operationId":"counter_bid_api_v1_admin_internal_buy_bids__bid_id__counter_post","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CounterBidBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/{bid_id}/accept-counter":{"post":{"tags":["buy"],"summary":"Accept Counter","operationId":"accept_counter_api_v1_admin_internal_buy_bids__bid_id__accept_counter_post","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bids/{bid_id}/reject":{"post":{"tags":["buy"],"summary":"Reject Bid","operationId":"reject_bid_api_v1_admin_internal_buy_bids__bid_id__reject_post","parameters":[{"name":"bid_id","in":"path","required":true,"schema":{"type":"string","title":"Bid Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes":{"post":{"tags":["buy"],"summary":"Upload Bid Tape","operationId":"upload_bid_tape_api_v1_admin_internal_buy_bid_tapes_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadTapeBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["buy"],"summary":"List Bid Tapes","operationId":"list_bid_tapes_api_v1_admin_internal_buy_bid_tapes_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes/{tape_id}/download":{"get":{"tags":["buy"],"summary":"Download Bid Tape Csv","description":"CSV download of all rows in a bid tape.","operationId":"download_bid_tape_csv_api_v1_admin_internal_buy_bid_tapes__tape_id__download_get","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes/{tape_id}":{"get":{"tags":["buy"],"summary":"Get Bid Tape","operationId":"get_bid_tape_api_v1_admin_internal_buy_bid_tapes__tape_id__get","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes/{tape_id}/counter":{"post":{"tags":["buy"],"summary":"Counter Bid Tape","description":"Counter all (or selected) rows of a bid tape in a single action.\n\nThe defining secondary-market workflow this unblocks: an investor\nreceives a 5-loan tape, decides spread is wrong by 25bps, and\ncounters the whole tape with one POST instead of opening five\nindividual bid-counter forms.\n\nPricing math (per row, in price points where 100 = par):\n\n    counter_price = bid_price + adjustment\n\nwhere adjustment = `adjustment_price_points` or `adjustment_bps / 100`\n(1bp = 0.01 price points by mortgage convention) — unless the row\nappears in `row_overrides`, in which case the overriding value is\nthe absolute counter price.\n\n`original_bid_price` is captured on first counter so subsequent\ncounters (counter-of-counter) don't lose the starting price.\n\nSkips already-`accepted`/`rejected` rows — only `countered` and\nuntouched rows are eligible. Returns a summary; emits\n`bid_tape.countered` (tape-level) plus `bid_tape.row_countered`\nper row for downstream automation.","operationId":"counter_bid_tape_api_v1_admin_internal_buy_bid_tapes__tape_id__counter_post","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TapeCounterBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes/{tape_id}/accept":{"post":{"tags":["buy"],"summary":"Accept Bid Tape","description":"Accept all (or selected) rows of a bid tape. Counters can be\naccepted — that's the buyer agreeing to the seller's counter price.\nAlready-accepted rows are no-ops (idempotent). Already-rejected\nrows are skipped (terminal in the opposite direction).","operationId":"accept_bid_tape_api_v1_admin_internal_buy_bid_tapes__tape_id__accept_post","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TapeStatusBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes/{tape_id}/reject":{"post":{"tags":["buy"],"summary":"Reject Bid Tape","description":"Reject all (or selected) rows of a bid tape. Optional `reason`\nis stored on each row's `counter_reason` text column. Idempotent\non rejected rows; skips already-accepted rows.","operationId":"reject_bid_tape_api_v1_admin_internal_buy_bid_tapes__tape_id__reject_post","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TapeStatusBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bid-tapes/{tape_id}/errors":{"get":{"tags":["buy"],"summary":"Get Bid Tape Errors","operationId":"get_bid_tape_errors_api_v1_admin_internal_buy_bid_tapes__tape_id__errors_get","parameters":[{"name":"tape_id","in":"path","required":true,"schema":{"type":"string","title":"Tape Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/bulk/accept":{"post":{"tags":["buy"],"summary":"Bulk Accept","operationId":"bulk_accept_api_v1_admin_internal_buy_bulk_accept_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkAcceptBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/agency-products":{"get":{"tags":["buy"],"summary":"List Agency Products","operationId":"list_agency_products_api_v1_admin_internal_buy_agency_products_get","parameters":[{"name":"agency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency"}},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["buy"],"summary":"Create Agency Product","operationId":"create_agency_product_api_v1_admin_internal_buy_agency_products_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgencyProductCreateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/agency-products/{product_id}":{"patch":{"tags":["buy"],"summary":"Patch Agency Product","operationId":"patch_agency_product_api_v1_admin_internal_buy_agency_products__product_id__patch","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgencyProductPatchBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/agency-products/summary":{"get":{"tags":["buy"],"summary":"Agency Products Summary","operationId":"agency_products_summary_api_v1_admin_internal_buy_agency_products_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/buy/committed-loans":{"get":{"tags":["buy"],"summary":"List Committed Loans","operationId":"list_committed_loans_api_v1_admin_internal_buy_committed_loans_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/committed-loans/{cl_id}":{"get":{"tags":["buy"],"summary":"Get Committed Loan","operationId":"get_committed_loan_api_v1_admin_internal_buy_committed_loans__cl_id__get","parameters":[{"name":"cl_id","in":"path","required":true,"schema":{"type":"string","title":"Cl Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/buy/committed-loans/{cl_id}/deliver":{"post":{"tags":["buy"],"summary":"Deliver Committed Loan","operationId":"deliver_committed_loan_api_v1_admin_internal_buy_committed_loans__cl_id__deliver_post","parameters":[{"name":"cl_id","in":"path","required":true,"schema":{"type":"string","title":"Cl Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/ready":{"get":{"tags":["delivery"],"summary":"Loans ready for delivery","operationId":"list_ready_pools_api_v1_admin_internal_delivery_ready_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/in-progress":{"get":{"tags":["delivery"],"summary":"Pools currently in-progress","operationId":"list_in_progress_pools_api_v1_admin_internal_delivery_in_progress_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/delivered":{"get":{"tags":["delivery"],"summary":"Recently delivered pools","operationId":"list_delivered_pools_api_v1_admin_internal_delivery_delivered_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools":{"post":{"tags":["delivery"],"summary":"Create a delivery pool","description":"Create a new delivery pool to package loans for investor delivery.","operationId":"create_pool_api_v1_admin_internal_delivery_pools_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePoolBody"}}},"required":true},"responses":{"200":{"description":"Pool created.","content":{"application/json":{"schema":{},"example":{"pool_id":"pool_01HX9...","name":"FNMA-2026-04-15","investor_name":"Fannie Mae","target_settlement_date":"2026-04-30","status":"ready","loan_count":0}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools/{pool_id}":{"get":{"tags":["delivery"],"summary":"Pool detail with loans + documents","operationId":"get_pool_detail_api_v1_admin_internal_delivery_pools__pool_id__get","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["delivery"],"summary":"Update a pool","operationId":"update_pool_api_v1_admin_internal_delivery_pools__pool_id__patch","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePoolBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["delivery"],"summary":"Delete a pool","operationId":"delete_pool_api_v1_admin_internal_delivery_pools__pool_id__delete","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools/{pool_id}/add-loans":{"post":{"tags":["delivery"],"summary":"Add loans to a pool","operationId":"add_loans_to_pool_api_v1_admin_internal_delivery_pools__pool_id__add_loans_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_delivery__AddLoansBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/bulk-move":{"post":{"tags":["delivery"],"summary":"Bulk Move Loans","operationId":"bulk_move_loans_api_v1_admin_internal_delivery_bulk_move_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkMoveBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools/{pool_id}/send":{"post":{"tags":["delivery"],"summary":"Send the pool to investor","operationId":"send_pool_api_v1_admin_internal_delivery_pools__pool_id__send_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendPoolBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools/{pool_id}/mark-delivered":{"post":{"tags":["delivery"],"summary":"Mark pool as delivered","operationId":"mark_pool_delivered_api_v1_admin_internal_delivery_pools__pool_id__mark_delivered_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkDeliveredBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools/{pool_id}/cancel":{"post":{"tags":["delivery"],"summary":"Cancel a pool","operationId":"cancel_pool_api_v1_admin_internal_delivery_pools__pool_id__cancel_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPoolBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/pools/{pool_id}/documents":{"get":{"tags":["delivery"],"summary":"List pool documents","operationId":"list_pool_documents_api_v1_admin_internal_delivery_pools__pool_id__documents_get","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["delivery"],"summary":"Attach a document to a pool","operationId":"upload_pool_document_api_v1_admin_internal_delivery_pools__pool_id__documents_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadDocBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/documents/{doc_id}":{"delete":{"tags":["delivery"],"summary":"Delete Document","operationId":"delete_document_api_v1_admin_internal_delivery_documents__doc_id__delete","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/documents/{doc_id}/download":{"get":{"tags":["delivery"],"summary":"Download Document","operationId":"download_document_api_v1_admin_internal_delivery_documents__doc_id__download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/delivery/committed-loans/{cl_id}/queue-for-delivery":{"post":{"tags":["delivery"],"summary":"Queue Committed Loan For Delivery","description":"Add a committed loan to a ready pool (creates one if none exists).","operationId":"queue_committed_loan_for_delivery_api_v1_admin_internal_delivery_committed_loans__cl_id__queue_for_delivery_post","parameters":[{"name":"cl_id","in":"path","required":true,"schema":{"type":"string","title":"Cl Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/invites":{"get":{"tags":["invites"],"summary":"List Invites","description":"List all invites for this tenant.","operationId":"list_invites_api_v1_admin_internal_invites_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["invites"],"summary":"Create Invite","description":"Create a new onboarding invite and email the magic link.","operationId":"create_invite_api_v1_admin_internal_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/invites/{invite_id}/resend":{"post":{"tags":["invites"],"summary":"Resend Invite","description":"Regenerate the token, extend expiry, and re-send the invite email.","operationId":"resend_invite_api_v1_admin_internal_invites__invite_id__resend_post","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/invites/{invite_id}":{"delete":{"tags":["invites"],"summary":"Revoke Invite","description":"Revoke an invite so the token no longer works.","operationId":"revoke_invite_api_v1_admin_internal_invites__invite_id__delete","parameters":[{"name":"invite_id","in":"path","required":true,"schema":{"type":"string","title":"Invite Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/invites/broadcast":{"get":{"tags":["invites"],"summary":"List broadcast invites","operationId":"list_broadcast_invites_api_v1_admin_internal_invites_broadcast_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["invites"],"summary":"Create a broadcast (multi-use) invite link","description":"Create a multi-use invite link for bulk onboarding (e.g., 100 LOs).","operationId":"create_broadcast_invite_api_v1_admin_internal_invites_broadcast_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastInviteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/invites/employees":{"get":{"tags":["invites"],"summary":"List employees in this tenant","operationId":"list_employees_api_v1_admin_internal_invites_employees_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/invites/employees/{account_id}":{"patch":{"tags":["invites"],"summary":"Update an employee","operationId":"patch_employee_api_v1_admin_internal_invites_employees__account_id__patch","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmployeePatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/invites/validate/{token}":{"get":{"tags":["invites-public"],"summary":"Validate Token","description":"PUBLIC — check whether a magic token is valid. Used by the /onboard page.","operationId":"validate_token_api_v1_public_invites_validate__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/invites/complete/{token}":{"post":{"tags":["invites-public"],"summary":"Complete Invite","description":"PUBLIC — create a pending Account from the onboarding form.","operationId":"complete_invite_api_v1_public_invites_complete__token__post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InviteComplete"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/invites/broadcast/{slug}":{"get":{"tags":["invites-public"],"summary":"Public info about a broadcast invite (no auth)","operationId":"broadcast_info_api_v1_public_invites_broadcast__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/invites/broadcast/{slug}/signup":{"post":{"tags":["invites-public"],"summary":"Sign up via a broadcast invite","description":"Create a new Account + password + API key from a broadcast invite link.\n\nAlso sets the session cookie so the new user is immediately logged in\n(the /join page redirects straight to the dashboard).","operationId":"broadcast_signup_api_v1_public_invites_broadcast__slug__signup_post","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BroadcastSignup"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/login":{"post":{"tags":["auth"],"summary":"Log in with email + password","operationId":"login_api_v1_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/logout":{"post":{"tags":["auth"],"summary":"Log out (clears session cookie)","operationId":"logout_api_v1_auth_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/me":{"get":{"tags":["auth"],"summary":"Get current logged-in account","operationId":"me_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/auth/change-password":{"post":{"tags":["auth"],"summary":"Change the caller's password","operationId":"change_password_api_v1_auth_change_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Request a password reset link","operationId":"forgot_password_api_v1_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/reset-password":{"post":{"tags":["auth"],"summary":"Consume a reset token + set a new password","operationId":"reset_password_api_v1_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/holidays":{"get":{"tags":["reference"],"summary":"List Holidays","description":"List holidays (optionally filtered by year and/or category).","operationId":"list_holidays_api_v1_admin_internal_reference_holidays_get","parameters":[{"name":"year","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","maximum":3000,"minimum":1900},{"type":"null"}],"title":"Year"}},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/holidays/next":{"get":{"tags":["reference"],"summary":"Next Holidays","description":"Return the next `count` upcoming holidays from today.","operationId":"next_holidays_api_v1_admin_internal_reference_holidays_next_get","parameters":[{"name":"count","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":5,"title":"Count"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/holidays/is-business-day":{"get":{"tags":["reference"],"summary":"Is Business Day","description":"Return whether the given date is a business day (not weekend, not holiday).","operationId":"is_business_day_api_v1_admin_internal_reference_holidays_is_business_day_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD","title":"Date"},"description":"YYYY-MM-DD"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/holidays/add-business-days":{"get":{"tags":["reference"],"summary":"Add Business Days","description":"Return the date that is `days` business days after `date`.\n\nSkips weekends and observed holidays. Supports negative `days` to walk\nbackward.","operationId":"add_business_days_api_v1_admin_internal_reference_holidays_add_business_days_get","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string","description":"YYYY-MM-DD starting date","title":"Date"},"description":"YYYY-MM-DD starting date"},{"name":"days","in":"query","required":true,"schema":{"type":"integer","description":"Business days to add (can be negative)","title":"Days"},"description":"Business days to add (can be negative)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/counties":{"get":{"tags":["reference"],"summary":"List Counties","description":"List counties (optionally filtered by state and high-cost flag).","operationId":"list_counties_api_v1_admin_internal_reference_counties_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string","minLength":2,"maxLength":2},{"type":"null"}],"title":"State"}},{"name":"high_cost_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"High Cost Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/counties/limits":{"get":{"tags":["reference"],"summary":"County Limits By Zip","description":"Resolve a zip code to a county and return its loan limits.","operationId":"county_limits_by_zip_api_v1_admin_internal_reference_counties_limits_get","parameters":[{"name":"zip","in":"query","required":true,"schema":{"type":"string","description":"5-digit US zip code","title":"Zip"},"description":"5-digit US zip code"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/counties/{county_id}":{"get":{"tags":["reference"],"summary":"Get County","description":"Fetch a single county by FIPS code.","operationId":"get_county_api_v1_admin_internal_reference_counties__county_id__get","parameters":[{"name":"county_id","in":"path","required":true,"schema":{"type":"integer","title":"County Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/states":{"get":{"tags":["reference"],"summary":"List States","description":"List all US states that have counties seeded, with county counts.","operationId":"list_states_api_v1_admin_internal_reference_states_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/reference/zip-codes/{zip}":{"get":{"tags":["reference"],"summary":"Get Zip","description":"Lookup a zip code -> state/city/county.","operationId":"get_zip_api_v1_admin_internal_reference_zip_codes__zip__get","parameters":[{"name":"zip","in":"path","required":true,"schema":{"type":"string","title":"Zip"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/points-and-fees-limits/current":{"get":{"tags":["reference"],"summary":"Pnf Limits Current","description":"Return the latest effective P&F tier set (all tiers, ordered by loan_amount_min).","operationId":"pnf_limits_current_api_v1_admin_internal_reference_points_and_fees_limits_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/reference/points-and-fees-limits/calculate":{"get":{"tags":["reference"],"summary":"Pnf Limits Calculate","description":"Return the applicable QM points-and-fees cap for a given loan amount.","operationId":"pnf_limits_calculate_api_v1_admin_internal_reference_points_and_fees_limits_calculate_get","parameters":[{"name":"loan_amount","in":"query","required":true,"schema":{"type":"number","exclusiveMinimum":0,"description":"Loan amount in dollars","title":"Loan Amount"},"description":"Loan amount in dollars"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reference/points-and-fees-limits/history":{"get":{"tags":["reference"],"summary":"Pnf Limits History","description":"Full historical set of all seeded tiers (most recent first).","operationId":"pnf_limits_history_api_v1_admin_internal_reference_points_and_fees_limits_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/rbac/roles":{"get":{"tags":["rbac"],"summary":"List Roles","description":"List all roles for the tenant.","operationId":"list_roles_api_v1_admin_internal_rbac_roles_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["rbac"],"summary":"Create Role","description":"Create a custom (non-system) role.","operationId":"create_role_api_v1_admin_internal_rbac_roles_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRoleBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rbac/roles/{role_id}":{"delete":{"tags":["rbac"],"summary":"Delete Role","description":"Delete a custom role. Cannot delete system roles.","operationId":"delete_role_api_v1_admin_internal_rbac_roles__role_id__delete","parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rbac/permissions":{"get":{"tags":["rbac"],"summary":"List Permissions","description":"List all permissions, grouped by category.","operationId":"list_permissions_api_v1_admin_internal_rbac_permissions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/rbac/roles/{role_id}/permissions":{"get":{"tags":["rbac"],"summary":"Get Role Permissions","description":"List permissions assigned to a role.","operationId":"get_role_permissions_api_v1_admin_internal_rbac_roles__role_id__permissions_get","parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["rbac"],"summary":"Set Role Permissions","description":"Replace the full permission set for a role.","operationId":"set_role_permissions_api_v1_admin_internal_rbac_roles__role_id__permissions_put","parameters":[{"name":"role_id","in":"path","required":true,"schema":{"type":"string","title":"Role Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetRolePermissionsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rbac/users/{account_id}/roles":{"get":{"tags":["rbac"],"summary":"Get User Roles","description":"List an account's roles plus the effective (union) permission codes.","operationId":"get_user_roles_api_v1_admin_internal_rbac_users__account_id__roles_get","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["rbac"],"summary":"Set User Roles","description":"Replace the full set of roles for an account.","operationId":"set_user_roles_api_v1_admin_internal_rbac_users__account_id__roles_put","parameters":[{"name":"account_id","in":"path","required":true,"schema":{"type":"string","title":"Account Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetUserRolesBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/mortgage-coach/sync":{"post":{"tags":["connected-systems"],"summary":"Mortgage Coach Sync","description":"Generate Mortgage Coach reports for any locked loans missing one.\n\nThis walks recent loans lacking an associated ``MortgageCoachReport``\nand kicks off stub generation — real adapters plug the MC HTTP SDK\nhere. Returns counts so the UI can show progress.","operationId":"mortgage_coach_sync_api_v1_admin_internal_connected_systems_mortgage_coach_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/connected-systems/mortgage-director/webhook-inbound":{"post":{"tags":["connected-systems"],"summary":"Mortgage Director Webhook Inbound","description":"Receive inbound webhook from MortgageDirector.\n\nStub: accepts payload, logs the event, emits a webhook notification.\nReal adapter will:\n  1. Validate HMAC signature against stored secret.\n  2. Parse payload and create ``LockRequest`` or ``Loan`` rows.","operationId":"mortgage_director_webhook_inbound_api_v1_admin_internal_connected_systems_mortgage_director_webhook_inbound_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MortgageDirectorWebhookPayload"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/meridian-link/oauth/callback":{"post":{"tags":["connected-systems"],"summary":"Meridian Link Oauth Callback","description":"OAuth 2.0 callback. Exchanges ``code`` for access token.\n\nStub: generates a mock token and stores it encrypted under\n``integration_config.token_encrypted``. Real adapter performs the\nHTTP POST against the configured ``oauth_url``.","operationId":"meridian_link_oauth_callback_api_v1_admin_internal_connected_systems_meridian_link_oauth_callback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeridianLinkOAuthCallback"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/meridian-link/sync":{"post":{"tags":["connected-systems"],"summary":"Meridian Link Sync","description":"Pull loans from MeridianLink LoansPQ using the stored access token.\n\nStub: returns {synced: 0}. Real adapter decrypts the token and calls\nthe LoansPQ REST endpoint.","operationId":"meridian_link_sync_api_v1_admin_internal_connected_systems_meridian_link_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/connected-systems/kinds":{"get":{"tags":["connected-systems"],"summary":"List Kinds","description":"Return the hardcoded catalog of supported integration kinds.","operationId":"list_kinds_api_v1_admin_internal_connected_systems_kinds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/connected-systems/":{"get":{"tags":["connected-systems"],"summary":"List Systems","operationId":"list_systems_api_v1_admin_internal_connected_systems__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["connected-systems"],"summary":"Create System","operationId":"create_system_api_v1_admin_internal_connected_systems__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSystemRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems":{"get":{"tags":["connected-systems"],"summary":"List Systems","operationId":"list_systems_api_v1_admin_internal_connected_systems_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["connected-systems"],"summary":"Create System","operationId":"create_system_api_v1_admin_internal_connected_systems_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSystemRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}":{"get":{"tags":["connected-systems"],"summary":"Get System","operationId":"get_system_api_v1_admin_internal_connected_systems__system_id__get","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["connected-systems"],"summary":"Update System","operationId":"update_system_api_v1_admin_internal_connected_systems__system_id__patch","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSystemRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["connected-systems"],"summary":"Delete System","operationId":"delete_system_api_v1_admin_internal_connected_systems__system_id__delete","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}/test":{"post":{"tags":["connected-systems"],"summary":"Test System","description":"Stub connection test.\n\nReal adapters (Encompass SDK ping, Slack ``auth.test``, etc.) can\nreplace this later; for now we just write a success event and\nreturn a synthetic latency so the UI has something to render.","operationId":"test_system_api_v1_admin_internal_connected_systems__system_id__test_post","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}/sync":{"post":{"tags":["connected-systems"],"summary":"Sync System","description":"Stub manual-sync trigger.\n\nEnqueues (conceptually) a sync job and records an event. Real\nadapters will swap the stub for an actual Celery/Temporal task.","operationId":"sync_system_api_v1_admin_internal_connected_systems__system_id__sync_post","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}/events":{"get":{"tags":["connected-systems"],"summary":"List Events","operationId":"list_events_api_v1_admin_internal_connected_systems__system_id__events_get","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}/pipeline-field-values":{"get":{"tags":["connected-systems"],"summary":"List Pipeline Field Values","operationId":"list_pipeline_field_values_api_v1_admin_internal_connected_systems__system_id__pipeline_field_values_get","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}},{"name":"field","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}/pipeline-field-values/observe":{"post":{"tags":["connected-systems"],"summary":"Observe Pipeline Field Value","description":"Upsert a (field_name, field_value) observation for this system.\n\nIncrements ``occurrence_count`` and bumps ``last_seen_at`` if the\nrow already exists.","operationId":"observe_pipeline_field_value_api_v1_admin_internal_connected_systems__system_id__pipeline_field_values_observe_post","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ObserveFieldValueRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/connected-systems/{system_id}/pipeline-field-values/{field_value_id}/map":{"patch":{"tags":["connected-systems"],"summary":"Map Pipeline Field Value","operationId":"map_pipeline_field_value_api_v1_admin_internal_connected_systems__system_id__pipeline_field_values__field_value_id__map_patch","parameters":[{"name":"system_id","in":"path","required":true,"schema":{"type":"string","title":"System Id"}},{"name":"field_value_id","in":"path","required":true,"schema":{"type":"string","title":"Field Value Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MapFieldValueRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/":{"get":{"tags":["partnerships"],"summary":"List Partnerships","description":"List partnerships with optional status / type / name-substring filters.","operationId":"list_partnerships_api_v1_admin_internal_partnerships__get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"partner_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Type"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"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":["partnerships"],"summary":"Create Partnership","operationId":"create_partnership_api_v1_admin_internal_partnerships__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePartnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships":{"get":{"tags":["partnerships"],"summary":"List Partnerships","description":"List partnerships with optional status / type / name-substring filters.","operationId":"list_partnerships_api_v1_admin_internal_partnerships_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"partner_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Type"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"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":["partnerships"],"summary":"Create Partnership","operationId":"create_partnership_api_v1_admin_internal_partnerships_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePartnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/partners":{"get":{"tags":["partnerships"],"summary":"List Partners Catalog","description":"Alias for ``?status=active`` — returns a compact catalog format\n(id, partner_name, partner_type) suitable for dropdowns.","operationId":"list_partners_catalog_api_v1_admin_internal_partnerships_partners_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/partnerships/changes":{"get":{"tags":["partnerships"],"summary":"List Pending Changes","description":"List all change-approval requests (defaults to ``status=pending``).","operationId":"list_pending_changes_api_v1_admin_internal_partnerships_changes_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"pending","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/{partnership_id}":{"get":{"tags":["partnerships"],"summary":"Get Partnership","operationId":"get_partnership_api_v1_admin_internal_partnerships__partnership_id__get","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["partnerships"],"summary":"Update Partnership","operationId":"update_partnership_api_v1_admin_internal_partnerships__partnership_id__patch","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePartnershipRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["partnerships"],"summary":"Delete Partnership","description":"Soft-delete: sets status to ``terminated``.","operationId":"delete_partnership_api_v1_admin_internal_partnerships__partnership_id__delete","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/{partnership_id}/eligibility-rules":{"get":{"tags":["partnerships"],"summary":"List Eligibility Rules","operationId":"list_eligibility_rules_api_v1_admin_internal_partnerships__partnership_id__eligibility_rules_get","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["partnerships"],"summary":"Replace Eligibility Rules","description":"REPLACE all eligibility rules for this partnership.","operationId":"replace_eligibility_rules_api_v1_admin_internal_partnerships__partnership_id__eligibility_rules_put","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EligibilityRuleIn"},"title":"Rules"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["partnerships"],"summary":"Append Eligibility Rule","operationId":"append_eligibility_rule_api_v1_admin_internal_partnerships__partnership_id__eligibility_rules_post","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EligibilityRuleIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/{partnership_id}/eligibility-rules/{rule_id}":{"delete":{"tags":["partnerships"],"summary":"Delete Eligibility Rule","operationId":"delete_eligibility_rule_api_v1_admin_internal_partnerships__partnership_id__eligibility_rules__rule_id__delete","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/{partnership_id}/credentials":{"patch":{"tags":["partnerships"],"summary":"Update Credentials","description":"Store an encrypted credentials dict. Plaintext NEVER leaves the\nserver — the response only reports ``has_credentials=True``.","operationId":"update_credentials_api_v1_admin_internal_partnerships__partnership_id__credentials_patch","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CredentialsPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/{partnership_id}/changes":{"post":{"tags":["partnerships"],"summary":"Submit Change","operationId":"submit_change_api_v1_admin_internal_partnerships__partnership_id__changes_post","parameters":[{"name":"partnership_id","in":"path","required":true,"schema":{"type":"string","title":"Partnership Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmitChangeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/changes/{change_id}/approve":{"post":{"tags":["partnerships"],"summary":"Approve Change","operationId":"approve_change_api_v1_admin_internal_partnerships_changes__change_id__approve_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/ApproveChangeRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/partnerships/changes/{change_id}/reject":{"post":{"tags":["partnerships"],"summary":"Reject Change","operationId":"reject_change_api_v1_admin_internal_partnerships_changes__change_id__reject_post","parameters":[{"name":"change_id","in":"path","required":true,"schema":{"type":"string","title":"Change Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/RejectChangeRequest"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/embeds":{"get":{"tags":["embeds"],"summary":"List Embeds","operationId":"list_embeds_api_v1_admin_internal_embeds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["embeds"],"summary":"Create Embed","operationId":"create_embed_api_v1_admin_internal_embeds_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/embeds/{embed_id}":{"get":{"tags":["embeds"],"summary":"Get Embed","operationId":"get_embed_api_v1_admin_internal_embeds__embed_id__get","parameters":[{"name":"embed_id","in":"path","required":true,"schema":{"type":"string","title":"Embed Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["embeds"],"summary":"Patch Embed","operationId":"patch_embed_api_v1_admin_internal_embeds__embed_id__patch","parameters":[{"name":"embed_id","in":"path","required":true,"schema":{"type":"string","title":"Embed Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["embeds"],"summary":"Delete Embed","operationId":"delete_embed_api_v1_admin_internal_embeds__embed_id__delete","parameters":[{"name":"embed_id","in":"path","required":true,"schema":{"type":"string","title":"Embed Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/embeds/{embed_id}/snippet":{"get":{"tags":["embeds"],"summary":"Embed Snippet","operationId":"embed_snippet_api_v1_admin_internal_embeds__embed_id__snippet_get","parameters":[{"name":"embed_id","in":"path","required":true,"schema":{"type":"string","title":"Embed Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/embeds/{embed_id}/analytics":{"get":{"tags":["embeds"],"summary":"Embed Analytics","operationId":"embed_analytics_api_v1_admin_internal_embeds__embed_id__analytics_get","parameters":[{"name":"embed_id","in":"path","required":true,"schema":{"type":"string","title":"Embed Id"}},{"name":"days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/embeds/{token}/config":{"get":{"tags":["embeds-public"],"summary":"Public Embed Config","description":"Sanitized config + theme for the widget to render.","operationId":"public_embed_config_api_v1_public_embeds__token__config_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"}}}}}},"options":{"tags":["embeds-public"],"summary":"Public Embed Preflight","operationId":"public_embed_preflight_api_v1_public_embeds__token__config_options","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/embeds/{token}/price":{"post":{"tags":["embeds-public"],"summary":"Public Embed Price","description":"Proxy to best_execution, recording a view row for analytics.","operationId":"public_embed_price_api_v1_public_embeds__token__price_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingRequest-Input"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["embeds-public"],"summary":"Public Embed Preflight","operationId":"public_embed_preflight_api_v1_public_embeds__token__price_options","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/embeds/{token}/chat":{"post":{"tags":["embeds-public"],"summary":"Public Embed Chat","description":"Conversational entry point for ai_chat embeds — constrained tools only.","operationId":"public_embed_chat_api_v1_public_embeds__token__chat_post","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbedChatRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"options":{"tags":["embeds-public"],"summary":"Public Embed Preflight","operationId":"public_embed_preflight_api_v1_public_embeds__token__chat_options","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-quotes":{"get":{"tags":["rate-quotes"],"summary":"List rate quotes (admin)","operationId":"list_quotes_api_v1_admin_internal_rate_quotes_get","parameters":[{"name":"lead_source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Source"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"ISO date/datetime filter","title":"Since"},"description":"ISO date/datetime filter"},{"name":"has_converted","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Converted"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-quotes/summary":{"get":{"tags":["rate-quotes"],"summary":"Rate-quote conversion summary","operationId":"quotes_summary_api_v1_admin_internal_rate_quotes_summary_get","parameters":[{"name":"days","in":"query","required":false,"schema":{"type":"integer","maximum":365,"minimum":1,"default":30,"title":"Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/rate-quotes/{quote_id}":{"get":{"tags":["rate-quotes"],"summary":"Get Quote","operationId":"get_quote_api_v1_admin_internal_rate_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"}}}}}},"delete":{"tags":["rate-quotes"],"summary":"Delete Quote","operationId":"delete_quote_api_v1_admin_internal_rate_quotes__quote_id__delete","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"}}}}}}},"/api/v1/admin/internal/rate-quotes/by-token/{quote_token}/convert":{"post":{"tags":["rate-quotes"],"summary":"Convert Quote","description":"Link a quote_token to a real loan. Requires admin/internal auth.","operationId":"convert_quote_api_v1_admin_internal_rate_quotes_by_token__quote_token__convert_post","parameters":[{"name":"quote_token","in":"path","required":true,"schema":{"type":"string","title":"Quote Token"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertQuoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/rate-quotes":{"post":{"tags":["rate-quotes-public"],"summary":"Create a consumer-facing rate quote","description":"Create a consumer-facing rate quote. Rate-limited per IP (10/min).","operationId":"create_public_quote_api_v1_public_rate_quotes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicQuoteRequest"}}},"required":true},"responses":{"200":{"description":"Rate quote with shareable token.","content":{"application/json":{"schema":{},"example":{"quote_token":"q_8gH2sKq9-aB3...","options":[{"rate_pct":"6.500","apr_pct":"6.615","monthly_payment":"3160.35","program":"CONV_30YR"}],"expires_at":"2026-04-15T13:05:00Z","disclaimer_text":"Rates are estimates ...","disclaimer_version":"v1-2026"}}}},"429":{"description":"Rate limit exceeded (10 quotes/IP/min)."},"503":{"description":"Pricing engine temporarily unavailable."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/rate-quotes/{quote_token}":{"get":{"tags":["rate-quotes-public"],"summary":"Re-open a public rate quote by token","description":"Re-read a quote by shareable public token. Returns sanitized payload.","operationId":"get_public_quote_api_v1_public_rate_quotes__quote_token__get","parameters":[{"name":"quote_token","in":"path","required":true,"schema":{"type":"string","title":"Quote Token"}}],"responses":{"200":{"description":"Quote retrieved.","content":{"application/json":{"schema":{}}}},"404":{"description":"Unknown or expired quote token."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/writeback/summary":{"get":{"tags":["pipeline-ops"],"summary":"Writeback Summary","description":"Grid of count by (status, target_system).","operationId":"writeback_summary_api_v1_admin_internal_ops_writeback_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/ops/writeback":{"get":{"tags":["pipeline-ops"],"summary":"List Writeback","operationId":"list_writeback_api_v1_admin_internal_ops_writeback_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"target_system","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target System"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/writeback/{loan_id}":{"get":{"tags":["pipeline-ops"],"summary":"Writeback For Loan","operationId":"writeback_for_loan_api_v1_admin_internal_ops_writeback__loan_id__get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/writeback/{loan_id}/retry":{"post":{"tags":["pipeline-ops"],"summary":"Retry Writeback","description":"Reset matching writeback rows to status=pending so they get retried.","operationId":"retry_writeback_api_v1_admin_internal_ops_writeback__loan_id__retry_post","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}},{"name":"target_system","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target System"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow":{"get":{"tags":["pipeline-ops"],"summary":"List Crossflow","operationId":"list_crossflow_api_v1_admin_internal_ops_crossflow_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"default":"pending_review","title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pipeline-ops"],"summary":"Submit Crossflow","operationId":"submit_crossflow_api_v1_admin_internal_ops_crossflow_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossflowCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/{crossflow_id}":{"get":{"tags":["pipeline-ops"],"summary":"Get Crossflow","operationId":"get_crossflow_api_v1_admin_internal_ops_crossflow__crossflow_id__get","parameters":[{"name":"crossflow_id","in":"path","required":true,"schema":{"type":"string","title":"Crossflow Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/{crossflow_id}/approve":{"post":{"tags":["pipeline-ops"],"summary":"Approve Crossflow","operationId":"approve_crossflow_api_v1_admin_internal_ops_crossflow__crossflow_id__approve_post","parameters":[{"name":"crossflow_id","in":"path","required":true,"schema":{"type":"string","title":"Crossflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossflowDecide"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/{crossflow_id}/reject":{"post":{"tags":["pipeline-ops"],"summary":"Reject Crossflow","operationId":"reject_crossflow_api_v1_admin_internal_ops_crossflow__crossflow_id__reject_post","parameters":[{"name":"crossflow_id","in":"path","required":true,"schema":{"type":"string","title":"Crossflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossflowDecide"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/reviewal/queue":{"get":{"tags":["pipeline-ops"],"summary":"Crossflow Reviewal Queue","description":"Reviewer queue — pending_review crossflows sorted oldest-first with\nage_seconds + age_bucket + SLA breach flag per row. Mirrors Polly's\n`/pe/api/crossflow-requests/reviewal/` shape.","operationId":"crossflow_reviewal_queue_api_v1_admin_internal_ops_crossflow_reviewal_queue_get","parameters":[{"name":"assigned_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to this reviewer's assignments; omit for all.","title":"Assigned To"},"description":"Filter to this reviewer's assignments; omit for all."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/reviewal/count":{"get":{"tags":["pipeline-ops"],"summary":"Crossflow Reviewal Count","description":"Lightweight counter for queue badges. Returns counts broken down\nby age bucket (green/amber/red).","operationId":"crossflow_reviewal_count_api_v1_admin_internal_ops_crossflow_reviewal_count_get","parameters":[{"name":"assigned_to","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Assigned To"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/{crossflow_id}/assign":{"post":{"tags":["pipeline-ops"],"summary":"Crossflow Assign","description":"Assign a specific reviewer to a pending crossflow request.\n\nOnly valid on `status='pending_review'`. Emits\n`crossflow.assigned`.","operationId":"crossflow_assign_api_v1_admin_internal_ops_crossflow__crossflow_id__assign_post","parameters":[{"name":"crossflow_id","in":"path","required":true,"schema":{"type":"string","title":"Crossflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossflowAssign"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/crossflow/{crossflow_id}/counter":{"post":{"tags":["pipeline-ops"],"summary":"Crossflow Counter","description":"Counter-offer — reviewer proposes a different channel than the\none requested. Sets status='countered', persists counter_to_channel\n+ counter_notes. Requires counter_to_channel ∈ VALID_CHANNELS AND\ndifferent from the original to_channel AND different from\nfrom_channel (otherwise the counter is vacuous). Emits\n`crossflow.countered`.","operationId":"crossflow_counter_api_v1_admin_internal_ops_crossflow__crossflow_id__counter_post","parameters":[{"name":"crossflow_id","in":"path","required":true,"schema":{"type":"string","title":"Crossflow Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrossflowCounter"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/pricing-templates":{"get":{"tags":["pipeline-ops"],"summary":"List Templates","operationId":"list_templates_api_v1_admin_internal_ops_pricing_templates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["pipeline-ops"],"summary":"Create Template","operationId":"create_template_api_v1_admin_internal_ops_pricing_templates_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_pipeline_ops__TemplateCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/pricing-templates/{template_id}":{"get":{"tags":["pipeline-ops"],"summary":"Get Template","operationId":"get_template_api_v1_admin_internal_ops_pricing_templates__template_id__get","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["pipeline-ops"],"summary":"Update Template","operationId":"update_template_api_v1_admin_internal_ops_pricing_templates__template_id__put","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TemplateUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["pipeline-ops"],"summary":"Delete Template","operationId":"delete_template_api_v1_admin_internal_ops_pricing_templates__template_id__delete","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/pricing-templates/{template_id}/clone":{"post":{"tags":["pipeline-ops"],"summary":"Clone Template","operationId":"clone_template_api_v1_admin_internal_ops_pricing_templates__template_id__clone_post","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/pricing-templates/{template_id}/apply":{"post":{"tags":["pipeline-ops"],"summary":"Apply Template","description":"Return the template JSON so the caller can apply it to a pricing\nconfig. We intentionally don't mutate any pricing config here — the\ncaller decides what to do with the payload.","operationId":"apply_template_api_v1_admin_internal_ops_pricing_templates__template_id__apply_post","parameters":[{"name":"template_id","in":"path","required":true,"schema":{"type":"string","title":"Template Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/bulk-lock":{"get":{"tags":["pipeline-ops"],"summary":"List Bulk Jobs","operationId":"list_bulk_jobs_api_v1_admin_internal_ops_bulk_lock_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pipeline-ops"],"summary":"Submit Bulk Lock","operationId":"submit_bulk_lock_api_v1_admin_internal_ops_bulk_lock_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkLockSubmit"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/bulk-lock/{job_id}":{"get":{"tags":["pipeline-ops"],"summary":"Get Bulk Job","operationId":"get_bulk_job_api_v1_admin_internal_ops_bulk_lock__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"string","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/bulk-lock/sample-csv":{"post":{"tags":["pipeline-ops"],"summary":"Bulk Lock Sample Csv","description":"Return a CSV template for the bulk-lock upload UI.","operationId":"bulk_lock_sample_csv_api_v1_admin_internal_ops_bulk_lock_sample_csv_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/ops/product-change/grouping":{"get":{"tags":["pipeline-ops"],"summary":"Pcg List","operationId":"pcg_list_api_v1_admin_internal_ops_product_change_grouping_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"source_product","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Product"}},{"name":"target_product","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Product"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["pipeline-ops"],"summary":"Pcg Create","operationId":"pcg_create_api_v1_admin_internal_ops_product_change_grouping_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductChangeGroupingCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/product-change/grouping/{gid}":{"get":{"tags":["pipeline-ops"],"summary":"Pcg Get","operationId":"pcg_get_api_v1_admin_internal_ops_product_change_grouping__gid__get","parameters":[{"name":"gid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/product-change/grouping/{gid}/execute":{"post":{"tags":["pipeline-ops"],"summary":"Pcg Execute","operationId":"pcg_execute_api_v1_admin_internal_ops_product_change_grouping__gid__execute_post","parameters":[{"name":"gid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ops/product-change/grouping/{gid}/cancel":{"post":{"tags":["pipeline-ops"],"summary":"Pcg Cancel","operationId":"pcg_cancel_api_v1_admin_internal_ops_product_change_grouping__gid__cancel_post","parameters":[{"name":"gid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Gid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/search":{"get":{"tags":["search"],"summary":"Global cross-entity search","description":"Search across loans, investors, sheets, lock requests, and Wave D2 entities.\n\nReturns:\n    {\n      \"query\": q,\n      \"results\": {\n        \"loans\": [...],\n        \"investors\": [...],\n        \"sheets\": [...],\n        \"lock_requests\": [...],\n        \"partnerships\": [...],\n        \"pricing_configs\": [...],\n        \"lock_confirmation_docs\": [...],\n        \"rate_alerts\": [...],\n        \"bids\": [...],\n        \"tradeable_loans\": [...],\n        \"reports\": [...],\n      },\n      \"total\": int,\n      \"capped\": bool,\n    }","operationId":"global_search_api_v1_admin_internal_search_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","maxLength":200,"default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":25,"minimum":1,"default":5,"title":"Limit"}}],"responses":{"200":{"description":"Grouped search results.","content":{"application/json":{"schema":{},"example":{"query":"uwm","results":{"investors":[{"id":"inv_uwm","name":"United Wholesale Mortgage"}],"sheets":[{"id":"sheet_01HX8...","investor_name":"UWM","effective_ts":"2026-04-14T13:00:00Z"}],"loans":[],"lock_requests":[],"partnerships":[]},"total":2}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/whats-new":{"get":{"tags":["search"],"summary":"What's new across entities (changelog feed)","description":"Return the most recent feature additions for the dashboard banner.","operationId":"whats_new_api_v1_admin_internal_whats_new_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/publish":{"get":{"tags":["org-settings"],"summary":"Get Publish","operationId":"get_publish_api_v1_admin_internal_settings_publish_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["org-settings"],"summary":"Put Publish","operationId":"put_publish_api_v1_admin_internal_settings_publish_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["org-settings"],"summary":"Patch Publish","operationId":"patch_publish_api_v1_admin_internal_settings_publish_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublishUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/auto-expire":{"get":{"tags":["org-settings"],"summary":"Get Auto Expire","operationId":"get_auto_expire_api_v1_admin_internal_settings_auto_expire_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["org-settings"],"summary":"Put Auto Expire","operationId":"put_auto_expire_api_v1_admin_internal_settings_auto_expire_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoExpireUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["org-settings"],"summary":"Patch Auto Expire","operationId":"patch_auto_expire_api_v1_admin_internal_settings_auto_expire_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoExpireUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/compliance":{"get":{"tags":["org-settings"],"summary":"Get Compliance","operationId":"get_compliance_api_v1_admin_internal_settings_compliance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["org-settings"],"summary":"Put Compliance","operationId":"put_compliance_api_v1_admin_internal_settings_compliance_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["org-settings"],"summary":"Patch Compliance","operationId":"patch_compliance_api_v1_admin_internal_settings_compliance_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/compliance/check-readiness":{"get":{"tags":["org-settings"],"summary":"Compliance Check Readiness","description":"Run enabled compliance checks against a safe sample scenario and return a readiness report.","operationId":"compliance_check_readiness_api_v1_admin_internal_settings_compliance_check_readiness_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/settings/compliance/test-scenario":{"post":{"tags":["org-settings"],"summary":"Compliance Test Scenario","description":"Evaluate a user-supplied scenario against enabled compliance checks.","operationId":"compliance_test_scenario_api_v1_admin_internal_settings_compliance_test_scenario_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ComplianceTestRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/sell-side":{"get":{"tags":["org-settings"],"summary":"Get Sell Side","operationId":"get_sell_side_api_v1_admin_internal_settings_sell_side_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["org-settings"],"summary":"Put Sell Side","operationId":"put_sell_side_api_v1_admin_internal_settings_sell_side_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellSideUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["org-settings"],"summary":"Patch Sell Side","operationId":"patch_sell_side_api_v1_admin_internal_settings_sell_side_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SellSideUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/servicing-fees":{"get":{"tags":["org-settings"],"summary":"List Servicing Fees","description":"Latest effective row per loan_program for this tenant.","operationId":"list_servicing_fees_api_v1_admin_internal_settings_servicing_fees_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["org-settings"],"summary":"Create Servicing Fee","operationId":"create_servicing_fee_api_v1_admin_internal_settings_servicing_fees_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicingFeeCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/servicing-fees/history":{"get":{"tags":["org-settings"],"summary":"Servicing Fee History","operationId":"servicing_fee_history_api_v1_admin_internal_settings_servicing_fees_history_get","parameters":[{"name":"program","in":"query","required":true,"schema":{"type":"string","description":"loan_program to return history for","title":"Program"},"description":"loan_program to return history for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/servicing-fees/{fee_id}":{"patch":{"tags":["org-settings"],"summary":"Patch Servicing Fee","operationId":"patch_servicing_fee_api_v1_admin_internal_settings_servicing_fees__fee_id__patch","parameters":[{"name":"fee_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fee Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ServicingFeeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["org-settings"],"summary":"Delete Servicing Fee","operationId":"delete_servicing_fee_api_v1_admin_internal_settings_servicing_fees__fee_id__delete","parameters":[{"name":"fee_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fee Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/settings/capabilities":{"get":{"tags":["org-settings"],"summary":"Get Capabilities","operationId":"get_capabilities_api_v1_admin_internal_settings_capabilities_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"tags":["org-settings"],"summary":"Patch Capabilities","operationId":"patch_capabilities_api_v1_admin_internal_settings_capabilities_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CapabilityUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/capabilities/{tenant_id}":{"get":{"tags":["org-settings-public"],"summary":"Public Get Capabilities","description":"Public read of a tenant's capability flags (no auth).\n\nMissing rows auto-materialize with defaults so the UI never 404s on\nfirst-paint for a freshly-provisioned tenant.","operationId":"public_get_capabilities_api_v1_public_capabilities__tenant_id__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/enums/lock-operations":{"get":{"tags":["enums"],"summary":"Get Lock Operations","description":"Return our 10 lock operations, each mapped to its Polly op code.","operationId":"get_lock_operations_api_v1_admin_internal_enums_lock_operations_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Lock Operations Api V1 Admin Internal Enums Lock Operations Get"}}}}}}},"/api/v1/admin/internal/enums/lock-statuses":{"get":{"tags":["enums"],"summary":"Get Lock Statuses","description":"Return our 8 lock statuses mapped to Polly display labels.","operationId":"get_lock_statuses_api_v1_admin_internal_enums_lock_statuses_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get Lock Statuses Api V1 Admin Internal Enums Lock Statuses Get"}}}}}}},"/api/v1/admin/internal/enums/all-enums":{"get":{"tags":["enums"],"summary":"Get All Enums","description":"Every enum catalog grouped by entity — canonical frontend dropdown source.","operationId":"get_all_enums_api_v1_admin_internal_enums_all_enums_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Get All Enums Api V1 Admin Internal Enums All Enums Get"}}}}}}},"/api/v1/admin/internal/async-tasks/":{"get":{"tags":["async-tasks"],"summary":"List Async Tasks","operationId":"list_async_tasks_api_v1_admin_internal_async_tasks__get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"kind","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"}},{"name":"since","in":"query","required":false,"schema":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Since"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["async-tasks"],"summary":"Create Async Task","operationId":"create_async_task_api_v1_admin_internal_async_tasks__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AsyncTaskCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/async-tasks/{task_id}":{"get":{"tags":["async-tasks"],"summary":"Get Async Task","operationId":"get_async_task_api_v1_admin_internal_async_tasks__task_id__get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["async-tasks"],"summary":"Delete Async Task","operationId":"delete_async_task_api_v1_admin_internal_async_tasks__task_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/async-tasks/{task_id}/cancel":{"post":{"tags":["async-tasks"],"summary":"Cancel Async Task","operationId":"cancel_async_task_api_v1_admin_internal_async_tasks__task_id__cancel_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/dynamic-query/":{"get":{"tags":["dynamic-query"],"summary":"List Saved Queries","operationId":"list_saved_queries_api_v1_admin_internal_dynamic_query__get","parameters":[{"name":"entity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity"}},{"name":"owner_account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Account Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["dynamic-query"],"summary":"Create Saved Query","operationId":"create_saved_query_api_v1_admin_internal_dynamic_query__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedQueryCreate"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/dynamic-query/{qid}":{"get":{"tags":["dynamic-query"],"summary":"Get Saved Query","operationId":"get_saved_query_api_v1_admin_internal_dynamic_query__qid__get","parameters":[{"name":"qid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Qid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["dynamic-query"],"summary":"Patch Saved Query","operationId":"patch_saved_query_api_v1_admin_internal_dynamic_query__qid__patch","parameters":[{"name":"qid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Qid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SavedQueryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["dynamic-query"],"summary":"Delete Saved Query","operationId":"delete_saved_query_api_v1_admin_internal_dynamic_query__qid__delete","parameters":[{"name":"qid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Qid"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/dynamic-query/{qid}/execute":{"post":{"tags":["dynamic-query"],"summary":"Execute Saved Query","operationId":"execute_saved_query_api_v1_admin_internal_dynamic_query__qid__execute_post","parameters":[{"name":"qid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Qid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":1000,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/dynamic-query/execute-ad-hoc":{"post":{"tags":["dynamic-query"],"summary":"Execute Ad Hoc","operationId":"execute_ad_hoc_api_v1_admin_internal_dynamic_query_execute_ad_hoc_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdHocExecute"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/funding-costs":{"get":{"tags":["funding-costs"],"summary":"List Funding Costs","description":"Latest effective funding cost per loan_program.","operationId":"list_funding_costs_api_v1_admin_internal_funding_costs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["funding-costs"],"summary":"Create Funding Cost","operationId":"create_funding_cost_api_v1_admin_internal_funding_costs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingCostCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/funding-costs/history":{"get":{"tags":["funding-costs"],"summary":"Funding Cost History","operationId":"funding_cost_history_api_v1_admin_internal_funding_costs_history_get","parameters":[{"name":"program","in":"query","required":true,"schema":{"type":"string","description":"loan_program to return history for","title":"Program"},"description":"loan_program to return history for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/funding-costs/{fc_id}":{"patch":{"tags":["funding-costs"],"summary":"Patch Funding Cost","operationId":"patch_funding_cost_api_v1_admin_internal_funding_costs__fc_id__patch","parameters":[{"name":"fc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FundingCostUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["funding-costs"],"summary":"Delete Funding Cost","operationId":"delete_funding_cost_api_v1_admin_internal_funding_costs__fc_id__delete","parameters":[{"name":"fc_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Fc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/product-payups":{"get":{"tags":["product-payups"],"summary":"List Product Payups","description":"Latest effective payup per (product_code, coupon_pct, investor_name).","operationId":"list_product_payups_api_v1_admin_internal_product_payups_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["product-payups"],"summary":"Create Product Payup","operationId":"create_product_payup_api_v1_admin_internal_product_payups_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPayupCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/product-payups/history":{"get":{"tags":["product-payups"],"summary":"Product Payup History","operationId":"product_payup_history_api_v1_admin_internal_product_payups_history_get","parameters":[{"name":"product_code","in":"query","required":true,"schema":{"type":"string","description":"product_code to return history for","title":"Product Code"},"description":"product_code to return history for"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/product-payups/{pp_id}":{"patch":{"tags":["product-payups"],"summary":"Patch Product Payup","operationId":"patch_product_payup_api_v1_admin_internal_product_payups__pp_id__patch","parameters":[{"name":"pp_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pp Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductPayupUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["product-payups"],"summary":"Delete Product Payup","operationId":"delete_product_payup_api_v1_admin_internal_product_payups__pp_id__delete","parameters":[{"name":"pp_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Pp Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/margin-mapping/categories":{"get":{"tags":["margin-mapping"],"summary":"List Margin Categories","description":"List margin-mapping categories. Optional `dimension` filter narrows\nthe result to one of the 4 named dimensions.","operationId":"list_margin_categories_api_v1_admin_internal_margin_mapping_categories_get","parameters":[{"name":"dimension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to one of branch|comp|corporate|misc","title":"Dimension"},"description":"Filter to one of branch|comp|corporate|misc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["margin-mapping"],"summary":"Create Margin Category","operationId":"create_margin_category_api_v1_admin_internal_margin_mapping_categories_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarginCategoryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/margin-mapping/dimensions":{"get":{"tags":["margin-mapping"],"summary":"List Margin Dimensions","description":"Enumerate the 4 named dimensions with per-dimension counts. Polly's\nmargin UI uses this shape to render the taxonomy tree (branch/comp/\ncorporate/misc tabs with a count badge on each).","operationId":"list_margin_dimensions_api_v1_admin_internal_margin_mapping_dimensions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/margin-mapping/categories/{cat_id}":{"get":{"tags":["margin-mapping"],"summary":"Get Margin Category","operationId":"get_margin_category_api_v1_admin_internal_margin_mapping_categories__cat_id__get","parameters":[{"name":"cat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Cat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["margin-mapping"],"summary":"Patch Margin Category","operationId":"patch_margin_category_api_v1_admin_internal_margin_mapping_categories__cat_id__patch","parameters":[{"name":"cat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Cat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarginCategoryUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["margin-mapping"],"summary":"Delete Margin Category","operationId":"delete_margin_category_api_v1_admin_internal_margin_mapping_categories__cat_id__delete","parameters":[{"name":"cat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Cat Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/margin-mapping/categories/{cat_id}/products":{"post":{"tags":["margin-mapping"],"summary":"Add Products To Category","description":"Append product_codes to the category (de-duplicated).","operationId":"add_products_to_category_api_v1_admin_internal_margin_mapping_categories__cat_id__products_post","parameters":[{"name":"cat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Cat Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductCodesBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/margin-mapping/categories/{cat_id}/products/{code}":{"delete":{"tags":["margin-mapping"],"summary":"Remove Product From Category","operationId":"remove_product_from_category_api_v1_admin_internal_margin_mapping_categories__cat_id__products__code__delete","parameters":[{"name":"cat_id","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Cat Id"}},{"name":"code","in":"path","required":true,"schema":{"type":"string","title":"Code"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/margin-mapping/lookup":{"get":{"tags":["margin-mapping"],"summary":"Lookup Margin For Product","description":"Return every active category containing this product_code and its\ndefault margin. Dashboard uses this when rendering a product row so a\nsingle product can belong to multiple categories (rare but allowed).","operationId":"lookup_margin_for_product_api_v1_admin_internal_margin_mapping_lookup_get","parameters":[{"name":"product_code","in":"query","required":true,"schema":{"type":"string","description":"product_code to look up","title":"Product Code"},"description":"product_code to look up"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/access-requests":{"get":{"tags":["access-requests"],"summary":"List Access Requests","description":"List access requests (admin-facing). Filter by status/account_id.","operationId":"list_access_requests_api_v1_admin_internal_access_requests_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"account_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["access-requests"],"summary":"Create Access Request","description":"Submit a new access request.\n\nResolves the requesting account from the caller's API key. Emits\nwebhook event access_request.submitted.","operationId":"create_access_request_api_v1_admin_internal_access_requests_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessRequestCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/access-requests/pending":{"get":{"tags":["access-requests"],"summary":"Count Pending Access Requests","description":"Count of pending access requests for the current tenant (badge driver).","operationId":"count_pending_access_requests_api_v1_admin_internal_access_requests_pending_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/access-requests/{request_id}/approve":{"post":{"tags":["access-requests"],"summary":"Approve Access Request","description":"Approve an access request. MVP: records approval only — the admin\nstill grants the role/permission separately. Emits access_request.approved.","operationId":"approve_access_request_api_v1_admin_internal_access_requests__request_id__approve_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessRequestDecision"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/access-requests/{request_id}/reject":{"post":{"tags":["access-requests"],"summary":"Reject Access Request","description":"Reject an access request. Emits access_request.rejected.","operationId":"reject_access_request_api_v1_admin_internal_access_requests__request_id__reject_post","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessRequestDecision"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/no-exchange-role":{"get":{"tags":["empty-states"],"summary":"No Exchange Role","description":"Friendly page shown when a user lacks the Exchange role.","operationId":"no_exchange_role_no_exchange_role_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/no-partnership":{"get":{"tags":["empty-states"],"summary":"No Partnership","description":"Friendly page shown when user lacks an active partnership.","operationId":"no_partnership_no_partnership_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/no-permission":{"get":{"tags":["empty-states"],"summary":"No Permission","description":"Generic permission-denied friendly page.\n\nQuery param `?required=<code>` shows the specific permission that was\nneeded. If absent, shows a generic message.","operationId":"no_permission_no_permission_get","parameters":[{"name":"required","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Required"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach":{"get":{"tags":["mortgage-coach"],"summary":"List Mortgage Coach Reports","operationId":"list_mortgage_coach_reports_api_v1_admin_internal_mortgage_coach_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["mortgage-coach"],"summary":"Create Mortgage Coach Report","operationId":"create_mortgage_coach_report_api_v1_admin_internal_mortgage_coach_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MortgageCoachCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}":{"get":{"tags":["mortgage-coach"],"summary":"Get Mortgage Coach Report","operationId":"get_mortgage_coach_report_api_v1_admin_internal_mortgage_coach__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}/send":{"post":{"tags":["mortgage-coach"],"summary":"Send Mortgage Coach Report","operationId":"send_mortgage_coach_report_api_v1_admin_internal_mortgage_coach__report_id__send_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/MortgageCoachSendBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}/html":{"get":{"tags":["mortgage-coach"],"summary":"Mortgage Coach Report Html","operationId":"mortgage_coach_report_html_api_v1_admin_internal_mortgage_coach__report_id__html_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}/generate-pdf":{"post":{"tags":["mortgage-coach"],"summary":"Generate Mortgage Coach Pdf Endpoint","description":"Regenerate the PDF for an existing report and persist the bytes.","operationId":"generate_mortgage_coach_pdf_endpoint_api_v1_admin_internal_mortgage_coach__report_id__generate_pdf_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}/pdf":{"get":{"tags":["mortgage-coach"],"summary":"Get Mortgage Coach Pdf","description":"Returns the persisted PDF inline (Content-Type application/pdf).","operationId":"get_mortgage_coach_pdf_api_v1_admin_internal_mortgage_coach__report_id__pdf_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}/pdf/download":{"get":{"tags":["mortgage-coach"],"summary":"Download Mortgage Coach Pdf","description":"Same bytes as /pdf, but forces an attachment download.","operationId":"download_mortgage_coach_pdf_api_v1_admin_internal_mortgage_coach__report_id__pdf_download_get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/mortgage-coach/{report_id}/track-view":{"post":{"tags":["mortgage-coach"],"summary":"Track Mortgage Coach View","operationId":"track_mortgage_coach_view_api_v1_admin_internal_mortgage_coach__report_id__track_view_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/MortgageCoachTrackViewBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc-transactions":{"get":{"tags":["epc"],"summary":"List Epc Transactions","operationId":"list_epc_transactions_api_v1_admin_internal_epc_transactions_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"encompass_loan_guid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encompass Loan Guid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["epc"],"summary":"Create Epc Transaction","operationId":"create_epc_transaction_api_v1_admin_internal_epc_transactions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EpcCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc-transactions/{tx_id}":{"get":{"tags":["epc"],"summary":"Get Epc Transaction","operationId":"get_epc_transaction_api_v1_admin_internal_epc_transactions__tx_id__get","parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc-transactions/{tx_id}/process":{"post":{"tags":["epc"],"summary":"Process Epc Transaction","description":"Stub: marks the transaction complete with a canned mock response.","operationId":"process_epc_transaction_api_v1_admin_internal_epc_transactions__tx_id__process_post","parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc-transactions/{tx_id}/retry":{"post":{"tags":["epc"],"summary":"Retry Epc Transaction","operationId":"retry_epc_transaction_api_v1_admin_internal_epc_transactions__tx_id__retry_post","parameters":[{"name":"tx_id","in":"path","required":true,"schema":{"type":"string","title":"Tx Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/pe-document-upload-settings":{"get":{"tags":["pe-doc-upload-settings"],"summary":"Get Pe Doc Upload Settings","operationId":"get_pe_doc_upload_settings_api_v1_admin_internal_pe_document_upload_settings_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"put":{"tags":["pe-doc-upload-settings"],"summary":"Put Pe Doc Upload Settings","operationId":"put_pe_doc_upload_settings_api_v1_admin_internal_pe_document_upload_settings_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeDocUploadPut"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["pe-doc-upload-settings"],"summary":"Patch Pe Doc Upload Settings","operationId":"patch_pe_doc_upload_settings_api_v1_admin_internal_pe_document_upload_settings_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PeDocUploadPatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents":{"get":{"tags":["lock-confirmation-docs"],"summary":"List Lock Confirmation Docs","operationId":"list_lock_confirmation_docs_api_v1_admin_internal_lock_confirmation_documents_get","parameters":[{"name":"lock_request_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lock Request Id"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["lock-confirmation-docs"],"summary":"Create Lock Confirmation Doc","operationId":"create_lock_confirmation_doc_api_v1_admin_internal_lock_confirmation_documents_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockConfirmCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}":{"get":{"tags":["lock-confirmation-docs"],"summary":"Get Lock Confirmation Doc","operationId":"get_lock_confirmation_doc_api_v1_admin_internal_lock_confirmation_documents__doc_id__get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/html":{"get":{"tags":["lock-confirmation-docs"],"summary":"Lock Confirmation Doc Html","operationId":"lock_confirmation_doc_html_api_v1_admin_internal_lock_confirmation_documents__doc_id__html_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/deliver":{"post":{"tags":["lock-confirmation-docs"],"summary":"Deliver Lock Confirmation Doc","operationId":"deliver_lock_confirmation_doc_api_v1_admin_internal_lock_confirmation_documents__doc_id__deliver_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/LockConfirmDeliverBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/track-view":{"post":{"tags":["lock-confirmation-docs"],"summary":"Track Lock Confirmation View","operationId":"track_lock_confirmation_view_api_v1_admin_internal_lock_confirmation_documents__doc_id__track_view_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/generate-pdf":{"post":{"tags":["lock-confirmation-docs"],"summary":"Generate Lock Confirmation Pdf Endpoint","description":"Regenerate the PDF for an existing lock-confirmation doc.","operationId":"generate_lock_confirmation_pdf_endpoint_api_v1_admin_internal_lock_confirmation_documents__doc_id__generate_pdf_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/pdf":{"get":{"tags":["lock-confirmation-docs"],"summary":"Get Lock Confirmation Pdf","description":"Returns the persisted PDF inline.","operationId":"get_lock_confirmation_pdf_api_v1_admin_internal_lock_confirmation_documents__doc_id__pdf_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/pdf/download":{"get":{"tags":["lock-confirmation-docs"],"summary":"Download Lock Confirmation Pdf","description":"Forces attachment download of the lock-confirmation PDF.","operationId":"download_lock_confirmation_pdf_api_v1_admin_internal_lock_confirmation_documents__doc_id__pdf_download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/lock-confirmation-documents/{doc_id}/sign":{"post":{"tags":["lock-confirmation-docs"],"summary":"Sign Lock Confirmation Doc","operationId":"sign_lock_confirmation_doc_api_v1_admin_internal_lock_confirmation_documents__doc_id__sign_post","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LockConfirmSignBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lock-requests/if-pending":{"get":{"tags":["tier3"],"summary":"Lock Request If Pending","description":"Return {has_pending, pending_request} for a loan/type combo.\n\nMatches any non-terminal status (submitted / awaiting_approval /\ncountered / awaiting_info). Graceful: invalid loan_id → has_pending=false.","operationId":"lock_request_if_pending_api_v1_admin_internal_tier3_lock_requests_if_pending_get","parameters":[{"name":"loan_id","in":"query","required":true,"schema":{"type":"string","title":"Loan Id"}},{"name":"request_type","in":"query","required":true,"schema":{"type":"string","title":"Request Type"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/resources/{kind}/{resource_id}/lock-status":{"get":{"tags":["tier3"],"summary":"Resource Lock Status","description":"Introspect external-lock state on a loan/sheet/config.\n\nMVP: loans table lacks ``external_lock_holder`` — return\n{locked: false}. For loans, if the loan is already status='locked'\nwe surface that as ``locked: true, holder: 'lock_desk'`` so the UI\nhas something useful.","operationId":"resource_lock_status_api_v1_admin_internal_tier3_resources__kind___resource_id__lock_status_get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"resource_id","in":"path","required":true,"schema":{"type":"string","title":"Resource Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lock-requests/{lock_request_id}/reprice-quick":{"post":{"tags":["tier3"],"summary":"Lock Request Reprice Quick","description":"Trigger a lightweight reprice and persist the delta.\n\nFor the MVP we don't actually call best_execution (that would\nrequire a full PricingRequest). Instead we simulate a 1.5 bps move,\nstore the new requested_rate_pct on the lock request, write an\nevent, and emit ``lock.repriced_quick``.","operationId":"lock_request_reprice_quick_api_v1_admin_internal_tier3_lock_requests__lock_request_id__reprice_quick_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/pricing/dynamic-detail/{request_id}":{"get":{"tags":["tier3"],"summary":"Pricing Dynamic Detail","description":"Return a drill-down for how a price was computed.\n\nNo audit trail of rule applications exists yet in this codebase, so\nthis returns a structured stub that still matches the real shape so\nthe UI can render.","operationId":"pricing_dynamic_detail_api_v1_admin_internal_tier3_pricing_dynamic_detail__request_id__get","parameters":[{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lockdesk/workflow-policies/{policy_id}/referenced-by":{"get":{"tags":["tier3"],"summary":"Workflow Policy Referenced By","description":"Return entities that reference a workflow policy.\n\nMVP: the workflow policy already points at a pricing config, so we\nsurface that single back-reference.","operationId":"workflow_policy_referenced_by_api_v1_admin_internal_tier3_lockdesk_workflow_policies__policy_id__referenced_by_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"}}}}}}},"/api/v1/admin/internal/tier3/pricing-configs/{config_id}/check-mbs-usage":{"get":{"tags":["tier3"],"summary":"Pricing Config Check Mbs Usage","description":"Scan rules+spreads for MBS coupon references.\n\nVery lightweight: looks for any rule/spread whose criteria or action\nJSON mentions ``mbs`` (case-insensitive, string match on the\nserialized blob).","operationId":"pricing_config_check_mbs_usage_api_v1_admin_internal_tier3_pricing_configs__config_id__check_mbs_usage_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/pricing-configs/check-name":{"get":{"tags":["tier3"],"summary":"Pricing Config Check Name","description":"Case-insensitive name availability for the caller's tenant.","operationId":"pricing_config_check_name_api_v1_admin_internal_tier3_pricing_configs_check_name_get","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string","title":"Name"}},{"name":"tenant_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lock-requests/{lock_request_id}/custom-credit":{"post":{"tags":["tier3"],"summary":"Lock Request Custom Credit","operationId":"lock_request_custom_credit_api_v1_admin_internal_tier3_lock_requests__lock_request_id__custom_credit_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CustomCreditBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/entities/{kind}/{entity_id}/find-usages-of":{"get":{"tags":["tier3"],"summary":"Find Usages Of","operationId":"find_usages_of_api_v1_admin_internal_tier3_entities__kind___entity_id__find_usages_of_get","parameters":[{"name":"kind","in":"path","required":true,"schema":{"type":"string","title":"Kind"}},{"name":"entity_id","in":"path","required":true,"schema":{"type":"string","title":"Entity Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/pricing-configs/{config_id}/investor-rates-used":{"get":{"tags":["tier3"],"summary":"Pricing Config Investor Rates Used","operationId":"pricing_config_investor_rates_used_api_v1_admin_internal_tier3_pricing_configs__config_id__investor_rates_used_get","parameters":[{"name":"config_id","in":"path","required":true,"schema":{"type":"string","title":"Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/rates/{rate_id}/gaip":{"get":{"tags":["tier3"],"summary":"Rate Gaip","description":"GAIP variant lookup — stubbed.","operationId":"rate_gaip_api_v1_admin_internal_tier3_rates__rate_id__gaip_get","parameters":[{"name":"rate_id","in":"path","required":true,"schema":{"type":"string","title":"Rate Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lock-requests/{lock_request_id}/note":{"post":{"tags":["tier3"],"summary":"Lock Request Add Note","operationId":"lock_request_add_note_api_v1_admin_internal_tier3_lock_requests__lock_request_id__note_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lock-requests/{lock_request_id}/los-information/preload":{"post":{"tags":["tier3"],"summary":"Lock Request Los Preload","operationId":"lock_request_los_preload_api_v1_admin_internal_tier3_lock_requests__lock_request_id__los_information_preload_post","parameters":[{"name":"lock_request_id","in":"path","required":true,"schema":{"type":"string","title":"Lock Request Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LosPreloadBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/loans/{loan_id}/has-pending-product-change":{"get":{"tags":["tier3"],"summary":"Loan Has Pending Product Change","operationId":"loan_has_pending_product_change_api_v1_admin_internal_tier3_loans__loan_id__has_pending_product_change_get","parameters":[{"name":"loan_id","in":"path","required":true,"schema":{"type":"string","title":"Loan Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/tier3/lock-confirmation-documents/{doc_id}/download":{"get":{"tags":["tier3"],"summary":"Lock Confirmation Document Download","description":"Download the generated HTML (served as octet-stream with a\n``.pdf`` filename since real PDF generation is not wired yet).","operationId":"lock_confirmation_document_download_api_v1_admin_internal_tier3_lock_confirmation_documents__doc_id__download_get","parameters":[{"name":"doc_id","in":"path","required":true,"schema":{"type":"string","title":"Doc Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reports":{"get":{"tags":["reports"],"summary":"List reports","description":"List all reports defined for the tenant, optionally filtered by category / active flag.","operationId":"list_reports_api_v1_admin_internal_reports_get","parameters":[{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"List of reports.","content":{"application/json":{"schema":{},"example":[{"id":"rpt_01HX...","name":"Pipeline by lock status","category":"pipeline","report_type":"embedded","is_active":true}]}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["reports"],"summary":"Create a report definition","description":"Create a report — embedded dashboard, SQL query, or CSV export.","operationId":"create_report_api_v1_admin_internal_reports_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reports/categories":{"get":{"tags":["reports"],"summary":"Report categories with counts","description":"Distinct categories with counts, useful for a nav sidebar.","operationId":"list_categories_api_v1_admin_internal_reports_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/reports/{report_id}":{"get":{"tags":["reports"],"summary":"Get a report definition","operationId":"get_report_api_v1_admin_internal_reports__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["reports"],"summary":"Update a report","operationId":"update_report_api_v1_admin_internal_reports__report_id__patch","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["reports"],"summary":"Delete a report","operationId":"delete_report_api_v1_admin_internal_reports__report_id__delete","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/reports/{report_id}/run":{"post":{"tags":["reports"],"summary":"Execute a report","description":"Execute a report based on its type.\n\n- embedded: returns the dashboard config verbatim\n- sql: runs the query and returns rows\n- csv_export: same as sql but returns CSV\n- rest: fetches config.url\n- pdf: 202 Accepted (not yet implemented)","operationId":"run_report_api_v1_admin_internal_reports__report_id__run_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Report output — shape varies by report_type.","content":{"application/json":{"schema":{},"example":{"report_id":"rpt_01HX...","type":"sql","columns":["status","count"],"rows":[["locked",42],["floating",9]]}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/pricing-explain":{"post":{"tags":["ai-moats"],"summary":"Pricing Explain","description":"Generate (or reuse cached) natural-language explanation for a price.","operationId":"pricing_explain_api_v1_admin_internal_ai_pricing_explain_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PricingExplainRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/pricing-explain/history":{"get":{"tags":["ai-moats"],"summary":"Pricing Explain History","description":"Recent explanations for this tenant, newest first.","operationId":"pricing_explain_history_api_v1_admin_internal_ai_pricing_explain_history_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/pricing-explain/{explanation_id}/view":{"post":{"tags":["ai-moats"],"summary":"Pricing Explain View","description":"Increment viewed_count for an explanation (engagement signal).","operationId":"pricing_explain_view_api_v1_admin_internal_ai_pricing_explain__explanation_id__view_post","parameters":[{"name":"explanation_id","in":"path","required":true,"schema":{"type":"string","title":"Explanation Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/config-suggest/{pricing_config_id}/analyze":{"post":{"tags":["ai-moats"],"summary":"Config Suggest Analyze","description":"Generate AI suggestions for optimizing a pricing configuration.","operationId":"config_suggest_analyze_api_v1_admin_internal_ai_config_suggest__pricing_config_id__analyze_post","parameters":[{"name":"pricing_config_id","in":"path","required":true,"schema":{"type":"string","title":"Pricing Config Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/config-suggest":{"get":{"tags":["ai-moats"],"summary":"Config Suggest List","description":"List AI config suggestions for this tenant.","operationId":"config_suggest_list_api_v1_admin_internal_ai_config_suggest_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"pricing_config_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Config Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/config-suggest/{suggestion_id}/accept":{"post":{"tags":["ai-moats"],"summary":"Config Suggest Accept","description":"Mark a suggestion accepted — human will apply manually.","operationId":"config_suggest_accept_api_v1_admin_internal_ai_config_suggest__suggestion_id__accept_post","parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","title":"Suggestion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/config-suggest/{suggestion_id}/dismiss":{"post":{"tags":["ai-moats"],"summary":"Config Suggest Dismiss","description":"Dismiss a suggestion with an optional reason (captured in rationale).","operationId":"config_suggest_dismiss_api_v1_admin_internal_ai_config_suggest__suggestion_id__dismiss_post","parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","title":"Suggestion Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigDismissBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/config-suggest/{suggestion_id}/apply":{"post":{"tags":["ai-moats"],"summary":"Config Suggest Apply","description":"Auto-apply a suggestion (safety-gated to margin_adjust / rule_disable).\n\nOther kinds return 202 + instruction to apply via existing admin UI.\nActual config-mutation logic is intentionally conservative for MVP:\nthe suggestion is marked 'applied' and a webhook fires so downstream\nautomation (if any) can pick it up.","operationId":"config_suggest_apply_api_v1_admin_internal_ai_config_suggest__suggestion_id__apply_post","parameters":[{"name":"suggestion_id","in":"path","required":true,"schema":{"type":"string","title":"Suggestion Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/lo-copilot/sessions":{"post":{"tags":["ai-moats"],"summary":"Lo Copilot Create Session","description":"Create a new persistent LO copilot session.","operationId":"lo_copilot_create_session_api_v1_admin_internal_ai_lo_copilot_sessions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LOCopilotSessionCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["ai-moats"],"summary":"Lo Copilot List Sessions","description":"List the caller's LO copilot sessions, newest first.","operationId":"lo_copilot_list_sessions_api_v1_admin_internal_ai_lo_copilot_sessions_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/lo-copilot/sessions/{session_id}":{"get":{"tags":["ai-moats"],"summary":"Lo Copilot Get Session","description":"Return a session with its turns in chronological order.","operationId":"lo_copilot_get_session_api_v1_admin_internal_ai_lo_copilot_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["ai-moats"],"summary":"Lo Copilot Delete Session","description":"Delete a session (cascade-deletes its turns).","operationId":"lo_copilot_delete_session_api_v1_admin_internal_ai_lo_copilot_sessions__session_id__delete","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/lo-copilot/sessions/{session_id}/chat":{"post":{"tags":["ai-moats"],"summary":"Lo Copilot Chat","description":"Send a message to an LO copilot session and get a reply.\n\nLoads prior turns as context, auto-injects loan data when loan_id is\nset on the session, and every 10 turns refreshes context_summary.","operationId":"lo_copilot_chat_api_v1_admin_internal_ai_lo_copilot_sessions__session_id__chat_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LOCopilotChat"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/anomaly-narrate":{"post":{"tags":["ai-moats"],"summary":"Anomaly Narrate","description":"Generate plain-English narratives for a batch of anomalies.","operationId":"anomaly_narrate_api_v1_admin_internal_ai_anomaly_narrate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnomalyNarrateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/anomaly-narratives/recent":{"get":{"tags":["ai-moats"],"summary":"Anomaly Narratives Recent","description":"Return the current in-process narrative cache (5-minute TTL).","operationId":"anomaly_narratives_recent_api_v1_admin_internal_ai_anomaly_narratives_recent_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/ai/nli-assistant/query":{"post":{"tags":["ai-moats"],"summary":"Nli Assistant Query","description":"Unified NLI entry point — classify, dispatch, log.\n\nAuthentication is optional: if an ``X-API-Key`` header is supplied we\nresolve the account for attribution, otherwise the query is logged\nanonymously (tenant-scoped).  This mirrors the dashboard's chat FAB\nwhich is already authenticated at the session layer.","operationId":"nli_assistant_query_api_v1_admin_internal_ai_nli_assistant_query_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NliAssistantQuery"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/ai/nli-assistant/examples":{"get":{"tags":["ai-moats"],"summary":"Nli Assistant Examples","description":"Canned example prompts for the NLI Assistant welcome screen.","operationId":"nli_assistant_examples_api_v1_admin_internal_ai_nli_assistant_examples_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/ai/nli-assistant/feedback":{"post":{"tags":["ai-moats"],"summary":"Nli Assistant Feedback","description":"Persist thumbs-up / thumbs-down / flag feedback on an NLI query.","operationId":"nli_assistant_feedback_api_v1_admin_internal_ai_nli_assistant_feedback_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NliAssistantFeedback"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/sessions":{"post":{"tags":["epc2"],"summary":"Initialize a new EPC2 session","operationId":"create_session_api_v1_admin_internal_epc2_sessions_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSessionRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["epc2"],"summary":"List EPC2 sessions","operationId":"list_sessions_api_v1_admin_internal_epc2_sessions_get","parameters":[{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"encompass_loan_guid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encompass Loan Guid"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/sessions/{session_id}":{"get":{"tags":["epc2"],"summary":"EPC2 session detail","operationId":"get_session_api_v1_admin_internal_epc2_sessions__session_id__get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/sessions/{session_id}/messages":{"post":{"tags":["epc2"],"summary":"Log a message on a session","operationId":"log_message_api_v1_admin_internal_epc2_sessions__session_id__messages_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogMessageRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["epc2"],"summary":"Full message log for a session","operationId":"list_messages_api_v1_admin_internal_epc2_sessions__session_id__messages_get","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":200,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/sessions/{session_id}/heartbeat":{"post":{"tags":["epc2"],"summary":"Bump session heartbeat","operationId":"heartbeat_api_v1_admin_internal_epc2_sessions__session_id__heartbeat_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/sessions/{session_id}/complete":{"post":{"tags":["epc2"],"summary":"Mark a session complete","operationId":"complete_session_api_v1_admin_internal_epc2_sessions__session_id__complete_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/sessions/{session_id}/cancel":{"post":{"tags":["epc2"],"summary":"Cancel an in-flight session","operationId":"cancel_session_api_v1_admin_internal_epc2_sessions__session_id__cancel_post","parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/epc2/heartbeat-health":{"get":{"tags":["epc2"],"summary":"Active sessions with missed heartbeats","operationId":"heartbeat_health_api_v1_admin_internal_epc2_heartbeat_health_get","parameters":[{"name":"stale_minutes","in":"query","required":false,"schema":{"type":"integer","maximum":60,"minimum":1,"default":5,"title":"Stale Minutes"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/catalog/products":{"get":{"tags":["catalog"],"summary":"List Products","description":"List catalog products with filters. Paginated (limit/offset).","operationId":"list_products_api_v1_admin_internal_catalog_products_get","parameters":[{"name":"agency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency"}},{"name":"program_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Type"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"is_non_qm","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Non Qm"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"min_term","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Term"}},{"name":"max_term","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Term"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/catalog/products/stats":{"get":{"tags":["catalog"],"summary":"Product Stats","description":"Aggregate counts for dashboard stat cards.","operationId":"product_stats_api_v1_admin_internal_catalog_products_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/catalog/products/facets":{"get":{"tags":["catalog"],"summary":"Product Facets","description":"Distinct-value lists for UI filter builders.","operationId":"product_facets_api_v1_admin_internal_catalog_products_facets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/catalog/products/{product_id}":{"get":{"tags":["catalog"],"summary":"Get Product","operationId":"get_product_api_v1_admin_internal_catalog_products__product_id__get","parameters":[{"name":"product_id","in":"path","required":true,"schema":{"type":"string","title":"Product Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/catalog/products/import":{"post":{"tags":["catalog"],"summary":"Trigger Import","description":"Admin-only: re-run the Polly importer from the saved JSON file.\n\nRuns in the background so the request returns quickly. Emits a\n`catalog.imported` webhook on completion.","operationId":"trigger_import_api_v1_admin_internal_catalog_products_import_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/public/catalog/products":{"get":{"tags":["catalog-public"],"summary":"Public List Products","description":"Public catalog listing — strict rate limit, raw Polly fields hidden.\n\nDeliberately gated: 6,791 rows of structured intel is a moat we preserve.\nConsumers get a basic listing (no raw payload, capped limit, rate-limited).","operationId":"public_list_products_api_v1_public_catalog_products_get","parameters":[{"name":"agency","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency"}},{"name":"program_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Type"}},{"name":"subtype","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtype"}},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Search"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":25,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/branding/":{"get":{"tags":["branding"],"summary":"Get current tenant branding","operationId":"get_branding_api_v1_admin_internal_branding__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"tags":["branding"],"summary":"Update branding (partial)","operationId":"patch_branding_api_v1_admin_internal_branding__patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BrandingPatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/branding/logo-upload":{"post":{"tags":["branding"],"summary":"Upload a new logo","operationId":"upload_logo_api_v1_admin_internal_branding_logo_upload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LogoUploadBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/branding/preview":{"post":{"tags":["branding"],"summary":"Preview a theme without saving","description":"Return what the dashboard would look like with these colors.\n\nProduces a lightweight HTML snippet the UI can drop into an iframe\nor a preview div to show the user the effect before saving.","operationId":"preview_api_v1_admin_internal_branding_preview_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreviewBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/branding/reset-defaults":{"post":{"tags":["branding"],"summary":"Reset to NachoCrunch defaults","operationId":"reset_defaults_api_v1_admin_internal_branding_reset_defaults_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/public/branding/{tenant_id}":{"get":{"tags":["branding-public"],"summary":"Public (sanitized) branding for a tenant","operationId":"public_branding_api_v1_public_branding__tenant_id__get","parameters":[{"name":"tenant_id","in":"path","required":true,"schema":{"type":"string","title":"Tenant Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/":{"get":{"tags":["renegotiation"],"summary":"List renegotiation requests","operationId":"list_renegotiations_api_v1_admin_internal_renegotiation__get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"loan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["renegotiation"],"summary":"Submit a renegotiation request","operationId":"create_renegotiation_api_v1_admin_internal_renegotiation__post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenegotiationCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/summary":{"get":{"tags":["renegotiation"],"summary":"Count + SLA buckets","operationId":"summary_api_v1_admin_internal_renegotiation_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/renegotiation/policies":{"get":{"tags":["renegotiation"],"summary":"List renegotiation policies","operationId":"list_policies_api_v1_admin_internal_renegotiation_policies_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"}}}}}},"post":{"tags":["renegotiation"],"summary":"Create a renegotiation policy","operationId":"create_policy_api_v1_admin_internal_renegotiation_policies_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PolicyCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}":{"get":{"tags":["renegotiation"],"summary":"Detail + events timeline","operationId":"get_renegotiation_api_v1_admin_internal_renegotiation__reneg_id__get","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/approve":{"post":{"tags":["renegotiation"],"summary":"Approve and apply proposed values","operationId":"approve_api_v1_admin_internal_renegotiation__reneg_id__approve_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DecisionNotesBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/reject":{"post":{"tags":["renegotiation"],"summary":"Reject a renegotiation","operationId":"reject_api_v1_admin_internal_renegotiation__reneg_id__reject_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DecisionNotesBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/counter":{"post":{"tags":["renegotiation"],"summary":"Counter-offer","operationId":"counter_api_v1_admin_internal_renegotiation__reneg_id__counter_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_renegotiation__CounterBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/accept-counter":{"post":{"tags":["renegotiation"],"summary":"Accept the counter offer","operationId":"accept_counter_api_v1_admin_internal_renegotiation__reneg_id__accept_counter_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DecisionNotesBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/withdraw":{"post":{"tags":["renegotiation"],"summary":"Requester withdraws","operationId":"withdraw_api_v1_admin_internal_renegotiation__reneg_id__withdraw_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DecisionNotesBody"},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/policies/{policy_id}":{"get":{"tags":["renegotiation"],"summary":"Get a renegotiation policy","operationId":"get_policy_api_v1_admin_internal_renegotiation_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"}}}}}},"patch":{"tags":["renegotiation"],"summary":"Update a renegotiation policy","operationId":"update_policy_api_v1_admin_internal_renegotiation_policies__policy_id__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/PolicyPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["renegotiation"],"summary":"Delete a renegotiation policy","operationId":"delete_policy_api_v1_admin_internal_renegotiation_policies__policy_id__delete","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/v1/admin/internal/renegotiation/policies/by-channel/{channel}":{"get":{"tags":["renegotiation"],"summary":"List renegotiation policies applicable to a given channel","description":"Return every policy whose channel_scope allows `channel` (null\nor empty scope matches all channels). Useful for admin UIs that\npreview which policies govern a given origination channel.","operationId":"list_policies_by_channel_api_v1_admin_internal_renegotiation_policies_by_channel__channel__get","parameters":[{"name":"channel","in":"path","required":true,"schema":{"type":"string","title":"Channel"}},{"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/v1/admin/internal/renegotiation/policies/{policy_id}/evaluate":{"post":{"tags":["renegotiation"],"summary":"Evaluate one policy against all active locks — the scheduler entry point","description":"Evaluate a single policy against every locked loan, creating\n`pending_review` renegotiations for any loan whose new best-ex beats the\nlocked price by at least `rate_delta_bps_threshold` bps.\n\nFan-out is parallel (`asyncio.gather`) with fresh sessions per loan.\nCool-down is honored per-loan. Emits `renegotiation.auto_flagged` for\neach flagged loan plus a single `renegotiation.policy_evaluated` summary\nevent at the end.","operationId":"evaluate_policy_api_v1_admin_internal_renegotiation_policies__policy_id__evaluate_post","parameters":[{"name":"policy_id","in":"path","required":true,"schema":{"type":"string","title":"Policy Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/evaluate-all":{"post":{"tags":["renegotiation"],"summary":"Evaluate every active policy — scheduler tick entry point","description":"Run `evaluate_policy` for every active policy in the tenant. This is\nwhat a cron/scheduler hits on each tick (or what an operator hits from\nthe UI after a daily rate set lands). Capped at `max_policies` (newest\nfirst) so one tick can't stall behind a runaway policy count.","operationId":"evaluate_all_policies_api_v1_admin_internal_renegotiation_evaluate_all_post","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":5000,"minimum":1,"default":500,"title":"Limit"}},{"name":"max_policies","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"description":"Cap on policies evaluated per tick. Newest-first.","default":100,"title":"Max Policies"},"description":"Cap on policies evaluated per tick. Newest-first."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/product-change-pricing":{"post":{"tags":["renegotiation"],"summary":"Compare historical vs current pricing for a new product scenario","description":"Return the two-way pricing view a lock-desk reviewer needs to decide\nwhich price to honor on a product change:\n\n  * `historical` — best-ex as of the original lock date (base price\n    only; LLPAs get overlaid at acceptance time).\n  * `current`    — live best-ex as of now.\n\nThe top investor per side is returned alongside the full result set\n(capped at 20 per side to keep the payload small). Does not mutate\nthe renegotiation — purely informational until accept is called.","operationId":"product_change_pricing_api_v1_admin_internal_renegotiation__reneg_id__product_change_pricing_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductChangePricingQuery"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/renegotiation/{reneg_id}/product-change-accept":{"post":{"tags":["renegotiation"],"summary":"Lock in a product-change pricing mode (historical or current)","description":"Record the mode chosen by the reviewer. Writes the accepted investor\n+ price into `proposed_values` and logs a `product_change_accepted`\nevent. Does NOT transition the renegotiation to `approved` — the\nexisting /approve endpoint handles that once the final values are set.","operationId":"product_change_accept_api_v1_admin_internal_renegotiation__reneg_id__product_change_accept_post","parameters":[{"name":"reneg_id","in":"path","required":true,"schema":{"type":"string","title":"Reneg Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProductChangeAcceptBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/organization":{"get":{"tags":["hierarchy"],"summary":"Get the current tenant's organization","operationId":"get_organization_api_v1_admin_internal_hierarchy_organization_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"patch":{"tags":["hierarchy"],"summary":"Update the current tenant's organization","operationId":"update_organization_api_v1_admin_internal_hierarchy_organization_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/organization/full-tree":{"get":{"tags":["hierarchy"],"summary":"Full nested org tree","operationId":"get_full_tree_api_v1_admin_internal_hierarchy_organization_full_tree_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/hierarchy/sub-orgs":{"get":{"tags":["hierarchy"],"summary":"List sub-orgs","operationId":"list_sub_orgs_api_v1_admin_internal_hierarchy_sub_orgs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["hierarchy"],"summary":"Create a sub-org","operationId":"create_sub_org_api_v1_admin_internal_hierarchy_sub_orgs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubOrgCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/sub-orgs/{sub_org_id}":{"get":{"tags":["hierarchy"],"summary":"Get a sub-org","operationId":"get_sub_org_api_v1_admin_internal_hierarchy_sub_orgs__sub_org_id__get","parameters":[{"name":"sub_org_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["hierarchy"],"summary":"Update a sub-org","operationId":"update_sub_org_api_v1_admin_internal_hierarchy_sub_orgs__sub_org_id__patch","parameters":[{"name":"sub_org_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Org Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubOrgUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["hierarchy"],"summary":"Soft-deactivate a sub-org","operationId":"delete_sub_org_api_v1_admin_internal_hierarchy_sub_orgs__sub_org_id__delete","parameters":[{"name":"sub_org_id","in":"path","required":true,"schema":{"type":"string","title":"Sub Org Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/branches":{"get":{"tags":["hierarchy"],"summary":"List branches","operationId":"list_branches_api_v1_admin_internal_hierarchy_branches_get","parameters":[{"name":"sub_org_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Org Id"}},{"name":"state","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},{"name":"is_active","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["hierarchy"],"summary":"Create a branch","operationId":"create_branch_api_v1_admin_internal_hierarchy_branches_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/branches/{branch_id}":{"get":{"tags":["hierarchy"],"summary":"Get a branch","operationId":"get_branch_api_v1_admin_internal_hierarchy_branches__branch_id__get","parameters":[{"name":"branch_id","in":"path","required":true,"schema":{"type":"string","title":"Branch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["hierarchy"],"summary":"Update a branch","operationId":"update_branch_api_v1_admin_internal_hierarchy_branches__branch_id__patch","parameters":[{"name":"branch_id","in":"path","required":true,"schema":{"type":"string","title":"Branch Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["hierarchy"],"summary":"Soft-deactivate a branch","operationId":"delete_branch_api_v1_admin_internal_hierarchy_branches__branch_id__delete","parameters":[{"name":"branch_id","in":"path","required":true,"schema":{"type":"string","title":"Branch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/branches/{branch_id}/assign-accounts":{"post":{"tags":["hierarchy"],"summary":"Assign accounts to a branch","operationId":"assign_accounts_api_v1_admin_internal_hierarchy_branches__branch_id__assign_accounts_post","parameters":[{"name":"branch_id","in":"path","required":true,"schema":{"type":"string","title":"Branch Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignAccountsBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/branches/{branch_id}/accounts":{"get":{"tags":["hierarchy"],"summary":"List accounts in this branch","operationId":"list_branch_accounts_api_v1_admin_internal_hierarchy_branches__branch_id__accounts_get","parameters":[{"name":"branch_id","in":"path","required":true,"schema":{"type":"string","title":"Branch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/branches/{branch_id}/loans":{"get":{"tags":["hierarchy"],"summary":"List loans originated by this branch","operationId":"list_branch_loans_api_v1_admin_internal_hierarchy_branches__branch_id__loans_get","parameters":[{"name":"branch_id","in":"path","required":true,"schema":{"type":"string","title":"Branch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/regions":{"get":{"tags":["hierarchy"],"summary":"List regions","operationId":"list_regions_api_v1_admin_internal_hierarchy_regions_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["hierarchy"],"summary":"Create a region","operationId":"create_region_api_v1_admin_internal_hierarchy_regions_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/regions/{region_id}":{"get":{"tags":["hierarchy"],"summary":"Get a region","operationId":"get_region_api_v1_admin_internal_hierarchy_regions__region_id__get","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["hierarchy"],"summary":"Update a region","operationId":"update_region_api_v1_admin_internal_hierarchy_regions__region_id__patch","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegionUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["hierarchy"],"summary":"Delete a region","operationId":"delete_region_api_v1_admin_internal_hierarchy_regions__region_id__delete","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/regions/{region_id}/add-branch":{"post":{"tags":["hierarchy"],"summary":"Add a branch to a region","operationId":"add_branch_to_region_api_v1_admin_internal_hierarchy_regions__region_id__add_branch_post","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchRef"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/regions/{region_id}/remove-branch":{"post":{"tags":["hierarchy"],"summary":"Remove a branch from a region","operationId":"remove_branch_from_region_api_v1_admin_internal_hierarchy_regions__region_id__remove_branch_post","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BranchRef"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/hierarchy/regions/{region_id}/loans":{"get":{"tags":["hierarchy"],"summary":"List loans across all branches in this region","operationId":"list_region_loans_api_v1_admin_internal_hierarchy_regions__region_id__loans_get","parameters":[{"name":"region_id","in":"path","required":true,"schema":{"type":"string","title":"Region Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools":{"get":{"tags":["gnma-pools"],"summary":"List Pools","operationId":"list_pools_api_v1_admin_internal_gnma_pools_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"issuer_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer Id"}},{"name":"pool_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pool Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["gnma-pools"],"summary":"Create Pool","operationId":"create_pool_api_v1_admin_internal_gnma_pools_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolCreateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/eligibility-check":{"get":{"tags":["gnma-pools"],"summary":"Eligibility Check","description":"Return eligibility verdict for a set of loan IDs without mutating state.","operationId":"eligibility_check_api_v1_admin_internal_gnma_pools_eligibility_check_get","parameters":[{"name":"loan_ids","in":"query","required":true,"schema":{"type":"string","description":"Comma-separated loan UUIDs","title":"Loan Ids"},"description":"Comma-separated loan UUIDs"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}":{"get":{"tags":["gnma-pools"],"summary":"Get Pool","operationId":"get_pool_api_v1_admin_internal_gnma_pools__pool_id__get","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["gnma-pools"],"summary":"Update Pool","operationId":"update_pool_api_v1_admin_internal_gnma_pools__pool_id__patch","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoolUpdateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["gnma-pools"],"summary":"Delete Pool","operationId":"delete_pool_api_v1_admin_internal_gnma_pools__pool_id__delete","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}/add-loans":{"post":{"tags":["gnma-pools"],"summary":"Add Loans","operationId":"add_loans_api_v1_admin_internal_gnma_pools__pool_id__add_loans_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/nacho_crunch__api__routes_gnma_pools__AddLoansBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}/remove-loan":{"post":{"tags":["gnma-pools"],"summary":"Remove Loan","operationId":"remove_loan_api_v1_admin_internal_gnma_pools__pool_id__remove_loan_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveLoanBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}/submit":{"post":{"tags":["gnma-pools"],"summary":"Submit Pool","operationId":"submit_pool_api_v1_admin_internal_gnma_pools__pool_id__submit_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}/mark-issued":{"post":{"tags":["gnma-pools"],"summary":"Mark Issued","operationId":"mark_issued_api_v1_admin_internal_gnma_pools__pool_id__mark_issued_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MarkIssuedBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}/mark-settled":{"post":{"tags":["gnma-pools"],"summary":"Mark Settled","operationId":"mark_settled_api_v1_admin_internal_gnma_pools__pool_id__mark_settled_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/gnma-pools/{pool_id}/cancel":{"post":{"tags":["gnma-pools"],"summary":"Cancel Pool","operationId":"cancel_pool_api_v1_admin_internal_gnma_pools__pool_id__cancel_post","parameters":[{"name":"pool_id","in":"path","required":true,"schema":{"type":"string","title":"Pool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/bi-sync/kinds":{"get":{"tags":["bi-sync"],"summary":"List Kinds","description":"Supported destination kinds + required config fields for UI rendering.","operationId":"list_kinds_api_v1_admin_internal_bi_sync_kinds_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/bi-sync/destinations":{"get":{"tags":["bi-sync"],"summary":"List Destinations","operationId":"list_destinations_api_v1_admin_internal_bi_sync_destinations_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"}}}}}},"post":{"tags":["bi-sync"],"summary":"Create Destination","operationId":"create_destination_api_v1_admin_internal_bi_sync_destinations_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestCreateBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/bi-sync/destinations/{dest_id}":{"patch":{"tags":["bi-sync"],"summary":"Update Destination","operationId":"update_destination_api_v1_admin_internal_bi_sync_destinations__dest_id__patch","parameters":[{"name":"dest_id","in":"path","required":true,"schema":{"type":"string","title":"Dest Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DestPatchBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["bi-sync"],"summary":"Delete Destination","operationId":"delete_destination_api_v1_admin_internal_bi_sync_destinations__dest_id__delete","parameters":[{"name":"dest_id","in":"path","required":true,"schema":{"type":"string","title":"Dest Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/bi-sync/destinations/{dest_id}/test":{"post":{"tags":["bi-sync"],"summary":"Test Destination","description":"Stub test — marks last_status='ok' and returns that verdict.","operationId":"test_destination_api_v1_admin_internal_bi_sync_destinations__dest_id__test_post","parameters":[{"name":"dest_id","in":"path","required":true,"schema":{"type":"string","title":"Dest Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/bi-sync/destinations/{dest_id}/sync-now":{"post":{"tags":["bi-sync"],"summary":"Sync Now","description":"Kick off a sync. MVP stub — creates a completed run with mock counts.","operationId":"sync_now_api_v1_admin_internal_bi_sync_destinations__dest_id__sync_now_post","parameters":[{"name":"dest_id","in":"path","required":true,"schema":{"type":"string","title":"Dest Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/bi-sync/destinations/{dest_id}/runs":{"get":{"tags":["bi-sync"],"summary":"List Runs","operationId":"list_runs_api_v1_admin_internal_bi_sync_destinations__dest_id__runs_get","parameters":[{"name":"dest_id","in":"path","required":true,"schema":{"type":"string","title":"Dest Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/security/reports":{"post":{"tags":["security-public"],"summary":"Submit Security Report","description":"Public, IP-rate-limited vulnerability submission.\n\nReturns a ``report_token`` the reporter can use to check status\nwithout exposing any account/authentication surface.","operationId":"submit_security_report_api_v1_public_security_reports_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityReportSubmit"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/security/reports/{token}/status":{"get":{"tags":["security-public"],"summary":"Get Security Report Status","description":"Public status-lookup by token. No PII returned.","operationId":"get_security_report_status_api_v1_public_security_reports__token__status_get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/security/reports":{"get":{"tags":["security"],"summary":"List Security Reports","operationId":"list_security_reports_api_v1_admin_internal_security_reports_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"severity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/security/reports/{report_id}":{"get":{"tags":["security"],"summary":"Get Security Report","operationId":"get_security_report_api_v1_admin_internal_security_reports__report_id__get","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/security/reports/{report_id}/triage":{"post":{"tags":["security"],"summary":"Triage Security Report","operationId":"triage_security_report_api_v1_admin_internal_security_reports__report_id__triage_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityReportTriage"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/security/reports/{report_id}/resolve":{"post":{"tags":["security"],"summary":"Resolve Security Report","operationId":"resolve_security_report_api_v1_admin_internal_security_reports__report_id__resolve_post","parameters":[{"name":"report_id","in":"path","required":true,"schema":{"type":"string","title":"Report Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SecurityReportResolve"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles":{"get":{"tags":["investor-network"],"summary":"List Profiles","description":"List investor profiles — admin view (full detail).","operationId":"list_profiles_api_v1_admin_internal_investor_network_profiles_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["investor-network"],"summary":"Create Profile","operationId":"create_profile_api_v1_admin_internal_investor_network_profiles_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}":{"get":{"tags":["investor-network"],"summary":"Get Profile","operationId":"get_profile_api_v1_admin_internal_investor_network_profiles__profile_id__get","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["investor-network"],"summary":"Patch Profile","operationId":"patch_profile_api_v1_admin_internal_investor_network_profiles__profile_id__patch","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/verify":{"post":{"tags":["investor-network"],"summary":"Verify Profile","operationId":"verify_profile_api_v1_admin_internal_investor_network_profiles__profile_id__verify_post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/suspend":{"post":{"tags":["investor-network"],"summary":"Suspend Profile","operationId":"suspend_profile_api_v1_admin_internal_investor_network_profiles__profile_id__suspend_post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/bidding-rules":{"get":{"tags":["investor-network"],"summary":"List Rules","operationId":"list_rules_api_v1_admin_internal_investor_network_profiles__profile_id__bidding_rules_get","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["investor-network"],"summary":"Create Rule","operationId":"create_rule_api_v1_admin_internal_investor_network_profiles__profile_id__bidding_rules_post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BiddingRuleCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/bidding-rules/{rule_id}":{"patch":{"tags":["investor-network"],"summary":"Update Rule","operationId":"update_rule_api_v1_admin_internal_investor_network_profiles__profile_id__bidding_rules__rule_id__patch","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BiddingRuleUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["investor-network"],"summary":"Delete Rule","operationId":"delete_rule_api_v1_admin_internal_investor_network_profiles__profile_id__bidding_rules__rule_id__delete","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"rule_id","in":"path","required":true,"schema":{"type":"string","title":"Rule Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/discovery-queries":{"get":{"tags":["investor-network"],"summary":"List Queries","operationId":"list_queries_api_v1_admin_internal_investor_network_profiles__profile_id__discovery_queries_get","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["investor-network"],"summary":"Create Query","operationId":"create_query_api_v1_admin_internal_investor_network_profiles__profile_id__discovery_queries_post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoveryQueryCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/discovery-queries/{q_id}/run":{"post":{"tags":["investor-network"],"summary":"Run Query","operationId":"run_query_api_v1_admin_internal_investor_network_profiles__profile_id__discovery_queries__q_id__run_post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}},{"name":"q_id","in":"path","required":true,"schema":{"type":"string","title":"Q Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/profiles/{profile_id}/sheets":{"get":{"tags":["investor-network"],"summary":"List Sheets","operationId":"list_sheets_api_v1_admin_internal_investor_network_profiles__profile_id__sheets_get","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["investor-network"],"summary":"Publish Sheet","operationId":"publish_sheet_api_v1_admin_internal_investor_network_profiles__profile_id__sheets_post","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SheetPublish"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/admin/internal/investor-network/network/stats":{"get":{"tags":["investor-network"],"summary":"Network Stats","operationId":"network_stats_api_v1_admin_internal_investor_network_network_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/investor-network/invites":{"post":{"tags":["investor-network"],"summary":"Create Investor Invite","description":"Admin-initiated investor invite — emits an email with the\n/onboard-investor?token=... link.","operationId":"create_investor_invite_api_v1_admin_internal_investor_network_invites_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestorInviteCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/investor-portal/me":{"get":{"tags":["investor-portal"],"summary":"Portal Me","operationId":"portal_me_api_v1_investor_portal_me_get","parameters":[{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["investor-portal"],"summary":"Portal Update Me","operationId":"portal_update_me_api_v1_investor_portal_me_patch","parameters":[{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/investor-portal/discovery":{"get":{"tags":["investor-portal"],"summary":"Portal Discovery","operationId":"portal_discovery_api_v1_investor_portal_discovery_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Saved discovery-query id.","title":"Q"},"description":"Saved discovery-query id."},{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/investor-portal/bids":{"post":{"tags":["investor-portal"],"summary":"Portal Create Bid","operationId":"portal_create_bid_api_v1_investor_portal_bids_post","parameters":[{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BidCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/investor-portal/my-bids":{"get":{"tags":["investor-portal"],"summary":"Portal My Bids","operationId":"portal_my_bids_api_v1_investor_portal_my_bids_get","parameters":[{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/investor-portal/pricing-config":{"get":{"tags":["investor-portal"],"summary":"Portal Pricing Config","operationId":"portal_pricing_config_api_v1_investor_portal_pricing_config_get","parameters":[{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/investor-portal/publish-sheet":{"post":{"tags":["investor-portal"],"summary":"Portal Publish Sheet","operationId":"portal_publish_sheet_api_v1_investor_portal_publish_sheet_post","parameters":[{"name":"X-Investor-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Investor-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SheetPublish"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/investor-network/directory":{"get":{"tags":["investor-network-public"],"summary":"Public Directory","operationId":"public_directory_api_v1_public_investor_network_directory_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/investor-network/directory/{profile_id}":{"get":{"tags":["investor-network-public"],"summary":"Public Directory Detail","operationId":"public_directory_detail_api_v1_public_investor_network_directory__profile_id__get","parameters":[{"name":"profile_id","in":"path","required":true,"schema":{"type":"string","title":"Profile Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/investor-network/join":{"post":{"tags":["investor-network-public"],"summary":"Public Join","operationId":"public_join_api_v1_public_investor_network_join_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicJoin"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/investor-network/accept-investor":{"post":{"tags":["investor-network-public"],"summary":"Public Accept Investor","description":"Public — accept an investor invite, create Account + InvestorProfile.","operationId":"public_accept_investor_api_v1_public_investor_network_accept_investor_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InvestorAcceptBody"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/public/features":{"get":{"tags":["features-public","features-public"],"summary":"Public feature catalog","description":"Return the NachoCrunch feature catalog — public, cacheable,\nconsumed by marketing pages and third-party dashboards.","operationId":"list_features_api_v1_public_features_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/ingest/upload":{"post":{"tags":["ingestion"],"summary":"Upload Rate Sheet","description":"Direct upload endpoint for rate sheet ingestion.\n\nAccepts Excel, PDF, or CSV files. The file is archived to S3,\nparsed, and stored in the database.\n\nArgs:\n    file: The rate sheet file (multipart upload)\n    investor_name: Optional investor name to resolve investor_id","operationId":"upload_rate_sheet_api_v1_ingest_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_rate_sheet_api_v1_ingest_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/slack/price":{"post":{"tags":["slack"],"summary":"Slack Price","description":"Slack slash command entry point. Expected command: /nacho <plain English scenario>","operationId":"slack_price_slack_price_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/admin/internal/ops/sentry-test":{"post":{"tags":["pipeline-ops"],"summary":"Deliberately raise to test the Sentry pipeline","description":"Raises a deliberate exception so ops can verify Sentry wiring.\n\nThis endpoint is intentionally ungated beyond the admin-internal prefix;\nit is only exposed to the internal dashboard network. Returns 500.","operationId":"sentry_test_endpoint_api_v1_admin_internal_ops_sentry_test_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/metrics":{"get":{"tags":["meta"],"summary":"Prometheus metrics redirect","description":"Redirect /metrics to /metrics/ for Prometheus scrape compatibility.","operationId":"metrics_redirect_metrics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/healthz/live":{"get":{"tags":["meta"],"summary":"Liveness probe","description":"Liveness probe — returns 200 if the process is running.\n\nDoes NOT check downstream services. Intended for k8s liveness probes\nwhere failure triggers a restart. Must be fast and allocation-free.","operationId":"healthz_live_healthz_live_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/healthz/ready":{"get":{"tags":["meta"],"summary":"Readiness probe","description":"Readiness probe — returns 200 only if DB + Redis + Temporal are reachable.\n\nIntended for k8s readiness probes — failure removes the pod from\nservice rotation but does NOT trigger a restart.","operationId":"healthz_ready_healthz_ready_get","responses":{"200":{"description":"All subsystems reachable.","content":{"application/json":{"schema":{}}}},"503":{"description":"One or more subsystems are unreachable."}}}},"/healthz/startup":{"get":{"tags":["meta"],"summary":"Startup probe","description":"Startup probe — verifies migrations have been applied.\n\nQueries alembic_version. Returns the current head and applied count.","operationId":"healthz_startup_healthz_startup_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health":{"get":{"tags":["meta"],"summary":"Service health check","description":"Human-readable health endpoint. Reuses the shared subsystem probes.","operationId":"health_health_get","responses":{"200":{"description":"Health report","content":{"application/json":{"schema":{},"example":{"status":"healthy","version":"0.2.0","subsystems":{"database":"connected","redis":"connected","temporal":"connected","api":"ok"}}}}}}}},"/api/v1/admin/internal/openapi/export":{"get":{"tags":["meta"],"summary":"Export the OpenAPI schema (JSON or YAML)","description":"Download the full OpenAPI 3.1 schema. Useful for generating SDKs, loading into\nPostman/Insomnia, or running contract tests in CI.","operationId":"openapi_export_api_v1_admin_internal_openapi_export_get","parameters":[{"name":"format","in":"query","required":false,"schema":{"type":"string","pattern":"^(json|yaml|yml)$","description":"json | yaml","default":"json","title":"Format"},"description":"json | yaml"}],"responses":{"200":{"description":"OpenAPI schema in the requested format.","content":{"application/json":{"schema":{},"example":{"openapi":"3.1.0","info":{"title":"NachoCrunch"}}},"application/yaml":{"example":"openapi: 3.1.0\ninfo:\n  title: NachoCrunch\n"}}},"400":{"description":"Unsupported format."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"APORRow":{"properties":{"as_of_date":{"type":"string","format":"date","title":"As Of Date"},"product_type":{"type":"string","title":"Product Type"},"term_years":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Term Years"},"apor_pct":{"type":"number","maximum":50.0,"minimum":0.0,"title":"Apor Pct"}},"type":"object","required":["as_of_date","product_type","term_years","apor_pct"],"title":"APORRow"},"APORUpload":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/APORRow"},"type":"array","title":"Rows"}},"type":"object","required":["rows"],"title":"APORUpload"},"AccessRequestCreate":{"properties":{"request_type":{"type":"string","title":"Request Type","description":"role|permission|partnership|feature_flag"},"target":{"type":"string","maxLength":500,"minLength":1,"title":"Target"},"reason":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Reason"}},"type":"object","required":["request_type","target"],"title":"AccessRequestCreate"},"AccessRequestDecision":{"properties":{"decision_notes":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Decision Notes"}},"type":"object","title":"AccessRequestDecision"},"AccountCreate":{"properties":{"account_type":{"type":"string","title":"Account Type"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_nmls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Nmls"},"company_ein":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Ein"},"company_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Address"},"company_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company City"},"company_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company State"},"company_zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Zip"},"company_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Phone"},"company_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Website"},"contact_first_name":{"type":"string","title":"Contact First Name"},"contact_last_name":{"type":"string","title":"Contact Last Name"},"contact_email":{"type":"string","title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"contact_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Title"},"investor_sender_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Investor Sender Domains"},"platform_callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Callback Url"},"platform_webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Webhook Secret"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["account_type","contact_first_name","contact_last_name","contact_email"],"title":"AccountCreate"},"AccountUpdate":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_nmls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Nmls"},"company_ein":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Ein"},"company_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Address"},"company_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company City"},"company_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company State"},"company_zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Zip"},"company_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Phone"},"company_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Website"},"contact_first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact First Name"},"contact_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Last Name"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"contact_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Title"},"investor_sender_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Investor Sender Domains"},"platform_callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Callback Url"},"platform_webhook_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Webhook Secret"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"AccountUpdate"},"AdHocExecute":{"properties":{"entity":{"type":"string","title":"Entity"},"filter_json":{"title":"Filter Json"},"sort":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sort"},"limit":{"type":"integer","title":"Limit","default":1000}},"type":"object","required":["entity"],"title":"AdHocExecute"},"AgencyProductCreateBody":{"properties":{"agency":{"type":"string","title":"Agency"},"product_code":{"type":"string","title":"Product Code"},"product_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Name"},"program_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Type"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","required":["agency","product_code"],"title":"AgencyProductCreateBody"},"AgencyProductPatchBody":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"product_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Name"},"program_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program Type"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"}},"type":"object","title":"AgencyProductPatchBody"},"AgentChatRequest":{"properties":{"message":{"type":"string","title":"Message"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["message"],"title":"AgentChatRequest"},"AnomalyNarrateRequest":{"properties":{"anomaly_ids":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Anomaly Ids"},"anomalies":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Anomalies","description":"Optional inline anomaly payloads (keyed by anomaly_id). If not provided, the caller has already surfaced the details in the IDs themselves and the model will work with limited context."}},"type":"object","required":["anomaly_ids"],"title":"AnomalyNarrateRequest"},"ApprovalGroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"approval_level":{"type":"integer","title":"Approval Level","default":1},"max_concession_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Concession Bps"}},"type":"object","required":["name"],"title":"ApprovalGroupCreate","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys."},"ApprovalGroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"approval_level":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Approval Level"},"max_concession_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Concession Bps"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ApprovalGroupUpdate"},"ApproveBody":{"properties":{"approved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Account Id"},"approver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approver Name"},"approval_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approval Notes"},"counter_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Counter Details"}},"type":"object","title":"ApproveBody"},"ApproveChangeRequest":{"properties":{"decision_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Notes"},"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"}},"type":"object","title":"ApproveChangeRequest"},"AskRequest":{"properties":{"question":{"type":"string","title":"Question"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"k":{"type":"integer","title":"K","default":8}},"type":"object","required":["question"],"title":"AskRequest"},"AssignAccountsBody":{"properties":{"account_ids":{"items":{"type":"string"},"type":"array","title":"Account Ids"}},"type":"object","title":"AssignAccountsBody"},"AsyncTaskCreate":{"properties":{"kind":{"type":"string","maxLength":80,"minLength":1,"title":"Kind"},"input":{"additionalProperties":true,"type":"object","title":"Input"},"submitted_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted By Account Id"}},"type":"object","required":["kind"],"title":"AsyncTaskCreate"},"AttachmentTypeCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"display_order":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Display Order","default":100},"is_required":{"type":"boolean","title":"Is Required","default":false},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name"],"title":"AttachmentTypeCreate","description":"Polly-compat dual-case body."},"AttachmentTypePatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"icon":{"anyOf":[{"type":"string","maxLength":50},{"type":"null"}],"title":"Icon"},"display_order":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Display Order"},"is_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Required"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"AttachmentTypePatch"},"AttestationUpsert":{"properties":{"soc2_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Soc2 Status"},"soc2_certified_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Soc2 Certified At"},"soc2_certificate_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Soc2 Certificate Url"},"iso27001_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iso27001 Status"},"iso27001_certified_at":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Iso27001 Certified At"},"iso27001_certificate_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Iso27001 Certificate Url"},"last_pen_test_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Last Pen Test Date"},"pen_test_cadence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Test Cadence"},"pen_test_vendor":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Pen Test Vendor"},"pen_test_summary_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pen Test Summary Url"},"incident_disclosure_sla_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Incident Disclosure Sla Days"},"vulnerability_disclosure_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Vulnerability Disclosure Url"},"security_contact_email":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Security Contact Email"},"supported_frameworks":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Supported Frameworks"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"is_public":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Public"},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","title":"AttestationUpsert"},"AutoClassifyRequest":{"properties":{"shopped_outside_list":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Shopped Outside List"},"dry_run":{"type":"boolean","title":"Dry Run","default":false}},"type":"object","title":"AutoClassifyRequest","description":"Body for the auto-classify endpoint. ``shopped_outside_list``\nmirrors the standalone classifier endpoints; ``dry_run`` returns\nthe proposed blob without persisting (useful for a UI preview)."},"AutoExpireUpdate":{"properties":{"max_age_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Age Minutes"},"action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Action"},"check_interval_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Check Interval Minutes"},"excluded_investor_ids":{"anyOf":[{"items":{"type":"string","format":"uuid"},"type":"array"},{"type":"null"}],"title":"Excluded Investor Ids"},"notify_on_expire":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify On Expire"}},"type":"object","title":"AutoExpireUpdate"},"BaseRateRequestBody":{"properties":{"scenario":{"additionalProperties":true,"type":"object","title":"Scenario","description":"PricingRequest-shaped dict — loan_type, loan_amount, lock_days, fico_score, ltv_pct, property_type, occupancy, loan_purpose, state, etc."},"requested_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Account Id"}},"type":"object","required":["scenario"],"title":"BaseRateRequestBody"},"BenchmarkCreate":{"properties":{"name":{"type":"string","title":"Name"},"agency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency"},"coupon_rate":{"type":"number","title":"Coupon Rate"},"is_favorite":{"type":"boolean","title":"Is Favorite","default":false},"display_order":{"type":"integer","title":"Display Order","default":0}},"type":"object","required":["name","coupon_rate"],"title":"BenchmarkCreate"},"BenchmarkPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"agency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency"},"coupon_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coupon Rate"},"is_favorite":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Favorite"},"display_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Display Order"}},"type":"object","title":"BenchmarkPatch"},"BenchmarkRateRow":{"properties":{"as_of_date":{"type":"string","format":"date","title":"As Of Date"},"code":{"type":"string","title":"Code"},"value":{"type":"number","title":"Value"}},"type":"object","required":["as_of_date","code","value"],"title":"BenchmarkRateRow"},"BenchmarkRateUpload":{"properties":{"rows":{"items":{"$ref":"#/components/schemas/BenchmarkRateRow"},"type":"array","title":"Rows"}},"type":"object","required":["rows"],"title":"BenchmarkRateUpload"},"BestExecutionResponse":{"properties":{"request":{"$ref":"#/components/schemas/PricingRequest-Output"},"results":{"items":{"$ref":"#/components/schemas/InvestorPrice"},"type":"array","title":"Results"},"investor_count":{"type":"integer","title":"Investor Count"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["request","results","investor_count","generated_at"],"title":"BestExecutionResponse","description":"Best-execution pricing across all investors."},"BestScenario":{"properties":{"label":{"type":"string","title":"Label"},"reason":{"type":"string","title":"Reason"},"net_price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Net Price"}},"type":"object","required":["label","reason"],"title":"BestScenario"},"BidCreate":{"properties":{"tradeable_loan_id":{"type":"string","title":"Tradeable Loan Id"},"bid_price":{"type":"number","title":"Bid Price"},"commitment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Commitment Type","default":"best_effort"},"delivery_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivery Type","default":"cash_window"},"cra_pay_up_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cra Pay Up Bps"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["tradeable_loan_id","bid_price"],"title":"BidCreate"},"BidIn":{"properties":{"name":{"type":"string","title":"Name"},"rate":{"type":"number","title":"Rate"},"bid_amount":{"type":"number","title":"Bid Amount"},"settlement_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Settlement At"},"period_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Period Index"},"bid_amount_delta":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bid Amount Delta"},"benchmark_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark Id"}},"type":"object","required":["name","rate","bid_amount"],"title":"BidIn"},"BidTapeRowInput":{"properties":{"loan_ref":{"type":"string","title":"Loan Ref"},"bid_price":{"type":"number","exclusiveMaximum":200.0,"exclusiveMinimum":0.0,"title":"Bid Price"}},"type":"object","required":["loan_ref","bid_price"],"title":"BidTapeRowInput"},"BiddingRuleCreate":{"properties":{"condition":{"title":"Condition"},"bid_adjustment_bps":{"type":"number","title":"Bid Adjustment Bps"},"priority":{"type":"integer","title":"Priority","default":0},"is_active":{"type":"boolean","title":"Is Active","default":true},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["condition","bid_adjustment_bps"],"title":"BiddingRuleCreate"},"BiddingRuleUpdate":{"properties":{"condition":{"anyOf":[{},{"type":"null"}],"title":"Condition"},"bid_adjustment_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bid Adjustment Bps"},"priority":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"BiddingRuleUpdate"},"BlobClassifyRequest":{"properties":{"blob":{"additionalProperties":true,"type":"object","title":"Blob"},"shopped_outside_list":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Shopped Outside List"}},"type":"object","required":["blob"],"title":"BlobClassifyRequest","description":"Walk-and-classify a closing-costs-shaped JSONB blob."},"Body_create_loan_upload_api_v1_admin_internal_sell_loan_uploads_post":{"properties":{"file":{"anyOf":[{"type":"string","contentMediaType":"application/octet-stream"},{"type":"null"}],"title":"File"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"uploaded_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploaded By"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},"type":"object","title":"Body_create_loan_upload_api_v1_admin_internal_sell_loan_uploads_post"},"Body_ingest_guideline_route_api_v1_admin_internal_guidelines_ingest_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"investor_id":{"type":"string","title":"Investor Id"},"document_type":{"type":"string","title":"Document Type","default":"eligibility"},"document_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Title"}},"type":"object","required":["file","investor_id"],"title":"Body_ingest_guideline_route_api_v1_admin_internal_guidelines_ingest_post"},"Body_upload_rate_sheet_api_v1_ingest_upload_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"}},"type":"object","required":["file"],"title":"Body_upload_rate_sheet_api_v1_ingest_upload_post"},"BranchCreate":{"properties":{"branch_code":{"type":"string","title":"Branch Code"},"name":{"type":"string","title":"Name"},"sub_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Org Id"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"},"address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"manager_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Account Id"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"licensed_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Licensed States"}},"type":"object","required":["branch_code","name"],"title":"BranchCreate"},"BranchRef":{"properties":{"branch_id":{"type":"string","title":"Branch Id"}},"type":"object","required":["branch_id"],"title":"BranchRef"},"BranchUpdate":{"properties":{"branch_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Code"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"sub_org_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sub Org Id"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"},"address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Address"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"manager_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Manager Account Id"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"licensed_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Licensed States"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"BranchUpdate"},"BrandingPatch":{"properties":{"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"favicon_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Favicon Url"},"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"accent_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent Color"},"font_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Family"},"email_from_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email From Name"},"email_from_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email From Address"},"email_signature_html":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Signature Html"},"support_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Support Url"},"terms_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Terms Url"},"privacy_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Privacy Url"},"custom_css":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Css"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"BrandingPatch"},"BroadcastInviteCreate":{"properties":{"purpose":{"type":"string","title":"Purpose","default":"employee"},"name":{"type":"string","title":"Name"},"max_signups":{"type":"integer","title":"Max Signups","default":100},"expires_days":{"type":"integer","title":"Expires Days","default":30},"default_role":{"type":"string","title":"Default Role","default":"loan_officer"},"default_branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Branch Id"},"account_type":{"type":"string","title":"Account Type","default":"individual"},"company_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Hint"},"email_template_override":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Template Override"},"invited_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By"}},"type":"object","required":["name"],"title":"BroadcastInviteCreate"},"BroadcastSignup":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"}},"type":"object","required":["email","password","first_name","last_name"],"title":"BroadcastSignup"},"BulkAcceptBody":{"properties":{"bid_ids":{"items":{"type":"string"},"type":"array","title":"Bid Ids"},"buyer_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Account Id"},"seller_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seller Account Id"},"settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Settlement Date"}},"type":"object","required":["bid_ids"],"title":"BulkAcceptBody"},"BulkCounterReq":{"properties":{"partner_id":{"type":"string","title":"Partner Id"},"counter_price_delta_bps":{"type":"number","title":"Counter Price Delta Bps"},"counter_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Reason"}},"type":"object","required":["partner_id","counter_price_delta_bps"],"title":"BulkCounterReq"},"BulkLockRow":{"properties":{"loan_ref":{"type":"string","title":"Loan Ref"},"lock_period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Period Days"},"new_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"New Rate"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["loan_ref"],"title":"BulkLockRow"},"BulkLockSubmit":{"properties":{"operation":{"type":"string","title":"Operation"},"rows":{"items":{"$ref":"#/components/schemas/BulkLockRow"},"type":"array","title":"Rows"},"submitted_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted By Account Id"},"file_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Url"}},"type":"object","required":["operation","rows"],"title":"BulkLockSubmit"},"BulkMoveBody":{"properties":{"loan_ids":{"items":{"type":"string"},"type":"array","title":"Loan Ids"},"to_pool_id":{"type":"string","title":"To Pool Id"}},"type":"object","required":["to_pool_id"],"title":"BulkMoveBody"},"BulkPricingRequest":{"properties":{"scenarios":{"items":{"$ref":"#/components/schemas/BulkScenario"},"type":"array","maxItems":200,"minItems":1,"title":"Scenarios"},"top_n":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top N","default":5}},"type":"object","required":["scenarios"],"title":"BulkPricingRequest"},"BulkScenario":{"properties":{"loan_type":{"type":"string","title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"fico_score":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Ltv Pct"},"cltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cltv Pct"},"dti_pct":{"anyOf":[{"type":"number","maximum":65.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti Pct"},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"units":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Units","default":1},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"subordinate_financing":{"type":"boolean","title":"Subordinate Financing","default":false},"first_time_buyer":{"type":"boolean","title":"First Time Buyer","default":false},"self_employed":{"type":"boolean","title":"Self Employed","default":false},"interest_only":{"type":"boolean","title":"Interest Only","default":false},"escrow_waiver":{"type":"boolean","title":"Escrow Waiver","default":false},"high_balance":{"type":"boolean","title":"High Balance","default":false},"mi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Type"},"dscr_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dscr Ratio"},"prepay_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepay Structure"},"income_doc_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Income Doc Type"},"reserves_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reserves Months"},"purchase_price":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Price"},"property_value":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Property Value"},"down_payment":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Down Payment"},"other_lien_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Other Lien Amount"},"monthly_income":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Monthly Income"},"aus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aus","description":"Automated Underwriting System: du | lp | manual"},"heloc_line_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Line Amount"},"heloc_draw_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Draw Amount"},"temporary_buydown":{"type":"boolean","title":"Temporary Buydown","default":false},"buydown_period_months":{"anyOf":[{"type":"integer","maximum":240.0,"minimum":0.0},{"type":"null"}],"title":"Buydown Period Months","description":"Buydown schedule period in months (12, 36, 60, 84, 120, etc)"},"stories":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Stories"},"rural_property":{"type":"boolean","title":"Rural Property","default":false},"non_warrantable":{"type":"boolean","title":"Non Warrantable","description":"Non-warrantable condo flag","default":false},"condotel":{"type":"boolean","title":"Condotel","default":false},"inspection_waiver":{"type":"boolean","title":"Inspection Waiver","default":false},"non_occupancy_coborrower":{"type":"boolean","title":"Non Occupancy Coborrower","default":false},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type","description":"attached | detached"},"properties_owned":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Properties Owned"},"citizenship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citizenship"},"itin":{"type":"boolean","title":"Itin","default":false},"affordable_product":{"type":"boolean","title":"Affordable Product","default":false},"comm_second":{"type":"boolean","title":"Comm Second","description":"Community Seconds program","default":false},"roll_lender_fee":{"type":"boolean","title":"Roll Lender Fee","default":false},"relocation":{"type":"boolean","title":"Relocation","default":false},"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch"},"loan_officer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Officer Name"},"financing_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Option"},"mip_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Pct"},"mip_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Amount"},"total_loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total Loan Amount","description":"Total loan amount including upfront MIP rolled in (FHA)"},"case_assignment_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Assignment Date","description":"FHA case assignment date (ISO8601)"},"guarantee_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Pct"},"guarantee_fee_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Amount"},"va_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Va History","description":"VA history: first_use | subsequent_use | irrrl | disabled_exempt"},"funding_fee_exempt":{"type":"boolean","title":"Funding Fee Exempt","default":false},"funding_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Funding Fee Pct"},"discount_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Points","description":"Borrower-paid discount points (1.0 = 1% of loan amount)"},"lender_credit_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Lender Credit Points","description":"Lender-paid credit in price points"},"temporary_buydown_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Buydown Type","description":"One of \"1-0\", \"2-1\", \"3-2-1\", \"1-1-1\"; null/empty = none"},"mission_score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"borrower_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Ref"}},"type":"object","required":["loan_type","loan_amount","fico_score","ltv_pct"],"title":"BulkScenario","description":"A single scenario in a bulk request. Extends PricingRequest with an optional label."},"CalcFieldsRequest":{"properties":{"partial":{"additionalProperties":true,"type":"object","title":"Partial"}},"type":"object","title":"CalcFieldsRequest"},"CancelBody":{"properties":{"actor_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Account Id"},"actor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Name"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"CancelBody"},"CancelPoolBody":{"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"CancelPoolBody"},"CapabilityUpdate":{"properties":{"enable_reset_lock":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Reset Lock"},"enable_policy_by_channel":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Enable Policy By Channel"},"has_sell_side_best_ex_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Sell Side Best Ex Enabled"},"is_buyer":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Buyer"},"is_seller":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Seller"},"has_ai_nli_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Ai Nli Enabled"},"has_mobile_pricer_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Mobile Pricer Enabled"},"has_corporate_hierarchy_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Corporate Hierarchy Enabled"},"has_white_label_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has White Label Enabled"},"has_epc2_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Epc2 Enabled"}},"type":"object","title":"CapabilityUpdate"},"CardCreate":{"properties":{"name":{"type":"string","title":"Name"},"mi_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Provider"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["name"],"title":"CardCreate"},"CardUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"mi_provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Provider"},"product_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Type"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"CardUpdate"},"CartCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"owner_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Account Id"},"target_investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Investor Id"},"target_investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Investor Name"}},"type":"object","title":"CartCreate","description":"Polly-compat dual-case body. Trader's first touch on commitment\ncart workflow — compat break here is day-zero friction."},"CartItemAdd":{"properties":{"tradeable_loan_id":{"type":"string","title":"Tradeable Loan Id"},"bid_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Bid Price"},"srp_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Srp Bps"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["tradeable_loan_id"],"title":"CartItemAdd","description":"Polly-compat dual-case body for adding a loan to a cart."},"CartToPool":{"properties":{"pool_name":{"type":"string","title":"Pool Name"},"commitment_type":{"type":"string","title":"Commitment Type","default":"mandatory"},"delivery_type":{"type":"string","title":"Delivery Type","default":"cash_window"},"settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Settlement Date"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"}},"type":"object","required":["pool_name"],"title":"CartToPool"},"CategoryCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"}},"type":"object","required":["name"],"title":"CategoryCreate"},"ChangeDefaultOrgRequest":{"properties":{"tenant_id":{"type":"string","title":"Tenant Id"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["tenant_id"],"title":"ChangeDefaultOrgRequest"},"ChangePasswordRequest":{"properties":{"old_password":{"type":"string","title":"Old Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["old_password","new_password"],"title":"ChangePasswordRequest"},"ChannelCreate":{"properties":{"kind":{"type":"string","title":"Kind"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"margin_bps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Margin Bps","default":0},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["kind"],"title":"ChannelCreate"},"ChannelUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"margin_bps":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Margin Bps"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","title":"ChannelUpdate"},"ClosingDisclosureCreate":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"borrower_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Full Name"},"property_address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Property Address"},"loan_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Loan Amount"},"interest_rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Interest Rate Pct"},"loan_term_months":{"anyOf":[{"type":"integer","maximum":600.0,"minimum":0.0},{"type":"null"}],"title":"Loan Term Months"},"monthly_principal_interest":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Principal Interest"},"has_prepayment_penalty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Prepayment Penalty"},"has_balloon_payment":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Balloon Payment"},"projected_payments_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Projected Payments Json"},"closing_costs_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Closing Costs Json"},"cash_to_close_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cash To Close Json"},"comparisons_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Comparisons Json"},"other_considerations_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Other Considerations Json"},"revision_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revision Reason"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"le_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Le Id"},"supersedes_cd_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supersedes Cd Id"},"closing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Closing Date"}},"type":"object","title":"ClosingDisclosureCreate"},"ClosingDisclosurePatch":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"borrower_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Full Name"},"property_address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Property Address"},"loan_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Loan Amount"},"interest_rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Interest Rate Pct"},"loan_term_months":{"anyOf":[{"type":"integer","maximum":600.0,"minimum":0.0},{"type":"null"}],"title":"Loan Term Months"},"monthly_principal_interest":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Principal Interest"},"has_prepayment_penalty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Prepayment Penalty"},"has_balloon_payment":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Balloon Payment"},"projected_payments_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Projected Payments Json"},"closing_costs_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Closing Costs Json"},"cash_to_close_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cash To Close Json"},"comparisons_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Comparisons Json"},"other_considerations_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Other Considerations Json"},"revision_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revision Reason"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"closing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Closing Date"}},"type":"object","title":"ClosingDisclosurePatch"},"CompareRequest":{"properties":{"scenarios":{"items":{"$ref":"#/components/schemas/LabeledScenario"},"type":"array","maxItems":10,"minItems":1,"title":"Scenarios"}},"type":"object","required":["scenarios"],"title":"CompareRequest"},"CompareResponse":{"properties":{"scenarios":{"items":{"$ref":"#/components/schemas/ScenarioResult"},"type":"array","title":"Scenarios"},"best_scenario":{"anyOf":[{"$ref":"#/components/schemas/BestScenario"},{"type":"null"}]},"elapsed_ms":{"type":"integer","title":"Elapsed Ms"}},"type":"object","required":["scenarios","best_scenario","elapsed_ms"],"title":"CompareResponse"},"ComplianceScenario":{"properties":{"loan_amount":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Loan Amount"},"dti":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti"},"is_qm":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Qm"},"apr_over_apor_pct":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Apr Over Apor Pct"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"documented_income":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Documented Income"},"points_and_fees_pct":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Points And Fees Pct"}},"type":"object","title":"ComplianceScenario"},"ComplianceTestRequest":{"properties":{"scenario":{"$ref":"#/components/schemas/ComplianceScenario"}},"type":"object","required":["scenario"],"title":"ComplianceTestRequest"},"ComplianceUpdate":{"properties":{"qm_required":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Qm Required"},"hpml_check_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hpml Check Enabled"},"atr_check_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Atr Check Enabled"},"hoepa_check_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Hoepa Check Enabled"},"state_high_cost_check":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"State High Cost Check"},"max_dti_qm":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Dti Qm"},"max_dti_non_qm":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Max Dti Non Qm"},"reg_z_apr_threshold_apor_pct":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Reg Z Apr Threshold Apor Pct"},"excluded_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded States"},"require_documented_income":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Documented Income"},"approval_delegation_admin_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Approval Delegation Admin Only"}},"type":"object","title":"ComplianceUpdate"},"ComputeLARHoepaBody":{"properties":{"term_years":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Term Years","default":30},"product_type":{"type":"string","title":"Product Type","default":"fixed"},"lien_position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lien Position"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ComputeLARHoepaBody"},"ComputePenaltyBody":{"properties":{"loan_amount_usd":{"type":"number","maximum":100000000.0,"minimum":0.0,"title":"Loan Amount Usd"},"prepay_in_year":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Prepay In Year"},"schedule_type":{"type":"string","maxLength":16,"minLength":1,"title":"Schedule Type"},"penalty_term_months":{"type":"integer","maximum":360.0,"minimum":0.0,"title":"Penalty Term Months","default":36},"tiers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tiers"},"max_penalty_usd":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Max Penalty Usd"},"applies_to_refi_only":{"type":"boolean","title":"Applies To Refi Only","default":false},"prepay_reason":{"type":"string","maxLength":32,"minLength":1,"title":"Prepay Reason","default":"refinance"}},"type":"object","required":["loan_amount_usd","prepay_in_year","schedule_type"],"title":"ComputePenaltyBody"},"ConfigCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"is_template":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Template","default":false},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["name"],"title":"ConfigCreate"},"ConfigDismissBody":{"properties":{"reason":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Reason"}},"type":"object","title":"ConfigDismissBody"},"ConfigQuoteBody":{"properties":{"ltv":{"type":"number","title":"Ltv"},"fico":{"type":"integer","title":"Fico"},"term_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term Months","default":360},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"loan_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Purpose"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["ltv","fico"],"title":"ConfigQuoteBody"},"ConfigUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_template":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Template"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"}},"type":"object","title":"ConfigUpdate"},"ConvertQuoteRequest":{"properties":{"loan_id":{"type":"string","title":"Loan Id"}},"type":"object","required":["loan_id"],"title":"ConvertQuoteRequest"},"CounterBidBody":{"properties":{"counter_price":{"type":"number","exclusiveMaximum":200.0,"exclusiveMinimum":0.0,"title":"Counter Price"},"counter_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Reason"}},"type":"object","required":["counter_price"],"title":"CounterBidBody"},"CounterBidReq":{"properties":{"counter_price":{"type":"number","title":"Counter Price"},"counter_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Reason"},"valid_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid Until"}},"type":"object","required":["counter_price"],"title":"CounterBidReq"},"CreatePartnershipRequest":{"properties":{"partner_name":{"type":"string","maxLength":200,"minLength":1,"title":"Partner Name"},"partner_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Type"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"active"},"relationship_started":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relationship Started"},"primary_contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Name"},"primary_contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Email"},"primary_contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Phone"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"ticker":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Ticker"},"commitment_time":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":0.0},{"type":"null"}],"title":"Commitment Time"},"point_bias":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Point Bias"},"buyer_fee":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Buyer Fee"}},"type":"object","required":["partner_name"],"title":"CreatePartnershipRequest"},"CreatePoolBody":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"},"target_settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Settlement Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"CreatePoolBody"},"CreateRoleBody":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name"],"title":"CreateRoleBody"},"CreateSessionRequest":{"properties":{"connected_system_id":{"type":"string","title":"Connected System Id"},"encompass_loan_guid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encompass Loan Guid"},"scope":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Scope"},"host_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Host Type"},"origin_user_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin User Id"},"partner_app_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner App Id"},"session_token":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Token"}},"type":"object","required":["connected_system_id"],"title":"CreateSessionRequest"},"CreateSystemRequest":{"properties":{"kind":{"type":"string","title":"Kind","description":"One of the supported kind IDs"},"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"secrets":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secrets","description":"Credential dict. Encrypted server-side; never returned."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status","default":"pending"}},"type":"object","required":["kind","name"],"title":"CreateSystemRequest","description":"Polly-compat dual-case body for LOS/integration setup.\nKeys are simple (kind/name/config/secrets/status) — no snake\nequivalents that would diverge in camelCase, so no aliases needed.\nmodel_config still set for future field additions."},"CreateWebhookRequest":{"properties":{"name":{"type":"string","title":"Name"},"target_url":{"type":"string","title":"Target Url"},"event_types":{"items":{"type":"string"},"type":"array","minItems":1,"title":"Event Types"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["name","target_url","event_types"],"title":"CreateWebhookRequest","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys.\nA defector setting up their integration early on will POST here\nfirst — compat matters from day zero."},"CredentialsPatch":{"properties":{"credentials":{"additionalProperties":true,"type":"object","title":"Credentials"}},"type":"object","required":["credentials"],"title":"CredentialsPatch"},"CrossflowAssign":{"properties":{"assigned_to_account_id":{"type":"string","title":"Assigned To Account Id"}},"type":"object","required":["assigned_to_account_id"],"title":"CrossflowAssign"},"CrossflowCounter":{"properties":{"counter_to_channel":{"type":"string","title":"Counter To Channel"},"counter_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counter Notes"},"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"}},"type":"object","required":["counter_to_channel"],"title":"CrossflowCounter"},"CrossflowCreate":{"properties":{"loan_id":{"type":"string","title":"Loan Id"},"from_channel":{"type":"string","title":"From Channel"},"to_channel":{"type":"string","title":"To Channel"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"requested_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Account Id"}},"type":"object","required":["loan_id","from_channel","to_channel"],"title":"CrossflowCreate","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys."},"CrossflowDecide":{"properties":{"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"},"decision_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Notes"}},"type":"object","title":"CrossflowDecide"},"CustomCreditBody":{"properties":{"amount_dollars":{"type":"number","title":"Amount Dollars"},"reason":{"type":"string","title":"Reason"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"By"}},"type":"object","required":["amount_dollars","reason"],"title":"CustomCreditBody"},"CustomParameterCreate":{"properties":{"key":{"type":"string","title":"Key"},"display_name":{"type":"string","title":"Display Name"},"parameter_type":{"type":"string","title":"Parameter Type"},"default_value":{"anyOf":[{},{"type":"null"}],"title":"Default Value"},"enum_values":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Enum Values"}},"type":"object","required":["key","display_name","parameter_type"],"title":"CustomParameterCreate"},"DecisionNotesBody":{"properties":{"decision_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Notes"},"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"}},"type":"object","title":"DecisionNotesBody"},"DelegationPatch":{"properties":{"to_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To Account Id"},"scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scope"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From"},"effective_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective Until"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"requires_admin_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requires Admin Only"}},"type":"object","title":"DelegationPatch"},"DelegationUpdate":{"properties":{"effective_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective Until"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"requires_admin_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requires Admin Only"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"DelegationUpdate"},"DemographicsUpsert":{"properties":{"collection_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Collection Method"},"applicant_ethnicity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicant Ethnicity"},"applicant_race":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Applicant Race"},"applicant_sex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applicant Sex"},"applicant_age":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":18.0},{"type":"null"}],"title":"Applicant Age"},"applicant_income_thousands":{"anyOf":[{"type":"integer","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Applicant Income Thousands"},"co_applicant_ethnicity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Co Applicant Ethnicity"},"co_applicant_race":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Co Applicant Race"},"co_applicant_sex":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Co Applicant Sex"},"co_applicant_age":{"anyOf":[{"type":"integer","maximum":120.0,"minimum":18.0},{"type":"null"}],"title":"Co Applicant Age"}},"type":"object","title":"DemographicsUpsert"},"DenialReasonsPutBody":{"properties":{"reasons":{"items":{"$ref":"#/components/schemas/_DenialReasonIn"},"type":"array","maxItems":4,"title":"Reasons"}},"type":"object","title":"DenialReasonsPutBody"},"DestCreateBody":{"properties":{"name":{"type":"string","minLength":1,"title":"Name"},"kind":{"type":"string","title":"Kind"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Cron"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","kind"],"title":"DestCreateBody"},"DestPatchBody":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Cron"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"DestPatchBody"},"DisconnectedLoanCreate":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"external_loan_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Loan Ref"},"los_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Los System"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Details"},"last_connected_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Connected At"}},"type":"object","title":"DisconnectedLoanCreate"},"DisconnectedLoanResolve":{"properties":{"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"resolved_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved By"}},"type":"object","title":"DisconnectedLoanResolve"},"DiscoveryQueryCreate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"filters":{"additionalProperties":true,"type":"object","title":"Filters"},"notification_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notification Channel"},"enabled":{"type":"boolean","title":"Enabled","default":true}},"type":"object","required":["filters"],"title":"DiscoveryQueryCreate"},"EligibilityRuleIn":{"properties":{"field":{"type":"string","title":"Field"},"op":{"type":"string","title":"Op"},"value":{"title":"Value"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_required":{"type":"boolean","title":"Is Required","default":true}},"type":"object","required":["field","op","value"],"title":"EligibilityRuleIn"},"EmbedChatRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"EmbedChatRequest"},"EmbedCreate":{"properties":{"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"},"config":{"additionalProperties":true,"type":"object","title":"Config"},"allowed_origins":{"items":{"type":"string"},"type":"array","title":"Allowed Origins"},"theme":{"additionalProperties":true,"type":"object","title":"Theme"},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["name","kind"],"title":"EmbedCreate"},"EmbedPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"allowed_origins":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Origins"},"theme":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Theme"},"api_key_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Api Key Id"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"EmbedPatch"},"EmployeePatch":{"properties":{"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"branch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch Id"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"}},"type":"object","title":"EmployeePatch"},"EntryCreate":{"properties":{"value":{"type":"string","maxLength":200,"minLength":1,"title":"Value"},"display_label":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Label"},"sort_order":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Sort Order","default":100},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["value"],"title":"EntryCreate"},"EntryPatch":{"properties":{"display_label":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Display Label"},"sort_order":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Sort Order"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"EntryPatch"},"EpcCreate":{"properties":{"connected_system_id":{"type":"string","title":"Connected System Id"},"direction":{"type":"string","title":"Direction"},"operation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Operation"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"},"encompass_loan_guid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Encompass Loan Guid"}},"type":"object","required":["connected_system_id","direction"],"title":"EpcCreate"},"ExceptionApprove":{"properties":{"approved_by_account_id":{"type":"string","title":"Approved By Account Id"},"next_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Level"}},"type":"object","required":["approved_by_account_id"],"title":"ExceptionApprove"},"ExceptionCreate":{"properties":{"requested_by_account_id":{"type":"string","title":"Requested By Account Id"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"fico_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Pct"},"rate_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate Pct"},"original_price":{"type":"number","title":"Original Price"},"requested_price":{"type":"number","title":"Requested Price"},"reason_code":{"type":"string","title":"Reason Code"},"reason_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason Notes"}},"type":"object","required":["requested_by_account_id","original_price","requested_price","reason_code"],"title":"ExceptionCreate","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys."},"ExceptionReject":{"properties":{"approved_by_account_id":{"type":"string","title":"Approved By Account Id"},"rejected_reason":{"type":"string","title":"Rejected Reason"}},"type":"object","required":["approved_by_account_id","rejected_reason"],"title":"ExceptionReject"},"ExpirePricingRequest":{"properties":{"scope":{"type":"string","title":"Scope","default":"all"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"By Account Id"}},"type":"object","title":"ExpirePricingRequest"},"FeeBatchClassifyRequest":{"properties":{"items":{"items":{"additionalProperties":true,"type":"object"},"type":"array","maxItems":500,"minItems":1,"title":"Items"},"shopped_outside_list":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Shopped Outside List"}},"type":"object","required":["items"],"title":"FeeBatchClassifyRequest","description":"Batch classify request — list of {label, amount, ...} items."},"FeeClassifyRequest":{"properties":{"label":{"type":"string","maxLength":200,"minLength":1,"title":"Label"},"shopped_outside_list":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Shopped Outside List"}},"type":"object","required":["label"],"title":"FeeClassifyRequest","description":"Single-label classify request."},"FloatDownDraftBody":{"properties":{"draft_rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Draft Rate Pct"},"draft_points":{"anyOf":[{"type":"number","maximum":5.0,"minimum":-5.0},{"type":"null"}],"title":"Draft Points"},"draft_lock_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":1.0},{"type":"null"}],"title":"Draft Lock Days"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"saved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Saved By Account Id"},"saved_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Saved By Name"}},"type":"object","title":"FloatDownDraftBody","description":"Draft counter on a float-down request. All fields optional so a\nreviewer can save partial drafts (e.g., just the rate without points)."},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"ForwardGLReq":{"properties":{"pool_id":{"type":"string","title":"Pool Id"},"hedge_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hedge Ratio"}},"type":"object","required":["pool_id"],"title":"ForwardGLReq"},"FundingCostCreate":{"properties":{"loan_program":{"type":"string","title":"Loan Program"},"basis_points":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Basis Points"},"as_of_date":{"type":"string","format":"date","title":"As Of Date"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["loan_program","basis_points","as_of_date"],"title":"FundingCostCreate"},"FundingCostUpdate":{"properties":{"loan_program":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Program"},"basis_points":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Basis Points"},"as_of_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"As Of Date"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"FundingCostUpdate"},"GenerateKeyRequest":{"properties":{"name":{"type":"string","title":"Name","default":"Default Key"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","default":["read"]},"rate_limit":{"type":"integer","title":"Rate Limit","default":1000}},"type":"object","title":"GenerateKeyRequest"},"GenerateLARBody":{"properties":{"filing_year":{"type":"integer","maximum":2100.0,"minimum":2020.0,"title":"Filing Year"}},"type":"object","required":["filing_year"],"title":"GenerateLARBody"},"GridCreate":{"properties":{"slug":{"type":"string","maxLength":64,"minLength":1,"title":"Slug"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"axis_x_field":{"type":"string","maxLength":64,"minLength":1,"title":"Axis X Field"},"axis_x_buckets":{"items":{"type":"number"},"type":"array","title":"Axis X Buckets"},"axis_y_field":{"type":"string","maxLength":64,"minLength":1,"title":"Axis Y Field"},"axis_y_buckets":{"items":{"type":"number"},"type":"array","title":"Axis Y Buckets"},"cells":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Cells"},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","required":["slug","display_name","axis_x_field","axis_y_field"],"title":"GridCreate"},"GridPatch":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"axis_x_field":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Axis X Field"},"axis_x_buckets":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Axis X Buckets"},"axis_y_field":{"anyOf":[{"type":"string","maxLength":64,"minLength":1},{"type":"null"}],"title":"Axis Y Field"},"axis_y_buckets":{"anyOf":[{"items":{"type":"number"},"type":"array"},{"type":"null"}],"title":"Axis Y Buckets"},"cells":{"anyOf":[{"items":{"items":{"type":"number"},"type":"array"},"type":"array"},{"type":"null"}],"title":"Cells"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"GridPatch"},"GroupCreate":{"properties":{"slug":{"type":"string","maxLength":64,"minLength":1,"title":"Slug"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","required":["slug","display_name"],"title":"GroupCreate"},"GroupMemberAdd":{"properties":{"account_id":{"type":"string","title":"Account Id"}},"type":"object","required":["account_id"],"title":"GroupMemberAdd"},"GroupPatch":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"GroupPatch"},"GuidelinesCheck":{"properties":{"fico_score":{"type":"integer","title":"Fico Score"},"ltv_pct":{"type":"number","title":"Ltv Pct"},"loan_type":{"type":"string","title":"Loan Type","default":"conventional"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"loan_amount":{"type":"number","title":"Loan Amount","default":350000},"dti_pct":{"type":"number","title":"Dti Pct","default":43},"property_type":{"type":"string","title":"Property Type","default":"primary"},"is_veteran":{"type":"boolean","title":"Is Veteran","default":false}},"type":"object","required":["fico_score","ltv_pct"],"title":"GuidelinesCheck"},"HMDASettingsUpsert":{"properties":{"lei":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Lei"},"federal_agency_code":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"Federal Agency Code"},"tax_id":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Tax Id"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"contact_phone":{"anyOf":[{"type":"string","maxLength":30},{"type":"null"}],"title":"Contact Phone"},"contact_email":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Contact Email"},"contact_street_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Street Address"},"contact_city":{"anyOf":[{"type":"string","maxLength":100},{"type":"null"}],"title":"Contact City"},"contact_state":{"anyOf":[{"type":"string","maxLength":2,"minLength":2},{"type":"null"}],"title":"Contact State"},"contact_zip":{"anyOf":[{"type":"string","maxLength":10},{"type":"null"}],"title":"Contact Zip"},"parent_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Name"},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","title":"HMDASettingsUpsert"},"HMDAValidateBody":{"properties":{"filing_year":{"type":"integer","maximum":2100.0,"minimum":2020.0,"title":"Filing Year"}},"type":"object","required":["filing_year"],"title":"HMDAValidateBody"},"HOEPAEvaluateBody":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"apr_pct":{"type":"number","maximum":50.0,"minimum":0.0,"title":"Apr Pct"},"lock_date":{"type":"string","format":"date","title":"Lock Date"},"product_type":{"type":"string","title":"Product Type"},"term_years":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Term Years"},"lien_position":{"type":"string","title":"Lien Position","default":"first"},"loan_amount_usd":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"null"}],"title":"Loan Amount Usd"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["apr_pct","lock_date","product_type","term_years"],"title":"HOEPAEvaluateBody","description":"Ad-hoc HOEPA test (no loan_id). For loan-backed tests, pass\nloan_id and we'll still record the inputs for audit."},"HPMLEvaluateBody":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"apr_pct":{"type":"number","maximum":50.0,"minimum":0.0,"title":"Apr Pct"},"lock_date":{"type":"string","format":"date","title":"Lock Date"},"product_type":{"type":"string","title":"Product Type"},"term_years":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Term Years"},"lien_position":{"type":"string","title":"Lien Position","default":"first"},"is_jumbo":{"type":"boolean","title":"Is Jumbo","default":false},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["apr_pct","lock_date","product_type","term_years"],"title":"HPMLEvaluateBody","description":"Ad-hoc HPML test (no loan_id). For loan-backed tests, pass loan_id\nand we'll still record the inputs for audit."},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"HedgePositionCreate":{"properties":{"benchmark":{"type":"string","title":"Benchmark"},"direction":{"type":"string","title":"Direction"},"notional_upb":{"type":"number","title":"Notional Upb"},"entry_price":{"type":"number","title":"Entry Price"},"hedge_ratio":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Hedge Ratio","default":1.0},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"},"settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Settlement Date"},"pool_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pool Id"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["benchmark","direction","notional_upb","entry_price"],"title":"HedgePositionCreate"},"HedgePositionPatch":{"properties":{"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"}},"type":"object","title":"HedgePositionPatch"},"IntelSettingsUpdate":{"properties":{"opted_in":{"type":"boolean","title":"Opted In"},"k_threshold":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":5.0},{"type":"null"}],"title":"K Threshold"},"opted_in_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Opted In By Account Id"}},"type":"object","required":["opted_in"],"title":"IntelSettingsUpdate"},"InvestorAcceptBody":{"properties":{"token":{"type":"string","title":"Token"},"legal_name":{"type":"string","title":"Legal Name"},"type":{"type":"string","title":"Type"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"},"contact_email":{"type":"string","title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"invest_min_loan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Invest Min Loan"},"invest_max_loan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Invest Max Loan"},"invest_min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invest Min Fico"},"invest_programs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Invest Programs"},"invest_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Invest States"},"bid_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Style"}},"type":"object","required":["token","legal_name","type","contact_email"],"title":"InvestorAcceptBody"},"InvestorInviteCreate":{"properties":{"email":{"type":"string","title":"Email"},"legal_name":{"type":"string","title":"Legal Name"},"type":{"type":"string","title":"Type"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["email","legal_name","type"],"title":"InvestorInviteCreate"},"InvestorPrice":{"properties":{"investor_id":{"type":"string","title":"Investor Id"},"investor_name":{"type":"string","title":"Investor Name"},"product_code":{"type":"string","title":"Product Code"},"rate_pct":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rate Pct"},"base_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Base Price"},"total_llpa_adjustment":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total Llpa Adjustment"},"net_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Net Price"},"lock_days":{"type":"integer","title":"Lock Days"},"sheet_effective_ts":{"type":"string","format":"date-time","title":"Sheet Effective Ts"},"llpa_breakdown":{"additionalProperties":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},"type":"object","title":"Llpa Breakdown","default":{}},"investor_sent_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Investor Sent At"},"staleness_seconds":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Staleness Seconds"},"staleness_warning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Staleness Warning"},"partnership_point_bias":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Partnership Point Bias"},"partnership_buyer_fee":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Partnership Buyer Fee"},"partnership_commitment_time_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Partnership Commitment Time Minutes"},"all_in_price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"All In Price"},"all_in_dollar_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"All In Dollar Amount"},"escrow_waiver_adjustment_points":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Escrow Waiver Adjustment Points"},"temporary_buydown_cost_points":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Temporary Buydown Cost Points"},"mission_score_buyup_bps":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mission Score Buyup Bps"}},"type":"object","required":["investor_id","investor_name","product_code","rate_pct","base_price","total_llpa_adjustment","net_price","lock_days","sheet_effective_ts"],"title":"InvestorPrice","description":"A single investor's pricing for a loan scenario."},"InvestorUsageRefresh":{"properties":{"period_start":{"type":"string","format":"date","title":"Period Start"},"period_end":{"type":"string","format":"date","title":"Period End"}},"type":"object","required":["period_start","period_end"],"title":"InvestorUsageRefresh"},"InviteComplete":{"properties":{"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"company_nmls":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Nmls"},"company_ein":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Ein"},"company_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Address"},"company_city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company City"},"company_state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company State"},"company_zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Zip"},"company_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Phone"},"company_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Website"},"contact_first_name":{"type":"string","title":"Contact First Name"},"contact_last_name":{"type":"string","title":"Contact Last Name"},"contact_email":{"type":"string","title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"contact_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Title"},"investor_sender_domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Investor Sender Domains"},"platform_callback_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Platform Callback Url"},"monthly_volume_band":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Monthly Volume Band"},"current_ppe":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Ppe"},"los_system":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Los System"},"states_licensed":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"States Licensed"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["contact_first_name","contact_last_name","contact_email"],"title":"InviteComplete"},"InviteCreate":{"properties":{"email":{"type":"string","title":"Email"},"account_type":{"type":"string","title":"Account Type"},"invitee_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invitee Name"},"company_hint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Hint"},"invited_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Invited By"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["email","account_type"],"title":"InviteCreate"},"LOCopilotChat":{"properties":{"message":{"type":"string","maxLength":8000,"minLength":1,"title":"Message"}},"type":"object","required":["message"],"title":"LOCopilotChat"},"LOCopilotSessionCreate":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"title":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Title"}},"type":"object","title":"LOCopilotSessionCreate"},"LabeledScenario":{"properties":{"loan_type":{"type":"string","title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"fico_score":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Ltv Pct"},"cltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cltv Pct"},"dti_pct":{"anyOf":[{"type":"number","maximum":65.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti Pct"},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"units":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Units","default":1},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"subordinate_financing":{"type":"boolean","title":"Subordinate Financing","default":false},"first_time_buyer":{"type":"boolean","title":"First Time Buyer","default":false},"self_employed":{"type":"boolean","title":"Self Employed","default":false},"interest_only":{"type":"boolean","title":"Interest Only","default":false},"escrow_waiver":{"type":"boolean","title":"Escrow Waiver","default":false},"high_balance":{"type":"boolean","title":"High Balance","default":false},"mi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Type"},"dscr_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dscr Ratio"},"prepay_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepay Structure"},"income_doc_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Income Doc Type"},"reserves_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reserves Months"},"purchase_price":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Price"},"property_value":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Property Value"},"down_payment":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Down Payment"},"other_lien_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Other Lien Amount"},"monthly_income":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Monthly Income"},"aus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aus","description":"Automated Underwriting System: du | lp | manual"},"heloc_line_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Line Amount"},"heloc_draw_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Draw Amount"},"temporary_buydown":{"type":"boolean","title":"Temporary Buydown","default":false},"buydown_period_months":{"anyOf":[{"type":"integer","maximum":240.0,"minimum":0.0},{"type":"null"}],"title":"Buydown Period Months","description":"Buydown schedule period in months (12, 36, 60, 84, 120, etc)"},"stories":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Stories"},"rural_property":{"type":"boolean","title":"Rural Property","default":false},"non_warrantable":{"type":"boolean","title":"Non Warrantable","description":"Non-warrantable condo flag","default":false},"condotel":{"type":"boolean","title":"Condotel","default":false},"inspection_waiver":{"type":"boolean","title":"Inspection Waiver","default":false},"non_occupancy_coborrower":{"type":"boolean","title":"Non Occupancy Coborrower","default":false},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type","description":"attached | detached"},"properties_owned":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Properties Owned"},"citizenship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citizenship"},"itin":{"type":"boolean","title":"Itin","default":false},"affordable_product":{"type":"boolean","title":"Affordable Product","default":false},"comm_second":{"type":"boolean","title":"Comm Second","description":"Community Seconds program","default":false},"roll_lender_fee":{"type":"boolean","title":"Roll Lender Fee","default":false},"relocation":{"type":"boolean","title":"Relocation","default":false},"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch"},"loan_officer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Officer Name"},"financing_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Option"},"mip_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Pct"},"mip_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Amount"},"total_loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total Loan Amount","description":"Total loan amount including upfront MIP rolled in (FHA)"},"case_assignment_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Assignment Date","description":"FHA case assignment date (ISO8601)"},"guarantee_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Pct"},"guarantee_fee_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Amount"},"va_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Va History","description":"VA history: first_use | subsequent_use | irrrl | disabled_exempt"},"funding_fee_exempt":{"type":"boolean","title":"Funding Fee Exempt","default":false},"funding_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Funding Fee Pct"},"discount_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Points","description":"Borrower-paid discount points (1.0 = 1% of loan amount)"},"lender_credit_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Lender Credit Points","description":"Lender-paid credit in price points"},"temporary_buydown_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Buydown Type","description":"One of \"1-0\", \"2-1\", \"3-2-1\", \"1-1-1\"; null/empty = none"},"mission_score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score"},"label":{"type":"string","title":"Label","description":"Display label, e.g. 'Base' or 'Bump LTV to 75'"}},"type":"object","required":["loan_type","loan_amount","fico_score","ltv_pct","label"],"title":"LabeledScenario","description":"A pricing scenario with a human-readable label for the comparison grid."},"LoanCancel":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"LoanCancel"},"LoanCreate":{"properties":{"external_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Ref"},"lo_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lo Account Id"},"lo_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lo Name"},"borrower_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Name"},"borrower_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Email"},"loan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Days"},"fico_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Pct"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"loan_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Purpose"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","title":"LoanCreate","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys."},"LoanEstimateCreate":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"borrower_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Full Name"},"property_address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Property Address"},"loan_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Loan Amount"},"interest_rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Interest Rate Pct"},"loan_term_months":{"anyOf":[{"type":"integer","maximum":600.0,"minimum":0.0},{"type":"null"}],"title":"Loan Term Months"},"monthly_principal_interest":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Principal Interest"},"has_prepayment_penalty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Prepayment Penalty"},"has_balloon_payment":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Balloon Payment"},"projected_payments_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Projected Payments Json"},"closing_costs_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Closing Costs Json"},"cash_to_close_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cash To Close Json"},"comparisons_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Comparisons Json"},"other_considerations_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Other Considerations Json"},"revision_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revision Reason"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"supersedes_le_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Supersedes Le Id"},"application_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Date"}},"type":"object","title":"LoanEstimateCreate"},"LoanEstimatePatch":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"borrower_full_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Full Name"},"property_address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Property Address"},"loan_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Loan Amount"},"interest_rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"null"}],"title":"Interest Rate Pct"},"loan_term_months":{"anyOf":[{"type":"integer","maximum":600.0,"minimum":0.0},{"type":"null"}],"title":"Loan Term Months"},"monthly_principal_interest":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Monthly Principal Interest"},"has_prepayment_penalty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Prepayment Penalty"},"has_balloon_payment":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Balloon Payment"},"projected_payments_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Projected Payments Json"},"closing_costs_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Closing Costs Json"},"cash_to_close_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Cash To Close Json"},"comparisons_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Comparisons Json"},"other_considerations_json":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Other Considerations Json"},"revision_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Revision Reason"},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"},"application_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Date"}},"type":"object","title":"LoanEstimatePatch"},"LoanFallOut":{"properties":{"reason":{"type":"string","title":"Reason"}},"type":"object","required":["reason"],"title":"LoanFallOut"},"LoanFund":{"properties":{"funded_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Funded Amount"},"actual_net_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Actual Net Price"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"LoanFund"},"LoanLock":{"properties":{"chosen_investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chosen Investor Id"},"chosen_investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Chosen Investor Name"},"base_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base Price"},"llpa_total":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Llpa Total"},"sheet_id_at_lock":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sheet Id At Lock"},"lock_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Days"}},"type":"object","title":"LoanLock","description":"Polly-compat dual-case body for locking a loan."},"LoanManagerBulkEdit":{"properties":{"loan_ids":{"items":{"type":"string"},"type":"array","title":"Loan Ids","default":[]},"updates":{"$ref":"#/components/schemas/LoanManagerBulkUpdate","default":{}}},"type":"object","title":"LoanManagerBulkEdit"},"LoanManagerBulkExport":{"properties":{"loan_ids":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Loan Ids"},"filter":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Filter"}},"type":"object","title":"LoanManagerBulkExport"},"LoanManagerBulkUpdate":{"properties":{"lock_period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Period Days"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"owner_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Account Id"}},"type":"object","title":"LoanManagerBulkUpdate"},"LockConfirmCreate":{"properties":{"lock_request_id":{"type":"string","title":"Lock Request Id"},"delivered_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Delivered To"}},"type":"object","required":["lock_request_id"],"title":"LockConfirmCreate"},"LockConfirmDeliverBody":{"properties":{"via":{"type":"string","title":"Via","default":"email"}},"type":"object","title":"LockConfirmDeliverBody"},"LockConfirmSignBody":{"properties":{"signature_data":{"additionalProperties":true,"type":"object","title":"Signature Data"}},"type":"object","title":"LockConfirmSignBody"},"LockDeskSettingsPatchBody":{"properties":{"only_use_calendar_for_extensions":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Only Use Calendar For Extensions"}},"type":"object","title":"LockDeskSettingsPatchBody"},"LockRequest":{"properties":{"borrower_name":{"type":"string","title":"Borrower Name"},"borrower_email":{"type":"string","title":"Borrower Email","default":""},"loan_amount":{"type":"number","title":"Loan Amount"},"property_address":{"type":"string","title":"Property Address","default":""},"fico_score":{"type":"integer","title":"Fico Score"},"ltv_pct":{"type":"number","title":"Ltv Pct"},"loan_type":{"type":"string","title":"Loan Type","default":"conventional"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"investor":{"type":"string","title":"Investor"},"product":{"type":"string","title":"Product"},"rate_pct":{"type":"number","title":"Rate Pct"},"price":{"type":"number","title":"Price"},"lock_days":{"type":"integer","title":"Lock Days","default":30},"total_adjustment":{"type":"number","title":"Total Adjustment","default":0},"requested_by":{"type":"string","title":"Requested By","default":"lo@company.com"}},"type":"object","required":["borrower_name","loan_amount","fico_score","ltv_pct","investor","product","rate_pct","price"],"title":"LockRequest"},"LockRequestBase":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"external_loan_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Loan Ref"},"requested_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Account Id"},"requested_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Name"},"borrower_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Last Name"},"property_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Address"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"requested_rate_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Requested Rate Pct"},"requested_lock_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Requested Lock Days"},"requested_investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested Investor Id"},"requested_investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested Investor Name"},"requested_base_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Requested Base Price"},"requested_net_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Requested Net Price"},"type_details":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Type Details"},"los_lock_request_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Los Lock Request Id"},"is_hedged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hedged","default":false}},"type":"object","title":"LockRequestBase","description":"Polly-compat (Wave Q1): accepts EITHER snake_case or camelCase\nkeys on incoming POST bodies. Python attribute names stay\nsnake_case for internal code."},"LockResetBody":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"original_lock_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Lock Id"},"reset_reason":{"type":"string","title":"Reset Reason"},"new_lock_period_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"New Lock Period Days"},"external_loan_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"External Loan Ref"},"requested_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Account Id"},"requested_by_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Name"},"borrower_last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Last Name"},"property_address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Address"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"requested_rate_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Requested Rate Pct"},"requested_investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested Investor Id"},"requested_investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested Investor Name"}},"type":"object","required":["reset_reason"],"title":"LockResetBody"},"LogMessageRequest":{"properties":{"direction":{"type":"string","pattern":"^(inbound|outbound)$","title":"Direction"},"message_type":{"type":"string","title":"Message Type"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"}},"type":"object","required":["direction","message_type"],"title":"LogMessageRequest"},"LoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"LogoUploadBody":{"properties":{"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"logo_base64":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Base64"},"filename":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Filename"}},"type":"object","title":"LogoUploadBody","description":"Accept either a pre-hosted URL or a base64 blob."},"LookupBody":{"properties":{"x_value":{"type":"number","title":"X Value"},"y_value":{"type":"number","title":"Y Value"}},"type":"object","required":["x_value","y_value"],"title":"LookupBody"},"LosHeartbeat":{"properties":{"los_system":{"type":"string","title":"Los System"},"success":{"type":"boolean","title":"Success","default":true},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"loans_synced":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Loans Synced"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["los_system"],"title":"LosHeartbeat"},"LosPreloadBody":{"properties":{"los_data":{"additionalProperties":true,"type":"object","title":"Los Data"}},"type":"object","title":"LosPreloadBody"},"MapFieldValueRequest":{"properties":{"mapped_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mapped To"}},"type":"object","title":"MapFieldValueRequest"},"MarginCategoryCreate":{"properties":{"category_name":{"type":"string","title":"Category Name"},"dimension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"product_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Product Codes"},"default_margin_bps":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Default Margin Bps"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","required":["category_name"],"title":"MarginCategoryCreate"},"MarginCategoryUpdate":{"properties":{"category_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Name"},"dimension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dimension"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"product_codes":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Product Codes"},"default_margin_bps":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Default Margin Bps"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"MarginCategoryUpdate"},"MarginRule":{"properties":{"branch_id":{"type":"string","title":"Branch Id","default":""},"channel":{"type":"string","title":"Channel","default":"retail"},"loan_type":{"type":"string","title":"Loan Type","default":""},"adjustment_bps":{"type":"number","title":"Adjustment Bps"},"description":{"type":"string","title":"Description","default":""}},"type":"object","required":["adjustment_bps"],"title":"MarginRule"},"MarkDeliveredBody":{"properties":{"confirmation_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confirmation Number"},"delivery_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Delivery Price"},"investor_loan_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Loan Number"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"MarkDeliveredBody"},"MarkIssuedBody":{"properties":{"pool_number":{"type":"string","minLength":1,"title":"Pool Number"}},"type":"object","required":["pool_number"],"title":"MarkIssuedBody"},"MeridianLinkOAuthCallback":{"properties":{"code":{"type":"string","title":"Code"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","required":["code"],"title":"MeridianLinkOAuthCallback"},"MetabaseAuthRequest":{"properties":{"dashboard_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Dashboard Id"},"params":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Params"},"ttl_seconds":{"type":"integer","title":"Ttl Seconds","default":600}},"type":"object","title":"MetabaseAuthRequest"},"MiConfigCreate":{"properties":{"name":{"type":"string","title":"Name"},"provider":{"type":"string","title":"Provider"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"default_card_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Card Id"},"eligibility_rules":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Eligibility Rules"},"excluded_states":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Excluded States"},"max_ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv Pct","default":97.0},"min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Fico","default":620},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["name","provider"],"title":"MiConfigCreate"},"MiConfigUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"provider":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Provider"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"default_card_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Card Id"},"eligibility_rules":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Eligibility Rules"},"excluded_states":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Excluded States"},"max_ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv Pct"},"min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Fico"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"MiConfigUpdate"},"MortgageCoachCreate":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"borrower_email":{"anyOf":[{"type":"string","maxLength":300},{"type":"null"}],"title":"Borrower Email"},"report_type":{"type":"string","title":"Report Type","default":"tco"},"inputs":{"additionalProperties":true,"type":"object","title":"Inputs"}},"type":"object","title":"MortgageCoachCreate"},"MortgageCoachSendBody":{"properties":{"to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"To"}},"type":"object","title":"MortgageCoachSendBody"},"MortgageCoachTrackViewBody":{"properties":{"viewer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Viewer"}},"type":"object","title":"MortgageCoachTrackViewBody"},"MortgageDirectorWebhookPayload":{"properties":{"event_type":{"type":"string","title":"Event Type","description":"e.g. 'loan.created' or 'lock.submitted'"},"loan_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Number"},"borrower_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Name"},"lock_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lock Rate"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["event_type"],"title":"MortgageDirectorWebhookPayload"},"NaturalPricingRequest":{"properties":{"query":{"type":"string","title":"Query"}},"type":"object","required":["query"],"title":"NaturalPricingRequest"},"NliAssistantFeedback":{"properties":{"query_id":{"type":"string","title":"Query Id"},"rating":{"type":"string","title":"Rating","description":"thumbs_up | thumbs_down | flag"},"comment":{"anyOf":[{"type":"string","maxLength":4000},{"type":"null"}],"title":"Comment"}},"type":"object","required":["query_id","rating"],"title":"NliAssistantFeedback"},"NliAssistantQuery":{"properties":{"question":{"type":"string","maxLength":4000,"minLength":1,"title":"Question"},"context":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Context"},"session_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Session Id"}},"type":"object","required":["question"],"title":"NliAssistantQuery"},"NoteBody":{"properties":{"note":{"type":"string","title":"Note"},"by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"By"}},"type":"object","required":["note"],"title":"NoteBody"},"NoteCreate":{"properties":{"entity_type":{"type":"string","title":"Entity Type"},"entity_id":{"type":"string","title":"Entity Id"},"body":{"type":"string","maxLength":10000,"minLength":1,"title":"Body"},"visibility":{"type":"string","title":"Visibility","default":"internal"},"is_pinned":{"type":"boolean","title":"Is Pinned","default":false},"author_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Author Account Id"},"author_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Author Name"}},"type":"object","required":["entity_type","entity_id","body"],"title":"NoteCreate"},"NotePatch":{"properties":{"body":{"anyOf":[{"type":"string","maxLength":10000,"minLength":1},{"type":"null"}],"title":"Body"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility"},"is_pinned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Pinned"},"author_name":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Author Name"}},"type":"object","title":"NotePatch"},"ObserveFieldValueRequest":{"properties":{"field_name":{"type":"string","title":"Field Name"},"field_value":{"type":"string","title":"Field Value"}},"type":"object","required":["field_name","field_value"],"title":"ObserveFieldValueRequest"},"OrganizationUpdate":{"properties":{"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"dba_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Dba Name"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"},"hq_address":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Hq Address"},"primary_contact":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Primary Contact"},"corporate_theme":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Corporate Theme"}},"type":"object","title":"OrganizationUpdate"},"OverrideCreate":{"properties":{"benchmark_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"original_bid_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Original Bid Amount"},"override_bid_amount":{"type":"number","title":"Override Bid Amount"},"adjustment_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjustment Bps"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"applied_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied From"},"applied_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied Until"},"is_active":{"type":"boolean","title":"Is Active","default":true},"created_by":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By"}},"type":"object","required":["override_bid_amount"],"title":"OverrideCreate"},"OverridePatch":{"properties":{"override_bid_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Override Bid Amount"},"adjustment_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjustment Bps"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"applied_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied From"},"applied_until":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Applied Until"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"OverridePatch"},"PairOffReq":{"properties":{"position_a_id":{"type":"string","title":"Position A Id"},"position_b_id":{"type":"string","title":"Position B Id"}},"type":"object","required":["position_a_id","position_b_id"],"title":"PairOffReq"},"ParRateGridCreate":{"properties":{"name":{"type":"string","title":"Name"},"product_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Id"},"rates":{"items":{"type":"number"},"type":"array","title":"Rates","default":[]},"lock_periods":{"items":{"type":"integer"},"type":"array","title":"Lock Periods","default":[]},"price_matrix":{"items":{"items":{"type":"number"},"type":"array"},"type":"array","title":"Price Matrix","default":[]},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"}},"type":"object","required":["name"],"title":"ParRateGridCreate"},"PeDocUploadPatch":{"properties":{"max_file_size_mb":{"anyOf":[{"type":"integer","maximum":1024.0,"minimum":1.0},{"type":"null"}],"title":"Max File Size Mb"},"allowed_extensions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Extensions"},"virus_scan_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Virus Scan Enabled"},"auto_classify":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Classify"},"retention_days":{"anyOf":[{"type":"integer","maximum":36500.0,"minimum":1.0},{"type":"null"}],"title":"Retention Days"},"require_borrower_consent":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Borrower Consent"},"notify_on_upload":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify On Upload"},"notification_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Notification Recipients"}},"type":"object","title":"PeDocUploadPatch"},"PeDocUploadPut":{"properties":{"max_file_size_mb":{"type":"integer","maximum":1024.0,"minimum":1.0,"title":"Max File Size Mb","default":25},"allowed_extensions":{"items":{"type":"string"},"type":"array","title":"Allowed Extensions"},"virus_scan_enabled":{"type":"boolean","title":"Virus Scan Enabled","default":true},"auto_classify":{"type":"boolean","title":"Auto Classify","default":true},"retention_days":{"type":"integer","maximum":36500.0,"minimum":1.0,"title":"Retention Days","default":730},"require_borrower_consent":{"type":"boolean","title":"Require Borrower Consent","default":false},"notify_on_upload":{"type":"boolean","title":"Notify On Upload","default":true},"notification_recipients":{"items":{"type":"string"},"type":"array","title":"Notification Recipients"}},"type":"object","title":"PeDocUploadPut"},"PersonaCreate":{"properties":{"slug":{"type":"string","maxLength":64,"minLength":1,"pattern":"^[a-z0-9_]+$","title":"Slug"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"system_prompt":{"type":"string","minLength":1,"title":"System Prompt"},"tool_names":{"items":{"type":"string"},"type":"array","title":"Tool Names"},"is_active":{"type":"boolean","title":"Is Active","default":true}},"type":"object","required":["slug","display_name","system_prompt"],"title":"PersonaCreate"},"PersonaPatch":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"system_prompt":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"System Prompt"},"tool_names":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tool Names"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"PersonaPatch"},"PlaceBidBody":{"properties":{"tradeable_loan_id":{"type":"string","title":"Tradeable Loan Id"},"bid_price":{"type":"number","exclusiveMaximum":200.0,"exclusiveMinimum":0.0,"title":"Bid Price"},"valid_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Valid Until"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"buyer_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Account Id"},"cra_pay_up_bps":{"anyOf":[{"type":"number","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Cra Pay Up Bps"}},"type":"object","required":["tradeable_loan_id","bid_price"],"title":"PlaceBidBody"},"PolicyCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","default":true},"rate_delta_bps_threshold":{"type":"integer","maximum":500.0,"minimum":1.0,"title":"Rate Delta Bps Threshold","default":25},"improvement_metric":{"type":"string","title":"Improvement Metric","default":"price"},"loan_types":{"items":{"type":"string"},"type":"array","title":"Loan Types"},"min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Fico"},"max_ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv Pct"},"min_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Loan Amount"},"max_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Loan Amount"},"cool_down_hours":{"type":"integer","maximum":720.0,"minimum":0.0,"title":"Cool Down Hours","default":24},"channel_scope":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Channel Scope"},"created_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created By Account Id"}},"type":"object","required":["name"],"title":"PolicyCreate"},"PolicyPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"rate_delta_bps_threshold":{"anyOf":[{"type":"integer","maximum":500.0,"minimum":1.0},{"type":"null"}],"title":"Rate Delta Bps Threshold"},"improvement_metric":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Improvement Metric"},"loan_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Loan Types"},"min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Fico"},"max_ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv Pct"},"min_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Loan Amount"},"max_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Loan Amount"},"cool_down_hours":{"anyOf":[{"type":"integer","maximum":720.0,"minimum":0.0},{"type":"null"}],"title":"Cool Down Hours"},"channel_scope":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Channel Scope"}},"type":"object","title":"PolicyPatch"},"PoolCreate":{"properties":{"pool_name":{"type":"string","title":"Pool Name"},"commitment_type":{"type":"string","title":"Commitment Type","default":"mandatory"},"delivery_type":{"type":"string","title":"Delivery Type","default":"cash_window"},"settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Settlement Date"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"},"tradeable_loan_ids":{"items":{"type":"string"},"type":"array","title":"Tradeable Loan Ids"},"priced_loans":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Priced Loans"}},"type":"object","required":["pool_name"],"title":"PoolCreate"},"PoolCreateBody":{"properties":{"pool_type":{"type":"string","title":"Pool Type","description":"I, II, II-C, II-J, II-X, Platinum"},"coupon_pct":{"type":"number","exclusiveMaximum":20.0,"exclusiveMinimum":0.0,"title":"Coupon Pct"},"issue_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Date"},"settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Settlement Date"},"issuer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["pool_type","coupon_pct"],"title":"PoolCreateBody"},"PoolUpdateBody":{"properties":{"pool_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pool Type"},"coupon_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coupon Pct"},"issue_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issue Date"},"settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Settlement Date"},"issuer_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Issuer Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"pool_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pool Number"}},"type":"object","title":"PoolUpdateBody"},"PreApprovalPutBody":{"properties":{"pre_approval_requested":{"type":"string","maxLength":32,"minLength":1,"title":"Pre Approval Requested"}},"type":"object","required":["pre_approval_requested"],"title":"PreApprovalPutBody"},"PremiumBody":{"properties":{"ltv_min":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Min"},"ltv_max":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Max"},"fico_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Min"},"fico_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Max"},"term_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term Months"},"coverage_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Coverage Pct"},"annual_premium_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Annual Premium Bps"},"upfront_premium_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Upfront Premium Pct"},"mi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Type"},"is_refundable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Refundable","default":false}},"type":"object","title":"PremiumBody"},"PreviewBody":{"properties":{"primary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Color"},"secondary_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Secondary Color"},"accent_color":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Accent Color"},"font_family":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Font Family"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","title":"PreviewBody"},"PricingExplainRequest":{"properties":{"scenario":{"additionalProperties":true,"type":"object","title":"Scenario","description":"Loan scenario (fico, ltv, loan_type, etc.)"},"current_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Current Price"},"previous_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Previous Price"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"reason_hints":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Reason Hints"}},"type":"object","required":["scenario"],"title":"PricingExplainRequest"},"PricingRequest-Input":{"properties":{"loan_type":{"type":"string","title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"fico_score":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Ltv Pct"},"cltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cltv Pct"},"dti_pct":{"anyOf":[{"type":"number","maximum":65.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti Pct"},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"units":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Units","default":1},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"subordinate_financing":{"type":"boolean","title":"Subordinate Financing","default":false},"first_time_buyer":{"type":"boolean","title":"First Time Buyer","default":false},"self_employed":{"type":"boolean","title":"Self Employed","default":false},"interest_only":{"type":"boolean","title":"Interest Only","default":false},"escrow_waiver":{"type":"boolean","title":"Escrow Waiver","default":false},"high_balance":{"type":"boolean","title":"High Balance","default":false},"mi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Type"},"dscr_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dscr Ratio"},"prepay_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepay Structure"},"income_doc_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Income Doc Type"},"reserves_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reserves Months"},"purchase_price":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Price"},"property_value":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Property Value"},"down_payment":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Down Payment"},"other_lien_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Other Lien Amount"},"monthly_income":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Monthly Income"},"aus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aus","description":"Automated Underwriting System: du | lp | manual"},"heloc_line_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Line Amount"},"heloc_draw_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Draw Amount"},"temporary_buydown":{"type":"boolean","title":"Temporary Buydown","default":false},"buydown_period_months":{"anyOf":[{"type":"integer","maximum":240.0,"minimum":0.0},{"type":"null"}],"title":"Buydown Period Months","description":"Buydown schedule period in months (12, 36, 60, 84, 120, etc)"},"stories":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Stories"},"rural_property":{"type":"boolean","title":"Rural Property","default":false},"non_warrantable":{"type":"boolean","title":"Non Warrantable","description":"Non-warrantable condo flag","default":false},"condotel":{"type":"boolean","title":"Condotel","default":false},"inspection_waiver":{"type":"boolean","title":"Inspection Waiver","default":false},"non_occupancy_coborrower":{"type":"boolean","title":"Non Occupancy Coborrower","default":false},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type","description":"attached | detached"},"properties_owned":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Properties Owned"},"citizenship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citizenship"},"itin":{"type":"boolean","title":"Itin","default":false},"affordable_product":{"type":"boolean","title":"Affordable Product","default":false},"comm_second":{"type":"boolean","title":"Comm Second","description":"Community Seconds program","default":false},"roll_lender_fee":{"type":"boolean","title":"Roll Lender Fee","default":false},"relocation":{"type":"boolean","title":"Relocation","default":false},"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch"},"loan_officer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Officer Name"},"financing_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Option"},"mip_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Pct"},"mip_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Amount"},"total_loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total Loan Amount","description":"Total loan amount including upfront MIP rolled in (FHA)"},"case_assignment_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Assignment Date","description":"FHA case assignment date (ISO8601)"},"guarantee_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Pct"},"guarantee_fee_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Amount"},"va_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Va History","description":"VA history: first_use | subsequent_use | irrrl | disabled_exempt"},"funding_fee_exempt":{"type":"boolean","title":"Funding Fee Exempt","default":false},"funding_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Funding Fee Pct"},"discount_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Points","description":"Borrower-paid discount points (1.0 = 1% of loan amount)"},"lender_credit_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Lender Credit Points","description":"Lender-paid credit in price points"},"temporary_buydown_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Buydown Type","description":"One of \"1-0\", \"2-1\", \"3-2-1\", \"1-1-1\"; null/empty = none"},"mission_score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score"}},"type":"object","required":["loan_type","loan_amount","fico_score","ltv_pct"],"title":"PricingRequest","description":"Request for best-execution pricing.\n\nAccepts Polly-shape camelCase body OR NachoCrunch-native snake_case\nbody. Mirrors the fields Fannie Mae, Freddie Mac, Polly, and\nOptimal Blue expect; validation constraints match the `ge`/`le`\nbounds Polly documents for their Pricer scenario form."},"PricingRequest-Output":{"properties":{"loan_type":{"type":"string","title":"Loan Type"},"loan_amount":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"fico_score":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico Score"},"ltv_pct":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Ltv Pct"},"cltv_pct":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cltv Pct"},"dti_pct":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti Pct"},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"units":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Units","default":1},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"subordinate_financing":{"type":"boolean","title":"Subordinate Financing","default":false},"first_time_buyer":{"type":"boolean","title":"First Time Buyer","default":false},"self_employed":{"type":"boolean","title":"Self Employed","default":false},"interest_only":{"type":"boolean","title":"Interest Only","default":false},"escrow_waiver":{"type":"boolean","title":"Escrow Waiver","default":false},"high_balance":{"type":"boolean","title":"High Balance","default":false},"mi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Type"},"dscr_ratio":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dscr Ratio"},"prepay_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepay Structure"},"income_doc_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Income Doc Type"},"reserves_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reserves Months"},"purchase_price":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Price"},"property_value":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Property Value"},"down_payment":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Down Payment"},"other_lien_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Other Lien Amount"},"monthly_income":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Monthly Income"},"aus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aus","description":"Automated Underwriting System: du | lp | manual"},"heloc_line_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Line Amount"},"heloc_draw_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Draw Amount"},"temporary_buydown":{"type":"boolean","title":"Temporary Buydown","default":false},"buydown_period_months":{"anyOf":[{"type":"integer","maximum":240.0,"minimum":0.0},{"type":"null"}],"title":"Buydown Period Months","description":"Buydown schedule period in months (12, 36, 60, 84, 120, etc)"},"stories":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Stories"},"rural_property":{"type":"boolean","title":"Rural Property","default":false},"non_warrantable":{"type":"boolean","title":"Non Warrantable","description":"Non-warrantable condo flag","default":false},"condotel":{"type":"boolean","title":"Condotel","default":false},"inspection_waiver":{"type":"boolean","title":"Inspection Waiver","default":false},"non_occupancy_coborrower":{"type":"boolean","title":"Non Occupancy Coborrower","default":false},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type","description":"attached | detached"},"properties_owned":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Properties Owned"},"citizenship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citizenship"},"itin":{"type":"boolean","title":"Itin","default":false},"affordable_product":{"type":"boolean","title":"Affordable Product","default":false},"comm_second":{"type":"boolean","title":"Comm Second","description":"Community Seconds program","default":false},"roll_lender_fee":{"type":"boolean","title":"Roll Lender Fee","default":false},"relocation":{"type":"boolean","title":"Relocation","default":false},"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch"},"loan_officer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Officer Name"},"financing_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Option"},"mip_pct":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Pct"},"mip_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Amount"},"total_loan_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total Loan Amount","description":"Total loan amount including upfront MIP rolled in (FHA)"},"case_assignment_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Assignment Date","description":"FHA case assignment date (ISO8601)"},"guarantee_fee_pct":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Pct"},"guarantee_fee_amount":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Amount"},"va_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Va History","description":"VA history: first_use | subsequent_use | irrrl | disabled_exempt"},"funding_fee_exempt":{"type":"boolean","title":"Funding Fee Exempt","default":false},"funding_fee_pct":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Funding Fee Pct"},"discount_points":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Points","description":"Borrower-paid discount points (1.0 = 1% of loan amount)"},"lender_credit_points":{"anyOf":[{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Lender Credit Points","description":"Lender-paid credit in price points"},"temporary_buydown_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Buydown Type","description":"One of \"1-0\", \"2-1\", \"3-2-1\", \"1-1-1\"; null/empty = none"},"mission_score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score"}},"type":"object","required":["loan_type","loan_amount","fico_score","ltv_pct"],"title":"PricingRequest","description":"Request for best-execution pricing.\n\nAccepts Polly-shape camelCase body OR NachoCrunch-native snake_case\nbody. Mirrors the fields Fannie Mae, Freddie Mac, Polly, and\nOptimal Blue expect; validation constraints match the `ge`/`le`\nbounds Polly documents for their Pricer scenario form."},"ProductChangeAcceptBody":{"properties":{"mode":{"type":"string","title":"Mode","description":"historical | current"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"},"rate_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate Pct"},"net_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Net Price"},"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"},"decision_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Notes"}},"type":"object","required":["mode"],"title":"ProductChangeAcceptBody"},"ProductChangeGroupingCreate":{"properties":{"source_product":{"type":"string","maxLength":200,"minLength":1,"title":"Source Product"},"target_product":{"type":"string","maxLength":200,"minLength":1,"title":"Target Product"},"lock_request_ids":{"items":{"type":"string"},"type":"array","title":"Lock Request Ids"},"submitted_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted By Account Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["source_product","target_product"],"title":"ProductChangeGroupingCreate"},"ProductChangePricingQuery":{"properties":{"loan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"lock_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Days"},"fico_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ltv Pct"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"loan_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Purpose"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"original_lock_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Original Lock Date"}},"type":"object","title":"ProductChangePricingQuery"},"ProductCodesBody":{"properties":{"product_codes":{"items":{"type":"string"},"type":"array","title":"Product Codes"}},"type":"object","required":["product_codes"],"title":"ProductCodesBody"},"ProductPatch":{"properties":{"agency_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Name"},"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"product_type":{"anyOf":[{"type":"string","maxLength":16,"minLength":1},{"type":"null"}],"title":"Product Type"},"term_years":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Term Years"},"amort_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amort Type"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"sort_order":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ProductPatch"},"ProductPayupCreate":{"properties":{"product_code":{"type":"string","title":"Product Code"},"coupon_pct":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Coupon Pct"},"payup_bps":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Payup Bps"},"as_of_date":{"type":"string","format":"date","title":"As Of Date"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["product_code","coupon_pct","payup_bps","as_of_date"],"title":"ProductPayupCreate"},"ProductPayupUpdate":{"properties":{"product_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Product Code"},"coupon_pct":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Coupon Pct"},"payup_bps":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Payup Bps"},"as_of_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"As Of Date"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ProductPayupUpdate"},"ProductUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"loan_program_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Program Code"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"}},"type":"object","title":"ProductUpdate"},"ProfileCreate":{"properties":{"legal_name":{"type":"string","maxLength":300,"minLength":1,"title":"Legal Name"},"type":{"type":"string","title":"Type"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"},"invest_min_loan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Invest Min Loan"},"invest_max_loan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Invest Max Loan"},"invest_min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invest Min Fico"},"invest_programs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Invest Programs"},"invest_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Invest States"},"bid_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Style"},"pricing_schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Schedule Cron"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"}},"type":"object","required":["legal_name","type"],"title":"ProfileCreate"},"ProfileUpdate":{"properties":{"legal_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legal Name"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"nmls_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Nmls Number"},"invest_min_loan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Invest Min Loan"},"invest_max_loan":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Invest Max Loan"},"invest_min_fico":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Invest Min Fico"},"invest_programs":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Invest Programs"},"invest_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Invest States"},"bid_style":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Bid Style"},"pricing_schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricing Schedule Cron"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"ProfileUpdate"},"ProgressAdvance":{"properties":{"decision":{"type":"string","title":"Decision"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"By Account Id"}},"type":"object","required":["decision"],"title":"ProgressAdvance"},"PublicJoin":{"properties":{"legal_name":{"type":"string","maxLength":300,"minLength":1,"title":"Legal Name"},"type":{"type":"string","title":"Type"},"contact_email":{"type":"string","title":"Contact Email"},"contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Phone"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["legal_name","type","contact_email"],"title":"PublicJoin"},"PublicQuoteRequest":{"properties":{"scenario":{"$ref":"#/components/schemas/QuoteScenario"},"borrower_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Email"},"borrower_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Borrower Name"},"lead_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lead Source"},"referrer_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer Url"}},"type":"object","required":["scenario"],"title":"PublicQuoteRequest"},"PublishUpdate":{"properties":{"auto_publish":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Publish"},"publish_schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish Schedule Cron"},"require_approval":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Require Approval"},"notify_on_publish":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Notify On Publish"},"notification_recipients":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Notification Recipients"},"paused":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Paused"}},"type":"object","title":"PublishUpdate"},"QuarantineResolveBody":{"properties":{"action":{"type":"string","enum":["approve","discard","adapter_added"],"title":"Action"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["action"],"title":"QuarantineResolveBody"},"QuoteBody":{"properties":{"card_id":{"type":"string","title":"Card Id"},"ltv":{"type":"number","title":"Ltv"},"fico":{"type":"integer","title":"Fico"},"term_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term Months","default":360},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"loan_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Purpose"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"},"mi_config_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Config Id"}},"type":"object","required":["card_id","ltv","fico"],"title":"QuoteBody"},"QuoteScenario":{"properties":{"fico":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico"},"ltv":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Ltv"},"loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Loan Amount"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"program":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program","default":"conventional"},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"}},"type":"object","required":["fico","ltv","loan_amount"],"title":"QuoteScenario","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys.\nPublic consumer-distribution endpoint — integration compat matters\nespecially here since it's what Bankrate/LendingTree/etc POST to\nwhen they source rate quotes from us."},"RateAlertCreate":{"properties":{"name":{"type":"string","maxLength":300,"minLength":1,"title":"Name"},"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"},"channel":{"type":"string","title":"Channel"},"destination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination"},"schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Cron"},"cooldown_minutes":{"type":"integer","maximum":10080.0,"minimum":0.0,"title":"Cooldown Minutes","default":60},"owner_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Account Id"},"is_active":{"type":"boolean","title":"Is Active","default":true},"trigger_context":{"type":"string","title":"Trigger Context","default":"both"}},"type":"object","required":["name","criteria","channel"],"title":"RateAlertCreate","description":"Polly-compat dual-case request body."},"RateAlertMatchBody":{"properties":{"lock_state":{"type":"string","maxLength":16,"minLength":1,"title":"Lock State"},"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"program":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program"},"lock_period_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Lock Period Days"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"loan_purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Purpose"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"}},"type":"object","required":["lock_state"],"title":"RateAlertMatchBody","description":"Request body for POST /rate-alerts/match.\n\nReturns the set of active rate alerts whose trigger_context is\ncompatible with `lock_state` AND whose criteria predicate would\napply to a loan-phase scenario. Does NOT fire the alerts — this\nis a planning endpoint for dashboards + LO copilots that want to\npreview which alerts would apply to a loan at its current phase.\n\nPolly-compat: accepts snake_case OR camelCase keys."},"RateAlertPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"criteria":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Criteria"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"destination":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Destination"},"schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Cron"},"cooldown_minutes":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":0.0},{"type":"null"}],"title":"Cooldown Minutes"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"trigger_context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trigger Context"}},"type":"object","title":"RateAlertPatch"},"RateTableConfigUpsert":{"properties":{"published_products":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Published Products"},"baseline_scenario":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Baseline Scenario"},"refresh_cadence_seconds":{"anyOf":[{"type":"integer","maximum":86400.0,"minimum":60.0},{"type":"null"}],"title":"Refresh Cadence Seconds"},"disclaimer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disclaimer"},"channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel"},"is_published":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Published"},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","title":"RateTableConfigUpsert"},"ReasonCreate":{"properties":{"code":{"type":"string","title":"Code"},"display_name":{"type":"string","title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"requires_documentation":{"type":"boolean","title":"Requires Documentation","default":false},"default_max_concession_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Default Max Concession Bps"},"sort_order":{"type":"integer","title":"Sort Order","default":0}},"type":"object","required":["code","display_name"],"title":"ReasonCreate"},"ReasonUpdate":{"properties":{"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"requires_documentation":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requires Documentation"},"default_max_concession_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Default Max Concession Bps"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order"}},"type":"object","title":"ReasonUpdate"},"RegionCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"States"},"regional_manager_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Regional Manager Account Id"}},"type":"object","required":["name"],"title":"RegionCreate"},"RegionUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"States"},"regional_manager_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Regional Manager Account Id"}},"type":"object","title":"RegionUpdate"},"RejectBody":{"properties":{"approved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Account Id"},"approver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approver Name"},"rejection_reason":{"type":"string","title":"Rejection Reason"}},"type":"object","required":["rejection_reason"],"title":"RejectBody"},"RejectChangeRequest":{"properties":{"decision_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Notes"},"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"}},"type":"object","title":"RejectChangeRequest"},"RemoveLoanBody":{"properties":{"loan_id":{"type":"string","title":"Loan Id"}},"type":"object","required":["loan_id"],"title":"RemoveLoanBody"},"RenegotiationCreate":{"properties":{"loan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Id"},"original_lock_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Lock Id"},"kind":{"type":"string","title":"Kind"},"reason_code":{"type":"string","title":"Reason Code"},"original_values":{"additionalProperties":true,"type":"object","title":"Original Values"},"proposed_values":{"additionalProperties":true,"type":"object","title":"Proposed Values"},"requires_re_underwrite":{"type":"boolean","title":"Requires Re Underwrite","default":false},"requested_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Requested By Account Id"},"expires_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expires At"}},"type":"object","required":["kind","reason_code"],"title":"RenegotiationCreate","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys.\nPolly markets Renegotiations as their 2025 flagship launch, so\ndefecting integrations will absolutely POST here."},"RepoolBidReq":{"properties":{"bid_id":{"type":"string","title":"Bid Id"},"target_pool_id":{"type":"string","title":"Target Pool Id"}},"type":"object","required":["bid_id","target_pool_id"],"title":"RepoolBidReq"},"ReportCreate":{"properties":{"name":{"type":"string","title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"report_type":{"type":"string","title":"Report Type","default":"embedded"},"config":{"additionalProperties":true,"type":"object","title":"Config","default":{}},"schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Cron"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true}},"type":"object","required":["name"],"title":"ReportCreate"},"ReportUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"report_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Report Type"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"schedule_cron":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Schedule Cron"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"ReportUpdate"},"RequestorGroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_approval_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Approval Group Id"}},"type":"object","required":["name"],"title":"RequestorGroupCreate"},"RequestorGroupUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"default_approval_group_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Approval Group Id"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"RequestorGroupUpdate"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"ResolveBody":{"properties":{"original_approver_id":{"type":"string","title":"Original Approver Id"},"scope":{"type":"string","title":"Scope","default":"all"},"at_time":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"At Time"}},"type":"object","required":["original_approver_id"],"title":"ResolveBody"},"ReviewalApproveBody":{"properties":{"approved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Account Id"},"approver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approver Name"},"approval_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approval Notes"}},"type":"object","title":"ReviewalApproveBody"},"ReviewalInfoRequestBody":{"properties":{"actor_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Account Id"},"actor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Actor Name"},"info_needed":{"type":"string","title":"Info Needed"}},"type":"object","required":["info_needed"],"title":"ReviewalInfoRequestBody"},"ReviewalRejectBody":{"properties":{"approved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Account Id"},"approver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approver Name"},"rejection_reason":{"type":"string","title":"Rejection Reason"}},"type":"object","required":["rejection_reason"],"title":"ReviewalRejectBody"},"RuleBody":{"properties":{"rule_type":{"type":"string","title":"Rule Type"},"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"},"action":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Action"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0}},"type":"object","required":["rule_type","criteria"],"title":"RuleBody"},"RuleGroupCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"rule_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rule Type"},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0}},"type":"object","required":["name"],"title":"RuleGroupCreate"},"RuleToolRequest":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"scenario":{"additionalProperties":true,"type":"object","title":"Scenario"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["rule_id"],"title":"RuleToolRequest"},"RuleToolResponse":{"properties":{"rule_id":{"type":"string","title":"Rule Id"},"before_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Before Price"},"after_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"After Price"},"delta_bps":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Delta Bps"},"rule_explanation":{"items":{"type":"string"},"type":"array","title":"Rule Explanation"},"applied":{"type":"boolean","title":"Applied"},"run_id":{"type":"string","title":"Run Id"}},"type":"object","required":["rule_id","before_price","after_price","delta_bps","rule_explanation","applied","run_id"],"title":"RuleToolResponse"},"SavedQueryCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"entity":{"type":"string","title":"Entity"},"filter_json":{"title":"Filter Json"},"sort":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Sort"},"is_shared":{"type":"boolean","title":"Is Shared","default":false},"owner_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Owner Account Id"}},"type":"object","required":["name","entity","filter_json"],"title":"SavedQueryCreate"},"SavedQueryUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"entity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity"},"filter_json":{"anyOf":[{},{"type":"null"}],"title":"Filter Json"},"sort":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Sort"},"is_shared":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Shared"}},"type":"object","title":"SavedQueryUpdate"},"ScanBody":{"properties":{"filing_year":{"type":"integer","maximum":2100.0,"minimum":2020.0,"title":"Filing Year"},"group_by":{"type":"string","maxLength":32,"minLength":1,"title":"Group By","default":"county"},"min_volume":{"type":"integer","maximum":10000.0,"minimum":1.0,"title":"Min Volume","default":5},"z_threshold":{"type":"number","maximum":10.0,"minimum":0.5,"title":"Z Threshold","default":2.0}},"type":"object","required":["filing_year"],"title":"ScanBody"},"ScenarioAnalysisRequest":{"properties":{"loan_type":{"type":"string","title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"fico_score":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Ltv Pct"},"cltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cltv Pct"},"dti_pct":{"anyOf":[{"type":"number","maximum":65.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti Pct"},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"units":{"type":"integer","maximum":4.0,"minimum":1.0,"title":"Units","default":1},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"},"county":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"County"},"subordinate_financing":{"type":"boolean","title":"Subordinate Financing","default":false},"first_time_buyer":{"type":"boolean","title":"First Time Buyer","default":false},"self_employed":{"type":"boolean","title":"Self Employed","default":false},"interest_only":{"type":"boolean","title":"Interest Only","default":false},"escrow_waiver":{"type":"boolean","title":"Escrow Waiver","default":false},"high_balance":{"type":"boolean","title":"High Balance","default":false},"mi_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mi Type"},"dscr_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dscr Ratio"},"prepay_structure":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepay Structure"},"income_doc_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Income Doc Type"},"reserves_months":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reserves Months"},"purchase_price":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Purchase Price"},"property_value":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Property Value"},"down_payment":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Down Payment"},"other_lien_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Other Lien Amount"},"monthly_income":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Monthly Income"},"aus":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Aus","description":"Automated Underwriting System: du | lp | manual"},"heloc_line_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Line Amount"},"heloc_draw_amount":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Heloc Draw Amount"},"temporary_buydown":{"type":"boolean","title":"Temporary Buydown","default":false},"buydown_period_months":{"anyOf":[{"type":"integer","maximum":240.0,"minimum":0.0},{"type":"null"}],"title":"Buydown Period Months","description":"Buydown schedule period in months (12, 36, 60, 84, 120, etc)"},"stories":{"anyOf":[{"type":"integer","maximum":10.0,"minimum":1.0},{"type":"null"}],"title":"Stories"},"rural_property":{"type":"boolean","title":"Rural Property","default":false},"non_warrantable":{"type":"boolean","title":"Non Warrantable","description":"Non-warrantable condo flag","default":false},"condotel":{"type":"boolean","title":"Condotel","default":false},"inspection_waiver":{"type":"boolean","title":"Inspection Waiver","default":false},"non_occupancy_coborrower":{"type":"boolean","title":"Non Occupancy Coborrower","default":false},"attachment_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type","description":"attached | detached"},"properties_owned":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Properties Owned"},"citizenship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Citizenship"},"itin":{"type":"boolean","title":"Itin","default":false},"affordable_product":{"type":"boolean","title":"Affordable Product","default":false},"comm_second":{"type":"boolean","title":"Comm Second","description":"Community Seconds program","default":false},"roll_lender_fee":{"type":"boolean","title":"Roll Lender Fee","default":false},"relocation":{"type":"boolean","title":"Relocation","default":false},"branch":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Branch"},"loan_officer_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Officer Name"},"financing_option":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Financing Option"},"mip_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Pct"},"mip_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Mip Amount"},"total_loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Total Loan Amount","description":"Total loan amount including upfront MIP rolled in (FHA)"},"case_assignment_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Case Assignment Date","description":"FHA case assignment date (ISO8601)"},"guarantee_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Pct"},"guarantee_fee_amount":{"anyOf":[{"type":"number","minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Guarantee Fee Amount"},"va_history":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Va History","description":"VA history: first_use | subsequent_use | irrrl | disabled_exempt"},"funding_fee_exempt":{"type":"boolean","title":"Funding Fee Exempt","default":false},"funding_fee_pct":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Funding Fee Pct"},"discount_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Discount Points","description":"Borrower-paid discount points (1.0 = 1% of loan amount)"},"lender_credit_points":{"anyOf":[{"type":"number","maximum":10.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Lender Credit Points","description":"Lender-paid credit in price points"},"temporary_buydown_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Temporary Buydown Type","description":"One of \"1-0\", \"2-1\", \"3-2-1\", \"1-1-1\"; null/empty = none"},"mission_score":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score"},"program":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Program"},"lock_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Lock Period"}},"type":"object","required":["loan_type","loan_amount","fico_score","ltv_pct"],"title":"ScenarioAnalysisRequest","description":"Polly-shaped scenario; a superset of PricingRequest."},"ScenarioCreate":{"properties":{"category_id":{"type":"string","title":"Category Id"},"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["category_id","name"],"title":"ScenarioCreate"},"ScenarioPatch":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"payload":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Payload"},"category_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Id"}},"type":"object","title":"ScenarioPatch"},"ScenarioResult":{"properties":{"label":{"type":"string","title":"Label"},"request":{"additionalProperties":true,"type":"object","title":"Request"},"top_investor":{"anyOf":[{"$ref":"#/components/schemas/TopInvestorSummary"},{"type":"null"}]},"investor_count":{"type":"integer","title":"Investor Count"},"vs_base":{"$ref":"#/components/schemas/VsBase"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["label","request","top_investor","investor_count","vs_base"],"title":"ScenarioResult"},"SchedulePutBody":{"properties":{"schedule_type":{"type":"string","maxLength":16,"minLength":1,"title":"Schedule Type"},"penalty_term_months":{"type":"integer","maximum":360.0,"minimum":0.0,"title":"Penalty Term Months","default":36},"tiers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tiers"},"max_penalty_usd":{"anyOf":[{"type":"number","maximum":10000000.0,"minimum":0.0},{"type":"null"}],"title":"Max Penalty Usd"},"applies_to_refi_only":{"type":"boolean","title":"Applies To Refi Only","default":false},"disclosure_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disclosure Text"},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","required":["schedule_type"],"title":"SchedulePutBody"},"SecurityReportResolve":{"properties":{"resolution_notes":{"type":"string","minLength":1,"title":"Resolution Notes"}},"type":"object","required":["resolution_notes"],"title":"SecurityReportResolve"},"SecurityReportSubmit":{"properties":{"reporter_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Name"},"reporter_email":{"type":"string","pattern":"^[^@\\s]+@[^@\\s]+\\.[^@\\s]+$","title":"Reporter Email"},"reporter_organization":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reporter Organization"},"vulnerability_type":{"type":"string","title":"Vulnerability Type","description":"One of the canonical vuln types"},"severity":{"type":"string","title":"Severity","default":"medium"},"affected_endpoint":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Affected Endpoint"},"description":{"type":"string","minLength":10,"title":"Description"},"steps_to_reproduce":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Steps To Reproduce"},"impact_assessment":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Impact Assessment"},"proposed_mitigation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Proposed Mitigation"}},"type":"object","required":["reporter_email","vulnerability_type","description"],"title":"SecurityReportSubmit"},"SecurityReportTriage":{"properties":{"severity":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Severity"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"SecurityReportTriage"},"SellSideUpdate":{"properties":{"default_pool_size_min":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Default Pool Size Min"},"default_pool_size_max":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Default Pool Size Max"},"default_hedge_ratio":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Default Hedge Ratio"},"auto_create_pools":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Auto Create Pools"},"default_settlement_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Default Settlement Days"},"allowed_buyers":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Allowed Buyers"},"default_servicing_retained":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Default Servicing Retained"}},"type":"object","title":"SellSideUpdate"},"SendPoolBody":{"properties":{"shipping_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Shipping Method","default":"electronic"},"tracking_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tracking Ref"},"estimated_arrival":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Arrival"},"checklist":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Checklist"}},"type":"object","title":"SendPoolBody"},"SequenceCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"applies_to":{"type":"string","title":"Applies To","default":"*"},"is_active":{"type":"boolean","title":"Is Active","default":true},"steps":{"items":{"$ref":"#/components/schemas/SequenceStepIn"},"type":"array","title":"Steps","default":[]}},"type":"object","required":["name"],"title":"SequenceCreate"},"SequenceStepIn":{"properties":{"approval_group_id":{"type":"string","title":"Approval Group Id"},"sla_minutes":{"type":"integer","title":"Sla Minutes","default":60},"skip_if_amount_lte":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skip If Amount Lte"},"required":{"type":"boolean","title":"Required","default":true},"order_idx":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Idx"}},"type":"object","required":["approval_group_id"],"title":"SequenceStepIn"},"SequenceUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"applies_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Applies To"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"SequenceUpdate"},"ServicingFeeCreate":{"properties":{"loan_program":{"type":"string","title":"Loan Program"},"servicing_fee_bps":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Servicing Fee Bps"},"effective_date":{"type":"string","format":"date","title":"Effective Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["loan_program","servicing_fee_bps","effective_date"],"title":"ServicingFeeCreate"},"ServicingFeeUpdate":{"properties":{"loan_program":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Program"},"servicing_fee_bps":{"anyOf":[{"type":"number"},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Servicing Fee Bps"},"effective_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Effective Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ServicingFeeUpdate"},"SetRolePermissionsBody":{"properties":{"permission_codes":{"items":{"type":"string"},"type":"array","title":"Permission Codes"}},"type":"object","required":["permission_codes"],"title":"SetRolePermissionsBody"},"SetUserRolesBody":{"properties":{"role_ids":{"items":{"type":"string"},"type":"array","title":"Role Ids"}},"type":"object","required":["role_ids"],"title":"SetUserRolesBody"},"SheetPublish":{"properties":{"body":{"additionalProperties":true,"type":"object","title":"Body"},"visibility":{"type":"string","title":"Visibility","default":"authenticated"},"effective_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective From"},"effective_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Until"}},"type":"object","required":["body"],"title":"SheetPublish"},"SplitCounterBody":{"properties":{"accepted_concession_bps":{"type":"number","maximum":500.0,"minimum":0.0,"title":"Accepted Concession Bps","description":"Concession bps the reviewer is granting (0-500)."},"rejected_concession_bps":{"type":"number","maximum":500.0,"minimum":0.0,"title":"Rejected Concession Bps","description":"Requested concession bps the reviewer is declining."},"approved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Account Id"},"approver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approver Name"},"rationale":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rationale","description":"Free-text justification — shown to the LO in the counter-offer notice."}},"type":"object","required":["accepted_concession_bps","rejected_concession_bps"],"title":"SplitCounterBody","description":"Wave M1.3 — split counter-offer on a price exception.\n\nThe reviewer accepts PART of the requested concession and rejects the\nrest. Persists both the accepted_bps and rejected_bps so the audit\ntrail reconstructs the full negotiation. Flag parity with Polly's\n`price_exception_split_counter_offer`."},"SpreadCreate":{"properties":{"name":{"type":"string","title":"Name"},"spread_bps":{"type":"number","title":"Spread Bps"},"criteria":{"additionalProperties":true,"type":"object","title":"Criteria","default":{}}},"type":"object","required":["name","spread_bps"],"title":"SpreadCreate"},"StepAdd":{"properties":{"approval_group_id":{"type":"string","title":"Approval Group Id"},"sla_minutes":{"type":"integer","title":"Sla Minutes","default":60},"skip_if_amount_lte":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Skip If Amount Lte"},"required":{"type":"boolean","title":"Required","default":true},"order_idx":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order Idx"}},"type":"object","required":["approval_group_id"],"title":"StepAdd"},"StepsReorder":{"properties":{"step_ids":{"items":{"type":"string"},"type":"array","title":"Step Ids"}},"type":"object","required":["step_ids"],"title":"StepsReorder"},"SubOrgCreate":{"properties":{"name":{"type":"string","title":"Name"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["name","kind"],"title":"SubOrgCreate"},"SubOrgUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"kind":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Kind"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"SubOrgUpdate"},"SubmitChangeRequest":{"properties":{"change_type":{"type":"string","title":"Change Type"},"proposed_changes":{"additionalProperties":true,"type":"object","title":"Proposed Changes"},"submitted_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Submitted By Account Id"}},"type":"object","required":["change_type","proposed_changes"],"title":"SubmitChangeRequest"},"SuggestionActionResolve":{"properties":{"action_code":{"type":"string","maxLength":100,"minLength":1,"title":"Action Code"},"context":{"additionalProperties":true,"type":"object","title":"Context"}},"type":"object","required":["action_code"],"title":"SuggestionActionResolve"},"TapeCounterBody":{"properties":{"adjustment_price_points":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjustment Price Points"},"adjustment_bps":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Adjustment Bps"},"row_overrides":{"anyOf":[{"additionalProperties":{"type":"number"},"type":"object"},{"type":"null"}],"title":"Row Overrides"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"scope":{"type":"string","title":"Scope","default":"all"},"row_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Row Ids"}},"type":"object","title":"TapeCounterBody","description":"Tape-level counter-offer payload.\n\nExactly one of `adjustment_price_points` or `adjustment_bps` must be\nprovided when applying a uniform shift to every targeted row.\nPer-row overrides via `row_overrides` take precedence — that map is\n`{bid_tape_row_id: counter_price_in_points}`."},"TapeStatusBody":{"properties":{"scope":{"type":"string","title":"Scope","default":"all"},"row_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Row Ids"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","title":"TapeStatusBody","description":"Tape-level accept / reject payload. Default scope=`all` flips every\nnon-terminal row; pass `row_ids` to target a subset."},"TemplatePatch":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Category"},"attachment_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type Id"},"template_body":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Template Body"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","title":"TemplatePatch"},"TemplateRender":{"properties":{"context":{"additionalProperties":true,"type":"object","title":"Context"},"require_all_variables":{"type":"boolean","title":"Require All Variables","description":"If true, reject rendering when any declared variable is missing from context.","default":false}},"type":"object","title":"TemplateRender"},"TemplateUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"template":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Template"}},"type":"object","title":"TemplateUpdate"},"TierCreate":{"properties":{"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id","description":"Null = applies to ALL investors at this agency"},"agency":{"type":"string","title":"Agency","description":"One of \"fannie\" / \"freddie\" / \"any\""},"mission_score_min":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Mission Score Min"},"mission_score_max":{"type":"integer","maximum":100.0,"minimum":0.0,"title":"Mission Score Max"},"ltv_min":{"anyOf":[{"type":"number","maximum":120.0,"minimum":0.0},{"type":"null"}],"title":"Ltv Min"},"ltv_max":{"anyOf":[{"type":"number","maximum":120.0,"minimum":0.0},{"type":"null"}],"title":"Ltv Max"},"buyup_bps":{"type":"number","maximum":500.0,"minimum":-200.0,"title":"Buyup Bps"},"effective_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective From"},"effective_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Until"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["agency","mission_score_min","mission_score_max","buyup_bps"],"title":"TierCreate"},"TierPatch":{"properties":{"mission_score_min":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score Min"},"mission_score_max":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":0.0},{"type":"null"}],"title":"Mission Score Max"},"ltv_min":{"anyOf":[{"type":"number","maximum":120.0,"minimum":0.0},{"type":"null"}],"title":"Ltv Min"},"ltv_max":{"anyOf":[{"type":"number","maximum":120.0,"minimum":0.0},{"type":"null"}],"title":"Ltv Max"},"buyup_bps":{"anyOf":[{"type":"number","maximum":500.0,"minimum":-200.0},{"type":"null"}],"title":"Buyup Bps"},"effective_from":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective From"},"effective_until":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Effective Until"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"TierPatch"},"TopInvestorSummary":{"properties":{"investor_id":{"type":"string","title":"Investor Id"},"investor_name":{"type":"string","title":"Investor Name"},"product_code":{"type":"string","title":"Product Code"},"rate_pct":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rate Pct"},"base_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Base Price"},"total_llpa_adjustment":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Total Llpa Adjustment"},"net_price":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Net Price"}},"type":"object","required":["investor_id","investor_name","product_code","rate_pct","base_price","total_llpa_adjustment","net_price"],"title":"TopInvestorSummary"},"TransactionCreate":{"properties":{"benchmark_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Benchmark Id"},"direction":{"type":"string","pattern":"^(buy|sell)$","title":"Direction"},"notional":{"type":"number","title":"Notional"},"executed_price":{"type":"number","title":"Executed Price"},"executed_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Executed At"},"settlement_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Settlement Date"},"counterparty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Counterparty"},"trader":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trader"},"trade_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Trade Type"},"related_tx_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Related Tx Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["direction","notional","executed_price"],"title":"TransactionCreate"},"UpdatePartnershipRequest":{"properties":{"partner_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Name"},"partner_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Partner Type"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"relationship_started":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Relationship Started"},"primary_contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Name"},"primary_contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Email"},"primary_contact_phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Contact Phone"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"ticker":{"anyOf":[{"type":"string","maxLength":20},{"type":"null"}],"title":"Ticker"},"commitment_time":{"anyOf":[{"type":"integer","maximum":10080.0,"minimum":0.0},{"type":"null"}],"title":"Commitment Time"},"point_bias":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Point Bias"},"buyer_fee":{"anyOf":[{"type":"number","maximum":10.0,"minimum":-10.0},{"type":"null"}],"title":"Buyer Fee"}},"type":"object","title":"UpdatePartnershipRequest"},"UpdatePoolBody":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"investor_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Name"},"target_settlement_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Settlement Date"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"UpdatePoolBody"},"UpdateSystemRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"secrets":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Secrets"}},"type":"object","title":"UpdateSystemRequest"},"UploadDocBody":{"properties":{"kind":{"type":"string","title":"Kind"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"storage_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Storage Url"},"sha256":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sha256"},"uploaded_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uploaded By Account Id"}},"type":"object","required":["kind"],"title":"UploadDocBody"},"UploadTapeBody":{"properties":{"name":{"type":"string","title":"Name"},"filename":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Filename"},"rows":{"items":{"$ref":"#/components/schemas/BidTapeRowInput"},"type":"array","title":"Rows"},"buyer_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Buyer Account Id"}},"type":"object","required":["name","rows"],"title":"UploadTapeBody"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VersionCreate":{"properties":{"clone_from_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Clone From Version"},"effective_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective At"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"VersionCreate"},"VisibilityPartnerBody":{"properties":{"is_visible":{"type":"boolean","title":"Is Visible"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["is_visible"],"title":"VisibilityPartnerBody"},"VisibilityPartnerOverride":{"properties":{"partner_id":{"type":"string","title":"Partner Id"},"is_visible":{"type":"boolean","title":"Is Visible"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"}},"type":"object","required":["partner_id","is_visible"],"title":"VisibilityPartnerOverride"},"VisibilityPutBody":{"properties":{"default_visible":{"type":"boolean","title":"Default Visible","default":true},"default_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Default Reason"},"partner_overrides":{"items":{"$ref":"#/components/schemas/VisibilityPartnerOverride"},"type":"array","title":"Partner Overrides","default":[]}},"type":"object","title":"VisibilityPutBody"},"VsBase":{"properties":{"is_base":{"type":"boolean","title":"Is Base","default":false},"net_price_delta":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Net Price Delta","default":"0"},"base_price_delta":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Base Price Delta","default":"0"},"llpa_delta":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Llpa Delta","default":"0"},"rate_delta":{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$","title":"Rate Delta","default":"0"}},"type":"object","title":"VsBase"},"WatchCreateRequest":{"properties":{"label":{"type":"string","title":"Label"},"scenario":{"additionalProperties":true,"type":"object","title":"Scenario"},"threshold_bps":{"type":"number","maximum":500.0,"minimum":0.0,"title":"Threshold Bps","default":10.0},"notify_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notify Email"},"notify_webhook_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notify Webhook Url"},"account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Id"}},"type":"object","required":["label","scenario"],"title":"WatchCreateRequest","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase keys."},"WebhookValidateRequest":{"properties":{"event_type":{"type":"string","title":"Event Type"},"payload":{"additionalProperties":true,"type":"object","title":"Payload"}},"type":"object","required":["event_type","payload"],"title":"WebhookValidateRequest"},"WorkflowPolicyCreate":{"properties":{"name":{"type":"string","title":"Name"},"policy_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Policy Type"},"rules":{"additionalProperties":true,"type":"object","title":"Rules","default":{}}},"type":"object","required":["name"],"title":"WorkflowPolicyCreate"},"_DenialReasonIn":{"properties":{"reason_code":{"type":"integer","maximum":9.0,"minimum":1.0,"title":"Reason Code"},"other_reason_text":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Other Reason Text"}},"type":"object","required":["reason_code"],"title":"_DenialReasonIn"},"nacho_crunch__api__routes_agency_products__ProductCreate":{"properties":{"agency_id":{"type":"integer","maximum":9999.0,"minimum":1.0,"title":"Agency Id"},"agency_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Agency Name"},"code":{"type":"string","maxLength":16,"minLength":1,"title":"Code"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"product_type":{"type":"string","maxLength":16,"minLength":1,"title":"Product Type"},"term_years":{"anyOf":[{"type":"integer","maximum":50.0,"minimum":1.0},{"type":"null"}],"title":"Term Years"},"amort_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Amort Type"},"is_active":{"type":"boolean","title":"Is Active","default":true},"sort_order":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Sort Order","default":100}},"type":"object","required":["agency_id","code","display_name","product_type"],"title":"ProductCreate"},"nacho_crunch__api__routes_approval_delegations__DelegationCreate":{"properties":{"from_account_id":{"type":"string","title":"From Account Id"},"to_account_id":{"type":"string","title":"To Account Id"},"scope":{"type":"string","title":"Scope","default":"all"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From"},"effective_until":{"type":"string","format":"date-time","title":"Effective Until"},"is_active":{"type":"boolean","title":"Is Active","default":true},"requires_admin_only":{"type":"boolean","title":"Requires Admin Only","default":false}},"type":"object","required":["from_account_id","to_account_id","effective_until"],"title":"DelegationCreate"},"nacho_crunch__api__routes_auth_admin__CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name"},"rate_limit_per_min":{"type":"integer","title":"Rate Limit Per Min","default":60}},"type":"object","required":["name"],"title":"CreateKeyRequest"},"nacho_crunch__api__routes_buyer_auto_bid_rules__EvaluateBody":{"properties":{"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"loan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Type"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"property_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Property Type"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"note_rate_pct":{"anyOf":[{"type":"number","maximum":50.0,"minimum":0.0},{"type":"null"}],"title":"Note Rate Pct"},"fico":{"anyOf":[{"type":"integer","maximum":900.0,"minimum":300.0},{"type":"null"}],"title":"Fico"},"ltv_pct":{"anyOf":[{"type":"number","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Ltv Pct"},"loan_amount_usd":{"type":"number","maximum":100000000.0,"minimum":0.0,"title":"Loan Amount Usd"},"lock_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Lock Days"},"base_price":{"type":"number","maximum":200.0,"minimum":0.0,"title":"Base Price","default":100.0}},"type":"object","required":["loan_amount_usd"],"title":"EvaluateBody"},"nacho_crunch__api__routes_buyer_auto_bid_rules__RuleCreate":{"properties":{"investor_id":{"type":"string","title":"Investor Id"},"slug":{"type":"string","maxLength":64,"minLength":1,"title":"Slug"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"type":"boolean","title":"Is Active","default":true},"priority":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Priority","default":100},"criteria":{"additionalProperties":true,"type":"object","title":"Criteria"},"bid_adjustment_bps":{"type":"number","maximum":1000.0,"minimum":-1000.0,"title":"Bid Adjustment Bps","default":0.0},"bid_fee_usd":{"type":"number","maximum":100000.0,"minimum":-100000.0,"title":"Bid Fee Usd","default":0.0},"commit_time_days":{"type":"integer","maximum":365.0,"minimum":0.0,"title":"Commit Time Days","default":30},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","required":["investor_id","slug","display_name"],"title":"RuleCreate","description":"Polly-compat dual-case body."},"nacho_crunch__api__routes_buyer_auto_bid_rules__RulePatch":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"priority":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Priority"},"criteria":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Criteria"},"bid_adjustment_bps":{"anyOf":[{"type":"number","maximum":1000.0,"minimum":-1000.0},{"type":"null"}],"title":"Bid Adjustment Bps"},"bid_fee_usd":{"anyOf":[{"type":"number","maximum":100000.0,"minimum":-100000.0},{"type":"null"}],"title":"Bid Fee Usd"},"commit_time_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Commit Time Days"}},"type":"object","title":"RulePatch"},"nacho_crunch__api__routes_delivery__AddLoansBody":{"properties":{"committed_loan_ids":{"items":{"type":"string"},"type":"array","title":"Committed Loan Ids"}},"type":"object","title":"AddLoansBody"},"nacho_crunch__api__routes_doc_gen__TemplateCreate":{"properties":{"name":{"type":"string","maxLength":200,"minLength":1,"title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"category":{"anyOf":[{"type":"string","maxLength":64},{"type":"null"}],"title":"Category"},"attachment_type_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Attachment Type Id"},"template_body":{"type":"string","minLength":1,"title":"Template Body"},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","required":["name","template_body"],"title":"TemplateCreate","description":"Polly-compat dual-case body."},"nacho_crunch__api__routes_exception_mgmt__DelegationCreate":{"properties":{"from_account_id":{"type":"string","title":"From Account Id"},"to_account_id":{"type":"string","title":"To Account Id"},"effective_until":{"type":"string","format":"date-time","title":"Effective Until"},"effective_from":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Effective From"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"requires_admin_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Requires Admin Only"}},"type":"object","required":["from_account_id","to_account_id","effective_until"],"title":"DelegationCreate"},"nacho_crunch__api__routes_fee_rules__EvaluateBody":{"properties":{"loan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Type"},"purpose":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Purpose"},"occupancy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Occupancy"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"lock_days":{"anyOf":[{"type":"integer","maximum":365.0,"minimum":0.0},{"type":"null"}],"title":"Lock Days"},"loan_amount_usd":{"type":"number","maximum":100000000.0,"minimum":0.0,"title":"Loan Amount Usd"},"ltv_pct":{"anyOf":[{"type":"number","maximum":200.0,"minimum":0.0},{"type":"null"}],"title":"Ltv Pct"},"fico":{"anyOf":[{"type":"integer","maximum":900.0,"minimum":300.0},{"type":"null"}],"title":"Fico"}},"type":"object","required":["loan_amount_usd"],"title":"EvaluateBody"},"nacho_crunch__api__routes_fee_rules__RuleCreate":{"properties":{"code":{"type":"string","maxLength":64,"minLength":1,"title":"Code"},"display_name":{"type":"string","maxLength":200,"minLength":1,"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"fee_type":{"type":"string","maxLength":16,"minLength":1,"title":"Fee Type"},"base_amount_usd":{"type":"number","maximum":1000000.0,"minimum":0.0,"title":"Base Amount Usd","default":0.0},"percent_rate_bps":{"type":"number","maximum":10000.0,"minimum":0.0,"title":"Percent Rate Bps","default":0.0},"tiers":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Tiers"},"scope":{"additionalProperties":true,"type":"object","title":"Scope"},"priority":{"type":"integer","maximum":10000.0,"minimum":0.0,"title":"Priority","default":100},"is_active":{"type":"boolean","title":"Is Active","default":true},"updated_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated By Account Id"}},"type":"object","required":["code","display_name","fee_type"],"title":"RuleCreate"},"nacho_crunch__api__routes_fee_rules__RulePatch":{"properties":{"display_name":{"anyOf":[{"type":"string","maxLength":200,"minLength":1},{"type":"null"}],"title":"Display Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"fee_type":{"anyOf":[{"type":"string","maxLength":16,"minLength":1},{"type":"null"}],"title":"Fee Type"},"base_amount_usd":{"anyOf":[{"type":"number","maximum":1000000.0,"minimum":0.0},{"type":"null"}],"title":"Base Amount Usd"},"percent_rate_bps":{"anyOf":[{"type":"number","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Percent Rate Bps"},"tiers":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Tiers"},"scope":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Scope"},"priority":{"anyOf":[{"type":"integer","maximum":10000.0,"minimum":0.0},{"type":"null"}],"title":"Priority"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"}},"type":"object","title":"RulePatch"},"nacho_crunch__api__routes_gnma_pools__AddLoansBody":{"properties":{"loan_ids":{"items":{"type":"string"},"type":"array","title":"Loan Ids"}},"type":"object","required":["loan_ids"],"title":"AddLoansBody"},"nacho_crunch__api__routes_keys__CreateKeyRequest":{"properties":{"name":{"type":"string","title":"Name"},"permissions":{"items":{"type":"string"},"type":"array","title":"Permissions","default":["read"]},"rate_limit":{"type":"integer","title":"Rate Limit","default":1000}},"type":"object","required":["name"],"title":"CreateKeyRequest","description":"Polly-compat (Wave Q1): accepts snake_case OR camelCase."},"nacho_crunch__api__routes_lock_requests__CounterBody":{"properties":{"approved_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approved By Account Id"},"approver_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Approver Name"},"counter_details":{"additionalProperties":true,"type":"object","title":"Counter Details"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["counter_details"],"title":"CounterBody"},"nacho_crunch__api__routes_pipeline_monitoring__NearMissRequest":{"properties":{"scenario":{"additionalProperties":true,"type":"object","title":"Scenario"}},"type":"object","title":"NearMissRequest"},"nacho_crunch__api__routes_pipeline_ops__TemplateCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"template":{"additionalProperties":true,"type":"object","title":"Template"}},"type":"object","required":["name"],"title":"TemplateCreate"},"nacho_crunch__api__routes_pricing_configs__ProductCreate":{"properties":{"name":{"type":"string","title":"Name"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"investor_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Investor Id"},"loan_program_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Program Code"},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"}},"type":"object","required":["name"],"title":"ProductCreate"},"nacho_crunch__api__routes_pricing_configs__RuleCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"criteria":{"additionalProperties":true,"type":"object","title":"Criteria","default":{}},"action":{"additionalProperties":true,"type":"object","title":"Action","default":{}},"sort_order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sort Order","default":0},"channel_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Id"}},"type":"object","required":["name"],"title":"RuleCreate"},"nacho_crunch__api__routes_pricing_engine__NearMissRequest":{"properties":{"loan_type":{"type":"string","title":"Loan Type"},"loan_amount":{"anyOf":[{"type":"number","maximum":100000000.0,"exclusiveMinimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Loan Amount"},"rate_pct":{"anyOf":[{"type":"number","maximum":20.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Rate Pct"},"lock_days":{"type":"integer","maximum":365.0,"minimum":1.0,"title":"Lock Days","default":30},"fico_score":{"type":"integer","maximum":850.0,"minimum":300.0,"title":"Fico Score"},"ltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"}],"title":"Ltv Pct"},"cltv_pct":{"anyOf":[{"type":"number","maximum":105.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Cltv Pct"},"dti_pct":{"anyOf":[{"type":"number","maximum":65.0,"minimum":0.0},{"type":"string","pattern":"^(?!^[-+.]*$)[+-]?0*\\d*\\.?\\d*$"},{"type":"null"}],"title":"Dti Pct"},"property_type":{"type":"string","title":"Property Type","default":"single_family"},"occupancy":{"type":"string","title":"Occupancy","default":"primary"},"loan_purpose":{"type":"string","title":"Loan Purpose","default":"purchase"},"state":{"type":"string","maxLength":2,"minLength":2,"title":"State","default":"CA"}},"type":"object","required":["loan_type","loan_amount","fico_score","ltv_pct"],"title":"NearMissRequest","description":"PricingRequest-shaped scenario. Matches the best-ex payload so a\ncaller can pipe the same body to either surface.\n\nPolly-compat (Wave Q1, 2026-04-18): accepts EITHER snake_case or\ncamelCase keys on input. Python attributes stay snake_case."},"nacho_crunch__api__routes_renegotiation__CounterBody":{"properties":{"counter_values":{"additionalProperties":true,"type":"object","title":"Counter Values"},"decision_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Decision Notes"},"reviewed_by_account_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reviewed By Account Id"}},"type":"object","required":["counter_values"],"title":"CounterBody"}}},"tags":[{"name":"pricing","description":"Best-execution, natural-language, and bulk pricing. **Requires API key.**"},{"name":"bulk-pricing","description":"Bulk scenario pricing — up to 5,000 loans per request."},{"name":"bulk-pricing-internal","description":"Internal bulk pricing endpoints used by the dashboard."},{"name":"compare","description":"Side-by-side investor comparison tools."},{"name":"pricing-engine","description":"Low-level pricing engine introspection and what-if simulations."},{"name":"pricing-configs","description":"Named pricing configs — rate/margin overrides, override stacks."},{"name":"rate-quotes","description":"Consumer rate quotes — admin view, conversion tracking."},{"name":"rate-quotes-public","description":"Anonymous public rate-quote endpoints (IP rate-limited)."},{"name":"agent","description":"Conversational agent — GPT-4o function calling over NachoCrunch tools."},{"name":"mi","description":"Mortgage insurance rate cards + premium quotes."},{"name":"lock-requests","description":"Lock desk — submit, approve, reject, counter, extend, cancel."},{"name":"lockdesk","description":"Lock desk dashboard + queue management."},{"name":"loans","description":"Loan records and pipeline state."},{"name":"delivery","description":"Delivery pools — package loans for investor delivery."},{"name":"sell","description":"Best-ex selling: tradeable loans + bid workflows."},{"name":"buy","description":"Correspondent buy-side: trades, commitments, pull-through."},{"name":"ingestion","description":"Rate sheet upload + ingestion API."},{"name":"exceptions","description":"Ingestion exceptions queue."},{"name":"exception-management","description":"Triage, assign, and resolve ingestion exceptions."},{"name":"guidelines","description":"Agency / investor guideline ingestion and search."},{"name":"pipeline-monitoring","description":"Monitor ingestion pipeline health, lag, and SLA."},{"name":"pipeline-ops","description":"Operator actions on the ingestion pipeline."},{"name":"analytics","description":"Aggregate metrics — pricing queries, conversions, investor usage."},{"name":"analytics-internal","description":"Internal analytics dashboards."},{"name":"reports","description":"Operator report library — embedded dashboards, SQL reports, CSV exports."},{"name":"search","description":"Cross-entity global search."},{"name":"dynamic-query","description":"Saved queries + dashboard widgets."},{"name":"market","description":"Market intel: MBS, rates, competitor watch."},{"name":"mbs","description":"Mortgage-backed securities pricing snapshots."},{"name":"investor-intel","description":"Investor profiles, change logs, rate-history comparisons."},{"name":"rate-alerts","description":"Rate-alert rules and firing history."},{"name":"watches","description":"Named watches — 'tell me when pricing hits X'."},{"name":"admin","description":"Admin endpoints — sheets, investors, LLPAs."},{"name":"admin-internal","description":"Internal admin endpoints for the dashboard UI."},{"name":"accounts","description":"Account management — users, orgs, invitations."},{"name":"rbac","description":"Role-based access control — roles, permissions, policies."},{"name":"keys","description":"API key lifecycle — issue, rotate, revoke."},{"name":"invites","description":"Admin-initiated invitations."},{"name":"invites-public","description":"Public invite acceptance endpoints."},{"name":"access-requests","description":"Self-service access-request queue."},{"name":"audit","description":"Audit log — every mutation, who, when, what."},{"name":"org-settings","description":"Per-org branding, preferences, feature flags."},{"name":"reference","description":"Reference data — states, counties, product types, LLPA categories."},{"name":"connected-systems","description":"Integrations — LOS, POS, AUS, pricing engines."},{"name":"partnerships","description":"Partner connections — mortgage cos ↔ investors ↔ platforms."},{"name":"embeds","description":"Embeddable widget configuration."},{"name":"embeds-public","description":"Public embed JS + widget delivery."},{"name":"webhooks","description":"Webhook endpoint configuration + delivery log."},{"name":"async-tasks","description":"Long-running async task queue + status."},{"name":"funding-costs","description":"Funding cost curves."},{"name":"product-payups","description":"Product-level payup tables."},{"name":"margin-mapping","description":"Margin stack mapping."},{"name":"mortgage-coach","description":"Mortgage Coach integration — consumer-facing rate presentations."},{"name":"epc","description":"Encompass Partner Connect transactions."},{"name":"pe-doc-upload-settings","description":"Pricing-engine doc upload configuration."},{"name":"lock-confirmation-docs","description":"Lock confirmation PDF generation."},{"name":"tier3","description":"Tier-3 lender integrations."},{"name":"branding","description":"White-label branding — theme, logo, email, support URLs."},{"name":"branding-public","description":"Public read-only branding lookup (for the dashboard/embeds)."},{"name":"renegotiation","description":"Renegotiation workflow — full re-quote on an existing lock (distinct from float-down)."},{"name":"security","description":"Responsible-disclosure report triage — internal."},{"name":"security-public","description":"Public responsible-disclosure submission + status (IP rate-limited)."},{"name":"devtools","description":"Developer tools — schema inspection, debug endpoints."},{"name":"websocket","description":"Realtime WebSocket channels."},{"name":"slack","description":"Slack slash commands + event handling."},{"name":"empty-states","description":"UI empty-state metadata helpers."},{"name":"meta","description":"Service meta: health, version, OpenAPI spec."},{"name":"investor-network","description":"Admin surface for the two-sided investor network."},{"name":"investor-portal","description":"Investor self-service portal — me, discovery, bids, publish-sheet."},{"name":"investor-network-public","description":"Public directory + join flow for the investor network."},{"name":"features-public","description":"Public feature catalog — consumed by marketing + third parties."},{"name":"marketing","description":"Static public marketing pages."}]}