{"openapi":"3.1.0","info":{"title":"Bizclaw API","description":"AI-powered SaaS Tool Intelligence Platform","version":"2.0.0"},"paths":{"/api/auth/magic-link":{"post":{"tags":["auth"],"summary":"Send Magic Link","description":"Send a magic link email. For 'verify' and 'crawl' purposes,\nthe email domain must match the website domain.","operationId":"send_magic_link_api_auth_magic_link_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/verify-magic":{"get":{"tags":["auth"],"summary":"Verify Magic Link","description":"Verify a magic link token. Called when user clicks the email link.","operationId":"verify_magic_link_api_auth_verify_magic_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}},{"name":"purpose","in":"query","required":false,"schema":{"type":"string","default":"login","title":"Purpose"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login User","description":"Send a magic link for login/signup (single entry flow).","operationId":"login_user_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MagicLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","description":"Return the current user's profile and a fresh token.","operationId":"get_me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/auth/cleanup-tokens":{"delete":{"tags":["auth"],"summary":"Cleanup Expired Tokens","description":"Remove expired magic tokens.","operationId":"cleanup_expired_tokens_api_auth_cleanup_tokens_delete","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/login":{"post":{"tags":["admin-auth"],"summary":"Admin Login","operationId":"admin_login_api_admin_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminLoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/magic-link/request":{"post":{"tags":["admin-auth"],"summary":"Request Admin Magic Link","operationId":"request_admin_magic_link_api_admin_magic_link_request_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminMagicLinkRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/magic-link/verify":{"get":{"tags":["admin-auth"],"summary":"Verify Admin Magic Link","operationId":"verify_admin_magic_link_api_admin_magic_link_verify_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/me":{"get":{"tags":["admin-auth"],"summary":"Admin Me","operationId":"admin_me_api_admin_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/admin/logout":{"post":{"tags":["admin-auth"],"summary":"Admin Logout","operationId":"admin_logout_api_admin_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/payments/me":{"get":{"tags":["payments"],"summary":"Get My Billing","operationId":"get_my_billing_api_payments_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/payments/billing-portal":{"post":{"tags":["payments"],"summary":"Open Billing Portal","operationId":"open_billing_portal_api_payments_billing_portal_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/payments/cancel-subscription":{"post":{"tags":["payments"],"summary":"Cancel My Subscription","description":"Let the signed-in subscriber cancel at the end of their paid period.","operationId":"cancel_my_subscription_api_payments_cancel_subscription_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/payments/promo/validate":{"post":{"tags":["payments"],"summary":"Promo Validate","operationId":"promo_validate_api_payments_promo_validate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoValidateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/admin/promo-codes":{"get":{"tags":["payments"],"summary":"Admin List Promo Codes","operationId":"admin_list_promo_codes_api_payments_admin_promo_codes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["payments"],"summary":"Admin Create Promo Code","operationId":"admin_create_promo_code_api_payments_admin_promo_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/payments/admin/promo-codes/{promo_id}":{"patch":{"tags":["payments"],"summary":"Admin Update Promo Code","operationId":"admin_update_promo_code_api_payments_admin_promo_codes__promo_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"promo_id","in":"path","required":true,"schema":{"type":"integer","title":"Promo Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/create-checkout":{"post":{"tags":["payments"],"summary":"Create Checkout","operationId":"create_checkout_api_payments_create_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/payments/success":{"get":{"tags":["payments"],"summary":"Payment Success","operationId":"payment_success_api_payments_success_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/payments/webhook":{"post":{"tags":["payments"],"summary":"Payment Webhook","operationId":"payment_webhook_api_payments_webhook_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}},"head":{"tags":["payments"],"summary":"Payment Webhook","operationId":"payment_webhook_api_payments_webhook_head","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/tools":{"get":{"tags":["tools"],"summary":"List Tools","description":"List all tools with optional search and category filter using Meilisearch.","operationId":"list_tools_api_tools_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search query","title":"Q"},"description":"Search query"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by category","title":"Category"},"description":"Filter by category"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":1000,"minimum":1,"default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/recent":{"get":{"tags":["tools"],"summary":"List Recent Tools","description":"Return the most recently added companies ordered by created_at DESC.","operationId":"list_recent_tools_api_tools_recent_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":8,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/featured":{"get":{"tags":["tools"],"summary":"List Featured Tools","description":"Return featured companies selected in admin panel.","operationId":"list_featured_tools_api_tools_featured_get","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":24,"minimum":1,"default":6,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/my-tools":{"get":{"tags":["tools"],"summary":"Get My Tools","description":"Fetch tools owned by the currently authenticated user.","operationId":"get_my_tools_api_tools_my_tools_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ToolResponse"},"type":"array","title":"Response Get My Tools Api Tools My Tools Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/tools/{tool_id}/ai-edit":{"post":{"tags":["tools"],"summary":"Ai Edit Tool Endpoint","description":"AI-powered profile editor. Owner sends a natural language instruction, AI returns changes.","operationId":"ai_edit_tool_endpoint_api_tools__tool_id__ai_edit_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/{tool_id}/ai-edit/undo":{"post":{"tags":["tools"],"summary":"Undo Ai Edit","description":"Undo the last AI Edit by restoring the saved snapshot.","operationId":"undo_ai_edit_api_tools__tool_id__ai_edit_undo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/lookup-by-website":{"get":{"tags":["tools"],"summary":"Admin Lookup Tool By Website","description":"Admin helper: check whether a tool already exists for a given website URL/domain.","operationId":"admin_lookup_tool_by_website_api_tools_admin_lookup_by_website_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"website_url","in":"query","required":true,"schema":{"type":"string","minLength":1,"title":"Website Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/{tool_id}":{"get":{"tags":["tools"],"summary":"Get Tool","description":"Get a single tool by ID with all details.","operationId":"get_tool_api_tools__tool_id__get","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["tools"],"summary":"Update Tool","description":"Update a tool. Only the owner or an admin can perform this.","operationId":"update_tool_api_tools__tool_id__put","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Tool Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tools"],"summary":"Delete Tool","description":"Delete a tool by ID. Requires admin or tool owner.","operationId":"delete_tool_api_tools__tool_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/{tool_id}/edit-data":{"get":{"tags":["tools"],"summary":"Get Tool Edit Data","description":"Get tool data for edit page. Only owner or admin can access.","operationId":"get_tool_edit_data_api_tools__tool_id__edit_data_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ToolDetailResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/{tool_id}/logo":{"post":{"tags":["tools"],"summary":"Upload Logo","description":"Upload a logo image for a company. Only owner or admin.","operationId":"upload_logo_api_tools__tool_id__logo_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_logo_api_tools__tool_id__logo_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/companies":{"get":{"tags":["tools"],"summary":"Get Admin Companies","description":"Admin only: list all companies with owner info (paginated).","operationId":"get_admin_companies_api_tools_admin_companies_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"description":"Max results per page","default":50,"title":"Limit"},"description":"Max results per page"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Offset for pagination","default":0,"title":"Offset"},"description":"Offset for pagination"},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Keyset cursor","title":"Cursor"},"description":"Keyset cursor"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by company name","title":"Q"},"description":"Search by company name"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/companies/{tool_id}/verify":{"post":{"tags":["tools"],"summary":"Verify Company","description":"Admin only: Verify a company.","operationId":"verify_company_api_tools_admin_companies__tool_id__verify_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/companies/{tool_id}/unverify":{"post":{"tags":["tools"],"summary":"Unverify Company","description":"Admin only: Unverify a company.","operationId":"unverify_company_api_tools_admin_companies__tool_id__unverify_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/companies/{tool_id}/subscription":{"post":{"tags":["tools"],"summary":"Update Subscription","description":"Admin only: Update subscription.","operationId":"update_subscription_api_tools_admin_companies__tool_id__subscription_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/companies/{tool_id}/featured":{"post":{"tags":["tools"],"summary":"Update Featured Company","description":"Admin only: set featured flag for a company.","operationId":"update_featured_company_api_tools_admin_companies__tool_id__featured_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/reindex":{"post":{"tags":["tools"],"summary":"Admin Reindex Tools","description":"Admin only: rebuild search indexes for all tools from DB source-of-truth.","operationId":"admin_reindex_tools_api_tools_admin_reindex_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/tools/admin/agents":{"get":{"tags":["tools"],"summary":"Get Admin Agents","description":"Admin only: list all registered agents with proposal counts.","operationId":"get_admin_agents_api_tools_admin_agents_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Keyset cursor","title":"Cursor"},"description":"Keyset cursor"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by name or email","title":"Q"},"description":"Search by name or email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/agents/{agent_id}/deactivate":{"post":{"tags":["tools"],"summary":"Admin Deactivate Agent","description":"Admin only: deactivate an agent account without deleting history.","operationId":"admin_deactivate_agent_api_tools_admin_agents__agent_id__deactivate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/agents/{agent_id}/reactivate":{"post":{"tags":["tools"],"summary":"Admin Reactivate Agent","description":"Admin only: reactivate a previously deactivated agent account.","operationId":"admin_reactivate_agent_api_tools_admin_agents__agent_id__reactivate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/admin/agents/{agent_id}/proposals":{"get":{"tags":["tools"],"summary":"Get Admin Agent Proposals","description":"Admin only: list all proposals for a specific agent.","operationId":"get_admin_agent_proposals_api_tools_admin_agents__agent_id__proposals_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"agent_id","in":"path","required":true,"schema":{"type":"string","title":"Agent Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Include soft-deleted proposals","default":false,"title":"Include Deleted"},"description":"Include soft-deleted proposals"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/tools/{tool_id}/insights":{"get":{"tags":["tools"],"summary":"Get Tool Insights","description":"Get aggregated Audience Insights (Unanswered Queries) for a specific tool.\nOnly the owner or an admin can access this.\nUses SQL GROUP BY instead of loading all rows into Python.","operationId":"get_tool_insights_api_tools__tool_id__insights_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":200,"minimum":1,"description":"Max insight categories","default":50,"title":"Limit"},"description":"Max insight categories"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["tools"],"summary":"Clear Tool Insight Category","description":"Clear (delete) all unanswered queries for a specific category.\nUsed when the owner has addressed the missing info or wants to dismiss it.","operationId":"clear_tool_insight_category_api_tools__tool_id__insights_delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}},{"name":"category","in":"query","required":true,"schema":{"type":"string","title":"Category"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/crawl":{"post":{"tags":["crawl"],"summary":"Submit Crawl","description":"Submit a URL for crawling. Crawls the website, extracts data,\nanalyzes with LLM, saves to DB, and returns the tool profile.","operationId":"submit_crawl_api_crawl_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"track_job","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Track Job"}},{"name":"adaptive_retry","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Adaptive Retry"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/crawl/start":{"post":{"tags":["crawl"],"summary":"Start Async Crawl","description":"Start crawl in background and return immediately.\nUsed by magic-link flow after email verification.","operationId":"start_async_crawl_api_crawl_start_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/crawl/admin":{"post":{"tags":["crawl"],"summary":"Submit Admin Crawl","description":"Admin-only crawl endpoint used by admin panel.","operationId":"submit_admin_crawl_api_crawl_admin_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CrawlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/crawl/admin/stats":{"get":{"tags":["crawl"],"summary":"Get Admin Crawl Stats","description":"Admin-only crawl KPI summary for the last N hours.","operationId":"get_admin_crawl_stats_api_crawl_admin_stats_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"hours","in":"query","required":false,"schema":{"type":"integer","maximum":168,"minimum":1,"default":24,"title":"Hours"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/crawl/admin/recent":{"get":{"tags":["crawl"],"summary":"Get Admin Recent Crawls","description":"Admin-only list of recent crawl jobs for live monitoring.","operationId":"get_admin_recent_crawls_api_crawl_admin_recent_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":500,"minimum":1,"default":100,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/crawl/admin/recent/{job_id}":{"get":{"tags":["crawl"],"summary":"Get Admin Recent Crawl Detail","description":"Admin-only crawl job detail with raw error and event timeline.","operationId":"get_admin_recent_crawl_detail_api_crawl_admin_recent__job_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/crawl/my-latest":{"get":{"tags":["crawl"],"summary":"Get My Latest Crawl State","description":"Return current user's latest crawl registration + job state.","operationId":"get_my_latest_crawl_state_api_crawl_my_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/crawl/{job_id}":{"get":{"tags":["crawl"],"summary":"Get Crawl Status","description":"Check the status of a crawl job.","operationId":"get_crawl_status_api_crawl__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scans/tool/{tool_id}/latest":{"get":{"tags":["scans"],"summary":"Get Tool Latest Scan","operationId":"get_tool_latest_scan_api_scans_tool__tool_id__latest_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scans/tool/{tool_id}/history":{"get":{"tags":["scans"],"summary":"Get Tool Scan History","operationId":"get_tool_scan_history_api_scans_tool__tool_id__history_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scans/tool/{tool_id}/start":{"post":{"tags":["scans"],"summary":"Start Manual Scan","operationId":"start_manual_scan_api_scans_tool__tool_id__start_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scans/tool/{tool_id}/generate-files":{"post":{"tags":["scans"],"summary":"Generate Agent Files Bundle","operationId":"generate_agent_files_bundle_api_scans_tool__tool_id__generate_files_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}},{"name":"scan_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Scan Id"}}],"requestBody":{"content":{"application/json":{"schema":{"anyOf":[{"type":"object","additionalProperties":true},{"type":"null"}],"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/scans/download/{token}":{"get":{"tags":["scans"],"summary":"Download Scan Artifact","operationId":"download_scan_artifact_api_scans_download__token__get","parameters":[{"name":"token","in":"path","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ask":{"post":{"tags":["ask"],"summary":"Ask Ai","description":"Handles user queries via Hybrid Search (Qdrant + Meilisearch).","operationId":"ask_ai_api_ask_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/widget/company/{tool_id}":{"get":{"tags":["widget"],"summary":"Get Company Widget Config","operationId":"get_company_widget_config_api_widget_company__tool_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["widget"],"summary":"Save Company Widget Config","operationId":"save_company_widget_config_api_widget_company__tool_id__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/widget/public/{widget_public_id}/config":{"get":{"tags":["widget"],"summary":"Get Public Widget Config","operationId":"get_public_widget_config_api_widget_public__widget_public_id__config_get","parameters":[{"name":"widget_public_id","in":"path","required":true,"schema":{"type":"string","title":"Widget Public Id"}},{"name":"site_origin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Origin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/widget/public/{widget_public_id}/sources":{"get":{"tags":["widget"],"summary":"Get Public Widget Sources","operationId":"get_public_widget_sources_api_widget_public__widget_public_id__sources_get","parameters":[{"name":"widget_public_id","in":"path","required":true,"schema":{"type":"string","title":"Widget Public Id"}},{"name":"site_origin","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Site Origin"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/widget/public/{widget_public_id}/chat":{"post":{"tags":["widget"],"summary":"Public Widget Chat","operationId":"public_widget_chat_api_widget_public__widget_public_id__chat_post","parameters":[{"name":"widget_public_id","in":"path","required":true,"schema":{"type":"string","title":"Widget Public Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp/company/{tool_id}":{"post":{"tags":["company-mcp"],"summary":"Company Mcp","operationId":"company_mcp_mcp_company__tool_id__post","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/mcp/company/{tool_id}/SKILL.md":{"get":{"tags":["company-mcp"],"summary":"Company Mcp Skill","description":"Publish an agent-readable skill for this hosted company MCP.","operationId":"company_mcp_skill_mcp_company__tool_id__SKILL_md_get","parameters":[{"name":"tool_id","in":"path","required":true,"schema":{"type":"string","title":"Tool Id"}}],"responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/bizclaw.md":{"get":{"tags":["ai-discovery"],"summary":"Bizclaw Md","description":"AI agent skill/discovery file in Markdown format.","operationId":"bizclaw_md_bizclaw_md_get","responses":{"200":{"description":"Successful Response","content":{"text/plain":{"schema":{"type":"string"}}}}}}},"/llms.txt":{"get":{"tags":["ai-discovery"],"summary":"Llms Txt Redirect","description":"Legacy redirect — llms.txt -> bizclaw.md","operationId":"llms_txt_redirect_llms_txt_get","responses":{"301":{"description":"Successful Response"}}}},"/.well-known/ucp":{"get":{"tags":["ai-discovery"],"summary":"Ucp Profile","description":"Universal Commerce Protocol profile for BizClaw agent discovery.","operationId":"ucp_profile__well_known_ucp_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/.well-known/ai-plugin.json":{"get":{"tags":["ai-discovery"],"summary":"Ai Plugin Json","description":"OpenAI plugin manifest for AI agent discovery.","operationId":"ai_plugin_json__well_known_ai_plugin_json_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/v1/agent/register":{"post":{"tags":["agent-api"],"summary":"Register Agent","description":"Register a new AI agent and receive an API key.\nNo authentication required. Each email can only have one agent.\nSave the API key â€” it cannot be retrieved later. Use /rotate-key to get a new one.","operationId":"register_agent_api_v1_agent_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentRegisterRequest"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/me":{"get":{"tags":["agent-api"],"summary":"Get Agent Info","description":"Get current agent info (requires API key).","operationId":"get_agent_info_api_v1_agent_me_get","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["agent-api"],"summary":"Update Agent Info","description":"Update the current agent's name and/or email.\nRequires API key authentication. Only provided fields are updated.","operationId":"update_agent_info_api_v1_agent_me_put","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AgentUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["agent-api"],"summary":"Deactivate Agent","description":"Deactivate the current agent.\nAll proposals remain in DB but no new requests can be made.\nRequires API key authentication.","operationId":"deactivate_agent_api_v1_agent_me_delete","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/rotate-key":{"post":{"tags":["agent-api"],"summary":"Rotate Api Key","description":"Generate a new API key for the current agent.\nThe old key is immediately invalidated.\nRequires the current API key in X-API-Key header.","operationId":"rotate_api_key_api_v1_agent_rotate_key_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/proposals":{"post":{"tags":["agent-api"],"summary":"Create Proposal Endpoint","description":"Create a proposal to a verified company on behalf of a customer.\nRequires API key authentication.","operationId":"create_proposal_endpoint_api_v1_agent_proposals_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["agent-api"],"summary":"List My Proposals","description":"List all proposals created by the current agent.\nRequires API key authentication.","operationId":"list_my_proposals_api_v1_agent_proposals_get","parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by status: pending, approved, rejected, responded","title":"Status"},"description":"Filter by status: pending, approved, rejected, responded"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/proposals/batch":{"post":{"tags":["agent-api"],"summary":"Create Batch Proposals Endpoint","description":"Create proposals to multiple companies at once.\nRequires API key authentication.","operationId":"create_batch_proposals_endpoint_api_v1_agent_proposals_batch_post","parameters":[{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchProposalCreateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/proposals/{proposal_id}":{"get":{"tags":["agent-api"],"summary":"Get Proposal","description":"Get a specific proposal by ID.\nRequires API key authentication. Only returns proposals owned by the current agent.","operationId":"get_proposal_api_v1_agent_proposals__proposal_id__get","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/proposals/{proposal_id}/reply":{"post":{"tags":["agent-api"],"summary":"Reply To Proposal","description":"Reply to a company's response on a proposal (ping-pong negotiation).\nResets proposal status to 'pending' so the company sees the new message.","operationId":"reply_to_proposal_api_v1_agent_proposals__proposal_id__reply_post","parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}},{"name":"X-API-Key","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Api-Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalReplyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/companies":{"get":{"tags":["agent-api"],"summary":"Search Companies","description":"Search companies with agent-optimized responses.\nUses hybrid search (semantic + keyword) for natural language queries.\nReturns structured JSON with clean text (no HTML).","operationId":"search_companies_api_v1_agent_companies_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"description":"Natural language search query","title":"Q"},"description":"Natural language search query"},{"name":"category","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by business category","title":"Category"},"description":"Filter by business category"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by country","title":"Country"},"description":"Filter by country"},{"name":"city","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by city","title":"City"},"description":"Filter by city"},{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry","title":"Industry"},"description":"Filter by industry"},{"name":"service_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by service type: remote, local, nationwide, hybrid","title":"Service Type"},"description":"Filter by service type: remote, local, nationwide, hybrid"},{"name":"is_verified","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Filter by verification status","title":"Is Verified"},"description":"Filter by verification status"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"description":"Max results to return","default":10,"title":"Limit"},"description":"Max results to return"},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"Number of results to skip for pagination","default":0,"title":"Offset"},"description":"Number of results to skip for pagination"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/companies/{company_id}":{"get":{"tags":["agent-api"],"summary":"Get Company","description":"Get full company profile in agent-optimized format.\nReturns structured data with clean text (no HTML).","operationId":"get_company_api_v1_agent_companies__company_id__get","parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"string","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/companies/by-url/{website_url}":{"get":{"tags":["agent-api"],"summary":"Get Company By Url","description":"Look up a company by its website URL.\nPass the URL as a path parameter (e.g. /api/v1/agent/companies/by-url/example.com).","operationId":"get_company_by_url_api_v1_agent_companies_by_url__website_url__get","parameters":[{"name":"website_url","in":"path","required":true,"schema":{"type":"string","title":"Website Url"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/ask":{"post":{"tags":["agent-api"],"summary":"Ask About Companies","description":"Ask a natural language question about companies.\nReturns AI-powered recommendations with matched company profiles.","operationId":"ask_about_companies_api_v1_agent_ask_post","parameters":[{"name":"question","in":"query","required":true,"schema":{"type":"string","minLength":1,"maxLength":2000,"description":"Natural language question","title":"Question"},"description":"Natural language question"},{"name":"context_company_ids","in":"query","required":false,"schema":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"description":"Company IDs for follow-up context","title":"Context Company Ids"},"description":"Company IDs for follow-up context"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/agent/categories":{"get":{"tags":["agent-api"],"summary":"List Categories","description":"List all available business categories.\nUse these category names to filter search results.","operationId":"list_categories_api_v1_agent_categories_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/proposals":{"get":{"tags":["proposals-dashboard"],"summary":"List Company Proposals","description":"List all proposals for companies owned by the current user.\nRequires dashboard JWT auth. Supports pagination, status filter, and search.","operationId":"list_company_proposals_api_proposals_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: pending, approved, rejected, responded","title":"Status"},"description":"Filter: pending, approved, rejected, responded"},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":10,"title":"Limit"}},{"name":"offset","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Offset"}},{"name":"include_deleted","in":"query","required":false,"schema":{"type":"boolean","description":"Include soft-deleted proposals","default":false,"title":"Include Deleted"},"description":"Include soft-deleted proposals"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Search by customer name or email","title":"Q"},"description":"Search by customer name or email"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proposals/{proposal_id}/respond":{"post":{"tags":["proposals-dashboard"],"summary":"Respond To Proposal Endpoint","description":"Respond to a proposal (approve, reject, or send a custom response).\nOnly the company owner can respond.","operationId":"respond_to_proposal_endpoint_api_proposals__proposal_id__respond_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProposalResponseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proposals/{proposal_id}":{"delete":{"tags":["proposals-dashboard"],"summary":"Delete Proposal Endpoint","description":"Delete a proposal. Only the company owner can delete proposals belonging to their company.\nRequires dashboard JWT auth.","operationId":"delete_proposal_endpoint_api_proposals__proposal_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/proposals/{proposal_id}/restore":{"post":{"tags":["proposals-dashboard"],"summary":"Restore Proposal Endpoint","description":"Restore a previously deleted proposal.\nOnly the company owner can restore proposals belonging to their company.","operationId":"restore_proposal_endpoint_api_proposals__proposal_id__restore_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"proposal_id","in":"path","required":true,"schema":{"type":"string","title":"Proposal Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"summary":"Health Check","operationId":"health_check_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/public-config":{"get":{"summary":"Public Config","description":"Expose non-secret runtime values used by public pages.","operationId":"public_config_api_public_config_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/health/deep":{"get":{"summary":"Deep Health Check","operationId":"deep_health_check_api_health_deep_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/mcp":{"get":{"summary":"Mcp Landing","operationId":"mcp_landing_mcp_get","responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}}}}}},"components":{"schemas":{"AdminLoginRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"AdminLoginRequest"},"AdminMagicLinkRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"}},"type":"object","required":["email"],"title":"AdminMagicLinkRequest"},"AgentRegisterRequest":{"properties":{"name":{"type":"string","title":"Name"},"owner_email":{"type":"string","format":"email","title":"Owner Email"}},"type":"object","required":["name","owner_email"],"title":"AgentRegisterRequest"},"AgentUpdateRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"owner_email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Owner Email"}},"type":"object","title":"AgentUpdateRequest"},"AskRequest":{"properties":{"question":{"type":"string","title":"Question"},"context_tools":{"items":{},"type":"array","title":"Context Tools"},"history":{"items":{},"type":"array","title":"History"}},"type":"object","required":["question"],"title":"AskRequest"},"BatchProposalCreateRequest":{"properties":{"company_ids":{"items":{"type":"string"},"type":"array","title":"Company Ids"},"customer_email":{"type":"string","format":"email","title":"Customer Email"},"customer_name":{"type":"string","title":"Customer Name"},"description":{"type":"string","title":"Description"},"type":{"type":"string","title":"Type","default":"custom"}},"type":"object","required":["company_ids","customer_email","customer_name","description"],"title":"BatchProposalCreateRequest"},"Body_upload_logo_api_tools__tool_id__logo_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_logo_api_tools__tool_id__logo_post"},"CheckoutRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"plan":{"type":"string","enum":["monthly","annual"],"title":"Plan","default":"annual"},"promo_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Promo Code"}},"type":"object","required":["email"],"title":"CheckoutRequest"},"CrawlRequest":{"properties":{"url":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","title":"Url"}},"type":"object","required":["url"],"title":"CrawlRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MagicLinkRequest":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"website_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website Url"},"purpose":{"type":"string","title":"Purpose","default":"login"}},"type":"object","required":["email"],"title":"MagicLinkRequest"},"PromoCreateRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":3,"title":"Code"},"discountPercent":{"type":"integer","maximum":100.0,"minimum":1.0,"title":"Discountpercent"},"maxUses":{"type":"integer","minimum":1.0,"title":"Maxuses"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Expiresat"},"isActive":{"type":"boolean","title":"Isactive","default":true}},"type":"object","required":["code","discountPercent","maxUses"],"title":"PromoCreateRequest"},"PromoUpdateRequest":{"properties":{"maxUses":{"anyOf":[{"type":"integer","minimum":1.0},{"type":"null"}],"title":"Maxuses"},"expiresAt":{"anyOf":[{"type":"string","format":"date-time"},{"type":"string"},{"type":"null"}],"title":"Expiresat","default":"__skip__"},"discountPercent":{"anyOf":[{"type":"integer","maximum":100.0,"minimum":1.0},{"type":"null"}],"title":"Discountpercent"},"isActive":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Isactive"}},"type":"object","title":"PromoUpdateRequest"},"PromoValidateRequest":{"properties":{"code":{"type":"string","maxLength":64,"minLength":3,"title":"Code"}},"type":"object","required":["code"],"title":"PromoValidateRequest"},"ProposalCreateRequest":{"properties":{"company_id":{"type":"string","title":"Company Id"},"customer_email":{"type":"string","format":"email","title":"Customer Email"},"customer_name":{"type":"string","title":"Customer Name"},"description":{"type":"string","title":"Description"},"type":{"type":"string","title":"Type","default":"custom"}},"type":"object","required":["company_id","customer_email","customer_name","description"],"title":"ProposalCreateRequest"},"ProposalReplyRequest":{"properties":{"message":{"type":"string","title":"Message"}},"type":"object","required":["message"],"title":"ProposalReplyRequest"},"ProposalResponseRequest":{"properties":{"status":{"type":"string","title":"Status"},"response":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Response"}},"type":"object","required":["status"],"title":"ProposalResponseRequest"},"ToolDetailResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"websiteUrl":{"type":"string","title":"Websiteurl"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"descriptionShort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descriptionshort"},"descriptionLong":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descriptionlong"},"targetAudience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetaudience"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"legalName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legalname"},"copyrightYear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Copyrightyear"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logourl"},"email":{"items":{"type":"string"},"type":"array","title":"Email","default":[]},"phone":{"items":{"type":"string"},"type":"array","title":"Phone","default":[]},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"socialLinks":{"additionalProperties":{"type":"string"},"type":"object","title":"Sociallinks","default":{}},"legalPages":{"additionalProperties":{"type":"string"},"type":"object","title":"Legalpages","default":{}},"foundedYear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Foundedyear"},"pricingDetails":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricingdetails"},"keyOfferings":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyofferings"},"sectionVisibility":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Sectionvisibility","default":{}},"customSections":{"additionalProperties":true,"type":"object","title":"Customsections","default":{}},"isVerified":{"type":"boolean","title":"Isverified","default":false},"isFeatured":{"type":"boolean","title":"Isfeatured","default":false},"serviceType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Servicetype"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"branches":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Branches","default":[]},"clarificationQuestions":{"items":{"type":"string"},"type":"array","title":"Clarificationquestions","default":[]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"features":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Features","default":[]},"useCases":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Usecases","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["id","name","websiteUrl"],"title":"ToolDetailResponse"},"ToolResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"websiteUrl":{"type":"string","title":"Websiteurl"},"domain":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Domain"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"descriptionShort":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descriptionshort"},"descriptionLong":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Descriptionlong"},"targetAudience":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targetaudience"},"country":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Language"},"legalName":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Legalname"},"copyrightYear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Copyrightyear"},"logoUrl":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Logourl"},"email":{"items":{"type":"string"},"type":"array","title":"Email","default":[]},"phone":{"items":{"type":"string"},"type":"array","title":"Phone","default":[]},"address":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Address"},"socialLinks":{"additionalProperties":{"type":"string"},"type":"object","title":"Sociallinks","default":{}},"legalPages":{"additionalProperties":{"type":"string"},"type":"object","title":"Legalpages","default":{}},"foundedYear":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Foundedyear"},"pricingDetails":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pricingdetails"},"keyOfferings":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Keyofferings"},"sectionVisibility":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Sectionvisibility","default":{}},"customSections":{"additionalProperties":true,"type":"object","title":"Customsections","default":{}},"isVerified":{"type":"boolean","title":"Isverified","default":false},"isFeatured":{"type":"boolean","title":"Isfeatured","default":false},"serviceType":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Servicetype"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"branches":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Branches","default":[]},"clarificationQuestions":{"items":{"type":"string"},"type":"array","title":"Clarificationquestions","default":[]},"createdAt":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Createdat"},"features":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Features","default":[]},"useCases":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Usecases","default":[]},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]}},"type":"object","required":["id","name","websiteUrl"],"title":"ToolResponse"},"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"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/auth/login"}}}}}}