{"openapi":"3.1.0","info":{"title":"Lev API","version":"0.1.0"},"paths":{"/health/":{"get":{"tags":["public-health"],"summary":"Health Ping","operationId":"health_ping_health__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}},"/health/test_dependencies":{"get":{"tags":["public-health"],"summary":"Health Ping Dependencies","operationId":"health_ping_dependencies_health_test_dependencies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuccessResponse"}}}}}}},"/api/mobile/portal-handoff/consume":{"post":{"tags":["mobile"],"summary":"Consume Mobile Portal Handoff","operationId":"consume_mobile_portal_handoff_api_mobile_portal_handoff_consume_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeMobilePortalHandoffRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeMobilePortalHandoffResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/deals/attachments/size":{"post":{"tags":["api-v1-deals"],"summary":"Calculate Attachments Size","operationId":"calculate_attachments_size_api_v1_deals_attachments_size_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachmentSizeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusOkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/me":{"get":{"tags":["api-v1-users"],"summary":"Me","operationId":"me_api_v1_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserObjectResponse"}}}}}}},"/api/v1/users/notify-user-logged-in":{"post":{"tags":["api-v1-users"],"summary":"Notify Logged In User","operationId":"notify_logged_in_user_api_v1_users_notify_user_logged_in_post","responses":{"204":{"description":"Successful Response"}}}},"/api/v1/users/roles/{email}":{"get":{"tags":["api-v1-users"],"summary":"Get User Service Roles By Email","operationId":"get_user_service_roles_by_email_api_v1_users_roles__email__get","parameters":[{"name":"email","in":"path","required":true,"schema":{"type":"string","title":"Email"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserServiceRolesResponse"},{"$ref":"#/components/schemas/ErrorDescriptionResponse"}],"title":"Response Get User Service Roles By Email Api V1 Users Roles  Email  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/users/roles/phone/{phone}":{"get":{"tags":["api-v1-users"],"summary":"Get User Service Roles By Phone","operationId":"get_user_service_roles_by_phone_api_v1_users_roles_phone__phone__get","parameters":[{"name":"phone","in":"path","required":true,"schema":{"type":"string","title":"Phone"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/UserServiceRolesResponse"},{"$ref":"#/components/schemas/ErrorDescriptionResponse"}],"title":"Response Get User Service Roles By Phone Api V1 Users Roles Phone  Phone  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/be_policies/":{"get":{"tags":["api-v2-be-policies"],"summary":"Get Policies","operationId":"get_policies_api_v2_be_policies__get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}},"/api/v2/deals/{deal_id}/deal-data":{"get":{"tags":["api-v2-deal-data"],"summary":"Get Deal Data","operationId":"get_deal_data_api_v2_deals__deal_id__deal_data_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"groups","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Groups"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"anyOf":[{"$ref":"#/components/schemas/DealDataResponse"},{"$ref":"#/components/schemas/ErrorResponse"}],"title":"Response Get Deal Data Api V2 Deals  Deal Id  Deal Data Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/actions/apply_action/pass":{"put":{"tags":["api-v2-email-actions"],"summary":"Apply Pass Or Negotiate Action","operationId":"apply_pass_or_negotiate_action_api_v2_actions_apply_action_pass_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailActionResponse"}}}}}}},"/api/v2/actions/apply_action/express_interest":{"put":{"tags":["api-v2-email-actions"],"summary":"Express Interest Action","operationId":"express_interest_action_api_v2_actions_apply_action_express_interest_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailActionResponse"}}}}}}},"/api/v2/actions/get_action_token":{"post":{"tags":["api-v2-email-actions"],"summary":"Local Use Only Create Email Action Auth Token","operationId":"local_use_only_create_email_action_auth_token_api_v2_actions_get_action_token_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailActionTokenResponse"}}}}}}},"/api/v2/actions/apply_action/verify_email":{"put":{"tags":["api-v2-email-actions"],"summary":"Verify Email Action","operationId":"verify_email_action_api_v2_actions_apply_action_verify_email_put","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailActionResponse"}}}}}}},"/api/v2/email-images/{s3_key}":{"get":{"tags":["api-v2-email-images"],"summary":"Get Email Inline Image","description":"Redirect to a freshly presigned S3 GET for a composer inline image.\n\nRequires a normal authenticated session (not the one-off email-action token type). The\nkey's embedded account id is checked against the requesting user's memberships before a\nshort-lived presigned URL is generated and returned as a 302.","operationId":"get_email_inline_image_api_v2_email_images__s3_key__get","parameters":[{"name":"s3_key","in":"path","required":true,"schema":{"type":"string","title":"S3 Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/lambda_send_email":{"post":{"tags":["api-v2-emails"],"summary":"Send Email Lambda","operationId":"send_email_lambda_api_v2_lambda_send_email_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LambdaEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataOkResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/docgen/structure/{uuid}":{"get":{"tags":["api-v2-docgen"],"summary":"Get Structure","operationId":"get_structure_api_v2_docgen_structure__uuid__get","parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentGenerationStructureResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/docgen/structure/{uuid}/generate-pdf":{"post":{"tags":["api-v2-docgen"],"summary":"Generate Pdf","operationId":"generate_pdf_api_v2_docgen_structure__uuid__generate_pdf_post","parameters":[{"name":"uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Uuid"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePdfResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/push_notifications/auth":{"post":{"tags":["api-v2-push-notifications"],"summary":"Authenticate","operationId":"authenticate_api_v2_push_notifications_auth_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PushNotificationAuthResponse"}}}}}}},"/api/v2/push_notifications/event_names":{"get":{"tags":["api-v2-push-notifications"],"summary":"Get Event Names","operationId":"get_event_names_api_v2_push_notifications_event_names_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"type":"string"},"type":"array","title":"Response Get Event Names Api V2 Push Notifications Event Names Get"}}}}}}},"/api/v2/schema/overview":{"get":{"tags":["api-v2-schema"],"summary":"Get Schema Overview","description":"Get a watered-down overview of all GraphQL queries (and optionally mutations).","operationId":"get_schema_overview_api_v2_schema_overview_get","parameters":[{"name":"include_mutations","in":"query","required":false,"schema":{"type":"boolean","description":"Set to true to include mutations in the response","default":false,"title":"Include Mutations"},"description":"Set to true to include mutations in the response"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaOverviewResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/schema/details":{"post":{"tags":["api-v2-schema"],"summary":"Get Schema Details","description":"Get detailed schema information for specific operations.","operationId":"get_schema_details_api_v2_schema_details_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaDetailsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaDetailsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/schema/types":{"post":{"tags":["api-v2-schema"],"summary":"Get Schema Types","description":"Get detailed schema information for specific types.","operationId":"get_schema_types_api_v2_schema_types_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaTypesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SchemaTypesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/twilio/handle-message":{"post":{"tags":["api-v2-webhooks"],"summary":"Twilio Sms Handle Webhook","operationId":"twilio_sms_handle_webhook_api_v2_webhooks_twilio_handle_message_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/webhooks/twilio/handle-message-delivery-status":{"post":{"tags":["api-v2-webhooks"],"summary":"Twilio Sms Confirmation Webhook","operationId":"twilio_sms_confirmation_webhook_api_v2_webhooks_twilio_handle_message_delivery_status_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/webhooks/nylas/{path}":{"get":{"tags":["api-v2-webhooks"],"summary":"Respond To Webhook","description":"This endpoint is used to verify the webhook when added to Nylas","operationId":"respond_to_webhook_api_v2_webhooks_nylas__path__get","parameters":[{"name":"path","in":"path","required":true,"schema":{"type":"string","title":"Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/zapier/subscribe":{"post":{"tags":["api-v2-webhooks"],"summary":"Subscribe User Webhook","operationId":"subscribe_user_webhook_api_v2_webhooks_zapier_subscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierSubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/zapier/unsubscribe":{"post":{"tags":["api-v2-webhooks"],"summary":"Unsubscribe User Webhook","operationId":"unsubscribe_user_webhook_api_v2_webhooks_zapier_unsubscribe_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierUnsubscribeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/zapier/listResourceActionSampleData":{"get":{"tags":["api-v2-webhooks"],"summary":"List Resource Action Sample Data","operationId":"list_resource_action_sample_data_api_v2_webhooks_zapier_listResourceActionSampleData_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"post":{"tags":["api-v2-webhooks"],"summary":"Get Target Resource Action Sample Data","operationId":"get_target_resource_action_sample_data_api_v2_webhooks_zapier_listResourceActionSampleData_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierSampleDataRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/zapier/resourceAction":{"post":{"tags":["api-v2-webhooks"],"summary":"Create Resource","operationId":"create_resource_api_v2_webhooks_zapier_resourceAction_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierResourceActionRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/zapier/forceSend":{"post":{"tags":["api-v2-webhooks"],"summary":"Force Send Zapier Webhook","description":"Force send a Zapier webhook notification to all webhooks for the given account IDs.\nMimics the logic in CompanyWebhookSenderPollingWorker._load_webhooks_and_send.\n\nRequest body should contain:\n- record_id: int\n- operation: str (INSERT, UPDATE, DELETE)\n- table_name: str\n- old_data: dict\n- new_data: dict\n- diff_data: dict\n- context: dict\n- account_ids: list[int]\n- webhook_uuid: str (optional) - filter to a specific webhook","operationId":"force_send_zapier_webhook_api_v2_webhooks_zapier_forceSend_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierForceSendRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/zapier/previewPayload":{"post":{"tags":["api-v2-webhooks"],"summary":"Preview Zapier Payload","description":"Preview the ZapierResourcePayload that would be sent for a given DBNotificationMessage.\nThis endpoint does NOT send any webhooks - it only returns the converted payload.\n\nRequest body should contain:\n- record_id: int\n- operation: str (INSERT, UPDATE, DELETE)\n- table_name: str\n- old_data: dict\n- new_data: dict\n- diff_data: dict\n- context: dict","operationId":"preview_zapier_payload_api_v2_webhooks_zapier_previewPayload_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ZapierPreviewPayloadRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v2/webhooks/tiptap/comment":{"post":{"tags":["api-v2-webhooks"],"summary":"Tiptap Comment Webhook","operationId":"tiptap_comment_webhook_api_v2_webhooks_tiptap_comment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/webhooks/metronome":{"post":{"tags":["api-v2-webhooks"],"summary":"Metronome Webhook","description":"Receive and process inbound Metronome webhook events.\n\nSignature is validated via HMAC-SHA256 before any payload processing.\nReturns ``{\"success\": true}`` for all valid requests; Metronome retries\non non-2xx responses with exponential backoff for up to two days.","operationId":"metronome_webhook_api_v2_webhooks_metronome_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/webhooks/universe/enrichment":{"post":{"tags":["api-v2-webhooks"],"summary":"Universe Enrichment Webhook","description":"Receive Universe CRM field-enrichment completion callbacks (LEV-2218).\n\nHMAC-SHA256 over ``X-Universe-Timestamp + newline + raw body`` with a 300s\ndrift window. Fans out settlement to every pending request for the\ncanonical person. Unknown person / zero pending → 200 no-op.","operationId":"universe_enrichment_webhook_api_v2_webhooks_universe_enrichment_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v2/webhooks/stripe":{"post":{"tags":["api-v2-webhooks"],"summary":"Stripe Webhook","description":"Receive and process inbound Stripe webhook events.\n\nSignature is validated via HMAC-SHA256 before any payload processing.\nReturns ``{\"success\": true}`` for all valid requests; Stripe retries\non non-2xx responses with exponential backoff.","operationId":"stripe_webhook_api_v2_webhooks_stripe_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/nylas/auth/{service_provider}":{"get":{"tags":["service-auth"],"summary":"Nylas Auth","operationId":"nylas_auth_nylas_auth__service_provider__get","parameters":[{"name":"service_provider","in":"path","required":true,"schema":{"type":"string","title":"Service Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/nylas/dynamic/auth":{"get":{"tags":["service-auth"],"summary":"Nylas Dynamic Auth","operationId":"nylas_dynamic_auth_nylas_dynamic_auth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/nylas/auth/{service_provider}/callback":{"get":{"tags":["service-auth"],"summary":"Nylas Auth Callback","operationId":"nylas_auth_callback_nylas_auth__service_provider__callback_get","parameters":[{"name":"service_provider","in":"path","required":true,"schema":{"type":"string","title":"Service Provider"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/account/team":{"get":{"tags":["external-v2-account"],"summary":"List Team","description":"List active team members for the authenticated user's account.","operationId":"list_team_api_external_v2_account_team_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/api-keys":{"get":{"tags":["external-v2-api-keys"],"summary":"List Api Keys","operationId":"list_api_keys_api_external_v2_api_keys_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyListResponse"}}}}}},"post":{"tags":["external-v2-api-keys"],"summary":"Create Api Key","operationId":"create_api_key_api_external_v2_api_keys_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyCreatedObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/api-keys/{key_id}":{"delete":{"tags":["external-v2-api-keys"],"summary":"Revoke Api Key","operationId":"revoke_api_key_api_external_v2_api_keys__key_id__delete","parameters":[{"name":"key_id","in":"path","required":true,"schema":{"type":"integer","title":"Key Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyDeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/health":{"get":{"tags":["external-v2-health"],"summary":"Health Check","operationId":"health_check_api_external_v2_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/external/v2/auth/validate-api-key":{"post":{"tags":["external-v2-auth"],"summary":"Validate Api Key","operationId":"validate_api_key_api_external_v2_auth_validate_api_key_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/billing/summary":{"get":{"tags":["external-v2-billing"],"summary":"Get Billing Summary","description":"Return the current account's billing summary.\n\nCombines subscription metadata (type, status, billing cycle, end date) and\nthe credit balance snapshot in a single payload.  Intended as the first\ncall an API consumer makes to understand their billing state.","operationId":"get_billing_summary_api_external_v2_billing_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BillingSummaryResponse"}}}}}}},"/api/external/v2/billing/credits/balance":{"get":{"tags":["external-v2-billing"],"summary":"Get Credit Balance","description":"Return the current account's credit balance as a standalone resource.\n\nSibling to ``/billing/summary`` — use this when only the credit balance is\nneeded.  Returns ``enabled=false`` / ``balance=null`` for accounts that\nare not provisioned in Metronome (no ``external_customer_id``).","operationId":"get_credit_balance_api_external_v2_billing_credits_balance_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditBalanceEnvelopeResponse"}}}}}}},"/api/external/v2/deals/{deal_id}/checklists":{"get":{"tags":["external-v2-checklists"],"summary":"List Deal Checklists","description":"List a deal's checklists (one per shared vault that has one), with full content.\n\nOrdering follows the vault enumeration (default Deal Room first, then by\nvault id). ``vault_id`` drills into a single shared vault; a vault id that\ndoes not belong to this deal 404s (no existence oracle), and the Resources\nvault — which never carries a checklist — yields an empty list.","operationId":"list_deal_checklists_api_external_v2_deals__deal_id__checklists_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"vault_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Drill into one shared vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list checklists across all of the deal's shared vaults. A vault id that does not belong to this deal 404s; the deal's Resources vault never carries a checklist, so passing it returns an empty list.","title":"Vault Id"},"description":"Drill into one shared vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list checklists across all of the deal's shared vaults. A vault id that does not belong to this deal 404s; the deal's Resources vault never carries a checklist, so passing it returns an empty list."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealChecklistListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/checklist-tasks":{"post":{"tags":["external-v2-checklists"],"summary":"Create Checklist Task","description":"Create a checklist task under exactly one parent — a section, a checklist\nroot, or a parent task (subtask, one level deep). The parent is resolved to\nits checklist and the caller must have write access to that checklist;\notherwise it 404s (no existence oracle). ``role`` cannot be set here.","operationId":"create_checklist_task_api_external_v2_checklist_tasks_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChecklistTaskRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistTaskObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/checklist-tasks/{task_id}":{"patch":{"tags":["external-v2-checklists"],"summary":"Update Checklist Task","description":"Partially update a checklist task. Only provided fields change; nullable\nfields are cleared by sending ``null``. Set ``is_completed=false`` to reopen\na completed task — to mark a task done, use the ``/complete`` endpoint.","operationId":"update_checklist_task_api_external_v2_checklist_tasks__task_id__patch","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChecklistTaskRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistTaskObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/checklist-tasks/{task_id}/complete":{"post":{"tags":["external-v2-checklists"],"summary":"Complete Checklist Task","description":"Mark a checklist task complete. Idempotent: an already-complete task is\nreturned unchanged. Completing also sets the task to ``approved`` and\nauto-approves its pending attached files, matching the in-app complete\naction; reopen a task via PATCH with ``is_completed=false``.","operationId":"complete_checklist_task_api_external_v2_checklist_tasks__task_id__complete_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChecklistTaskObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/companies":{"get":{"tags":["external-v2-companies"],"summary":"List Companies","operationId":"list_companies_api_external_v2_companies_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated, - prefix for desc","title":"Sort"},"description":"Comma-separated, - prefix for desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-companies"],"summary":"Create Company","operationId":"create_company_api_external_v2_companies_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCompanyRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyCreateObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/companies/{company_id}":{"get":{"tags":["external-v2-companies"],"summary":"Get Company","operationId":"get_company_api_external_v2_companies__company_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["external-v2-companies"],"summary":"Update Company","operationId":"update_company_api_external_v2_companies__company_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCompanyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/contacts":{"get":{"tags":["external-v2-contacts"],"summary":"List Contacts","operationId":"list_contacts_api_external_v2_contacts_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated, - prefix for desc","title":"Sort"},"description":"Comma-separated, - prefix for desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-contacts"],"summary":"Create Contact","operationId":"create_contact_api_external_v2_contacts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateContactRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/contacts/{contact_id}":{"get":{"tags":["external-v2-contacts"],"summary":"Get Contact","operationId":"get_contact_api_external_v2_contacts__contact_id__get","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["external-v2-contacts"],"summary":"Update Contact","operationId":"update_contact_api_external_v2_contacts__contact_id__patch","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateContactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/contacts/{contact_id}/actions/unlock":{"post":{"tags":["external-v2-contacts"],"summary":"Unlock Contact","description":"Unlock (reveal) a recommended lender contact — the v2 reveal money path (MCP-411).\n\nCharges ``BillingActionCodes.SCH_053`` (\"Add a lender to a deal\", ~200 credits)\nvia ``ContactController.unlock_contact_for_account`` (reserve→settle), flipping\nthe contact's ``paid`` flag. Idempotent per account via that flag — re-calling\ndoes not double-charge. After unlock the contact's identity (name, email,\nphone) is revealed here, on ``GET /contacts/{id}``, and on the placement that\nholds it.\n\nScoped to ``ai:actions`` (not ``contacts:write``): unlocking spends credits, so\nit is grouped with the other credit-spending action (``search-lenders``) rather\nthan plain CRM writes — a ``contacts:write``-only integration cannot spend.\n\nReturns **402** (``insufficient_credits``) when the account can't afford the\ncharge; the structured envelope carries ``action_code`` / ``cost`` / ``balance``.\nA cross-account or unknown ``contact_id`` returns **404**.","operationId":"unlock_contact_api_external_v2_contacts__contact_id__actions_unlock_post","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals":{"get":{"tags":["external-v2-deals"],"summary":"List Deals","operationId":"list_deals_api_external_v2_deals_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated, - prefix for desc","title":"Sort"},"description":"Comma-separated, - prefix for desc"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring search on deal title, property city/state, and sponsor company name","title":"Search"},"description":"Case-insensitive substring search on deal title, property city/state, and sponsor company name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-deals"],"summary":"Create Deal","description":"Create a new deal.\n\n``body: CreateDealRequest`` lets FastAPI/Pydantic parse and validate the\nrequest body automatically. Missing ``title`` or constraint violations\nreturn 422 before reaching this function.","operationId":"create_deal_api_external_v2_deals_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDealRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}":{"get":{"tags":["external-v2-deals"],"summary":"Get Deal","description":"Get a single deal by ID.\n\nFastAPI forwards ``deal_id`` directly from the path; no legacy path model is required.","operationId":"get_deal_api_external_v2_deals__deal_id__get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["external-v2-deals"],"summary":"Update Deal","description":"Partially update an existing deal (JSON Merge Patch semantics).\n\nOnly the fields present in the request body are updated.  An empty body\n(all fields absent) returns 400 because no meaningful update was requested.\n\nProperty edits are explicit sub-operations on ``add_properties`` /\n``update_properties`` / ``remove_property_ids`` — no implicit\nreplace-all. All boundary checks (cross-list overlap, access scoping,\ntarget-exists, min-property post-op count) happen here before any\ncontroller call so a single rejected request leaves the deal untouched.","operationId":"update_deal_api_external_v2_deals__deal_id__patch","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDealRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-deals"],"summary":"Delete Deal","description":"Soft-delete a deal (sets ``deleted_at`` and deactivates vault access).","operationId":"delete_deal_api_external_v2_deals__deal_id__delete","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/team":{"get":{"tags":["external-v2-deals"],"summary":"Get Deal Team","description":"List the team members (DealUsers) for a specific deal.\n\nReturns active, non-deleted DealUsers with their associated User data. \"Active\"\nmeans ``hide_on_deal_room`` is false (MCP-749) — members the product hides on the\ndeal are excluded here too, and do not count toward ``total``.\nThe deal must be accessible to the authenticated user — if it is not,\na 404 is returned (not 401) per AGENTS.md Rule 7.","operationId":"get_deal_team_api_external_v2_deals__deal_id__team_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealTeamListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/financials":{"get":{"tags":["external-v2-deals"],"summary":"Get Deal Financials","description":"Return all financial fields for a deal.\n\nThe caller must have READ access to both the deal and its financials.\nReturns 404 when the deal does not exist, is soft-deleted, belongs to a\ndifferent account, or has no financials record yet.","operationId":"get_deal_financials_api_external_v2_deals__deal_id__financials_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealFinancialsObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/properties":{"get":{"tags":["external-v2-deals"],"summary":"List Deal Properties","description":"Return property references for a deal with cursor-based pagination.\n\nReturns 404 when the deal does not exist, is soft-deleted, or belongs to a\ndifferent account.  An empty list is returned when the deal has no properties.","operationId":"list_deal_properties_api_external_v2_deals__deal_id__properties_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealPropertiesListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/index/search":{"post":{"tags":["external-v2-deals"],"summary":"Search Deal Index","description":"Search canonical indexed deal facts by natural-language context.\n\nThis is a read/enrichment endpoint over Metric SOT. It complements the\nstructured deal detail endpoints by returning ranked facts plus source\nmetadata such as document file name and pages.","operationId":"search_deal_index_api_external_v2_deals__deal_id__index_search_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexSearchRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexSearchListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/index/entities":{"get":{"tags":["external-v2-deals"],"summary":"List Deal Index Entities","description":"Return valid deal-index ``entity_ref`` values for MCP/manual inserts.\n\nCallers should use these refs when inserting metrics for existing entities,\nsuch as ``property:702``, ``deal:2633``, ``private_company:10``, or\n``sponsor_contact:55``.","operationId":"list_deal_index_entities_api_external_v2_deals__deal_id__index_entities_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexEntityListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/index/metric-definitions":{"get":{"tags":["external-v2-deals"],"summary":"List Deal Index Metric Definitions","description":"Return a basic metric catalog for deal-index insert/update clients.","operationId":"list_deal_index_metric_definitions_api_external_v2_deals__deal_id__index_metric_definitions_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"metric_label","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional case-insensitive metric label search term.","title":"Metric Label"},"description":"Optional case-insensitive metric label search term."},{"name":"category_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer","exclusiveMinimum":0},{"type":"null"}],"description":"Optional metric category id filter.","title":"Category Id"},"description":"Optional metric category id filter."},{"name":"page","in":"query","required":false,"schema":{"type":"integer","description":"1-based page number.","default":1,"title":"Page"},"description":"1-based page number."},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Max metric definitions per page (1-200, clamped).","default":100,"title":"Limit"},"description":"Max metric definitions per page (1-200, clamped)."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexMetricDefinitionListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/index/observations":{"post":{"tags":["external-v2-deals"],"summary":"List Deal Index Observations","description":"Return candidate metric observations for a SOT or metric on a deal.\n\nMCP clients use this after :func:`search_deal_index` to inspect the\nunderlying observations behind a SOT value, then optionally promote one\nvia :func:`update_deal_index_fact`.","operationId":"list_deal_index_observations_api_external_v2_deals__deal_id__index_observations_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexObservationsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexObservationListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/index/facts":{"post":{"tags":["external-v2-deals"],"summary":"Insert Deal Index Facts","description":"Insert one or many metric values into a deal index.\n\nThis is the default write path for user-supplied metric values on entities\nthat already exist on the deal, even when the client is replacing an existing\nvalue. The insert flow creates or reuses a user-input observation and promotes\nit as the current SOT when supported by lev-ai-backend.\n\nPrefer ``entity_ref`` from ``GET /index/entities`` to target an existing\nentity. This endpoint does not create entities: to add a new property, call\n``POST /deals`` (``properties``) or ``PATCH /deals/<id>`` (``add_properties``)\n— an address is the minimum required field — then insert metric values\nagainst the resulting ``entity_ref``.","operationId":"insert_deal_index_facts_api_external_v2_deals__deal_id__index_facts_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/InsertDealIndexFactsRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexFactInsertObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["external-v2-deals"],"summary":"Update Deal Index Fact","description":"Update one editable SOT value on a deal.\n\nUse ``POST /index/facts`` as the default path for setting user-supplied\nmetric values. This PATCH route is for targeted edits by ``sot_id`` or for\npromoting a specific existing ``observation_id``. Editability is enforced\nserver-side by ``lev-ai-backend`` against ``MetricDefinition.editable``;\nnon-editable metrics surface as 422.","operationId":"update_deal_index_fact_api_external_v2_deals__deal_id__index_facts_patch","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDealIndexFactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealIndexFactObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/actions/search-lenders":{"post":{"tags":["external-v2-deals"],"summary":"Search Lenders","description":"Trigger an AI-powered lender search for a deal.\n\nReturns **202** when a new search is initiated, **200** when an existing\nsearch is returned (poll-safe; no new work), or **422** when the deal\ndoes not meet the minimum requirements for lender search.","operationId":"search_lenders_api_external_v2_deals__deal_id__actions_search_lenders_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchLendersRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchLendersActionResponse"}}}},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchLendersActionResponse"}}},"description":"Accepted"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/lender-search":{"get":{"tags":["external-v2-deals"],"summary":"Get Lender Search","description":"Poll the latest lender search results for a deal.\n\nReturns paginated results with AI ranking status.  Returns **404**\nif no lender search has been run for the deal.","operationId":"get_lender_search_api_external_v2_deals__deal_id__lender_search_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LenderSearchResultsResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/memos":{"get":{"tags":["external-v2-deals"],"summary":"List Deal Memos","description":"List the memos (document-generation deal books) for a deal.\n\nReturns both published memos and unpublished drafts so callers can support\npreview-your-own-work flows; each row carries ``status`` (``\"draft\"`` |\n``\"published\"``) and ``published_at`` to disambiguate. Authorizes the deal\nfirst (404 when inaccessible), then filters the deal's memos through the\n``DOCUMENT_GENERATION_STRUCTURE`` READ policy so a caller who reaches the\ndeal via shared-vault access only sees memos that were actually shared into\ntheir vault (the memo policy's two strategies are deal-membership and\nshared-vault, OR'd at query level). PDF download links are omitted here —\nfetch a single memo for signed ``pdf_url`` links.\n\nWhere the deal documents/vaults surface is enabled for the caller, each memo\nis tagged with ``vaults`` — the ``{id, type, title}`` of the vaults it lives\nin, scoped to the caller's visible vaults (a subset of GET\n/deals/{deal_id}/vaults; empty when none are visible). ``vault_id`` scopes\nthe list to the memos in a single vault (a vault id not on this deal 404s).\nBoth are inert until that surface is enabled, so vault names don't surface\nahead of its launch.","operationId":"list_deal_memos_api_external_v2_deals__deal_id__memos_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring search on memo title.","title":"Search"},"description":"Case-insensitive substring search on memo title."},{"name":"vault_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults) to list only the memos in it. Omit to list the deal's memos across all vaults. A vault id that does not belong to this deal 404s. Effective only where the deal documents/vaults surface is enabled.","title":"Vault Id"},"description":"Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults) to list only the memos in it. Omit to list the deal's memos across all vaults. A vault id that does not belong to this deal 404s. Effective only where the deal documents/vaults surface is enabled."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/memos/{memo_uuid}":{"get":{"tags":["external-v2-deals"],"summary":"Get Deal Memo","description":"Return one memo for a deal, with signed PDF download links.\n\nReturns both published memos and unpublished drafts; ``status`` and\n``published_at`` disambiguate. ``pdf_url`` is null when no rendered variant\nexists for the requested ``quality`` (common for drafts that have never been\npreviewed). Authorizes the deal first (404 when inaccessible), then runs\nthe single-row memo query through the ``DOCUMENT_GENERATION_STRUCTURE`` READ\npolicy so a memo this caller can't actually read (e.g. not shared into\ntheir vault when deal-read came via shared vault) is invisible — same 404,\nsame shape as a missing memo. ``quality`` selects which rendered variant\n``pdf_url`` points at (default ``original``); ``pdf_versions`` lists every\nvariant that exists for this memo (may be empty for unrendered drafts).\n\nWhere the deal documents/vaults surface is enabled for the caller, the memo\nis tagged with ``vaults`` — the ``{id, type, title}`` of the vaults it lives\nin, scoped to the caller's visible vaults (empty when none are visible);\nomitted otherwise so vault names don't surface ahead of that launch.","operationId":"get_deal_memo_api_external_v2_deals__deal_id__memos__memo_uuid__get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"memo_uuid","in":"path","required":true,"schema":{"type":"string","format":"uuid","title":"Memo Uuid"}},{"name":"quality","in":"query","required":false,"schema":{"type":"string","default":"original","title":"Quality"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MemoObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/vaults":{"get":{"tags":["external-v2-documents"],"summary":"List Deal Vaults","description":"List the vaults on a deal: the private Resources vault and any shared Deal Rooms.\n\nEach item carries ``document_count`` — the number of documents the caller\ncan read in that vault, i.e. exactly what the documents listing returns for\nit. Counted per vault (a deal has only a handful), reusing the same\npolicy-scoped query builder as the listing so the counts stay consistent.","operationId":"list_deal_vaults_api_external_v2_deals__deal_id__vaults_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealVaultListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/documents":{"get":{"tags":["external-v2-documents"],"summary":"List Deal Documents","description":"List a deal's documents across all its vaults, or one via ``vault_id``.\n\nEach document is tagged with the ``vault`` it lives in. ``vault_id`` drills\ninto a single vault; a vault id that does not belong to this deal 404s\n(indistinguishable from a nonexistent one — no leak/oracle).","operationId":"list_deal_documents_api_external_v2_deals__deal_id__documents_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring match on the document file name.","title":"Search"},"description":"Case-insensitive substring match on the document file name."},{"name":"extension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single file extension, e.g. ``pdf`` (no leading dot).","title":"Extension"},"description":"Filter to a single file extension, e.g. ``pdf`` (no leading dot)."},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Only documents directly inside this folder. Omit for the whole vault.","title":"Folder Id"},"description":"Only documents directly inside this folder. Omit for the whole vault."},{"name":"vault_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list documents across all of the deal's vaults. A vault id that does not belong to this deal 404s.","title":"Vault Id"},"description":"Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list documents across all of the deal's vaults. A vault id that does not belong to this deal 404s."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/documents/{document_id}":{"get":{"tags":["external-v2-documents"],"summary":"Get Deal Document","description":"Get metadata for a single document on a deal.\n\nResolves across all the deal's vaults by default. Pass ``vault_id`` to pin\nthe lookup to a specific vault — necessary when the same document lives in\nmore than one vault (e.g. a Resources doc curated into a Deal Room), so the\nreturned ``vault`` tag and ``folder_path`` describe the vault the caller\nselected rather than an arbitrary one.","operationId":"get_deal_document_api_external_v2_deals__deal_id__documents__document_id__get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"search","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive substring match on the document file name.","title":"Search"},"description":"Case-insensitive substring match on the document file name."},{"name":"extension","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter to a single file extension, e.g. ``pdf`` (no leading dot).","title":"Extension"},"description":"Filter to a single file extension, e.g. ``pdf`` (no leading dot)."},{"name":"folder_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Only documents directly inside this folder. Omit for the whole vault.","title":"Folder Id"},"description":"Only documents directly inside this folder. Omit for the whole vault."},{"name":"vault_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list documents across all of the deal's vaults. A vault id that does not belong to this deal 404s.","title":"Vault Id"},"description":"Drill into one vault on this deal (use the ``id`` from GET /deals/{deal_id}/vaults). Omit to list documents across all of the deal's vaults. A vault id that does not belong to this deal 404s."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/documents/{document_id}/download":{"get":{"tags":["external-v2-documents"],"summary":"Download Deal Document","description":"Return a short-lived signed download URL for a document on a deal.\n\nThe document is re-resolved as a resource in one of this deal's vaults\nbefore signing (object-scope check), since the underlying download helper\ndoes not enforce object-level scope itself.","operationId":"download_deal_document_api_external_v2_deals__deal_id__documents__document_id__download_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"document_id","in":"path","required":true,"schema":{"type":"integer","title":"Document Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentDownloadObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/mailbox/messages/{message_id}/attachments/{attachment_id}":{"get":{"tags":["mailbox"],"summary":"Download Message Attachment","operationId":"download_message_attachment_api_external_v2_mailbox_messages__message_id__attachments__attachment_id__get","parameters":[{"name":"message_id","in":"path","required":true,"schema":{"type":"string","title":"Message Id"}},{"name":"attachment_id","in":"path","required":true,"schema":{"type":"string","title":"Attachment Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/lenders/directory":{"get":{"tags":["external-v2-lenders"],"summary":"List Directory","description":"List lender directory with pagination, filtering, and name search.","operationId":"list_directory_api_external_v2_lenders_directory_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated, - prefix for desc","title":"Sort"},"description":"Comma-separated, - prefix for desc"},{"name":"name","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Case-insensitive name search","title":"Name"},"description":"Case-insensitive name search"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LenderDirectoryListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/lenders/{org_id}":{"get":{"tags":["external-v2-lenders"],"summary":"Get Lender","description":"Get a single lender by ID with optional program includes.","operationId":"get_lender_api_external_v2_lenders__org_id__get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"integer","title":"Org Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LenderObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/lenders/{org_id}/programs":{"get":{"tags":["external-v2-lenders"],"summary":"List Lender Programs","description":"List programs for a lender with pagination.","operationId":"list_lender_programs_api_external_v2_lenders__org_id__programs_get","parameters":[{"name":"org_id","in":"path","required":true,"schema":{"type":"integer","title":"Org Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LenderProgramsListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/market/base-rates":{"get":{"tags":["external-v2-market"],"summary":"List Base Rates","description":"Return the current base rates reference data.","operationId":"list_base_rates_api_external_v2_market_base_rates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BaseRateListResponse"}}}}}}},"/api/external/v2/market/asset-types":{"get":{"tags":["external-v2-market"],"summary":"List Asset Types","description":"Return asset type reference data.","operationId":"list_asset_types_api_external_v2_market_asset_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssetTypeListResponse"}}}}}}},"/api/external/v2/mcp/provision-session":{"post":{"tags":["external-v2-mcp"],"summary":"Provision Session","operationId":"provision_session_api_external_v2_mcp_provision_session_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/me":{"get":{"tags":["external-v2-me"],"summary":"Get Me","operationId":"get_me_api_external_v2_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/external/v2/me/accounts":{"get":{"tags":["external-v2-me"],"summary":"List Me Accounts","operationId":"list_me_accounts_api_external_v2_me_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/external/v2/me/team-accounts":{"get":{"tags":["external-v2-me"],"summary":"List Me Team Accounts","operationId":"list_me_team_accounts_api_external_v2_me_team_accounts_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TeamAccountsResponse"}}}}}}},"/api/external/v2/me/active-account":{"patch":{"tags":["external-v2-me"],"summary":"Set Me Active Account","operationId":"set_me_active_account_api_external_v2_me_active_account_patch","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/contacts/{contact_id}/notes":{"get":{"tags":["external-v2-notes"],"summary":"List Contact Notes","description":"List externally visible notes on a contact.","operationId":"list_contact_notes_api_external_v2_contacts__contact_id__notes_get","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-notes"],"summary":"Create Contact Note","description":"Create a note on a contact, attributed to the API key's user.","operationId":"create_contact_note_api_external_v2_contacts__contact_id__notes_post","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/notes":{"get":{"tags":["external-v2-notes"],"summary":"List Deal Notes","description":"List externally visible notes on a deal.","operationId":"list_deal_notes_api_external_v2_deals__deal_id__notes_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-notes"],"summary":"Create Deal Note","description":"Create a note on a deal, attributed to the API key's user.\n\nDeal notes are intentionally untyped — that matches how the web app\ncreates them; the external read allowlist admits untyped notes.","operationId":"create_deal_note_api_external_v2_deals__deal_id__notes_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/contacts/{contact_id}/notes/{note_id}":{"patch":{"tags":["external-v2-notes"],"summary":"Update Contact Note","description":"Edit the text of a note on a contact.","operationId":"update_contact_note_api_external_v2_contacts__contact_id__notes__note_id__patch","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-notes"],"summary":"Delete Contact Note","description":"Permanently delete a note on a contact.","operationId":"delete_contact_note_api_external_v2_contacts__contact_id__notes__note_id__delete","parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/notes/{note_id}":{"patch":{"tags":["external-v2-notes"],"summary":"Update Deal Note","description":"Edit the text of a note on a deal.","operationId":"update_deal_note_api_external_v2_deals__deal_id__notes__note_id__patch","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-notes"],"summary":"Delete Deal Note","description":"Permanently delete a note on a deal.","operationId":"delete_deal_note_api_external_v2_deals__deal_id__notes__note_id__delete","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/placements/{placement_id}/notes":{"get":{"tags":["external-v2-notes"],"summary":"List Placement Notes","description":"List externally visible notes on a placement.","operationId":"list_placement_notes_api_external_v2_placements__placement_id__notes_get","parameters":[{"name":"placement_id","in":"path","required":true,"schema":{"type":"integer","title":"Placement Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-notes"],"summary":"Create Placement Note","description":"Create a note on a placement, attributed to the API key's user.\n\nPlacement notes carry ``NoteType.PLACEMENT_SHARED_NOTE`` — the broker-team\noutreach-context type the web app and AI recommendations also write (it is\n*not* shared with the borrower or lender). Internal placement notes are\nnever created or exposed here. Note: the placement ``description`` field\n(``PATCH /placements/<id>``) also appends a shared note on change; these\nendpoints are the canonical way to manage a placement's note collection.","operationId":"create_placement_note_api_external_v2_placements__placement_id__notes_post","parameters":[{"name":"placement_id","in":"path","required":true,"schema":{"type":"integer","title":"Placement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/placements/{placement_id}/notes/{note_id}":{"patch":{"tags":["external-v2-notes"],"summary":"Update Placement Note","description":"Edit the text of a note on a placement (owner-scoped).","operationId":"update_placement_note_api_external_v2_placements__placement_id__notes__note_id__patch","parameters":[{"name":"placement_id","in":"path","required":true,"schema":{"type":"integer","title":"Placement Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-notes"],"summary":"Delete Placement Note","description":"Permanently delete a note on a placement (owner-scoped).","operationId":"delete_placement_note_api_external_v2_placements__placement_id__notes__note_id__delete","parameters":[{"name":"placement_id","in":"path","required":true,"schema":{"type":"integer","title":"Placement Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/companies/{company_id}/notes":{"get":{"tags":["external-v2-notes"],"summary":"List Company Notes","description":"List externally visible notes on a company (private_company).","operationId":"list_company_notes_api_external_v2_companies__company_id__notes_get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-notes"],"summary":"Create Company Note","description":"Create a note on a company, attributed to the API key's user.\n\nCompany notes are intentionally untyped — that matches how the web app\ncreates them (``NoteController.create`` assigns no type for the\n``private_company`` parent); the external read allowlist admits untyped\nnotes.","operationId":"create_company_note_api_external_v2_companies__company_id__notes_post","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/companies/{company_id}/notes/{note_id}":{"patch":{"tags":["external-v2-notes"],"summary":"Update Company Note","description":"Edit the text of a note on a company (owner-scoped).","operationId":"update_company_note_api_external_v2_companies__company_id__notes__note_id__patch","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-notes"],"summary":"Delete Company Note","description":"Permanently delete a note on a company (owner-scoped).","operationId":"delete_company_note_api_external_v2_companies__company_id__notes__note_id__delete","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/checklist-tasks/{task_id}/notes":{"get":{"tags":["external-v2-notes"],"summary":"List Checklist Task Notes","description":"List externally visible notes — the borrower-portal \"comments\" — on a checklist task.","operationId":"list_checklist_task_notes_api_external_v2_checklist_tasks__task_id__notes_get","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-notes"],"summary":"Create Checklist Task Note","description":"Create a comment on a checklist task, attributed to the API key's user.\n\nThese are the borrower-portal \"comments\": the note is created untyped and\nborrower-visible (``is_visible`` defaults true), so it surfaces in the\nportal's task activity feed exactly like a comment typed there.","operationId":"create_checklist_task_note_api_external_v2_checklist_tasks__task_id__notes_post","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNoteRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/checklist-tasks/{task_id}/notes/{note_id}":{"patch":{"tags":["external-v2-notes"],"summary":"Update Checklist Task Note","description":"Edit the text of a comment on a checklist task (owner-scoped).","operationId":"update_checklist_task_note_api_external_v2_checklist_tasks__task_id__notes__note_id__patch","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNoteRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NoteObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-notes"],"summary":"Delete Checklist Task Note","description":"Permanently delete a comment on a checklist task (owner-scoped).","operationId":"delete_checklist_task_note_api_external_v2_checklist_tasks__task_id__notes__note_id__delete","parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"integer","title":"Task Id"}},{"name":"note_id","in":"path","required":true,"schema":{"type":"integer","title":"Note Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/pipelines":{"get":{"tags":["external-v2-pipelines"],"summary":"List Pipelines","description":"List all pipelines belonging to the authenticated user's account.\n\nPipelines are returned with their associated statuses (ordered by ``order``).\nSupports cursor-based pagination via ``limit`` and ``cursor`` query params.","operationId":"list_pipelines_api_external_v2_pipelines_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/pipelines/{pipeline_id}":{"get":{"tags":["external-v2-pipelines"],"summary":"Get Pipeline","description":"Return a single pipeline with all of its statuses.","operationId":"get_pipeline_api_external_v2_pipelines__pipeline_id__get","parameters":[{"name":"pipeline_id","in":"path","required":true,"schema":{"type":"integer","title":"Pipeline Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/pipeline":{"post":{"tags":["external-v2-pipelines"],"summary":"Move Deal To Pipeline","description":"Add a deal to a pipeline or update its pipeline status (idempotent).\n\nIf the deal is already in the requested pipeline the status is updated\nin-place; no duplicate row is created.  Supply ``pipeline_status_id`` to\ntarget a specific status — omit it to default to the first status.","operationId":"move_deal_to_pipeline_api_external_v2_deals__deal_id__pipeline_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoveDealToPipelineRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DealPipelineObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/placements":{"get":{"tags":["external-v2-placements"],"summary":"List Placements","description":"List placements across all deals accessible to the authenticated user.\n\nSupports cursor-based pagination (default) and offset-based pagination\n(when ``sort`` is provided).  Filtering and sorting use standard v2 query\nparameters.","operationId":"list_placements_api_external_v2_placements_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"},{"name":"sort","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated, - prefix for desc","title":"Sort"},"description":"Comma-separated, - prefix for desc"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-placements"],"summary":"Create Placement","description":"Create a new placement (lender outreach) on a deal.\n\nRequired body fields: ``deal_id`` and ``private_company_id``.  Both must\nbelong to the caller's account; cross-account or non-existent IDs return\n404.  AI lender-contact matching is disabled for this endpoint\n(``match_contact_with_ai=False``) — placements created via the external\nAPI are explicit and deterministic.","operationId":"create_placement_api_external_v2_placements_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePlacementRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/placements/{placement_id}":{"get":{"tags":["external-v2-placements"],"summary":"Get Placement","description":"Return a single placement by ID.","operationId":"get_placement_api_external_v2_placements__placement_id__get","parameters":[{"name":"placement_id","in":"path","required":true,"schema":{"type":"integer","title":"Placement Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["external-v2-placements"],"summary":"Update Placement","description":"Partially update an existing placement (JSON Merge Patch semantics).\n\nOnly the fields present in the request body are updated.  An empty body\n(all fields absent) returns 400 because no meaningful update was requested.\nUse ``status=\"archived\"`` to remove a placement from active views — this\nmirrors the existing app convention (no row-level delete is supported).\n\nReturns 404 for placements on foreign-account deals or non-existent\nplacements.","operationId":"update_placement_api_external_v2_placements__placement_id__patch","parameters":[{"name":"placement_id","in":"path","required":true,"schema":{"type":"integer","title":"Placement Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePlacementRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PlacementObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/term-sheets":{"get":{"tags":["external-v2-term-sheets"],"summary":"List Term Sheets","description":"List term sheets for a deal.","operationId":"list_term_sheets_api_external_v2_deals__deal_id__term_sheets_get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","description":"Number of results to return (1-200, clamped)","default":50,"title":"Limit"},"description":"Number of results to return (1-200, clamped)"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","description":"Offset for pagination (>= 0, clamped)","default":0,"title":"Offset"},"description":"Offset for pagination (>= 0, clamped)"},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Base64 cursor for pagination","title":"Cursor"},"description":"Base64 cursor for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TermSheetListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["external-v2-term-sheets"],"summary":"Create Term Sheet","description":"Create a new term sheet against a placement on this deal.\n\nRequired body fields: ``placement_id``, ``total_rate``, ``initial_funding``,\n``quote_type``, ``rate_type`` (mirrors the GraphQL ``CreateTermSheetMutation``\nrequirements).  The deal_id in the path must match the placement's deal.","operationId":"create_term_sheet_api_external_v2_deals__deal_id__term_sheets_post","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTermSheetRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TermSheetObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/external/v2/deals/{deal_id}/term-sheets/{term_sheet_id}":{"get":{"tags":["external-v2-term-sheets"],"summary":"Get Term Sheet","description":"Get a single term sheet by ID within a deal.","operationId":"get_term_sheet_api_external_v2_deals__deal_id__term_sheets__term_sheet_id__get","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"term_sheet_id","in":"path","required":true,"schema":{"type":"integer","title":"Term Sheet Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated sparse fieldset","title":"Fields"},"description":"Comma-separated sparse fieldset"},{"name":"include","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated relationship includes","title":"Include"},"description":"Comma-separated relationship includes"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TermSheetObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["external-v2-term-sheets"],"summary":"Update Term Sheet","description":"Partially update a term sheet (JSON Merge Patch semantics).\n\nOnly the fields present in the request body are updated.  An empty body\nreturns 400.  ``placement_id`` and ``deal_id`` are deliberately absent\nfrom the body (F-016-style locked-FK carve-out).","operationId":"update_term_sheet_api_external_v2_deals__deal_id__term_sheets__term_sheet_id__patch","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"term_sheet_id","in":"path","required":true,"schema":{"type":"integer","title":"Term Sheet Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTermSheetRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TermSheetObjectResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["external-v2-term-sheets"],"summary":"Delete Term Sheet","description":"Soft-delete a term sheet (sets ``deleted_at``; TermSheet inherits SoftDeletable).","operationId":"delete_term_sheet_api_external_v2_deals__deal_id__term_sheets__term_sheet_id__delete","parameters":[{"name":"deal_id","in":"path","required":true,"schema":{"type":"integer","title":"Deal Id"}},{"name":"term_sheet_id","in":"path","required":true,"schema":{"type":"integer","title":"Term Sheet Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeletedResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ApiKeyCreatedObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/ApiKeyCreatedResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"ApiKeyCreatedObjectResponse","description":"OpenAPI schema for POST /api/external/v2/api-keys."},"ApiKeyCreatedResponse":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"key_prefix":{"type":"string","title":"Key Prefix"},"permission":{"type":"string","title":"Permission"},"api_key":{"type":"string","title":"Api Key"},"created_at":{"type":"string","title":"Created At"}},"type":"object","required":["id","label","key_prefix","permission","api_key","created_at"],"title":"ApiKeyCreatedResponse"},"ApiKeyDeletedResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Data"}},"type":"object","required":["request_id","timestamp","data"],"title":"ApiKeyDeletedResponse","description":"OpenAPI schema for DELETE /api/external/v2/api-keys/{key_id}."},"ApiKeyItem":{"properties":{"id":{"type":"integer","title":"Id"},"label":{"type":"string","title":"Label"},"key_prefix":{"type":"string","title":"Key Prefix"},"permission":{"type":"string","title":"Permission"},"created_at":{"type":"string","title":"Created At"},"last_used_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Used At"}},"type":"object","required":["id","label","key_prefix","permission","created_at","last_used_at"],"title":"ApiKeyItem"},"ApiKeyListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/ApiKeyItem"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"ApiKeyListResponse","description":"OpenAPI schema for GET /api/external/v2/api-keys."},"AssetTypeListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/AssetTypeResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"AssetTypeListResponse","description":"OpenAPI schema for GET /api/external/v2/market/asset-types (list envelope)."},"AssetTypeResponse":{"properties":{"id":{"type":"integer","title":"Id"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"property_sub_types":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Property Sub Types"}},"type":"object","required":["id","description","property_sub_types"],"title":"AssetTypeResponse","description":"Asset type data shape — used for OpenAPI doc generation."},"AttachmentSizeRequest":{"properties":{"document_ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Document Ids"}},"type":"object","required":["document_ids"],"title":"AttachmentSizeRequest"},"BaseRateListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/BaseRateResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"BaseRateListResponse","description":"OpenAPI schema for GET /api/external/v2/market/base-rates (list envelope)."},"BaseRateNames":{"type":"string","enum":["Prime Rate","SOFR Swap 10-Yr","SOFR Swap 5-Yr","SOFR Swap 3-Yr","SOFR Swap 7-Yr","SOFR 1-Mo Term","SOFR 3-Mo Term","1-Mo SOFR Swap 30-Yr","1-Mo SOFR Swap 15-Yr","1-Mo SOFR Swap 10-Yr","1-Mo SOFR Swap 7-Yr","1-Mo SOFR Swap 5-Yr","1-Mo SOFR Swap 3-Yr","1-Mo SOFR Swap 2-Yr","1-Mo SOFR Swap 1-Yr","SOFR","SOFR 30-Day Avg","Treasury 10-Yr","Treasury 5-Yr","Treasury 7-Yr","Treasury 3-Yr","Treasury 2-Yr","Treasury 1-Yr","CMT 3-Yr","CMT 5-Yr","CMT 10-Yr","Interpolated 9-Yr","Interpolated 8-Yr","Interpolated 6-Yr","Ameribor 90-Day Average","Ameribor 30-Day Average","Ameribor Term-90","Ameribor Term-30","Ameribor Overnight"],"title":"BaseRateNames"},"BaseRateResponse":{"properties":{"code":{"type":"string","title":"Code"},"name":{"type":"string","title":"Name"},"rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Rate"}},"type":"object","required":["code","name","rate"],"title":"BaseRateResponse","description":"Base rate data shape — used for OpenAPI doc generation."},"BillingSummaryData":{"properties":{"subscription":{"$ref":"#/components/schemas/SubscriptionSummaryResponse"},"credits":{"$ref":"#/components/schemas/CreditBalanceResponse"}},"type":"object","required":["subscription","credits"],"title":"BillingSummaryData"},"BillingSummaryResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/BillingSummaryData"}},"type":"object","required":["request_id","timestamp","data"],"title":"BillingSummaryResponse","description":"OpenAPI schema for GET /api/external/v2/billing/summary."},"BusinessPlanType":{"type":"string","enum":["stabilized","value_add","construction","land"],"title":"BusinessPlanType"},"ChecklistSectionResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"position":{"type":"integer","title":"Position"},"start_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Start Date"},"end_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"End Date"},"tasks":{"items":{"$ref":"#/components/schemas/ChecklistTaskResponse"},"type":"array","title":"Tasks","default":[]}},"type":"object","required":["id","name","position"],"title":"ChecklistSectionResponse","description":"A checklist section and its tasks, both ordered by ``position`` (matches the Lev UI)."},"ChecklistTaskAssignedTeam":{"properties":{"id":{"type":"integer","title":"Id"},"type":{"type":"string","enum":["account","private_company"],"title":"Type"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id","type"],"title":"ChecklistTaskAssignedTeam","description":"The team, lender, or borrower org a task is assigned to."},"ChecklistTaskAssignee":{"properties":{"id":{"type":"integer","title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","required":["id"],"title":"ChecklistTaskAssignee","description":"The user a task is assigned to.\n\nBuilt from base ``User`` fields (not account-scoped profile overrides), so\nit serializes correctly for API-key callers without a user profile."},"ChecklistTaskCollaborator":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"}},"type":"object","title":"ChecklistTaskCollaborator","description":"A task collaborator: a Lev user (``id`` set) or an external email-only party."},"ChecklistTaskDocumentTypeResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id"],"title":"ChecklistTaskDocumentTypeResponse","description":"A document type expected for this checklist task."},"ChecklistTaskFileResponse":{"properties":{"vault_resource_id":{"type":"integer","title":"Vault Resource Id"},"document_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Document Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"origin":{"type":"string","enum":["auto_match","manually_added"],"title":"Origin"}},"type":"object","required":["vault_resource_id","origin"],"title":"ChecklistTaskFileResponse","description":"A file currently attached to this checklist task."},"ChecklistTaskObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/ChecklistTaskResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"ChecklistTaskObjectResponse","description":"OpenAPI schema for the single-task write endpoints (create / update / complete)."},"ChecklistTaskResponse":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"status":{"type":"string","enum":["to_do","requested","reviewing","updates_needed","approved","cancelled"],"title":"Status"},"is_completed":{"type":"boolean","title":"Is Completed"},"position":{"type":"integer","title":"Position"},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date"},"role":{"anyOf":[{"type":"string","enum":["sponsor","my_team","lender","borrower"]},{"type":"null"}],"title":"Role"},"assignee":{"anyOf":[{"$ref":"#/components/schemas/ChecklistTaskAssignee"},{"type":"null"}]},"assigned_team":{"anyOf":[{"$ref":"#/components/schemas/ChecklistTaskAssignedTeam"},{"type":"null"}]},"document_types":{"items":{"$ref":"#/components/schemas/ChecklistTaskDocumentTypeResponse"},"type":"array","title":"Document Types","default":[]},"files":{"items":{"$ref":"#/components/schemas/ChecklistTaskFileResponse"},"type":"array","title":"Files","default":[]},"collaborators":{"items":{"$ref":"#/components/schemas/ChecklistTaskCollaborator"},"type":"array","title":"Collaborators","default":[]},"subtasks":{"items":{"$ref":"#/components/schemas/ChecklistTaskResponse"},"type":"array","title":"Subtasks","default":[]}},"type":"object","required":["id","title","status","is_completed","position"],"title":"ChecklistTaskResponse","description":"A single checklist task.\n\nCompletion is two fields by design, matching the internal model: ``status``\nis the workflow state and ``is_completed`` is the soft completion flag.\n``subtasks`` is one level deep (subtasks cannot nest further). ``position``\norders tasks within their section / checklist root / parent task."},"CompanyCreateObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/CreatedCompanyResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"CompanyCreateObjectResponse","description":"OpenAPI schema for POST /api/external/v2/companies (object envelope)."},"CompanyListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/CompanyResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"CompanyListResponse","description":"OpenAPI schema for GET /api/external/v2/companies (list envelope)."},"CompanyObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/CompanyResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"CompanyObjectResponse","description":"OpenAPI schema for GET /api/external/v2/companies/<id> (object envelope)."},"CompanyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"is_connected":{"type":"boolean","title":"Is Connected","default":false},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id"},"owner_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Account Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id"],"title":"CompanyResponse"},"ConnectionInfo":{"properties":{"name":{"type":"string","title":"Name"},"type":{"type":"string","title":"Type"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"}},"type":"object","required":["name","type"],"title":"ConnectionInfo"},"ConsumeMobilePortalHandoffRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"ConsumeMobilePortalHandoffRequest"},"ConsumeMobilePortalHandoffResponse":{"properties":{"email":{"type":"string","title":"Email"},"userId":{"type":"integer","title":"Userid"}},"type":"object","required":["email","userId"],"title":"ConsumeMobilePortalHandoffResponse"},"ContactListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/ContactResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"ContactListResponse","description":"OpenAPI schema for GET /api/external/v2/contacts (list envelope)."},"ContactObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/ContactResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"ContactObjectResponse","description":"OpenAPI schema for GET /api/external/v2/contacts/<id> (object envelope)."},"ContactResponse":{"properties":{"id":{"type":"integer","title":"Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"contact_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Type"},"contact_types":{"items":{"type":"string"},"type":"array","title":"Contact Types"},"company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Company Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"address2":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address2"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"},"phones":{"items":{"$ref":"#/components/schemas/PhoneOut"},"type":"array","title":"Phones"},"is_primary":{"type":"boolean","title":"Is Primary","default":false},"is_connected":{"type":"boolean","title":"Is Connected","default":false},"owner_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Account Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id"],"title":"ContactResponse"},"CreateChecklistTaskRequest":{"properties":{"title":{"type":"string","minLength":1,"title":"Title","description":"Task title."},"section_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Section Id","description":"Add the task to this section (use a section ``id`` from GET /deals/{deal_id}/checklists). Mutually exclusive with checklist_id and parent_task_id."},"checklist_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Checklist Id","description":"Add the task at the root of this checklist, outside any section. Mutually exclusive with section_id and parent_task_id."},"parent_task_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Parent Task Id","description":"Add the task as a subtask of this task (subtasks are one level deep). Mutually exclusive with section_id and checklist_id."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Optional task description."},"status":{"anyOf":[{"type":"string","enum":["to_do","requested","reviewing","updates_needed","approved","cancelled"]},{"type":"null"}],"title":"Status","description":"Initial workflow status. Defaults to 'to_do' when omitted."},"assigned_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned User Id","description":"Lev user id to assign (from list_team_members, or an assignee ``id`` on the checklist read)."},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date","description":"Due date (YYYY-MM-DD)."},"document_type_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Document Type Ids","description":"Expected document type ids for this task."}},"type":"object","required":["title"],"title":"CreateChecklistTaskRequest","description":"Body for POST /api/external/v2/checklist-tasks.\n\nAnchors the new task to exactly one parent: a ``section_id`` (task within a\nsection), a ``checklist_id`` (root-level task, outside any section), or a\n``parent_task_id`` (subtask, one level deep). ``role`` is not settable — it\nis derived internally and exposed read-only on the checklist read surface.\nTeam assignment (``assigned_team_*``) is likewise read-only on the write\nsurface for now: it needs account-scoping to avoid an id-enumeration oracle,\nso individual assignment via ``assigned_user_id`` is the supported write path."},"CreateCompanyRequest":{"properties":{"name":{"type":"string","maxLength":255,"minLength":1,"title":"Name"},"company_type":{"type":"string","enum":["lender","sponsor"],"title":"Company Type"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id"}},"type":"object","required":["name","company_type"],"title":"CreateCompanyRequest","description":"POST body for creating a company."},"CreateContactRequest":{"properties":{"contact_type":{"type":"string","enum":["lender_contact","sponsor"],"title":"Contact Type"},"company_id":{"type":"integer","title":"Company Id"},"first_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Email"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"department":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Department"},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address"},"address2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address2"},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string","maxLength":5},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Linkedin Url"},"photo_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Photo Url"},"phones":{"anyOf":[{"items":{"$ref":"#/components/schemas/PhoneIn"},"type":"array"},{"type":"null"}],"title":"Phones"},"is_primary":{"type":"boolean","title":"Is Primary","default":false}},"type":"object","required":["contact_type","company_id"],"title":"CreateContactRequest","description":"POST body for creating a contact."},"CreateDealFinancialsInput":{"properties":{"purchase_price":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Purchase Price","description":"Purchase price for LTV (acquisition)."},"estimated_value":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Estimated Value","description":"Estimated value for LTV (refinance)."},"total_cost":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Total Cost","description":"Total project cost for construction LTC."},"total_cost_basis":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Total Cost Basis","description":"Total cost basis for LTC (bridge, etc.)."},"land_cost":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Land Cost","description":"Land cost for construction LTC."}},"additionalProperties":false,"type":"object","title":"CreateDealFinancialsInput","description":"Canonical deal-level financial denominators on POST/PATCH /deals."},"CreateDealPropertyInput":{"properties":{"property_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Property Id","description":"ID of an existing property to link. Must be reachable from the caller's account (already linked to a deal the account owns). Mutually exclusive with the inline-create fields below."},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address","description":"Street address."},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"State","description":"State/province (e.g. 'NY', 'CA')."},"zip":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Zip"},"asset_type_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Asset Type Id","description":"Asset subtype ID — discover via get_asset_types."},"units":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Units","description":"Unit count (e.g. apartment units)."},"square_footage":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Square Footage","description":"Rentable/leasable area in square feet."},"year_built":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Year Built"}},"type":"object","title":"CreateDealPropertyInput","description":"One property entry on a ``CreateDealRequest.properties`` list.\n\nEach entry is *either* a link (``property_id``) *or* an inline-create\n(address + optional structural fields), never both. Public field names\nfollow the v2 read serializer (``asset_type_id``, ``square_footage``).\nPer MCP-224, the read-side ``id`` is the ``Property.id`` — the same value\naccepted here as ``property_id`` — so a property read from\n``GET /deals/<id>?include=properties`` round-trips into this link form\nunchanged.\n\nThe v2 endpoint translates these API names into the controller's\ninternal names before dispatch:\n\n- ``property_id``     → ``id``                (existing-property link)\n- ``asset_type_id``   → ``asset_subtype_id``  (controller historical name)\n- ``square_footage``  → ``area``              (Property column name)"},"CreateDealRequest":{"properties":{"title":{"type":"string","maxLength":255,"minLength":1,"title":"Title","description":"Deal title (required)"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount","description":"Requested loan amount"},"priority":{"anyOf":[{"$ref":"#/components/schemas/DealPriority"},{"type":"null"}],"description":"Deal priority enum name: no_priority, urgent, high, medium, or low."},"loan_type":{"anyOf":[{"$ref":"#/components/schemas/LoanType"},{"type":"null"}],"description":"Loan type enum name (e.g. construction, permanent)"},"transaction_type":{"anyOf":[{"$ref":"#/components/schemas/TransactionType"},{"type":"null"}],"description":"Transaction type enum name (e.g. acquisition, refinance)"},"business_plan":{"anyOf":[{"$ref":"#/components/schemas/BusinessPlanType"},{"type":"null"}],"description":"Business plan enum name (e.g. stabilized, value_add)"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Free-text deal description"},"estimated_close_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Estimated Close Date","description":"Estimated close date (ISO 8601 date string, e.g. 2025-12-31)"},"pipeline_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":25},{"type":"null"}],"title":"Pipeline Ids","description":"Pipeline IDs to associate with the deal (max 25). All ids must belong to the caller's account; unknown or cross-account ids return 404. Financing and acquisition pipelines may each appear at most once."},"sponsor_private_company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sponsor Private Company Id","description":"ID of the sponsor company (a PrivateCompany) to link to this deal. Must belong to the caller's account. Linking also adds the sponsor's users to the deal team when the deal is brokered."},"properties":{"anyOf":[{"items":{"$ref":"#/components/schemas/CreateDealPropertyInput"},"type":"array","maxItems":25},{"type":"null"}],"title":"Properties","description":"Properties to attach to the deal at creation time (max 25 per deal — portfolio cap to keep the access check bounded). Each entry either links an existing property (property_id) or inline-creates a new one (address, city, state, zip, asset_type_id, units, square_footage, year_built). Brokers typically know the address before the financing, so this lets a deal be authored in one call instead of a deal-then-property two-step."},"deal_financials":{"anyOf":[{"$ref":"#/components/schemas/CreateDealFinancialsInput"},{"type":"null"}],"description":"Optional deal-level financial inputs. Together with ``loan_amount``, these are stored as canonical loan-sizing denominators."}},"type":"object","required":["title"],"title":"CreateDealRequest","description":"POST /api/external/v2/deals request body.\n\nExposes a curated subset of deal fields suitable for programmatic deal\ncreation.  More fields can be added in future releases without breaking\nexisting integrations."},"CreateNoteRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text","description":"Note text. Simple HTML formatting is preserved; dangerous markup (scripts, javascript: URLs) is stripped server-side."}},"type":"object","required":["text"],"title":"CreateNoteRequest","description":"POST /api/external/v2/{contacts|deals|placements|companies|checklist-tasks}/<id>/notes request body.\n\nDeliberately minimal (MCP-287 Phase 1): callers supply only the note\ntext. Note type, visibility, and purpose are assigned server-side so an\nexternal caller can never create an internal-class or hidden note."},"CreatePlacementRequest":{"properties":{"deal_id":{"type":"integer","title":"Deal Id","description":"ID of the deal this placement belongs to (required)."},"private_company_id":{"type":"integer","title":"Private Company Id","description":"ID of the lender company (a PrivateCompany) being placed against this deal. Must belong to the caller's account (use list_companies to find candidates)."},"contact_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Id","description":"Optional ID of the lender contact (a Contact in the caller's account) for this outreach."},"status":{"anyOf":[{"$ref":"#/components/schemas/PlacementStatus"},{"type":"null"}],"description":"Placement status enum name. Defaults to 'new' if omitted. Valid values: see PlacementStatus in app/models/enums.py."},"visibility":{"anyOf":[{"$ref":"#/components/schemas/PlacementVisibility"},{"type":"null"}],"description":"Placement visibility enum name (e.g. 'shared', 'masked', 'hidden')."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Free-text description / per-lender note. This is the canonical location for lender-specific feedback on the deal (e.g. '08/11 soft quote received…')."},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score","description":"Manual relevance score (0-100)."},"outreach_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Outreach Date","description":"Timestamp the lender was first reached out to (ISO 8601)."},"lender_status":{"anyOf":[{"$ref":"#/components/schemas/LenderStatus"},{"type":"null"}],"description":"Lender status enum name (e.g. new, term_sheet_signed, diligence, in_closing, closed)."}},"type":"object","required":["deal_id","private_company_id"],"title":"CreatePlacementRequest","description":"POST /api/external/v2/placements request body.\n\nCreates a new placement — a record of lender outreach on a deal.\n``deal_id`` identifies the target deal and ``private_company_id``\nidentifies the lender (a PrivateCompany).  Both must belong to the\ncaller's account; cross-account IDs return 404.  Status defaults to\n``new`` server-side when omitted; visibility falls back to the model\ndefault (``hidden``) unless the deal-owner-account rules force\n``shared`` (customer accounts; see ``PlacementsController.create_placement``)."},"CreateTermSheetRequest":{"properties":{"placement_id":{"type":"integer","title":"Placement Id","description":"ID of the placement (lender outreach) this term sheet belongs to. The placement must already exist on this deal."},"total_rate":{"type":"number","title":"Total Rate","description":"Rate as a percent (e.g. 7.53 = 7.53%). Interpret relative to the term sheet's ``base_rate``: if ``base_rate`` is set, ``total_rate`` is the spread over that base rate; if ``base_rate`` is null or ``'none-fixed'``, ``total_rate`` is the all-in fixed rate."},"initial_funding":{"type":"integer","title":"Initial Funding","description":"Provided loan amount."},"quote_type":{"$ref":"#/components/schemas/QuoteType","description":"Quote type enum name (e.g. indication, soft_quote, term_sheet)."},"rate_type":{"$ref":"#/components/schemas/RateType","description":"Rate type enum name (fixed or floating)."},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Free-text title of the term sheet."},"winning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Winning","description":"Set true to mark this as the winning term sheet on the deal."},"base_rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Rate","description":"Base rate identifier — accepts ``BaseRateNames`` member names (e.g. ``treasury_y5``, ``sofr_m1``, ``prime_rate``) or the literal string ``'none-fixed'`` for fixed-rate quotes.  When this is a real base-rate identifier, send ``total_rate`` as the spread over that base rate.  Unknown names return 422 with the full list of valid options.  See ``app/models/enums.py::BaseRateNames`` for the full enum."},"max_ltv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv","description":"Maximum loan-to-value ratio as a percent."},"max_ltc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltc","description":"Maximum loan-to-cost ratio as a percent."},"additional_funding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Additional Funding","description":"Additional funding amount."},"floor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Floor","description":"Rate floor as a percent."},"floor_type":{"anyOf":[{"$ref":"#/components/schemas/TermSheetFloorType"},{"type":"null"}],"description":"Floor type enum name (TermSheetFloorType): 'base_rate' or 'total_rate'."},"term":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term","description":"Term length in months."},"amortization":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amortization","description":"Amortization period in months."},"io_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Io Period","description":"Interest-only period in months."},"extension_one":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension One","description":"First extension period in months."},"extension_two":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension Two","description":"Second extension period in months."},"extension_three":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension Three","description":"Third extension period in months."},"recourse":{"anyOf":[{"$ref":"#/components/schemas/TermSheetRecourse"},{"type":"null"}],"description":"Recourse category enum name (e.g. full, partial, non_recourse, springing)."},"recourse_type":{"anyOf":[{"$ref":"#/components/schemas/TermSheetRecourseType"},{"type":"null"}],"description":"Recourse type enum name (used with recourse to qualify the category)."},"prepayment_penalty":{"anyOf":[{"$ref":"#/components/schemas/PrepaymentPenalty"},{"type":"null"}],"description":"Prepayment penalty enum name (e.g. yield_maintenance, defeasance, step_down, none)."},"prepayment_penalty_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepayment Penalty Details","description":"Free-text details of the prepayment penalty structure."},"min_dscr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Dscr","description":"Minimum debt service coverage ratio as a percent."},"min_debt_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Debt Yield","description":"Minimum debt yield as a percent."},"origination_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Origination Fee","description":"Origination fee as a percent."},"extension_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Extension Fee","description":"Extension fee as a percent."},"exit_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Fee","description":"Exit fee as a percent."},"good_faith_deposit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Good Faith Deposit","description":"Good-faith deposit amount."},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Free-text notes on the term sheet."},"ir_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ir Details","description":"Free-text interest rate details."},"is_visible_to_borrower":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Visible To Borrower","description":"Whether the term sheet is visible to the borrower (default true on the model)."},"payment_method":{"anyOf":[{"$ref":"#/components/schemas/TermSheetPaymentMethod"},{"type":"null"}],"description":"Payment method enum name."},"capital_source_type":{"anyOf":[{"$ref":"#/components/schemas/LenderProgramCapitalSourceTypeV2"},{"type":"null"}],"description":"Capital source type enum name (lender program classification)."}},"type":"object","required":["placement_id","total_rate","initial_funding","quote_type","rate_type"],"title":"CreateTermSheetRequest","description":"POST /api/external/v2/deals/<deal_id>/term-sheets request body.\n\n``placement_id``, ``total_rate``, ``initial_funding``, ``quote_type``, and\n``rate_type`` are required — they mirror the constraints from the GraphQL\n``TermSheetInputWithRequirements``.  All other fields are optional.  The\ntarget deal_id is implied by the URL path and need not appear in the body."},"CreatedCompanyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"is_connected":{"type":"boolean","title":"Is Connected","default":false},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id"},"owner_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Account Id"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"company_type":{"type":"string","enum":["lender","sponsor"],"title":"Company Type"}},"type":"object","required":["id","company_type"],"title":"CreatedCompanyResponse"},"CreditBalanceEnvelopeResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/CreditBalanceResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"CreditBalanceEnvelopeResponse","description":"OpenAPI schema for GET /api/external/v2/billing/credits/balance."},"CreditBalanceResponse":{"properties":{"enabled":{"type":"boolean","title":"Enabled"},"balance":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Balance"},"unit":{"type":"string","title":"Unit"}},"type":"object","required":["enabled","balance","unit"],"title":"CreditBalanceResponse","description":"Current credit balance snapshot.\n\n``enabled`` is ``true`` when the account is provisioned in Metronome —\ni.e. ``accounts.external_customer_id`` is set, mirroring the borrower\nportal's enablement gate. ``false`` when the account has not been\nprovisioned.\n\nWhen ``enabled`` is ``false``, ``balance`` is ``null`` — distinguishing\n\"not on credits\" from \"on credits with a zero balance\" (balance ``0``)."},"CursorPaginationResponse":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cursor"},"has_more":{"type":"boolean","title":"Has More"},"next_cursor":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Cursor"}},"type":"object","required":["total","limit","cursor","has_more","next_cursor"],"title":"CursorPaginationResponse"},"DataOkResponse":{"properties":{"data":{"type":"string","title":"Data","default":"ok"}},"type":"object","title":"DataOkResponse"},"DealChecklistListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealChecklistResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealChecklistListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<deal_id>/checklists (list envelope)."},"DealChecklistResponse":{"properties":{"id":{"type":"integer","title":"Id"},"vault":{"$ref":"#/components/schemas/DocumentVaultRef"},"sections":{"items":{"$ref":"#/components/schemas/ChecklistSectionResponse"},"type":"array","title":"Sections","default":[]},"tasks":{"items":{"$ref":"#/components/schemas/ChecklistTaskResponse"},"type":"array","title":"Tasks","default":[]}},"type":"object","required":["id","vault"],"title":"DealChecklistResponse","description":"One checklist on a deal, tagged with the shared vault it lives on.\n\n``sections`` are the ordered section groups; ``tasks`` are root-level tasks\nthat live directly on the checklist outside any section."},"DealDataResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"data":{"additionalProperties":true,"type":"object","title":"Data"}},"type":"object","required":["request_id","data"],"title":"DealDataResponse"},"DealFinancialsDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"deal_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deal Id"},"capex":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capex"},"cost_basis_to_date":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Cost Basis To Date"},"estimated_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Value"},"existing_debt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Existing Debt"},"total_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost"},"historical_capex":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Historical Capex"},"total_cost_basis":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Basis"},"land_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Land Cost"},"imputed_land_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Imputed Land Value"},"estimated_cost_basis_if_refinance":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Cost Basis If Refinance"},"exchange_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exchange Amount"},"going_in_cap_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Going In Cap Rate"},"outstanding_loan_amount_at_closing":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Outstanding Loan Amount At Closing"},"environmental_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Environmental Cost"},"appraisal_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Appraisal Cost"},"survey_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Survey Cost"},"snda_and_estoppel_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Snda And Estoppel Cost"},"estimated_borrower_counsel_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Borrower Counsel Cost"},"estimated_lender_counsel_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Lender Counsel Cost"},"purchase_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Purchase Price"},"asking_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asking Price"},"in_place_noi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"In Place Noi"},"stabilized_noi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stabilized Noi"},"stabilized_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stabilized Value"},"stabilized_occupancy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stabilized Occupancy"},"other_closing_costs":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Other Closing Costs"},"date_of_purchase_if_refinance":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Of Purchase If Refinance"},"exchange_required_closing_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Exchange Required Closing Date"},"going_in_cap_rate_as_of_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Going In Cap Rate As Of Date"},"construction_start_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Construction Start Date"},"construction_completion_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Construction Completion Date"},"debt_maturity_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Debt Maturity Date"},"cash_out":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Cash Out"},"recent_phase_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recent Phase Available"},"recent_appraisal_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Recent Appraisal Available"},"survey_available":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Survey Available"},"borrower_counsel_engaged":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Borrower Counsel Engaged"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","deal_id","capex","cost_basis_to_date","estimated_value","existing_debt","total_cost","historical_capex","total_cost_basis","land_cost","imputed_land_value","estimated_cost_basis_if_refinance","exchange_amount","going_in_cap_rate","outstanding_loan_amount_at_closing","environmental_cost","appraisal_cost","survey_cost","snda_and_estoppel_cost","estimated_borrower_counsel_cost","estimated_lender_counsel_cost","purchase_price","asking_price","in_place_noi","stabilized_noi","stabilized_value","stabilized_occupancy","other_closing_costs","date_of_purchase_if_refinance","exchange_required_closing_date","going_in_cap_rate_as_of_date","construction_start_date","construction_completion_date","debt_maturity_date","cash_out","recent_phase_available","recent_appraisal_available","survey_available","borrower_counsel_engaged","updated_at"],"title":"DealFinancialsDetailResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/financials.\n\nReflects the actual DealFinancials model columns (not the legacy\n``DealFinancialsResponse`` used for ``?include=financials``)."},"DealFinancialsObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DealFinancialsDetailResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"DealFinancialsObjectResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/financials."},"DealFinancialsResponse":{"properties":{"id":{"type":"integer","title":"Id"},"in_place_noi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"In Place Noi"},"stabilized_noi":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stabilized Noi"},"stabilized_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stabilized Value"},"stabilized_occupancy":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Stabilized Occupancy"},"purchase_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Purchase Price"},"asking_price":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Asking Price"},"estimated_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Estimated Value"},"total_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost"},"total_cost_basis":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Cost Basis"},"capex":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Capex"},"existing_debt":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Existing Debt"},"going_in_cap_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Going In Cap Rate"},"land_cost":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Land Cost"}},"type":"object","required":["id","in_place_noi","stabilized_noi","stabilized_value","stabilized_occupancy","purchase_price","asking_price","estimated_value","total_cost","total_cost_basis","capex","existing_debt","going_in_cap_rate","land_cost"],"title":"DealFinancialsResponse"},"DealIndexEntityListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealIndexEntityResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealIndexEntityListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/index/entities."},"DealIndexEntityMetricResponse":{"properties":{"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"metric_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Label"},"value_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Text"},"support_multiple_values":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Support Multiple Values"}},"type":"object","title":"DealIndexEntityMetricResponse","description":"Identifying metric returned by GET /deals/<id>/index/entities."},"DealIndexEntityResponse":{"properties":{"entity_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Ref"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entity Id"},"group_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Ref"},"identifying_metrics":{"items":{"$ref":"#/components/schemas/DealIndexEntityMetricResponse"},"type":"array","title":"Identifying Metrics"}},"type":"object","required":["identifying_metrics"],"title":"DealIndexEntityResponse","description":"One entity ref that can be used on deal-index metric inserts."},"DealIndexFactInsertObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DealIndexFactInsertResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"DealIndexFactInsertObjectResponse","description":"OpenAPI schema for POST /api/external/v2/deals/<id>/index/facts."},"DealIndexFactInsertResponse":{"properties":{"success":{"type":"boolean","title":"Success"},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"metric_sot_values":{"items":{"$ref":"#/components/schemas/DealIndexFactResponse"},"type":"array","title":"Metric Sot Values"},"results":{"items":{"$ref":"#/components/schemas/DealIndexFactInsertResultResponse"},"type":"array","title":"Results"}},"type":"object","required":["success","metric_sot_values","results"],"title":"DealIndexFactInsertResponse","description":"Batch insert result with partial-success details."},"DealIndexFactInsertResultResponse":{"properties":{"index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Index"},"metric_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Metric Id"},"success":{"type":"boolean","title":"Success"},"sot":{"anyOf":[{"$ref":"#/components/schemas/DealIndexFactResponse"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"}},"type":"object","required":["success"],"title":"DealIndexFactInsertResultResponse","description":"Per-input result for POST /api/external/v2/deals/<id>/index/facts."},"DealIndexFactObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DealIndexFactResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"DealIndexFactObjectResponse","description":"OpenAPI schema for PATCH /api/external/v2/deals/<id>/index/facts."},"DealIndexFactResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"sot_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sot Id"},"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"metric_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Metric Id"},"value_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Text"},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type"},"period_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Type"},"period_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Value"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entity Id"},"entity_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Ref"},"group_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Ref"},"category_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Id"},"source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Type"},"source_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Id"},"observation_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Observation Id"},"weight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weight"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Origin"},"editable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Editable"},"order":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Order"}},"type":"object","title":"DealIndexFactResponse","description":"SOT shape returned by deal-index fact write endpoints."},"DealIndexMetricDefinitionListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealIndexMetricDefinitionResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealIndexMetricDefinitionListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/index/metric-definitions."},"DealIndexMetricDefinitionResponse":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"metric_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Label"},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type"},"category_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Id"},"is_temporal":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Temporal"},"formatting_rules":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Formatting Rules"},"support_multiple_values":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Support Multiple Values"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"editable_form":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Editable Form"},"exclude_from_extraction":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Exclude From Extraction"}},"type":"object","title":"DealIndexMetricDefinitionResponse","description":"Basic metric catalog row for MCP/external API clients."},"DealIndexObservationListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealIndexObservationResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealIndexObservationListResponse","description":"OpenAPI schema for POST /api/external/v2/deals/<id>/index/observations."},"DealIndexObservationResponse":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"metric_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Metric Id"},"value_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Text"},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type"},"original_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Original Text"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"period_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Type"},"period_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Value"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entity Id"},"entity_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Ref"},"group_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Ref"},"category_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Id"},"confidence":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Confidence"},"weight":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Weight"},"source":{"$ref":"#/components/schemas/DealIndexSearchSourceResponse"}},"type":"object","required":["source"],"title":"DealIndexObservationResponse","description":"One candidate metric observation for a SOT or metric."},"DealIndexObservationsRequest":{"properties":{"sot_id":{"anyOf":[{"type":"string","pattern":"^[A-Za-z]+:[A-Za-z0-9:_-]+$"},{"type":"null"}],"title":"Sot Id","description":"Prefixed SOT id from index/search results (e.g. 'd:123', 'a:42:property:690')."},"metric_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Metric Id","description":"Metric definition id; fallback when sot_id is unavailable."},"entity_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Ref","description":"Narrow observations for entity-specific metrics."},"page":{"type":"integer","title":"Page","description":"1-based page number.","default":1},"limit":{"type":"integer","title":"Limit","description":"Max observations per page (1-200, clamped).","default":20},"include_signed_urls":{"type":"boolean","title":"Include Signed Urls","description":"When true, include time-limited signed URLs for document-backed source attachments.","default":false}},"type":"object","title":"DealIndexObservationsRequest","description":"POST /api/external/v2/deals/<id>/index/observations request body.\n\nLists candidate metric observations the caller may promote as a SOT value.\nEither ``sot_id`` (preferred — use the prefixed id from search results,\ne.g. ``d:123`` or ``a:42:property:690``) or ``metric_id`` is required."},"DealIndexSearchListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealIndexSearchResultResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealIndexSearchListResponse","description":"OpenAPI schema for POST /api/external/v2/deals/<id>/index/search."},"DealIndexSearchRequest":{"properties":{"context":{"type":"string","maxLength":4000,"minLength":1,"title":"Context","description":"Natural-language deal-data search context."},"min_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Min Score","description":"Minimum cosine similarity threshold (0-1).","default":0.3},"limit":{"type":"integer","title":"Limit","description":"Maximum ranked facts to return (1-200, clamped).","default":20},"include_signed_urls":{"type":"boolean","title":"Include Signed Urls","description":"When true, include time-limited signed URLs for document-backed source attachments.","default":false}},"type":"object","required":["context"],"title":"DealIndexSearchRequest","description":"POST /api/external/v2/deals/<id>/index/search request body."},"DealIndexSearchResultResponse":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"sot_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sot Id"},"metric_key":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Key"},"metric_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Metric Id"},"metric_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Metric Label"},"value_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Text"},"value_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value Type"},"context":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Context"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"period_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Type"},"period_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Value"},"entity_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Type"},"entity_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Entity Id"},"entity_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Ref"},"group_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Ref"},"category_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Category Id"},"category_label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category Label"},"needs_review":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Needs Review","description":"Always null; superseded by distinct_value_count / resolved_at."},"distinct_value_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Distinct Value Count"},"resolved_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resolved At"},"has_differing_values":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Differing Values"},"editable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Editable"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"source":{"$ref":"#/components/schemas/DealIndexSearchSourceResponse"}},"type":"object","required":["source"],"title":"DealIndexSearchResultResponse","description":"One ranked SOT metric result from POST /deals/<id>/index/search."},"DealIndexSearchSourceResponse":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"document_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Document Id"},"document_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Document Type"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"file_extension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Extension"},"pages":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Pages"},"observation_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Observation Count"},"signed_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url"},"signed_url_error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Signed Url Error"}},"type":"object","required":["type"],"title":"DealIndexSearchSourceResponse","description":"Source/provenance metadata for a ranked deal-data fact."},"DealListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealListResponse","description":"OpenAPI schema for GET /api/external/v2/deals (list envelope)."},"DealObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DealResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"DealObjectResponse","description":"OpenAPI schema for GET/POST/PATCH /api/external/v2/deals (object envelope)."},"DealOwnerUserResponse":{"properties":{"user_id":{"type":"integer","title":"User Id"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","required":["user_id","first_name","last_name"],"title":"DealOwnerUserResponse","description":"The person who owns the deal — its primary ``deal_principal`` team member.\n\nDeliberately narrower than ``DealTeamMemberResponse``: ``user_id`` (not ``id``)\nso it joins against ``team[].user_id``, and no ``email`` — the v2 team\nserializer does not honor ``DealUser.user_configs.visible_fields.email``."},"DealPipelineData":{"properties":{"id":{"type":"integer","title":"Id"},"deal_id":{"type":"integer","title":"Deal Id"},"pipeline_id":{"type":"integer","title":"Pipeline Id"},"pipeline_status_id":{"type":"integer","title":"Pipeline Status Id"},"status":{"type":"string","title":"Status"},"pipeline_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pipeline Name"}},"type":"object","required":["id","deal_id","pipeline_id","pipeline_status_id","status"],"title":"DealPipelineData"},"DealPipelineObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DealPipelineData"}},"type":"object","required":["request_id","timestamp","data"],"title":"DealPipelineObjectResponse","description":"OpenAPI schema for POST /api/external/v2/deals/<id>/pipeline (object envelope)."},"DealPriority":{"type":"string","enum":["No priority","Urgent","High","Medium","Low"],"title":"DealPriority"},"DealPropertiesListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealPropertyResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealPropertiesListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/properties."},"DealPropertyResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"asset_type_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Asset Type Id"},"units":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Units"},"square_footage":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Square Footage"},"year_built":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Year Built"}},"type":"object","required":["id","name","address","city","state","zip","asset_type_id","units","square_footage","year_built"],"title":"DealPropertyResponse"},"DealResponse":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount"},"priority":{"type":"string","title":"Priority"},"loan_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Loan Type"},"transaction_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Transaction Type"},"business_plan":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Business Plan"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"estimated_close_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Close Date"},"close_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Close Date"},"owner_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Account Id"},"owner_user":{"anyOf":[{"$ref":"#/components/schemas/DealOwnerUserResponse"},{"type":"null"}]},"sponsor_private_company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sponsor Private Company Id"},"urls":{"$ref":"#/components/schemas/DealUrlsResponse"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"archived":{"type":"boolean","title":"Archived"},"archived_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Archived At"},"financials":{"anyOf":[{"$ref":"#/components/schemas/DealFinancialsResponse"},{"type":"null"}]},"properties":{"anyOf":[{"items":{"$ref":"#/components/schemas/DealPropertyResponse"},"type":"array"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["id","title","loan_amount","priority","loan_type","transaction_type","business_plan","description","estimated_close_date","close_date","owner_account_id","sponsor_private_company_id","urls","created_at","updated_at","archived","archived_at"],"title":"DealResponse"},"DealTeamListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealTeamMemberResponse"},"type":"array","title":"Data"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealTeamListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/team (list envelope)."},"DealTeamMemberResponse":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"},"deal_role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deal Role"},"is_primary":{"type":"boolean","title":"Is Primary"},"permission":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Permission"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"}},"type":"object","required":["id","user_id","deal_role","is_primary","permission","first_name","last_name","email","photo_url"],"title":"DealTeamMemberResponse"},"DealUrlsResponse":{"properties":{"overview":{"type":"string","title":"Overview"},"data":{"type":"string","title":"Data"},"dataroom":{"type":"string","title":"Dataroom"},"lenders":{"type":"string","title":"Lenders"},"quote_matrix":{"type":"string","title":"Quote Matrix"},"vaults":{"type":"string","title":"Vaults"}},"type":"object","required":["overview","data","dataroom","lenders","quote_matrix","vaults"],"title":"DealUrlsResponse","description":"Borrower-portal deeplinks emitted on every deal payload — keys mirror\n``app.utils.url_generator.DEAL_SUBPAGE_PATHS``."},"DealVaultListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DealVaultResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DealVaultListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<deal_id>/vaults (list envelope)."},"DealVaultResponse":{"properties":{"id":{"type":"integer","title":"Id"},"type":{"type":"string","enum":["resources","shared"],"title":"Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"is_default":{"type":"boolean","title":"Is Default","default":false},"document_count":{"type":"integer","title":"Document Count","default":0}},"type":"object","required":["id","type"],"title":"DealVaultResponse","description":"One vault on a deal: the private Resources vault or a shared vault.\n\n``type`` is the structural category (``resources`` / ``shared``); ``title``\nis the human name (\"Deal Resources\", \"Deal Room\", \"Closing\", …). Only the\n*default* shared vault is the deal's primary \"Deal Room\" — ``is_default``\nmarks it; other shared vaults are user-named for their own purpose.\n``document_count`` is how many documents the caller can read in that vault\n(the same set the documents listing returns for it)."},"DeletedResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/_DeletedData"}},"type":"object","required":["request_id","timestamp","data"],"title":"DeletedResponse","description":"OpenAPI schema for DELETE /api/external/v2/deals/<id>."},"DetailsMeta":{"properties":{"requested_operations":{"type":"integer","title":"Requested Operations"},"returned_operations":{"type":"integer","title":"Returned Operations"},"max_depth_used":{"type":"integer","title":"Max Depth Used"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["requested_operations","returned_operations","max_depth_used","generated_at"],"title":"DetailsMeta"},"DocumentDownloadObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DocumentDownloadResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"DocumentDownloadObjectResponse","description":"OpenAPI schema for GET .../documents/<document_id>/download (object envelope)."},"DocumentDownloadResponse":{"properties":{"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"download_url":{"type":"string","title":"Download Url"},"expires_in":{"type":"integer","title":"Expires In"}},"type":"object","required":["download_url","expires_in"],"title":"DocumentDownloadResponse","description":"A short-lived, signed download link for one document."},"DocumentGenerationStructureResponse":{"properties":{"uuid":{"type":"string","format":"uuid","title":"Uuid"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"published_content":{"anyOf":[{"$ref":"#/components/schemas/PublishedContentResponse"},{"type":"null"}]}},"type":"object","required":["uuid"],"title":"DocumentGenerationStructureResponse"},"DocumentListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/DocumentResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"DocumentListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<deal_id>/documents (list envelope)."},"DocumentObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/DocumentResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"DocumentObjectResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<deal_id>/documents/<document_id> (object envelope)."},"DocumentResponse":{"properties":{"id":{"type":"integer","title":"Id"},"file_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"File Name"},"extension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extension"},"size_bytes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Size Bytes"},"folder_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Folder Path"},"uploaded_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"string"},{"type":"null"}],"title":"Uploaded At"},"vault":{"$ref":"#/components/schemas/DocumentVaultRef"}},"type":"object","required":["id","vault"],"title":"DocumentResponse","description":"A single document on a deal.\n\n``id`` is the underlying document id (stable across folder moves) — the\nsame id the download route accepts. ``size_bytes`` may be null for older\nrows whose size was never persisted. ``vault`` tags which of the deal's\nvaults the document lives in (a document copied into more than one vault\nappears once per vault). Uploader attribution and document classification\nare deliberately omitted from Slice 1 (the listing query does not load\nthose relationships; see the blueprint module docstring)."},"DocumentVaultRef":{"properties":{"id":{"type":"integer","title":"Id"},"type":{"type":"string","enum":["resources","shared"],"title":"Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","required":["id","type"],"title":"DocumentVaultRef","description":"The vault a document lives in, tagged onto each document in a listing.\n\n``type`` is the structural category (``resources`` / ``shared``); ``title``\nis the human name (\"Deal Resources\", \"Deal Room\", \"Closing\", …)."},"EmailActionResponse":{"properties":{"success":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Success"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","title":"EmailActionResponse"},"EmailActionTokenResponse":{"properties":{"token":{"type":"string","title":"Token"}},"type":"object","required":["token"],"title":"EmailActionTokenResponse"},"ErrorDescriptionResponse":{"properties":{"description":{"type":"string","title":"Description"}},"type":"object","required":["description"],"title":"ErrorDescriptionResponse"},"ErrorResponse":{"properties":{"error":{"type":"string","title":"Error"}},"type":"object","required":["error"],"title":"ErrorResponse"},"GeneratePdfResponse":{"properties":{"uuid":{"type":"string","format":"uuid","title":"Uuid"},"pdf_generation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Generation Status"},"message":{"type":"string","title":"Message"}},"type":"object","required":["uuid","message"],"title":"GeneratePdfResponse"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"InsertDealIndexFactValueInput":{"properties":{"metric_id":{"type":"integer","exclusiveMinimum":0.0,"title":"Metric Id","description":"Metric definition id from index/metric-definitions."},"value":{"type":"string","minLength":1,"title":"Value","description":"User-supplied value to store or sync. Use this insert input as the default way to set a metric value, including when a current value already exists."},"entity_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Entity Ref","description":"Use a value returned by GET /index/entities when inserting a metric for an existing entity, for example 'property:702', 'deal:2633', 'private_company:10', or 'sponsor_contact:55'."},"group_ref":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Group Ref","description":"Use only when multiple submitted values belong to the same entity but no entity_ref is available yet. This endpoint does not create properties: to add a new property, call POST /deals (properties) or PATCH /deals/<id> (add_properties), then insert metric values against the returned entity_ref."},"period_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Type","description":"Period type for temporal metrics: 'year', 'quarter', 'month', or 'none'."},"period_value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Period Value","description":"Period label for temporal metrics, e.g. '2024', 'T-12', 'YTD'."},"order":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Order","description":"Per-row display order for multi-instance metrics."}},"type":"object","required":["metric_id","value"],"title":"InsertDealIndexFactValueInput","description":"One user-supplied metric value to set through POST /deals/<id>/index/facts."},"InsertDealIndexFactsRequest":{"properties":{"values":{"items":{"$ref":"#/components/schemas/InsertDealIndexFactValueInput"},"type":"array","title":"Values","description":"One or more metric id/value pairs to set through the insert flow. May be empty when replace_existing is true and metric_id is set (clears the metric)."},"replace_existing":{"type":"boolean","title":"Replace Existing","description":"When true, hard-delete all existing SOT rows/observations for one metric_id, then insert values. All values must share the same metric_id.","default":false},"metric_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Metric Id","description":"Metric id to clear when replace_existing is true and values is empty."}},"type":"object","title":"InsertDealIndexFactsRequest","description":"POST /api/external/v2/deals/<id>/index/facts request body.\n\nDefault write path for user-supplied metric values on entities that already\nexist on the deal. Insert creates or reuses a user-input observation and can\npromote it as the current SOT, so clients should use this even when replacing\nan existing metric value. Prefer ``entity_ref`` from ``GET /index/entities``\nto target an existing entity; on a one-property deal lev-ai-backend may infer\nthe entity, but MCP clients should send the explicit ``entity_ref`` when\navailable.\n\nThis endpoint does not create entities. To add a new property, call\n``POST /deals`` (``properties``) or ``PATCH /deals/<id>`` (``add_properties``)\n— an address is the minimum required field — then insert metric values\nagainst the resulting ``entity_ref``."},"LambdaEmailRequest":{"properties":{"sender":{"type":"string","title":"Sender"},"to":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"To"},"subject":{"type":"string","title":"Subject"},"cc":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Cc"},"bcc":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Bcc"},"body":{"type":"string","title":"Body"},"name":{"type":"string","title":"Name"},"document_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Document Ids"}},"type":"object","required":["sender","subject","body","name"],"title":"LambdaEmailRequest"},"LenderDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"about":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"About"},"lender_type":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lender Type"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"aliases":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Aliases"},"domains":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Domains"},"square_logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Square Logo Url"},"programs":{"anyOf":[{"items":{"$ref":"#/components/schemas/LenderProgramResponse"},"type":"array"},{"type":"null"}],"title":"Programs"}},"type":"object","required":["id","linkedin_url","aliases","domains","square_logo_url"],"title":"LenderDetailResponse"},"LenderDirectoryListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/LenderResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"LenderDirectoryListResponse","description":"OpenAPI schema for GET /api/external/v2/lenders/directory (list envelope)."},"LenderObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/LenderDetailResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"LenderObjectResponse","description":"OpenAPI schema for GET /api/external/v2/lenders/<org_id> (object envelope)."},"LenderProgramCapitalSourceTypeV2":{"type":"string","enum":["Balance Sheet","Agency","CMBS/CLO","Warehouse","SBA"],"title":"LenderProgramCapitalSourceTypeV2"},"LenderProgramResponse":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"loan_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Loan Types"},"recourse_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Recourse Types"},"min_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Loan Amount"},"max_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Loan Amount"},"capital_source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capital Source Type"},"positions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Positions"},"sponsor_states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Sponsor States"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","required":["id"],"title":"LenderProgramResponse"},"LenderProgramResult":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"loan_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Loan Types"},"min_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Loan Amount"},"max_loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Loan Amount"},"capital_source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capital Source Type"},"states":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"States"},"asset_types":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Asset Types"}},"type":"object","required":["id"],"title":"LenderProgramResult","description":"A single lender program inside a search result."},"LenderProgramsListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/LenderProgramResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"LenderProgramsListResponse","description":"OpenAPI schema for GET /api/external/v2/lenders/<org_id>/programs (list envelope)."},"LenderResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"logo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logo Url"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"about":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"About"},"lender_type":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Lender Type"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id"],"title":"LenderResponse"},"LenderSearchPagination":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["total","limit","offset","has_more"],"title":"LenderSearchPagination","description":"Pagination metadata nested inside ``data``."},"LenderSearchResult":{"properties":{"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id"},"organization_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Organization Name"},"is_connected_lender":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Connected Lender"},"ai_score":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Ai Score"},"ai_rank_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Rank Status"},"ai_match_insights":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ai Match Insights"},"programs":{"anyOf":[{"items":{"$ref":"#/components/schemas/LenderProgramResult"},"type":"array"},{"type":"null"}],"title":"Programs"}},"type":"object","title":"LenderSearchResult","description":"A single lender inside the search results list."},"LenderSearchResultsData":{"properties":{"search_id":{"type":"string","title":"Search Id"},"status":{"type":"string","title":"Status"},"deal_id":{"type":"integer","title":"Deal Id"},"results":{"items":{"$ref":"#/components/schemas/LenderSearchResult"},"type":"array","title":"Results"},"pagination":{"$ref":"#/components/schemas/LenderSearchPagination"}},"type":"object","required":["search_id","status","deal_id","results","pagination"],"title":"LenderSearchResultsData","description":"Payload inside the ``data`` envelope for the lender-search GET."},"LenderSearchResultsResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/LenderSearchResultsData"}},"type":"object","required":["request_id","timestamp","data"],"title":"LenderSearchResultsResponse","description":"OpenAPI schema for GET /deals/<id>/lender-search."},"LenderStatus":{"type":"string","enum":["origination","new","lead_qualification","quotation","negotiation","offer","term_sheet","good_faith_deposit","diligence","in_closing","closed","archived"],"title":"LenderStatus"},"LoanType":{"type":"string","enum":["Construction","Heavy Bridge","Light Bridge","Permanent","Land","Predevelopment","TBD"],"title":"LoanType"},"MemoCreatedByResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id","name"],"title":"MemoCreatedByResponse","description":"The user who created the memo (\"Made in Lev by …\")."},"MemoDetailResponse":{"properties":{"uuid":{"type":"string","title":"Uuid"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"memo_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memo Type"},"status":{"type":"string","title":"Status"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"updated_at":{"type":"string","title":"Updated At"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/MemoCreatedByResponse"},{"type":"null"}]},"pdf_generation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Generation Status"},"pdf_ready":{"type":"boolean","title":"Pdf Ready"},"memo_url":{"type":"string","title":"Memo Url"},"vaults":{"items":{"$ref":"#/components/schemas/MemoVaultRef"},"type":"array","title":"Vaults","default":[]},"pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"},"pdf_versions":{"items":{"$ref":"#/components/schemas/MemoPdfVersionResponse"},"type":"array","title":"Pdf Versions"}},"type":"object","required":["uuid","title","memo_type","status","published_at","updated_at","created_by","pdf_generation_status","pdf_ready","memo_url","pdf_url","pdf_versions"],"title":"MemoDetailResponse","description":"Memo detail — adds signed PDF links to the list shape."},"MemoListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/MemoResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"MemoListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/memos (list envelope)."},"MemoObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/MemoDetailResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"MemoObjectResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<id>/memos/<uuid> (object envelope)."},"MemoPdfVersionResponse":{"properties":{"quality":{"type":"string","title":"Quality"},"status":{"type":"string","title":"Status"},"pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"}},"type":"object","required":["quality","status","pdf_url"],"title":"MemoPdfVersionResponse"},"MemoResponse":{"properties":{"uuid":{"type":"string","title":"Uuid"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"memo_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Memo Type"},"status":{"type":"string","title":"Status"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"updated_at":{"type":"string","title":"Updated At"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/MemoCreatedByResponse"},{"type":"null"}]},"pdf_generation_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Generation Status"},"pdf_ready":{"type":"boolean","title":"Pdf Ready"},"memo_url":{"type":"string","title":"Memo Url"},"vaults":{"items":{"$ref":"#/components/schemas/MemoVaultRef"},"type":"array","title":"Vaults","default":[]}},"type":"object","required":["uuid","title","memo_type","status","published_at","updated_at","created_by","pdf_generation_status","pdf_ready","memo_url"],"title":"MemoResponse","description":"A memo (document-generation structure) for a deal.\n\nBoth published memos and unpublished drafts are returned; ``status`` is the\ncanonical signal — ``\"draft\"`` rows have ``published_at=None`` and may have\nno rendered PDF."},"MemoVaultRef":{"properties":{"id":{"type":"integer","title":"Id"},"type":{"type":"string","enum":["resources","shared"],"title":"Type"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"}},"type":"object","required":["id","type"],"title":"MemoVaultRef","description":"A vault a memo lives in (the Resources area or a shared Deal Room).\n\nSame ``{id, type, title}`` shape the document listing uses (shared label set\nwith the documents surface). ``type`` is the structural category\n(``resources`` / ``shared``); ``title`` is the human name (\"Deal Resources\",\n\"Deal Room\", \"Closing\", …). The list is scoped to vaults the caller can see —\na subset of GET /deals/{id}/vaults — so it may be empty even when the memo is\nin a vault the caller can't access."},"MoveDealToPipelineRequest":{"properties":{"pipeline_id":{"type":"integer","title":"Pipeline Id","description":"ID of the pipeline to add the deal to"},"pipeline_status_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pipeline Status Id","description":"ID of the pipeline status to set. Defaults to the first status in the pipeline."}},"type":"object","required":["pipeline_id"],"title":"MoveDealToPipelineRequest","description":"Request body for POST /api/external/v2/deals/<id>/pipeline.\n\nMoves a deal into a pipeline (idempotent — if the deal is already in the\npipeline the status is updated in place rather than creating a duplicate).\nFinancing and acquisition pipelines may each appear at most once on a deal."},"NoteCreatedByResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"}},"type":"object","required":["id"],"title":"NoteCreatedByResponse","description":"Creator attribution — normalized to exactly the rendered fields."},"NoteListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/NoteResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"NoteListResponse","description":"OpenAPI schema for GET /api/external/v2/{contacts|deals}/<id>/notes (list envelope)."},"NoteObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/NoteResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"NoteObjectResponse","description":"OpenAPI schema for POST /api/external/v2/{contacts|deals}/<id>/notes (object envelope)."},"NoteResponse":{"properties":{"id":{"type":"integer","title":"Id"},"text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Text"},"created_by":{"anyOf":[{"$ref":"#/components/schemas/NoteCreatedByResponse"},{"type":"null"}]},"created_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","text"],"title":"NoteResponse","description":"Note shape for both list and detail responses (MCP-287 Phase 1).\n\nDeliberately minimal: note type, visibility, and purpose are internal\nmechanics and are not exposed externally."},"OffsetPaginationResponse":{"properties":{"total":{"type":"integer","title":"Total"},"limit":{"type":"integer","title":"Limit"},"offset":{"type":"integer","title":"Offset"},"has_more":{"type":"boolean","title":"Has More"}},"type":"object","required":["total","limit","offset","has_more"],"title":"OffsetPaginationResponse"},"OperationOverview":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"returns":{"$ref":"#/components/schemas/ReturnInfo"}},"type":"object","required":["name","returns"],"title":"OperationOverview"},"OverviewMeta":{"properties":{"total_queries":{"type":"integer","title":"Total Queries"},"total_mutations":{"type":"integer","title":"Total Mutations"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["total_queries","total_mutations","generated_at"],"title":"OverviewMeta"},"PhoneIn":{"properties":{"raw":{"type":"string","title":"Raw"},"type":{"type":"string","enum":["mobile","office","fax"],"title":"Type","default":"mobile"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"e164":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"E164"},"extension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extension"}},"type":"object","required":["raw"],"title":"PhoneIn","description":"A phone number on a v2 write request.\n\n``raw`` accepts any common format; the server normalizes it to E.164.\n``country`` (ISO 3166-1 alpha-2, default ``US``) is honored as the\nparsing region for numbers without a ``+`` prefix. ``e164`` is always\nserver-computed from ``raw`` — caller-supplied values are ignored so\nnormalization cannot be bypassed (``id`` is likewise server-managed and\nnot accepted on input). After validation all fields are populated, so\n``model_dump()`` yields the exact dict shape stored on ``Contact.phones``."},"PhoneOut":{"properties":{"id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Id"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"raw":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"e164":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"E164"},"extension":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Extension"}},"type":"object","title":"PhoneOut","description":"A phone number on a v2 response.\n\nLenient by design: stored dicts predate this surface and were written by\nmultiple paths (GraphQL, UI), so every field is optional and unknown keys\nare ignored."},"PipelineListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/PipelineResponse"},"type":"array","title":"Data"},"pagination":{"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"PipelineListResponse","description":"OpenAPI schema for GET /api/external/v2/pipelines (list envelope)."},"PipelineObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/PipelineResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"PipelineObjectResponse","description":"OpenAPI schema for GET /api/external/v2/pipelines/<id> (object envelope)."},"PipelineResponse":{"properties":{"id":{"type":"integer","title":"Id"},"pipeline_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pipeline Type"},"pipeline_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pipeline Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"owner_account_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Owner Account Id"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"statuses":{"items":{"$ref":"#/components/schemas/PipelineStatusResponse"},"type":"array","title":"Statuses","default":[]}},"type":"object","required":["id","pipeline_type","pipeline_name","description","owner_account_id","order"],"title":"PipelineResponse"},"PipelineStatusResponse":{"properties":{"id":{"type":"integer","title":"Id"},"status":{"type":"string","title":"Status"},"custom_status_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Custom Status Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"order":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Order"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Icon"}},"type":"object","required":["id","status","custom_status_name","description","order","icon"],"title":"PipelineStatusResponse"},"PipelineType":{"type":"string","enum":["Financing","Acquisition","Custom"],"title":"PipelineType"},"PlacementListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/PlacementResponse"},"type":"array","title":"Data"},"pagination":{"additionalProperties":true,"type":"object","title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"PlacementListResponse","description":"OpenAPI schema for GET /api/external/v2/placements (list envelope)."},"PlacementObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/PlacementResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"PlacementObjectResponse","description":"OpenAPI schema for GET /api/external/v2/placements/<id> (object envelope)."},"PlacementResponse":{"properties":{"id":{"type":"integer","title":"Id"},"deal_id":{"type":"integer","title":"Deal Id"},"contact_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Id"},"private_company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Private Company Id"},"lender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lender Name","description":"Lender display name for this placement — the account's own CRM / address-book name for the lender, falling back to the canonical lender (Organization) name when the CRM record is unnamed. Null when no lender is set. Embedded so callers need not resolve private_company_id via a separate lookup. For non-owner viewers of masked placements, this is a stable masked label such as 'Lender A'."},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name","description":"Full name of the lender contact on this placement. Null when no contact is set, or when a non-owner viewer is reading a masked placement."},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"visibility":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Visibility"},"lender_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lender Status"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score"},"lev_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Lev Score"},"outreach_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outreach Source"},"outreach_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outreach Date"},"lender_first_response_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lender First Response Date"},"last_communication_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Communication Date"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","deal_id"],"title":"PlacementResponse"},"PlacementStatus":{"type":"string","enum":["new","sent","lender_reviewing","terms_received","term_sheet_received","executed_ts_in_closing","closed","unresponsive","willing_to_negotiate","lender_passed","archived"],"title":"PlacementStatus"},"PlacementVisibility":{"type":"string","enum":["hidden","masked","shared"],"title":"PlacementVisibility"},"PrepaymentPenalty":{"type":"string","enum":["Step-down","Defeasance","Minimum Interest","Yield Maintenance","Minimum Multiple","Swap Breakage","No Prepayment Penalty","No Ability to Prepay","Flat Fee","Other"],"title":"PrepaymentPenalty"},"PublishedContentResponse":{"properties":{"footer":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Footer"},"doc":{"additionalProperties":true,"type":"object","title":"Doc"},"colorLibrary":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Colorlibrary"},"designLibrary":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Designlibrary"},"fontLibrary":{"anyOf":[{"items":{"additionalProperties":true,"type":"object"},"type":"array"},{"type":"null"}],"title":"Fontlibrary"},"defaultSettings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Defaultsettings"}},"type":"object","title":"PublishedContentResponse"},"PushNotificationAuthResponse":{"properties":{"auth":{"type":"string","title":"Auth"},"user_data":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Data"},"channel_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Channel Data"}},"type":"object","required":["auth"],"title":"PushNotificationAuthResponse"},"QuoteType":{"type":"string","enum":["Guidance","Indication","Soft Quote","Hard Quote","Term Sheet"],"title":"QuoteType"},"RateType":{"type":"string","enum":["Fixed","Floating"],"title":"RateType"},"ReturnInfo":{"properties":{"type":{"type":"string","title":"Type"},"connections":{"items":{"$ref":"#/components/schemas/ConnectionInfo"},"type":"array","title":"Connections"}},"type":"object","required":["type"],"title":"ReturnInfo"},"SchemaDetailsRequest":{"properties":{"operations":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Operations","description":"List of query or mutation names to get details for"},"max_depth":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Depth","description":"Maximum depth for type resolution (capped at 3)","default":3},"include_mutations":{"type":"boolean","title":"Include Mutations","description":"Set to true to allow mutation names in operations list","default":false}},"type":"object","required":["operations"],"title":"SchemaDetailsRequest"},"SchemaDetailsResponse":{"properties":{"operations":{"additionalProperties":true,"type":"object","title":"Operations"},"types":{"additionalProperties":true,"type":"object","title":"Types"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found"},"meta":{"$ref":"#/components/schemas/DetailsMeta"}},"type":"object","required":["operations","types","not_found","meta"],"title":"SchemaDetailsResponse"},"SchemaOverviewResponse":{"properties":{"queries":{"items":{"$ref":"#/components/schemas/OperationOverview"},"type":"array","title":"Queries"},"mutations":{"items":{"$ref":"#/components/schemas/OperationOverview"},"type":"array","title":"Mutations"},"meta":{"$ref":"#/components/schemas/OverviewMeta"}},"type":"object","required":["queries","mutations","meta"],"title":"SchemaOverviewResponse"},"SchemaTypesRequest":{"properties":{"types":{"items":{"type":"string"},"type":"array","maxItems":50,"minItems":1,"title":"Types","description":"List of type names to get details for (e.g., ['PlacementDataDetailsNode', 'SettingsNode'])"},"max_depth":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Max Depth","description":"Maximum depth for nested type resolution (capped at 5)","default":2}},"type":"object","required":["types"],"title":"SchemaTypesRequest"},"SchemaTypesResponse":{"properties":{"types":{"additionalProperties":true,"type":"object","title":"Types"},"not_found":{"items":{"type":"string"},"type":"array","title":"Not Found"},"meta":{"$ref":"#/components/schemas/TypesMeta"}},"type":"object","required":["types","not_found","meta"],"title":"SchemaTypesResponse"},"SearchLendersActionData":{"properties":{"search_id":{"type":"string","title":"Search Id"},"status":{"type":"string","title":"Status"},"deal_id":{"type":"integer","title":"Deal Id"},"message":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Message"}},"type":"object","required":["search_id","status","deal_id"],"title":"SearchLendersActionData","description":"Payload inside the ``data`` envelope for the search-lenders action."},"SearchLendersActionResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/SearchLendersActionData"}},"type":"object","required":["request_id","timestamp","data"],"title":"SearchLendersActionResponse","description":"OpenAPI schema for POST /deals/<id>/actions/search-lenders."},"SearchLendersRequest":{"properties":{},"type":"object","title":"SearchLendersRequest","description":"Request body for POST /deals/<id>/actions/search-lenders.\n\nCurrently empty — clients must send ``Content-Type: application/json``\nwith ``{}``.  Exists to satisfy Rule 5 and to future-proof for optional\nfields such as ``criteria_override``."},"StatusOkResponse":{"properties":{"status":{"type":"string","title":"Status","default":"ok"}},"type":"object","title":"StatusOkResponse"},"SubscriptionSummaryResponse":{"properties":{"type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Type"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"billing_cycle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Billing Cycle"},"end_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"End Date"}},"type":"object","required":["type","status","billing_cycle","end_date"],"title":"SubscriptionSummaryResponse","description":"Subscription line-item on the billing summary.\n\nMirrors the ``subscription`` block returned by ``GET /me`` so that callers\nalready coupled to the /me shape don't need to re-learn the fields."},"SuccessResponse":{"properties":{"success":{"type":"boolean","title":"Success","default":true}},"type":"object","title":"SuccessResponse"},"TeamAccountResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"account_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Account Type"}},"type":"object","required":["id","name","slug","account_type"],"title":"TeamAccountResponse","description":"Identity fields for an account sharing deals with the caller's active account\nvia ``CompanyAssociationType.share_deals_with_parent`` (KTN-6123). No membership\nor profile fields are included — the caller has no membership on a team account.\n\n\"Team account\" is the customer-facing name; the model underneath is a child account."},"TeamAccountsData":{"properties":{"team_accounts":{"items":{"$ref":"#/components/schemas/TeamAccountResponse"},"type":"array","title":"Team Accounts"}},"type":"object","required":["team_accounts"],"title":"TeamAccountsData"},"TeamAccountsResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/TeamAccountsData"}},"type":"object","required":["request_id","timestamp","data"],"title":"TeamAccountsResponse","description":"OpenAPI schema for GET /api/external/v2/me/team-accounts."},"TeamListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/TeamMemberResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"TeamListResponse","description":"OpenAPI schema for GET /api/external/v2/account/team (list envelope)."},"TeamMemberResponse":{"properties":{"id":{"type":"integer","title":"Id"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"}},"type":"object","required":["id","email","first_name","last_name","role","title","photo_url"],"title":"TeamMemberResponse","description":"Team member data shape — used for OpenAPI doc generation."},"TermSheetDetailResponse":{"properties":{"id":{"type":"integer","title":"Id"},"deal_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deal Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"quote_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Type"},"initial_funding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initial Funding"},"total_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Rate","description":"Rate as a percent (e.g. 7.53 = 7.53%). Interpret relative to the term sheet's ``base_rate``: if ``base_rate`` is set, ``total_rate`` is the spread over that base rate; if ``base_rate`` is null or ``'none-fixed'``, ``total_rate`` is the all-in fixed rate."},"base_rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Rate"},"base_rate_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base Rate Value","description":"Base-rate snapshot as a percent. For base-rate quotes, the displayed all-in rate is ``base_rate_value + total_rate`` when both values are known."},"effective_spread":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective Spread","description":"Effective spread as a percent for underwriting and comparison. For base-rate quotes, this normally equals ``total_rate``."},"rate_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Type"},"term":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term"},"io_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Io Period"},"recourse":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recourse"},"max_ltv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv"},"max_ltc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltc"},"origination_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Origination Fee"},"exit_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Fee"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"lender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lender Name","description":"Lender display name for this term sheet. For non-owner viewers of masked placements, this is a stable masked label such as 'Lender A'."},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id","description":"Canonical lender Organization ID. Null for non-owner viewers of masked placements."},"placement_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Placement Id"},"winning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Winning"},"is_visible_to_borrower":{"type":"boolean","title":"Is Visible To Borrower"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"floor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Floor"},"floor_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Floor Type"},"amortization":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amortization"},"extension_one":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension One"},"extension_two":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension Two"},"extension_three":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension Three"},"prepayment_penalty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepayment Penalty"},"prepayment_penalty_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepayment Penalty Details"},"recourse_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recourse Type"},"min_dscr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Dscr"},"min_debt_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Debt Yield"},"good_faith_deposit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Good Faith Deposit"},"ir_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ir Details"},"capital_source_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Capital Source Type"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"}},"type":"object","required":["id","deal_id","title","quote_type","initial_funding","total_rate","base_rate","rate_type","term","io_period","recourse","max_ltv","max_ltc","origination_fee","exit_fee","org_id","placement_id","winning","is_visible_to_borrower"],"title":"TermSheetDetailResponse","description":"Term sheet detail fields — extends summary with additional financial/structural fields."},"TermSheetFloorType":{"type":"string","enum":["base_rate","total_rate"],"title":"TermSheetFloorType"},"TermSheetListResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"items":{"$ref":"#/components/schemas/TermSheetSummaryResponse"},"type":"array","title":"Data"},"pagination":{"anyOf":[{"$ref":"#/components/schemas/CursorPaginationResponse"},{"$ref":"#/components/schemas/OffsetPaginationResponse"}],"title":"Pagination"}},"type":"object","required":["request_id","timestamp","data","pagination"],"title":"TermSheetListResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<deal_id>/term-sheets (list envelope)."},"TermSheetObjectResponse":{"properties":{"request_id":{"type":"string","title":"Request Id"},"timestamp":{"type":"string","title":"Timestamp"},"data":{"$ref":"#/components/schemas/TermSheetDetailResponse"}},"type":"object","required":["request_id","timestamp","data"],"title":"TermSheetObjectResponse","description":"OpenAPI schema for GET /api/external/v2/deals/<deal_id>/term-sheets/<term_sheet_id> (object envelope)."},"TermSheetPaymentMethod":{"type":"string","enum":["Accrued","Partial","Current Pay"],"title":"TermSheetPaymentMethod"},"TermSheetRecourse":{"type":"string","enum":["Personal Recourse","Fund / Corporate Recourse","Non-Recourse"],"title":"TermSheetRecourse"},"TermSheetRecourseType":{"type":"string","enum":["Full","Partial","Burn Off"],"title":"TermSheetRecourseType"},"TermSheetSummaryResponse":{"properties":{"id":{"type":"integer","title":"Id"},"deal_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deal Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"quote_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Quote Type"},"initial_funding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initial Funding"},"total_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Rate","description":"Rate as a percent (e.g. 7.53 = 7.53%). Interpret relative to the term sheet's ``base_rate``: if ``base_rate`` is set, ``total_rate`` is the spread over that base rate; if ``base_rate`` is null or ``'none-fixed'``, ``total_rate`` is the all-in fixed rate."},"base_rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Rate"},"base_rate_value":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Base Rate Value","description":"Base-rate snapshot as a percent. For base-rate quotes, the displayed all-in rate is ``base_rate_value + total_rate`` when both values are known."},"effective_spread":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Effective Spread","description":"Effective spread as a percent for underwriting and comparison. For base-rate quotes, this normally equals ``total_rate``."},"rate_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate Type"},"term":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term"},"io_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Io Period"},"recourse":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recourse"},"max_ltv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv"},"max_ltc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltc"},"origination_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Origination Fee"},"exit_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Fee"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"lender_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Lender Name","description":"Lender display name for this term sheet. For non-owner viewers of masked placements, this is a stable masked label such as 'Lender A'."},"org_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Org Id","description":"Canonical lender Organization ID. Null for non-owner viewers of masked placements."},"placement_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Placement Id"},"winning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Winning"},"is_visible_to_borrower":{"type":"boolean","title":"Is Visible To Borrower"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","deal_id","title","quote_type","initial_funding","total_rate","base_rate","rate_type","term","io_period","recourse","max_ltv","max_ltc","origination_fee","exit_fee","org_id","placement_id","winning","is_visible_to_borrower"],"title":"TermSheetSummaryResponse","description":"Term sheet summary fields — used for the list endpoint."},"TransactionType":{"type":"string","enum":["TBD","Acquisition","Refinance","New Construction"],"title":"TransactionType"},"TypesMeta":{"properties":{"requested_types":{"type":"integer","title":"Requested Types"},"returned_types":{"type":"integer","title":"Returned Types"},"max_depth_used":{"type":"integer","title":"Max Depth Used"},"generated_at":{"type":"string","format":"date-time","title":"Generated At"}},"type":"object","required":["requested_types","returned_types","max_depth_used","generated_at"],"title":"TypesMeta"},"UpdateChecklistTaskRequest":{"properties":{"title":{"anyOf":[{"type":"string","minLength":1},{"type":"null"}],"title":"Title","description":"New task title."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"New description; null clears it."},"status":{"anyOf":[{"type":"string","enum":["to_do","requested","reviewing","updates_needed","approved","cancelled"]},{"type":"null"}],"title":"Status","description":"New workflow status."},"assigned_user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Assigned User Id","description":"New assignee user id; null unassigns."},"due_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Due Date","description":"New due date (YYYY-MM-DD); null clears it."},"is_completed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Completed","description":"Set false to reopen a completed task."},"document_type_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Document Type Ids","description":"Replace the expected document type ids."}},"type":"object","title":"UpdateChecklistTaskRequest","description":"Body for PATCH /api/external/v2/checklist-tasks/<task_id>.\n\nPartial update: only fields present in the request are changed. For nullable\nfields, sending ``null`` clears the value; omitting a field leaves it\nunchanged. Use ``is_completed=false`` to reopen a completed task — to mark a\ntask done, prefer POST /checklist-tasks/<task_id>/complete (idempotent, and\nit also approves attached files)."},"UpdateCompanyRequest":{"properties":{"name":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Name"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"}},"type":"object","title":"UpdateCompanyRequest","description":"PATCH body for updating a company."},"UpdateContactRequest":{"properties":{"first_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Email"},"title":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Title"},"department":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Department"},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address"},"address2":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address2"},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":2},{"type":"null"}],"title":"State"},"zip":{"anyOf":[{"type":"string","maxLength":5},{"type":"null"}],"title":"Zip"},"linkedin_url":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Linkedin Url"},"photo_url":{"anyOf":[{"type":"string","maxLength":1024},{"type":"null"}],"title":"Photo Url"},"phones":{"anyOf":[{"items":{"$ref":"#/components/schemas/PhoneIn"},"type":"array"},{"type":"null"}],"title":"Phones"},"is_primary":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Primary"}},"type":"object","title":"UpdateContactRequest","description":"PATCH body for updating a contact.\n\n``email`` can only be set once — changing an existing email is rejected\nwith 409 (it would orphan the contact's Person link). ``is_primary: true``\nunsets the previous primary contact for the same company."},"UpdateDealIndexFactRequest":{"properties":{"sot_id":{"type":"string","minLength":1,"pattern":"^[A-Za-z]+:[A-Za-z0-9:_-]+$","title":"Sot Id","description":"Prefixed SOT id from index/search results."},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Value","description":"Direct user-supplied replacement value."},"observation_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Observation Id","description":"Existing observation to promote as the SOT value."},"order":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Order","description":"Per-row display order for multi-instance metrics."}},"type":"object","required":["sot_id"],"title":"UpdateDealIndexFactRequest","description":"PATCH /api/external/v2/deals/<id>/index/facts request body.\n\nUpdates one editable SOT value. For user-supplied metric values, prefer\nPOST /index/facts even when replacing an existing value. Use PATCH only\nwhen targeting a specific sot_id or promoting a specific observation_id."},"UpdateDealPropertyInput":{"properties":{"property_id":{"type":"integer","exclusiveMinimum":0.0,"title":"Property Id","description":"ID of an existing property on this deal — required to identify what to update."},"address":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Address","description":"Street address."},"city":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"City"},"state":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"State","description":"State/province (e.g. 'NY', 'CA')."},"zip":{"anyOf":[{"type":"string","maxLength":255},{"type":"null"}],"title":"Zip"},"asset_type_id":{"anyOf":[{"type":"integer","exclusiveMinimum":0.0},{"type":"null"}],"title":"Asset Type Id","description":"Asset subtype ID — discover via get_asset_types."},"units":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Units","description":"Unit count (e.g. apartment units)."},"square_footage":{"anyOf":[{"type":"number","minimum":0.0},{"type":"null"}],"title":"Square Footage","description":"Rentable/leasable area in square feet."},"year_built":{"anyOf":[{"type":"integer","minimum":0.0},{"type":"null"}],"title":"Year Built"}},"type":"object","required":["property_id"],"title":"UpdateDealPropertyInput","description":"One entry on ``UpdateDealRequest.update_properties`` — a partial update of\nan existing DealProperty by ``property_id``.\n\nUnlike ``CreateDealPropertyInput`` there's no link-XOR-create rule: every\nentry identifies an existing property by ``property_id`` and supplies the\nfields to change. Omitted fields are left untouched (JSON Merge Patch\nsemantics, matching ``UpdateDealRequest`` itself).\n\nPublic field names follow the v2 read serializer; the v2 endpoint renames\nthem to the controller's historical names before dispatch:\n\n- ``asset_type_id``   → ``asset_subtype_id``\n- ``square_footage``  → ``area``"},"UpdateDealRequest":{"properties":{"title":{"anyOf":[{"type":"string","maxLength":255,"minLength":1},{"type":"null"}],"title":"Title","description":"Deal title"},"loan_amount":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Loan Amount","description":"Requested loan amount"},"priority":{"anyOf":[{"$ref":"#/components/schemas/DealPriority"},{"type":"null"}],"description":"Deal priority enum name: no_priority, urgent, high, medium, or low."},"loan_type":{"anyOf":[{"$ref":"#/components/schemas/LoanType"},{"type":"null"}],"description":"Loan type enum name"},"transaction_type":{"anyOf":[{"$ref":"#/components/schemas/TransactionType"},{"type":"null"}],"description":"Transaction type enum name"},"business_plan":{"anyOf":[{"$ref":"#/components/schemas/BusinessPlanType"},{"type":"null"}],"description":"Business plan enum name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Free-text deal description"},"estimated_close_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Estimated Close Date","description":"Estimated close date (ISO 8601 date string, e.g. 2025-12-31)"},"sponsor_private_company_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Sponsor Private Company Id","description":"ID of the sponsor company (a PrivateCompany) to link to this deal. Must belong to the caller's account."},"deal_financials":{"anyOf":[{"$ref":"#/components/schemas/CreateDealFinancialsInput"},{"type":"null"}],"description":"Optional canonical deal-level financial inputs. Only supplied fields are changed: purchase_price, estimated_value, total_cost, total_cost_basis, land_cost."},"add_properties":{"anyOf":[{"items":{"$ref":"#/components/schemas/CreateDealPropertyInput"},"type":"array","maxItems":25},{"type":"null"}],"title":"Add Properties","description":"Properties to attach to this deal. Same entry shape as POST /deals — either a link (property_id) or an inline-create (address + optional structural fields). Up to 25 entries per request (request-shape bound, matching POST /deals — not a product cap on properties per deal)."},"update_properties":{"anyOf":[{"items":{"$ref":"#/components/schemas/UpdateDealPropertyInput"},"type":"array","maxItems":25},{"type":"null"}],"title":"Update Properties","description":"Partial updates to properties already on this deal. Each entry's property_id must currently be on the deal (else 404). Omitted fields are left untouched."},"remove_property_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array","maxItems":25},{"type":"null"}],"title":"Remove Property Ids","description":"Property IDs to detach from this deal. Each must currently be on the deal (else 404). Removal is a hard delete of the DealProperty join row; the underlying Property record is preserved. The deal must keep at least one property after the operation (else 400)."}},"type":"object","title":"UpdateDealRequest","description":"PATCH /api/external/v2/deals/<id> request body.\n\nAll fields are optional — only the fields included in the request body\nare updated (partial update / JSON Merge Patch semantics).\n\nNote: ``pipeline_ids`` is intentionally absent.  The ``update_deal``\ncontroller uses ``deal_pipelines`` dicts for pipeline manipulation, which\nis a different shape.  Use POST /deals/<id>/pipeline to move a deal into\na pipeline.\n\nProperty edits are explicit sub-operations (``add_properties``,\n``update_properties``, ``remove_property_ids``) rather than a single\n``properties`` list with replace-all semantics. The GraphQL surface uses\nreplace-all today, but for an LLM-facing wire surface a single typo on a\nmulti-property portfolio deal would silently nuke whichever entries got\ndropped from the payload — same shape of footgun MCP-114 closed for the\ncreate path's IDOR concern, expressed as data loss instead of\nunauthorized read."},"UpdateNoteRequest":{"properties":{"text":{"type":"string","minLength":1,"title":"Text","description":"Replacement note text. Simple HTML formatting is preserved; dangerous markup (scripts, javascript: URLs) is stripped server-side."}},"type":"object","required":["text"],"title":"UpdateNoteRequest","description":"PATCH /api/external/v2/{contacts|deals|placements|companies|checklist-tasks}/<id>/notes/<note_id> request body.\n\nEdit is text-only, mirroring CreateNoteRequest's minimal surface: note\ntype, visibility, and purpose stay server-managed and are never editable\nby an external caller."},"UpdatePlacementRequest":{"properties":{"status":{"anyOf":[{"$ref":"#/components/schemas/PlacementStatus"},{"type":"null"}],"description":"Placement status enum name. Use 'archived' to soft-remove. Valid values: new, sent, lender_reviewing, terms_received, term_sheet_received, executed_ts_in_closing, closed, unresponsive, willing_to_negotiate, lender_passed, archived."},"visibility":{"anyOf":[{"$ref":"#/components/schemas/PlacementVisibility"},{"type":"null"}],"description":"Placement visibility enum name (e.g. shared, masked, hidden)."},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","description":"Free-text description / per-lender note."},"score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Score","description":"Manual relevance score (0-100)."},"outreach_date":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Outreach Date","description":"Timestamp the lender was first reached out to (ISO 8601)."},"lender_status":{"anyOf":[{"$ref":"#/components/schemas/LenderStatus"},{"type":"null"}],"description":"Lender status enum name."}},"type":"object","title":"UpdatePlacementRequest","description":"PATCH /api/external/v2/placements/<id> request body.\n\nOnly the fields present in the request body are updated (partial update /\nJSON Merge Patch semantics).  ``deal_id``, ``private_company_id``, and\n``contact_id`` are intentionally absent — a placement's deal, lender, and\ncontact are set at create-time and cannot be reassigned (mirrors F-016 on\n``UpdateContactRequest`` and the GraphQL ``UpdatePlacementInput`` shape).\nTo \"move\" a placement to a different lender or contact, archive the\nexisting placement (``status='archived'``) and create a new one.\nSet ``status='archived'`` to remove a placement from active views — this\nis the convention used by the rest of the app\n(see ``Placement.NON_ACTIVE_PLACEMENT_STATUSES``)."},"UpdateTermSheetRequest":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title","description":"Free-text title of the term sheet."},"winning":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Winning","description":"Mark/unmark as the winning term sheet on the deal."},"total_rate":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Total Rate","description":"Rate as a percent (e.g. 7.53 = 7.53%). Interpret relative to the term sheet's ``base_rate``: if ``base_rate`` is set, ``total_rate`` is the spread over that base rate; if ``base_rate`` is null or ``'none-fixed'``, ``total_rate`` is the all-in fixed rate. On PATCH, omitting ``base_rate`` leaves the existing base-rate setting unchanged. To convert an existing base-rate quote to fixed-rate semantics, send ``base_rate`` as null or ``'none-fixed'`` with the new ``total_rate``."},"initial_funding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Initial Funding","description":"Provided loan amount."},"quote_type":{"anyOf":[{"$ref":"#/components/schemas/QuoteType"},{"type":"null"}],"description":"Quote type enum name."},"rate_type":{"anyOf":[{"$ref":"#/components/schemas/RateType"},{"type":"null"}],"description":"Rate type enum name (fixed or floating)."},"base_rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Base Rate","description":"Base rate identifier — accepts ``BaseRateNames`` member names (e.g. ``treasury_y5``) or the matching display value (e.g. ``Treasury 5-Yr``).  Use ``'none-fixed'`` for fixed-rate quotes.  When this is a real base-rate identifier, send ``total_rate`` as the spread over that base rate.  On PATCH, omitting ``base_rate`` leaves the existing base-rate setting unchanged; send null or ``'none-fixed'`` to clear it.  Unknown names return 422 with the full list of valid options."},"max_ltv":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltv","description":"Maximum loan-to-value ratio as a percent."},"max_ltc":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Max Ltc","description":"Maximum loan-to-cost ratio as a percent."},"additional_funding":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Additional Funding","description":"Additional funding amount."},"floor":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Floor","description":"Rate floor as a percent."},"floor_type":{"anyOf":[{"$ref":"#/components/schemas/TermSheetFloorType"},{"type":"null"}],"description":"Floor type enum name (TermSheetFloorType): 'base_rate' or 'total_rate'."},"term":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Term","description":"Term length in months."},"amortization":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amortization","description":"Amortization period in months."},"io_period":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Io Period","description":"Interest-only period in months."},"extension_one":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension One","description":"First extension period in months."},"extension_two":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension Two","description":"Second extension period in months."},"extension_three":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Extension Three","description":"Third extension period in months."},"recourse":{"anyOf":[{"$ref":"#/components/schemas/TermSheetRecourse"},{"type":"null"}],"description":"Recourse category enum name."},"recourse_type":{"anyOf":[{"$ref":"#/components/schemas/TermSheetRecourseType"},{"type":"null"}],"description":"Recourse type enum name."},"prepayment_penalty":{"anyOf":[{"$ref":"#/components/schemas/PrepaymentPenalty"},{"type":"null"}],"description":"Prepayment penalty enum name."},"prepayment_penalty_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prepayment Penalty Details","description":"Free-text prepayment penalty details."},"min_dscr":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Dscr","description":"Minimum debt service coverage ratio as a percent."},"min_debt_yield":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Min Debt Yield","description":"Minimum debt yield as a percent."},"origination_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Origination Fee","description":"Origination fee as a percent."},"extension_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Extension Fee","description":"Extension fee as a percent."},"exit_fee":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Exit Fee","description":"Exit fee as a percent."},"good_faith_deposit":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Good Faith Deposit","description":"Good-faith deposit amount."},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes","description":"Free-text notes on the term sheet."},"ir_details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ir Details","description":"Free-text interest rate details."},"is_visible_to_borrower":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Visible To Borrower","description":"Whether the term sheet is visible to the borrower."},"payment_method":{"anyOf":[{"$ref":"#/components/schemas/TermSheetPaymentMethod"},{"type":"null"}],"description":"Payment method enum name."},"capital_source_type":{"anyOf":[{"$ref":"#/components/schemas/LenderProgramCapitalSourceTypeV2"},{"type":"null"}],"description":"Capital source type enum name."}},"type":"object","title":"UpdateTermSheetRequest","description":"PATCH /api/external/v2/deals/<deal_id>/term-sheets/<term_sheet_id> request body.\n\nOnly the fields present in the request body are updated (partial update /\nJSON Merge Patch semantics).  ``placement_id`` and ``deal_id`` are\nintentionally absent (F-016-style locked-FK carve-out — to move a term\nsheet to a different placement, soft-delete and re-create).  ``competitive``\n/  ``competitive_off_reason`` and AI extraction state are also out of scope\nfor this endpoint; use the GraphQL surface for those advanced flows."},"UserInfoResponse":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"}},"type":"object","title":"UserInfoResponse"},"UserObjectResponse":{"properties":{"data":{"$ref":"#/components/schemas/UserResponse"}},"type":"object","required":["data"],"title":"UserObjectResponse"},"UserResponse":{"properties":{"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Uuid"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"photo_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Photo Url"},"info":{"$ref":"#/components/schemas/UserInfoResponse"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"phone_number":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone Number"},"feature_flags":{"items":{"type":"string"},"type":"array","title":"Feature Flags"},"inserted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Inserted At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","uuid","email","first_name","last_name","photo_url","info","role","phone_number"],"title":"UserResponse"},"UserServiceRolesResponse":{"properties":{"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Id"},"roles":{"additionalProperties":{"items":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"array"},"type":"object","title":"Roles"}},"type":"object","required":["email","id","roles"],"title":"UserServiceRolesResponse"},"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"},"ZapierForceSendRequest":{"properties":{"record_id":{"type":"integer","title":"Record Id"},"operation":{"type":"string","title":"Operation"},"table_name":{"type":"string","title":"Table Name"},"account_ids":{"items":{"type":"integer"},"type":"array","minItems":1,"title":"Account Ids"},"old_data":{"additionalProperties":true,"type":"object","title":"Old Data"},"new_data":{"additionalProperties":true,"type":"object","title":"New Data"},"diff_data":{"additionalProperties":true,"type":"object","title":"Diff Data"},"context":{"additionalProperties":true,"type":"object","title":"Context"},"webhook_uuid":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Webhook Uuid"}},"type":"object","required":["record_id","operation","table_name","account_ids"],"title":"ZapierForceSendRequest"},"ZapierPreviewPayloadRequest":{"properties":{"record_id":{"type":"integer","title":"Record Id"},"operation":{"type":"string","title":"Operation"},"table_name":{"type":"string","title":"Table Name"},"old_data":{"additionalProperties":true,"type":"object","title":"Old Data"},"new_data":{"additionalProperties":true,"type":"object","title":"New Data"},"diff_data":{"additionalProperties":true,"type":"object","title":"Diff Data"},"context":{"additionalProperties":true,"type":"object","title":"Context"}},"type":"object","required":["record_id","operation","table_name"],"title":"ZapierPreviewPayloadRequest"},"ZapierResourceActionRequest":{"properties":{"resource_type":{"type":"string","title":"Resource Type"},"resource_action":{"type":"string","title":"Resource Action"},"resource_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"string"}],"title":"Resource Data"}},"type":"object","required":["resource_type","resource_action","resource_data"],"title":"ZapierResourceActionRequest"},"ZapierSampleDataRequest":{"properties":{"target_resource":{"type":"string","title":"Target Resource","default":"all"},"target_action":{"type":"string","title":"Target Action","default":"all"},"service_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Action"}},"type":"object","title":"ZapierSampleDataRequest"},"ZapierSubscribeRequest":{"properties":{"hookUrl":{"type":"string","title":"Hookurl"},"target_resource":{"type":"string","title":"Target Resource","default":"all"},"target_action":{"type":"string","title":"Target Action","default":"all"},"service_action":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Service Action"}},"type":"object","required":["hookUrl"],"title":"ZapierSubscribeRequest"},"ZapierUnsubscribeRequest":{"properties":{"uuid":{"type":"string","title":"Uuid"}},"type":"object","required":["uuid"],"title":"ZapierUnsubscribeRequest"},"_DeletedData":{"properties":{"deleted":{"type":"boolean","title":"Deleted"}},"type":"object","required":["deleted"],"title":"_DeletedData"}}}}