{"openapi":"3.1.0","info":{"title":"Career Master","description":"Career Master API — AI career strategy assistant.\n\nAll endpoints require JWT Bearer authentication unless noted otherwise.\nRegister at https://careermaster.duckdns.org/app/ to obtain a token.\n\nMachine-readable site overview: https://careermaster.duckdns.org/llms.txt","version":"1.0.0"},"paths":{"/api/v1/auth/jwt/login":{"post":{"tags":["Auth","Auth"],"summary":"Auth:Jwt.Login","operationId":"auth_jwt_login_api_v1_auth_jwt_login_post","requestBody":{"content":{"application/x-www-form-urlencoded":{"schema":{"$ref":"#/components/schemas/Body_auth_jwt_login_api_v1_auth_jwt_login_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BearerResponse"},"example":{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiOTIyMWZmYzktNjQwZi00MzcyLTg2ZDMtY2U2NDJjYmE1NjAzIiwiYXVkIjoiZmFzdGFwaS11c2VyczphdXRoIiwiZXhwIjoxNTcxNTA0MTkzfQ.M10bjOe45I5Ncu_uXvOmVV8QxnL-nZfcH96U90JaocI","token_type":"bearer"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorModel"},"examples":{"LOGIN_BAD_CREDENTIALS":{"summary":"Bad credentials or the user is inactive.","value":{"detail":"LOGIN_BAD_CREDENTIALS"}},"LOGIN_USER_NOT_VERIFIED":{"summary":"The user is not verified.","value":{"detail":"LOGIN_USER_NOT_VERIFIED"}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/jwt/logout":{"post":{"tags":["Auth","Auth"],"summary":"Auth:Jwt.Logout","operationId":"auth_jwt_logout_api_v1_auth_jwt_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"401":{"description":"Missing token or inactive user."}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/auth/register":{"post":{"tags":["Auth","Auth"],"summary":"Register:Register","operationId":"register_register_api_v1_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserCreate"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorModel"},"examples":{"REGISTER_USER_ALREADY_EXISTS":{"summary":"A user with this email already exists.","value":{"detail":"REGISTER_USER_ALREADY_EXISTS"}},"REGISTER_INVALID_PASSWORD":{"summary":"Password validation failed.","value":{"detail":{"code":"REGISTER_INVALID_PASSWORD","reason":"Password should beat least 3 characters"}}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/users/me":{"get":{"tags":["Auth","Auth"],"summary":"Users:Current User","operationId":"users_current_user_api_v1_auth_users_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"401":{"description":"Missing token or inactive user."}},"security":[{"OAuth2PasswordBearer":[]}]},"patch":{"tags":["Auth","Auth"],"summary":"Users:Patch Current User","operationId":"users_patch_current_user_api_v1_auth_users_me_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"401":{"description":"Missing token or inactive user."},"400":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorModel"},"examples":{"UPDATE_USER_EMAIL_ALREADY_EXISTS":{"summary":"A user with this email already exists.","value":{"detail":"UPDATE_USER_EMAIL_ALREADY_EXISTS"}},"UPDATE_USER_INVALID_PASSWORD":{"summary":"Password validation failed.","value":{"detail":{"code":"UPDATE_USER_INVALID_PASSWORD","reason":"Password should beat least 3 characters"}}}}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/auth/users/{id}":{"get":{"tags":["Auth","Auth"],"summary":"Users:User","operationId":"users_user_api_v1_auth_users__id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"401":{"description":"Missing token or inactive user."},"403":{"description":"Not a superuser."},"404":{"description":"The user does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Auth","Auth"],"summary":"Users:Patch User","operationId":"users_patch_user_api_v1_auth_users__id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserRead"}}}},"401":{"description":"Missing token or inactive user."},"403":{"description":"Not a superuser."},"404":{"description":"The user does not exist."},"400":{"content":{"application/json":{"examples":{"UPDATE_USER_EMAIL_ALREADY_EXISTS":{"summary":"A user with this email already exists.","value":{"detail":"UPDATE_USER_EMAIL_ALREADY_EXISTS"}},"UPDATE_USER_INVALID_PASSWORD":{"summary":"Password validation failed.","value":{"detail":{"code":"UPDATE_USER_INVALID_PASSWORD","reason":"Password should beat least 3 characters"}}}},"schema":{"$ref":"#/components/schemas/ErrorModel"}}},"description":"Bad Request"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Auth","Auth"],"summary":"Users:Delete User","operationId":"users_delete_user_api_v1_auth_users__id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string","title":"Id"}}],"responses":{"204":{"description":"Successful Response"},"401":{"description":"Missing token or inactive user."},"403":{"description":"Not a superuser."},"404":{"description":"The user does not exist."},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/auth/me":{"get":{"tags":["Auth","Auth"],"summary":"Get My Profile","description":"Returns the current user's id, email, display_name, and tier.","operationId":"get_my_profile_api_v1_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/atomic-store/modules":{"get":{"tags":["Atomic Store"],"summary":"List Modules","description":"Lists all atomic modules from the user's YAML library.","operationId":"list_modules_api_v1_atomic_store_modules_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/AtomicModule"},"type":"array","title":"Response List Modules Api V1 Atomic Store Modules Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Atomic Store"],"summary":"Create Module","operationId":"create_module_api_v1_atomic_store_modules_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AtomicModule"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Create Module Api V1 Atomic Store Modules Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/atomic-store/modules/{module_id}":{"get":{"tags":["Atomic Store"],"summary":"Get Module","operationId":"get_module_api_v1_atomic_store_modules__module_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"module_id","in":"path","required":true,"schema":{"type":"string","title":"Module Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AtomicModule"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Atomic Store"],"summary":"Retire Module","description":"Retire (archive) a module: move YAML to archive/, remove from vector store.\nThe module is preserved in archive for manual recovery.","operationId":"retire_module_api_v1_atomic_store_modules__module_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"module_id","in":"path","required":true,"schema":{"type":"string","title":"Module Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/atomic-store/search":{"post":{"tags":["Atomic Store"],"summary":"Search Modules","operationId":"search_modules_api_v1_atomic_store_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchQuery"}}},"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/v1/atomic-store/sync":{"post":{"tags":["Atomic Store"],"summary":"Sync Vector Store","operationId":"sync_vector_store_api_v1_atomic_store_sync_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/probe/sessions/metrics":{"get":{"tags":["The Probe"],"summary":"Get Session Metrics","description":"Aggregate session metrics for threshold tuning.\nSuperuser only. window_days controls the lookback period.","operationId":"get_session_metrics_api_v1_probe_sessions_metrics_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"window_days","in":"query","required":false,"schema":{"type":"integer","default":30,"title":"Window Days"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/probe/sessions/active":{"get":{"tags":["The Probe"],"summary":"Get Active Session","description":"Return the user's active (in-progress) session, or 404 if none exists.","operationId":"get_active_session_api_v1_probe_sessions_active_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/probe/sessions":{"post":{"tags":["The Probe"],"summary":"Start Elicitation","description":"Starts a new elicitation session.\nuser_id is derived from the JWT token — no need to pass it manually.","operationId":"start_elicitation_api_v1_probe_sessions_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_start_elicitation_api_v1_probe_sessions_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/probe/sessions/{session_id}/messages":{"post":{"tags":["The Probe"],"summary":"Send Message","operationId":"send_message_api_v1_probe_sessions__session_id__messages_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MessageInput"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/probe/sessions/{session_id}/resume":{"post":{"tags":["The Probe"],"summary":"Resume Session","description":"Fetch current session state so the frontend can resume an interrupted interview.","operationId":"resume_session_api_v1_probe_sessions__session_id__resume_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/probe/sessions/{session_id}/abandon":{"post":{"tags":["The Probe"],"summary":"Abandon Session","description":"Abandon an in-progress session. Already-satisfied gaps are still crystallised.","operationId":"abandon_session_api_v1_probe_sessions__session_id__abandon_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/probe/sessions/{session_id}/end":{"post":{"tags":["The Probe"],"summary":"End Session","description":"User-initiated early end. Crystallises satisfied gaps; updates completion timestamp.","operationId":"end_session_api_v1_probe_sessions__session_id__end_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/probe/sessions/{session_id}":{"get":{"tags":["The Probe"],"summary":"Get Session","operationId":"get_session_api_v1_probe_sessions__session_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"session_id","in":"path","required":true,"schema":{"type":"string","title":"Session Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/strategist/analyze":{"post":{"tags":["The Strategist"],"summary":"Analyze And Match","description":"Parses JD and matches to the most relevant atomic experiences.","operationId":"analyze_and_match_api_v1_strategist_analyze_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobInput"}}},"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/v1/assembly/assemble":{"post":{"tags":["Assembly Engine"],"summary":"Assemble Document","operationId":"assemble_document_api_v1_assembly_assemble_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentAssemblyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Assemble Document Api V1 Assembly Assemble Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/assembly/cover-letter":{"post":{"tags":["Assembly Engine"],"summary":"Generate Cover Letter","operationId":"generate_cover_letter_api_v1_assembly_cover_letter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverLetterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Generate Cover Letter Api V1 Assembly Cover Letter Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/assembly/evaluate":{"post":{"tags":["Assembly Engine"],"summary":"Evaluate Document","description":"LLM-based deep quality evaluation (Layer 2) — semantic coherence,\npain-point alignment, evidence density. Called on demand, not inline.","operationId":"evaluate_document_api_v1_assembly_evaluate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EvaluateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Evaluate Document Api V1 Assembly Evaluate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/assembly/attack":{"post":{"tags":["Assembly Engine"],"summary":"Attack Module","description":"Legacy endpoint — prefer /api/v1/adversary/attack.","operationId":"attack_module_api_v1_assembly_attack_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Module Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Attack Module Api V1 Assembly Attack Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/campaigns":{"get":{"tags":["Campaigns"],"summary":"List Campaigns","operationId":"list_campaigns_api_v1_campaigns_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/Campaign"},"type":"array","title":"Response List Campaigns Api V1 Campaigns Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Campaigns"],"summary":"Create Campaign","operationId":"create_campaign_api_v1_campaigns_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCampaignRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/campaigns/{campaign_id}":{"get":{"tags":["Campaigns"],"summary":"Get Campaign","operationId":"get_campaign_api_v1_campaigns__campaign_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["Campaigns"],"summary":"Update Campaign","operationId":"update_campaign_api_v1_campaigns__campaign_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCampaignRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Campaign"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Campaigns"],"summary":"Delete Campaign","operationId":"delete_campaign_api_v1_campaigns__campaign_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Delete Campaign Api V1 Campaigns  Campaign Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/status":{"patch":{"tags":["Campaigns"],"summary":"Update Status","operationId":"update_status_api_v1_campaigns__campaign_id__status_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__campaigns__UpdateStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Update Status Api V1 Campaigns  Campaign Id  Status Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/metrics":{"patch":{"tags":["Campaigns"],"summary":"Update Metrics","operationId":"update_metrics_api_v1_campaigns__campaign_id__metrics_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMetricRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Update Metrics Api V1 Campaigns  Campaign Id  Metrics Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/campaigns/{campaign_id}/document-feedback":{"patch":{"tags":["Campaigns"],"summary":"Update Document Feedback","description":"Record whether a generated document (resume / cover letter) was helpful —\ncloses the loop from document quality back to user-reported outcomes.","operationId":"update_document_feedback_api_v1_campaigns__campaign_id__document_feedback_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"campaign_id","in":"path","required":true,"schema":{"type":"string","title":"Campaign Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DocumentFeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":{"type":"string"},"title":"Response Update Document Feedback Api V1 Campaigns  Campaign Id  Document Feedback Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/adversary/attack":{"post":{"tags":["The Adversary"],"summary":"Attack Module","description":"Adversarial attack on a given atomic module.\nReturns logical gaps, killer questions, defense rating, and upgraded notes.\nDoes NOT write to YAML — use /harden for that.","operationId":"attack_module_api_v1_adversary_attack_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Module Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Attack Module Api V1 Adversary Attack Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/adversary/harden":{"post":{"tags":["The Adversary"],"summary":"Harden Module","description":"Attack + write upgraded adversarial_notes back to the user's YAML library.\nReturns the attack result with a 'saved' flag.","operationId":"harden_module_api_v1_adversary_harden_post","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Module Data"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Harden Module Api V1 Adversary Harden Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/render/resume":{"post":{"tags":["Document Renderer"],"summary":"Render resume/memo as DOCX","description":"Converts LLM-generated text into a formatted DOCX file for download.\n- Track A → Diagnostic Memo (诊断备忘录)\n- Track B → Achievement Bullets (简历成就条目)","operationId":"render_resume_api_v1_render_resume_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderResumeRequest"}}},"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/v1/render/cover-letter":{"post":{"tags":["Document Renderer"],"summary":"Render cover letter as DOCX","description":"Converts LLM-generated cover letter text into a formatted DOCX file for download.","operationId":"render_cover_letter_api_v1_render_cover_letter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RenderCoverLetterRequest"}}},"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/v1/radar/auto-search":{"post":{"tags":["Market Radar"],"summary":"Launch P6 aggregator pipeline (async — returns task_id immediately)","description":"Launches the P6-A aggregator pipeline in the background and returns a task_id\nimmediately.  Poll GET /auto-search/status/{task_id} to track progress.\nTask records are persisted in the DB — visible after server restarts.","operationId":"auto_search_api_v1_radar_auto_search_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoSearchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoSearchTaskResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/radar/auto-search/status/{task_id}":{"get":{"tags":["Market Radar"],"summary":"Poll auto-search task status","operationId":"auto_search_status_api_v1_radar_auto_search_status__task_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"task_id","in":"path","required":true,"schema":{"type":"string","title":"Task Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoSearchStatusResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/radar/screen":{"post":{"tags":["Market Radar"],"summary":"Screen a job lead","operationId":"screen_job_lead_api_v1_radar_screen_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScreenRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/radar/leads":{"get":{"tags":["Market Radar"],"summary":"List all job leads (sorted by fit)","operationId":"list_leads_api_v1_radar_leads_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/JobLead"},"type":"array","title":"Response List Leads Api V1 Radar Leads Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/radar/leads/clear":{"post":{"tags":["Market Radar"],"summary":"Clear all job leads","operationId":"clear_all_leads_api_v1_radar_leads_clear_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Clear All Leads Api V1 Radar Leads Clear Post"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/radar/leads/rerank":{"get":{"tags":["Market Radar"],"summary":"LLM re-rank job leads (Layer 3)","description":"Runs the LLM re-ranker over the stored leads. Expensive — call sparingly.\nEach lead in the response includes a 'recommendation' field with LLM reasoning.","operationId":"rerank_leads_api_v1_radar_leads_rerank_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/JobLead"},"type":"array","title":"Response Rerank Leads Api V1 Radar Leads Rerank Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/radar/leads/{lead_id}":{"get":{"tags":["Market Radar"],"summary":"Get a job lead by ID","operationId":"get_lead_api_v1_radar_leads__lead_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobLead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/radar/leads/{lead_id}/status":{"patch":{"tags":["Market Radar"],"summary":"Update job lead status","operationId":"update_lead_status_api_v1_radar_leads__lead_id__status_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__radar__UpdateStatusRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Update Lead Status Api V1 Radar Leads  Lead Id  Status Patch"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/profile/personality":{"get":{"tags":["Profile"],"summary":"Get Personality Profile","description":"Return the current user's personality profile. 404 if no profile exists yet.","operationId":"get_personality_profile_api_v1_profile_personality_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityProfileResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Profile"],"summary":"Upload Personality Report","description":"Parse a raw personality report (MBTI / DISC / Big Five narrative) and persist\nthe structured profile, culture tag weights, and dealbreaker rules.\nRe-submitting replaces the previous profile.","operationId":"upload_personality_report_api_v1_profile_personality_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UploadReportRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/profile/personality/upload":{"post":{"tags":["Profile"],"summary":"Upload Personality Report File","description":"Same as POST /personality, but accepts a file (.txt / .docx / .pdf) instead\nof raw text. The file's text is extracted and processed identically.","operationId":"upload_personality_report_file_api_v1_profile_personality_upload_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_personality_report_file_api_v1_profile_personality_upload_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/profile/tags":{"get":{"tags":["Profile"],"summary":"Get User Tag Weights","description":"Return the current user's culture tag weights with tag metadata.\nReturns [] if no weights have been generated yet (not a 404).","operationId":"get_user_tag_weights_api_v1_profile_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/TagWeightResponse"},"type":"array","title":"Response Get User Tag Weights Api V1 Profile Tags Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/profile/personality/niches":{"patch":{"tags":["Profile"],"summary":"Update target industry niches","description":"Set or overwrite the user's target industry niches (list of industry tag strings).\nCreates a minimal profile record if none exists yet.","operationId":"update_target_niches_api_v1_profile_personality_niches_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNichesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PersonalityProfileResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/profile/history":{"get":{"tags":["Profile"],"summary":"Profile version history","description":"P8-C: Return the last 20 profile versions (most recent first).\nEach version represents a snapshot taken immediately before the profile was updated.","operationId":"get_profile_history_api_v1_profile_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/ProfileVersionResponse"},"type":"array","title":"Response Get Profile History Api V1 Profile History Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/profile/recommend-directions":{"post":{"tags":["Profile"],"summary":"Recommend job directions","description":"Based on the user's atomic module library (ability) and personality profile (culture),\nrecommend 3-5 job directions where they are likely to get hired AND thrive.\nReturns [] if insufficient data rather than an error.","operationId":"recommend_directions_api_v1_profile_recommend_directions_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/DirectionItem"},"type":"array","title":"Response Recommend Directions Api V1 Profile Recommend Directions Post"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/profile/search-preferences":{"get":{"tags":["Profile"],"summary":"Get search preferences","description":"P10 P5 (D7): return the user's server-side search preferences (empty lists if unset).","operationId":"get_search_preferences_api_v1_profile_search_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferencesResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"put":{"tags":["Profile"],"summary":"Update search preferences","description":"P10 P5 (D7): upsert the user's server-side search preferences. These feed\nSearchStrategistService.generate_plan() as explicit_preferences (highest\npriority, ahead of P8 feedback-learned and personality-derived fallbacks).\n\nMarks the active SearchPlan stale on change, so the next Auto Search\nlazily regenerates it (D3/D5).","operationId":"update_search_preferences_api_v1_profile_search_preferences_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSearchPreferencesRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchPreferencesResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/channels":{"get":{"tags":["Channels"],"summary":"List channels","operationId":"list_channels_api_v1_channels_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by industry tag","title":"Industry"},"description":"Filter by industry tag"},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by country code","title":"Country"},"description":"Filter by country code"},{"name":"province","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter by province code","title":"Province"},"description":"Filter by province code"},{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChannelOut"},"title":"Response List Channels Api V1 Channels Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["Channels"],"summary":"Add a channel manually","operationId":"add_channel_api_v1_channels_post","security":[{"OAuth2PasswordBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddChannelRequest"}}}},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/{channel_id}":{"patch":{"tags":["Channels"],"summary":"Update a channel","operationId":"update_channel_api_v1_channels__channel_id__patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"integer","title":"Channel Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChannelRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChannelOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["Channels"],"summary":"Remove a channel","operationId":"delete_channel_api_v1_channels__channel_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"channel_id","in":"path","required":true,"schema":{"type":"integer","title":"Channel Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Channel Api V1 Channels  Channel Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/discover":{"post":{"tags":["Channels"],"summary":"Discover channels for industries × location","description":"Uses Tavily Search + LLM to find channels matching the given industries and\nlocation.  Discovered channels are inserted with is_active=False for review.\ncoverage_log is updated after each run.","operationId":"discover_channels_api_v1_channels_discover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__channels__DiscoverRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Discover Channels Api V1 Channels Discover Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/channels/coverage":{"get":{"tags":["Channels"],"summary":"List coverage log (freshness matrix)","operationId":"list_coverage_api_v1_channels_coverage_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"industry","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"}},{"name":"country","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CoverageLogOut"},"title":"Response List Coverage Api V1 Channels Coverage Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/channels/industries":{"get":{"tags":["Channels"],"summary":"List industry reference table","operationId":"list_industries_api_v1_channels_industries_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"active_only","in":"query","required":false,"schema":{"type":"boolean","default":true,"title":"Active Only"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/IndustryOut"},"title":"Response List Industries Api V1 Channels Industries Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/discover":{"post":{"tags":["Companies"],"summary":"Trigger SME discovery","description":"Trigger all configured SME discovery services.  Runs synchronously and\nreturns counts of newly inserted companies.","operationId":"discover_api_v1_companies_discover_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/app__api__v1__companies__DiscoverRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscoverResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/companies/":{"get":{"tags":["Companies"],"summary":"List companies","operationId":"list_companies_api_v1_companies__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"source","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"}},{"name":"verified","in":"query","required":false,"schema":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Verified"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyOut"},"title":"Response List Companies Api V1 Companies  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/recommend":{"get":{"tags":["Companies"],"summary":"Recommend companies to watch","description":"Return top verified candidates sorted by score for user to pick from.","operationId":"recommend_to_watch_api_v1_companies_recommend_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CompanyOut"},"title":"Response Recommend To Watch Api V1 Companies Recommend Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/watch":{"get":{"tags":["Companies"],"summary":"Get watch list","operationId":"get_watch_list_api_v1_companies_watch_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/WatchedCompanyOut"},"type":"array","title":"Response Get Watch List Api V1 Companies Watch Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]},"post":{"tags":["Companies"],"summary":"Add company to watch list","operationId":"add_to_watch_api_v1_companies_watch_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/WatchedCompanyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/companies/watch/{company_id}":{"delete":{"tags":["Companies"],"summary":"Remove company from watch list","operationId":"remove_from_watch_api_v1_companies_watch__company_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Remove From Watch Api V1 Companies Watch  Company Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/watch/monitor-jobs":{"post":{"tags":["Companies"],"summary":"Check watched companies for new jobs (D3)","operationId":"monitor_jobs_api_v1_companies_watch_monitor_jobs_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Monitor Jobs Api V1 Companies Watch Monitor Jobs Post"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/companies/watch/monitor-signals":{"post":{"tags":["Companies"],"summary":"Fetch business signals for watched companies (D4)","operationId":"monitor_signals_api_v1_companies_watch_monitor_signals_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":{"type":"string"},"type":"object","title":"Response Monitor Signals Api V1 Companies Watch Monitor Signals Post"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/companies/outreach/generate":{"post":{"tags":["Companies"],"summary":"Generate outreach records for top candidates (E4)","operationId":"generate_outreach_api_v1_companies_outreach_generate_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Generate Outreach Api V1 Companies Outreach Generate Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/outreach/{outreach_id}/find-contact":{"post":{"tags":["Companies"],"summary":"Find direct-line contact and generate personalised LinkedIn messages","description":"Triggers ContactFinder for the given outreach record:\n  1. Searches for the direct hiring manager at the target company\n  2. Generates a LinkedIn connection note (≤280 chars) + follow-up message\n  3. Updates the record in-place and returns the full OutreachOut\n\nposition_families should reflect the candidate's target role at this\ncompany (e.g. [\"research analyst\", \"associate\"]).  If omitted the\nsystem infers from the company's industry.","operationId":"find_contact_api_v1_companies_outreach__outreach_id__find_contact_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"outreach_id","in":"path","required":true,"schema":{"type":"integer","title":"Outreach Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindContactRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/outreach":{"get":{"tags":["Companies"],"summary":"List outreach records","operationId":"list_outreach_api_v1_companies_outreach_get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/OutreachOut"},"title":"Response List Outreach Api V1 Companies Outreach Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/outreach/{outreach_id}/status":{"patch":{"tags":["Companies"],"summary":"Update outreach status","operationId":"update_outreach_status_api_v1_companies_outreach__outreach_id__status_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"outreach_id","in":"path","required":true,"schema":{"type":"integer","title":"Outreach Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachStatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OutreachOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/outreach/{outreach_id}":{"delete":{"tags":["Companies"],"summary":"Delete an outreach record","operationId":"delete_outreach_api_v1_companies_outreach__outreach_id__delete","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"outreach_id","in":"path","required":true,"schema":{"type":"integer","title":"Outreach Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Delete Outreach Api V1 Companies Outreach  Outreach Id  Delete"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/{company_id}":{"get":{"tags":["Companies"],"summary":"Get a company","operationId":"get_company_api_v1_companies__company_id__get","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/{company_id}/verify":{"post":{"tags":["Companies"],"summary":"Verify a company","operationId":"verify_company_api_v1_companies__company_id__verify_post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/companies/{company_id}/status":{"patch":{"tags":["Companies"],"summary":"Update company status","operationId":"update_status_api_v1_companies__company_id__status_patch","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"company_id","in":"path","required":true,"schema":{"type":"integer","title":"Company Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyOut"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/search-plan/generate":{"post":{"tags":["Search Plan"],"summary":"Generate a new SearchPlan for the current user","description":"Calls the Strategist LLM (Gemini 2.5 Pro or configured fallback) to\ngenerate a personalised SearchPlan from the user's profile and campaigns.\n\nThis call is synchronous and may take 30-90 seconds for Gemini.\nThe previous active plan is automatically deactivated on success.","operationId":"generate_plan_api_v1_search_plan_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratePlanRequest","default":{"trigger_reason":"manual","target_location":"Canada"}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/search-plan/current":{"get":{"tags":["Search Plan"],"summary":"Get the current active SearchPlan","description":"Return the most-recent active SearchPlan, or 404 if none has been generated.","operationId":"get_current_plan_api_v1_search_plan_current_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/search-plan/history":{"get":{"tags":["Search Plan"],"summary":"Get SearchPlan version history (P8-E)","description":"Return the user's last {limit} SearchPlan versions, newest first.\n\nEach entry includes trigger_reason / regen_reason so the frontend can show\na \"what changed and why\" timeline — including whether learned job-feedback\npreferences shaped that regeneration (P8-E feedback loop).","operationId":"get_plan_history_api_v1_search_plan_history_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/payments/checkout":{"post":{"tags":["Payments","Payments"],"summary":"Create checkout session","description":"Returns a Stripe-hosted checkout URL. Redirect the user's browser to this URL.","operationId":"create_checkout_api_v1_payments_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/payments/status":{"get":{"tags":["Payments","Payments"],"summary":"Subscription status","description":"Returns the user's current tier, plan, and renewal date.","operationId":"get_status_api_v1_payments_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubscriptionStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/payments/portal":{"get":{"tags":["Payments","Payments"],"summary":"Customer Portal URL","description":"Returns a Stripe Customer Portal URL where VIP users can manage or cancel their subscription.","operationId":"get_portal_api_v1_payments_portal_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PortalResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/payments/invoices":{"get":{"tags":["Payments","Payments"],"summary":"Invoice history","description":"Returns the last 20 paid invoices for the current user.","operationId":"list_invoices_api_v1_payments_invoices_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/InvoiceResponse"},"type":"array","title":"Response List Invoices Api V1 Payments Invoices Get"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/quota/status":{"get":{"tags":["Quota"],"summary":"Get Quota Status","description":"Return per-feature quota usage for the current user.","operationId":"get_quota_status_api_v1_quota_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotaStatusResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/api/v1/feedback/leads/{lead_id}":{"post":{"tags":["Feedback","Feedback"],"summary":"Record feedback for a job lead","description":"Record whether the user liked or rejected a job lead.\n\nFor rejected signals, optionally include one or more rejection tags:\n  - wrong_location   : job is in the wrong city/region\n  - wrong_industry   : wrong sector / not my field\n  - role_mismatch    : seniority or role type doesn't fit\n  - salary           : compensation concerns","operationId":"record_lead_feedback_api_v1_feedback_leads__lead_id__post","security":[{"OAuth2PasswordBearer":[]}],"parameters":[{"name":"lead_id","in":"path","required":true,"schema":{"type":"string","title":"Lead Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Response Record Lead Feedback Api V1 Feedback Leads  Lead Id  Post"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/v1/feedback/profile":{"get":{"tags":["Feedback","Feedback"],"summary":"Get learned preference profile","description":"Returns the user's preference profile derived from accumulated feedback signals.\nhas_enough_data is False until at least 5 signals have been recorded.","operationId":"get_preference_profile_api_v1_feedback_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PreferenceProfileResponse"}}}}},"security":[{"OAuth2PasswordBearer":[]}]}},"/healthz":{"get":{"tags":["System"],"summary":"Deep Health Check","operationId":"healthz_healthz_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Healthz Healthz Get"}}}}}}},"/":{"get":{"summary":"Health check","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Response Root  Get"}}}}}}}},"components":{"schemas":{"AddChannelRequest":{"properties":{"scope_country":{"type":"string","title":"Scope Country","default":""},"scope_province":{"type":"string","title":"Scope Province","default":""},"scope_city":{"type":"string","title":"Scope City","default":""},"scope_industries":{"items":{"type":"string"},"type":"array","title":"Scope Industries"},"channel_name":{"type":"string","maxLength":200,"minLength":2,"title":"Channel Name"},"url":{"type":"string","title":"Url","description":"Canonical URL of the job listing page"},"channel_type":{"type":"string","title":"Channel Type","default":"other"},"is_active":{"type":"boolean","title":"Is Active","default":true},"quality_score":{"type":"number","maximum":1.0,"minimum":0.0,"title":"Quality Score","default":1.0},"discovery_notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Discovery Notes"}},"type":"object","required":["channel_name","url"],"title":"AddChannelRequest"},"AtomicModule":{"properties":{"id":{"type":"string","title":"Id","description":"Unique identifier for the module"},"title":{"type":"string","title":"Title","description":"Title of the experience/capability"},"category":{"type":"string","title":"Category","description":"Capability category"},"vectors":{"items":{"type":"string"},"type":"array","title":"Vectors","description":"Core capability tags"},"scenario":{"type":"string","title":"Scenario","description":"Applicable scenario description"},"action_logic":{"items":{"type":"string"},"type":"array","title":"Action Logic","description":"Core action steps or principles"},"evidence_anchors":{"items":{"$ref":"#/components/schemas/EvidenceAnchor"},"type":"array","title":"Evidence Anchors","description":"Truth anchors: verifiable facts"},"adversarial_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Adversarial Notes","description":"Defense logic against challenges"},"metadata":{"additionalProperties":true,"type":"object","title":"Metadata"},"created_from_resume_hash":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created From Resume Hash"},"is_stale":{"type":"boolean","title":"Is Stale","default":false},"stale_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Stale Reason"},"is_baseline":{"type":"boolean","title":"Is Baseline","default":false}},"type":"object","required":["id","title","category","scenario","action_logic","evidence_anchors"],"title":"AtomicModule"},"AutoSearchRequest":{"properties":{"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location","description":"Target location (e.g. 'Vancouver, BC'). Defaults to user profile location."},"preferred_directions":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Preferred Directions","description":"Override list of career directions. If omitted, inferred from tag weights."},"industries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Industries","description":"Industry tags for channel knowledge graph filtering (e.g. ['strategy_consulting', 'forensic_investigative']). If omitted, all channels match (cross-industry wildcard)."},"matching_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matching Mode","description":"ability_first | balanced | culture_first (default: system config)"},"rss_urls":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Rss Urls","description":"User-provided RSS feed URLs (e.g. LinkedIn Job Alert RSS). Added to RSSAdapter."},"excluded_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Excluded Keywords","description":"Job titles/descriptions containing any of these keywords (case-insensitive) will be skipped."}},"type":"object","title":"AutoSearchRequest"},"AutoSearchResponse":{"properties":{"queries_generated":{"type":"integer","title":"Queries Generated"},"raw_jobs_fetched":{"type":"integer","title":"Raw Jobs Fetched"},"unique_jobs":{"type":"integer","title":"Unique Jobs"},"jobs_screened":{"type":"integer","title":"Jobs Screened"},"jobs_failed":{"type":"integer","title":"Jobs Failed"},"adapter_stats":{"additionalProperties":{"type":"integer"},"type":"object","title":"Adapter Stats"},"errors":{"items":{"type":"string"},"type":"array","title":"Errors"},"plan_driven":{"type":"boolean","title":"Plan Driven","default":false},"plan_filtered":{"type":"integer","title":"Plan Filtered","default":0},"channel_jobs_fetched":{"type":"integer","title":"Channel Jobs Fetched","default":0},"company_jobs_fetched":{"type":"integer","title":"Company Jobs Fetched","default":0}},"type":"object","required":["queries_generated","raw_jobs_fetched","unique_jobs","jobs_screened","jobs_failed","adapter_stats","errors"],"title":"AutoSearchResponse"},"AutoSearchStatusResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","title":"Status"},"result":{"anyOf":[{"$ref":"#/components/schemas/AutoSearchResponse"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Error"},"elapsed_seconds":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Elapsed Seconds"}},"type":"object","required":["task_id","status"],"title":"AutoSearchStatusResponse"},"AutoSearchTaskResponse":{"properties":{"task_id":{"type":"string","title":"Task Id"},"status":{"type":"string","title":"Status"}},"type":"object","required":["task_id","status"],"title":"AutoSearchTaskResponse"},"BearerResponse":{"properties":{"access_token":{"type":"string","title":"Access Token"},"token_type":{"type":"string","title":"Token Type"}},"type":"object","required":["access_token","token_type"],"title":"BearerResponse"},"Body_auth_jwt_login_api_v1_auth_jwt_login_post":{"properties":{"grant_type":{"anyOf":[{"type":"string","pattern":"password"},{"type":"null"}],"title":"Grant Type"},"username":{"type":"string","title":"Username"},"password":{"type":"string","title":"Password"},"scope":{"type":"string","title":"Scope","default":""},"client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Id"},"client_secret":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Client Secret"}},"type":"object","required":["username","password"],"title":"Body_auth_jwt_login_api_v1_auth_jwt_login_post"},"Body_start_elicitation_api_v1_probe_sessions_post":{"properties":{"resume_file":{"anyOf":[{"type":"string","format":"binary"},{"type":"null"}],"title":"Resume File"},"resume_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume Text"}},"type":"object","title":"Body_start_elicitation_api_v1_probe_sessions_post"},"Body_upload_personality_report_file_api_v1_profile_personality_upload_post":{"properties":{"report_file":{"type":"string","format":"binary","title":"Report File"}},"type":"object","required":["report_file"],"title":"Body_upload_personality_report_file_api_v1_profile_personality_upload_post"},"Campaign":{"properties":{"id":{"type":"string","title":"Id","description":"Unique ID for the campaign"},"user_id":{"type":"string","title":"User Id","description":"The user this campaign belongs to"},"name":{"type":"string","title":"Name","description":"Name of the job search campaign"},"target_track":{"type":"string","title":"Target Track","description":"Track A (Senior/Niche) or B (Standard/Volume)","default":"B"},"status":{"type":"string","title":"Status","description":"Pipeline status","default":"Pending"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"application_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Date"},"follow_up_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Follow Up Date"},"contact_person":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Person"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url"},"resume_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume Version"},"has_cover_letter":{"type":"boolean","title":"Has Cover Letter","default":false},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"document_feedback":{"additionalProperties":true,"type":"object","title":"Document Feedback"},"strategy_config":{"additionalProperties":true,"type":"object","title":"Strategy Config"},"metrics":{"additionalProperties":{"type":"integer"},"type":"object","title":"Metrics"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["id","user_id","name"],"title":"Campaign"},"ChannelOut":{"properties":{"id":{"type":"integer","title":"Id"},"scope_country":{"type":"string","title":"Scope Country"},"scope_province":{"type":"string","title":"Scope Province"},"scope_city":{"type":"string","title":"Scope City"},"scope_industries":{"items":{"type":"string"},"type":"array","title":"Scope Industries"},"channel_name":{"type":"string","title":"Channel Name"},"url":{"type":"string","title":"Url"},"channel_type":{"type":"string","title":"Channel Type"},"is_active":{"type":"boolean","title":"Is Active"},"quality_score":{"type":"number","title":"Quality Score"},"discovery_source":{"type":"string","title":"Discovery Source"},"discovery_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovery Notes"},"last_crawled":{"anyOf":[{},{"type":"null"}],"title":"Last Crawled"},"crawl_success_count":{"type":"integer","title":"Crawl Success Count"},"crawl_failure_count":{"type":"integer","title":"Crawl Failure Count"},"created_at":{"title":"Created At"}},"type":"object","required":["id","scope_country","scope_province","scope_city","scope_industries","channel_name","url","channel_type","is_active","quality_score","discovery_source","discovery_notes","last_crawled","crawl_success_count","crawl_failure_count","created_at"],"title":"ChannelOut"},"CheckoutRequest":{"properties":{"plan_id":{"type":"string","title":"Plan Id"}},"type":"object","required":["plan_id"],"title":"CheckoutRequest"},"CheckoutResponse":{"properties":{"checkout_url":{"type":"string","title":"Checkout Url"}},"type":"object","required":["checkout_url"],"title":"CheckoutResponse"},"CompanyOut":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"website":{"type":"string","title":"Website"},"industry":{"type":"string","title":"Industry"},"size_range":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Size Range"},"location":{"type":"string","title":"Location"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"careers_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Careers Url"},"source":{"type":"string","title":"Source"},"status":{"type":"string","title":"Status"},"verified":{"type":"boolean","title":"Verified"},"verification_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Verification Score"},"verification_notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Verification Notes"},"latest_news_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Latest News Summary"},"last_signal_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Signal At"}},"type":"object","required":["id","name","website","industry","size_range","location","contact_email","careers_url","source","status","verified","verification_score","verification_notes","latest_news_summary","last_signal_at"],"title":"CompanyOut"},"CoverLetterRequest":{"properties":{"jd_text":{"type":"string","maxLength":20000,"title":"Jd Text"},"pain_points":{"items":{"type":"string"},"type":"array","title":"Pain Points"},"selected_modules":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Selected Modules"},"language":{"type":"string","title":"Language","default":"中文"}},"type":"object","required":["jd_text"],"title":"CoverLetterRequest"},"CoverageLogOut":{"properties":{"id":{"type":"integer","title":"Id"},"industry_tag":{"type":"string","title":"Industry Tag"},"country":{"type":"string","title":"Country"},"province":{"type":"string","title":"Province"},"last_discovered_at":{"title":"Last Discovered At"},"channels_found_count":{"type":"integer","title":"Channels Found Count"},"refresh_interval_days":{"type":"integer","title":"Refresh Interval Days"},"created_at":{"title":"Created At"}},"type":"object","required":["id","industry_tag","country","province","last_discovered_at","channels_found_count","refresh_interval_days","created_at"],"title":"CoverageLogOut"},"CreateCampaignRequest":{"properties":{"name":{"type":"string","title":"Name"},"track":{"type":"string","title":"Track","default":"B"},"config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Config"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"application_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Date"},"follow_up_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Follow Up Date"},"contact_person":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Person"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url"},"resume_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume Version"},"has_cover_letter":{"type":"boolean","title":"Has Cover Letter","default":false},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"status":{"type":"string","title":"Status","default":"Pending"}},"type":"object","required":["name"],"title":"CreateCampaignRequest"},"DirectionItem":{"properties":{"direction":{"type":"string","title":"Direction"},"function":{"type":"string","title":"Function"},"industry":{"type":"string","title":"Industry"},"rationale":{"type":"string","title":"Rationale"},"fit_score":{"type":"number","title":"Fit Score"}},"type":"object","required":["direction","function","industry","rationale","fit_score"],"title":"DirectionItem"},"DiscoverResponse":{"properties":{"association_new":{"type":"integer","title":"Association New"},"procurement_new":{"type":"integer","title":"Procurement New"},"llm_recommend_new":{"type":"integer","title":"Llm Recommend New"},"total_new":{"type":"integer","title":"Total New"}},"type":"object","required":["association_new","procurement_new","llm_recommend_new","total_new"],"title":"DiscoverResponse"},"DocumentAssemblyRequest":{"properties":{"jd_text":{"type":"string","maxLength":20000,"title":"Jd Text"},"selected_modules":{"items":{"additionalProperties":true,"type":"object"},"type":"array","title":"Selected Modules"},"track":{"type":"string","pattern":"^[AB]$","title":"Track","description":"Track A or B"}},"type":"object","required":["jd_text","selected_modules","track"],"title":"DocumentAssemblyRequest"},"DocumentFeedbackRequest":{"properties":{"doc_type":{"type":"string","enum":["resume","cover_letter"],"title":"Doc Type"},"helpful":{"type":"boolean","title":"Helpful"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"}},"type":"object","required":["doc_type","helpful"],"title":"DocumentFeedbackRequest"},"ErrorModel":{"properties":{"detail":{"anyOf":[{"type":"string"},{"additionalProperties":{"type":"string"},"type":"object"}],"title":"Detail"}},"type":"object","required":["detail"],"title":"ErrorModel"},"EvaluateRequest":{"properties":{"content":{"type":"string","maxLength":50000,"title":"Content"},"jd_text":{"type":"string","maxLength":20000,"title":"Jd Text"},"doc_type":{"type":"string","enum":["resume_A","resume_B","cover_letter"],"title":"Doc Type","default":"resume_B"}},"type":"object","required":["content","jd_text"],"title":"EvaluateRequest"},"EvidenceAnchor":{"properties":{"project":{"type":"string","title":"Project"},"impact":{"type":"string","title":"Impact"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"}},"type":"object","required":["project","impact"],"title":"EvidenceAnchor"},"FeatureQuota":{"properties":{"used":{"type":"integer","title":"Used"},"limit":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Limit"},"window_days":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Window Days"},"reset_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Reset At"},"allowed":{"type":"boolean","title":"Allowed"},"max_questions":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Questions"},"mode_restricted":{"type":"boolean","title":"Mode Restricted","default":false}},"type":"object","required":["used","limit","window_days","reset_at","allowed"],"title":"FeatureQuota"},"FeedbackRequest":{"properties":{"signal":{"type":"string","title":"Signal"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"}},"type":"object","required":["signal"],"title":"FeedbackRequest"},"FindContactRequest":{"properties":{"position_families":{"items":{"type":"string"},"type":"array","title":"Position Families","default":[]},"location":{"type":"string","title":"Location","default":"Vancouver, BC"}},"type":"object","title":"FindContactRequest"},"GeneratePlanRequest":{"properties":{"trigger_reason":{"type":"string","title":"Trigger Reason","description":"manual | profile_change | auto_scheduled","default":"manual"},"target_location":{"type":"string","maxLength":200,"title":"Target Location","description":"Free-text location hint injected into the prompt","default":"Canada"}},"type":"object","title":"GeneratePlanRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IndustryOut":{"properties":{"id":{"type":"integer","title":"Id"},"tag":{"type":"string","title":"Tag"},"display_name_en":{"type":"string","title":"Display Name En"},"display_name_zh":{"type":"string","title":"Display Name Zh"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"parent_tag":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Parent Tag"},"is_active":{"type":"boolean","title":"Is Active"}},"type":"object","required":["id","tag","display_name_en","display_name_zh","description","parent_tag","is_active"],"title":"IndustryOut"},"InvoiceResponse":{"properties":{"id":{"type":"string","title":"Id"},"amount_cents":{"type":"integer","title":"Amount Cents"},"currency":{"type":"string","title":"Currency"},"status":{"type":"string","title":"Status"},"issued_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Issued At"},"pdf_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Pdf Url"}},"type":"object","required":["id","amount_cents","currency","status"],"title":"InvoiceResponse"},"JobInput":{"properties":{"jd_text":{"type":"string","maxLength":20000,"title":"Jd Text"},"top_k":{"type":"integer","title":"Top K","default":5}},"type":"object","required":["jd_text"],"title":"JobInput"},"JobLead":{"properties":{"id":{"type":"string","title":"Id"},"campaign_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Campaign Id"},"title":{"type":"string","title":"Title"},"company":{"type":"string","title":"Company"},"location":{"type":"string","title":"Location"},"url":{"type":"string","title":"Url"},"track":{"type":"string","title":"Track"},"match_score":{"type":"number","title":"Match Score"},"status":{"type":"string","title":"Status","default":"New"},"pain_points":{"items":{"type":"string"},"type":"array","title":"Pain Points"},"draft_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Content"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"ability_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Ability Score"},"culture_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Culture Score"},"composite_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Composite Score"},"matched_tags":{"additionalProperties":{"type":"number"},"type":"object","title":"Matched Tags"},"matching_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matching Mode"},"scored_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scored At"},"dealbreaker_triggered":{"type":"boolean","title":"Dealbreaker Triggered","default":false},"source_layer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Layer"},"source_channel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source Channel"},"recommendation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Recommendation"}},"type":"object","required":["id","title","company","location","url","track","match_score"],"title":"JobLead"},"MessageInput":{"properties":{"answer":{"type":"string","maxLength":5000,"title":"Answer"}},"type":"object","required":["answer"],"title":"MessageInput"},"OutreachOut":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"string","title":"User Id"},"company_id":{"type":"integer","title":"Company Id"},"match_reason":{"type":"string","title":"Match Reason"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"suggested_approach":{"type":"string","title":"Suggested Approach"},"status":{"type":"string","title":"Status"},"created_at":{"type":"string","format":"date-time","title":"Created At"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"},"contact_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Title"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"connection_note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Connection Note"},"company":{"anyOf":[{"$ref":"#/components/schemas/CompanyOut"},{"type":"null"}]}},"type":"object","required":["id","user_id","company_id","match_reason","contact_email","suggested_approach","status","created_at","updated_at"],"title":"OutreachOut"},"OutreachStatusUpdate":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"OutreachStatusUpdate"},"PersonalityProfileResponse":{"properties":{"mbti_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mbti Type"},"disc_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disc Profile"},"big_five_scores":{"anyOf":[{},{"type":"null"}],"title":"Big Five Scores"},"personality_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Personality Summary"},"target_niches":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Niches"},"updated_at":{"type":"string","format":"date-time","title":"Updated At"}},"type":"object","required":["mbti_type","disc_profile","big_five_scores","personality_summary","updated_at"],"title":"PersonalityProfileResponse"},"PortalResponse":{"properties":{"portal_url":{"type":"string","title":"Portal Url"}},"type":"object","required":["portal_url"],"title":"PortalResponse"},"PreferenceProfileResponse":{"properties":{"total_signals":{"type":"integer","title":"Total Signals"},"liked_count":{"type":"integer","title":"Liked Count"},"rejected_count":{"type":"integer","title":"Rejected Count"},"preferred_locations":{"items":{"type":"string"},"type":"array","title":"Preferred Locations"},"rejected_locations":{"items":{"type":"string"},"type":"array","title":"Rejected Locations"},"excluded_keywords":{"items":{"type":"string"},"type":"array","title":"Excluded Keywords"},"rejection_reasons":{"additionalProperties":true,"type":"object","title":"Rejection Reasons"},"has_enough_data":{"type":"boolean","title":"Has Enough Data"}},"type":"object","required":["total_signals","liked_count","rejected_count","preferred_locations","rejected_locations","excluded_keywords","rejection_reasons","has_enough_data"],"title":"PreferenceProfileResponse"},"ProfileResponse":{"properties":{"id":{"type":"string","title":"Id"},"email":{"type":"string","title":"Email"},"display_name":{"type":"string","title":"Display Name"},"tier":{"type":"string","title":"Tier","default":"free"}},"type":"object","required":["id","email","display_name"],"title":"ProfileResponse"},"ProfileVersionResponse":{"properties":{"version_number":{"type":"integer","title":"Version Number"},"trigger":{"type":"string","title":"Trigger"},"mbti_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Mbti Type"},"disc_profile":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Disc Profile"},"drift_detected":{"type":"boolean","title":"Drift Detected"},"drift_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Drift Summary"},"created_at":{"type":"string","format":"date-time","title":"Created At"}},"type":"object","required":["version_number","trigger","mbti_type","disc_profile","drift_detected","drift_summary","created_at"],"title":"ProfileVersionResponse","description":"P8-C: One entry in the version history list."},"QuotaStatusResponse":{"properties":{"probe":{"$ref":"#/components/schemas/FeatureQuota"},"auto_search":{"$ref":"#/components/schemas/FeatureQuota"},"cover_letter":{"$ref":"#/components/schemas/FeatureQuota"},"adversary":{"$ref":"#/components/schemas/FeatureQuota"},"personality":{"$ref":"#/components/schemas/FeatureQuota"}},"type":"object","required":["probe","auto_search","cover_letter","adversary","personality"],"title":"QuotaStatusResponse"},"RenderCoverLetterRequest":{"properties":{"content":{"type":"string","title":"Content","description":"LLM-generated cover letter text"},"candidate_name":{"type":"string","title":"Candidate Name","default":"候选人"},"target_role":{"type":"string","title":"Target Role","default":""},"target_company":{"type":"string","title":"Target Company","default":""}},"type":"object","required":["content"],"title":"RenderCoverLetterRequest"},"RenderResumeRequest":{"properties":{"content":{"type":"string","title":"Content","description":"LLM-generated document text (Markdown-light)"},"track":{"type":"string","pattern":"^[AB]$","title":"Track","description":"A = Sniper Memo, B = Achievement Bullets"},"candidate_name":{"type":"string","title":"Candidate Name","default":"候选人"},"target_role":{"type":"string","title":"Target Role","default":""}},"type":"object","required":["content","track"],"title":"RenderResumeRequest"},"ScreenRequest":{"properties":{"jd_text":{"type":"string","maxLength":20000,"title":"Jd Text","description":"Full job description text"},"company":{"type":"string","maxLength":200,"title":"Company","default":"Unknown"},"location":{"type":"string","maxLength":200,"title":"Location","default":""},"url":{"type":"string","maxLength":2000,"title":"Url","default":""},"matching_mode":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Matching Mode","description":"ability_first | balanced | culture_first (default: system config)"}},"type":"object","required":["jd_text"],"title":"ScreenRequest"},"SearchPreferencesResponse":{"properties":{"target_roles":{"items":{"type":"string"},"type":"array","title":"Target Roles"},"preferred_locations":{"items":{"type":"string"},"type":"array","title":"Preferred Locations"},"excluded_keywords":{"items":{"type":"string"},"type":"array","title":"Excluded Keywords"},"updated_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Updated At"}},"type":"object","title":"SearchPreferencesResponse","description":"P10 P5 (D7): server-side search preferences."},"SearchQuery":{"properties":{"query":{"type":"string","title":"Query"},"top_k":{"type":"integer","title":"Top K","default":5}},"type":"object","required":["query"],"title":"SearchQuery"},"StatusUpdate":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"StatusUpdate"},"SubscriptionStatusResponse":{"properties":{"tier":{"type":"string","title":"Tier"},"plan_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Plan Id"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"renewal_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Renewal At"},"vip_expiry_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Vip Expiry At"}},"type":"object","required":["tier"],"title":"SubscriptionStatusResponse"},"TagWeightResponse":{"properties":{"tag_name":{"type":"string","title":"Tag Name"},"dimension":{"type":"string","title":"Dimension"},"display_name_zh":{"type":"string","title":"Display Name Zh"},"display_name_en":{"type":"string","title":"Display Name En"},"weight":{"type":"number","title":"Weight"},"source":{"type":"string","title":"Source"}},"type":"object","required":["tag_name","dimension","display_name_zh","display_name_en","weight","source"],"title":"TagWeightResponse"},"UpdateCampaignRequest":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"target_track":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Track"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"position":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Position"},"category":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Category"},"application_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Application Date"},"follow_up_date":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Follow Up Date"},"contact_person":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Person"},"contact_email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Email"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url"},"resume_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Resume Version"},"has_cover_letter":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Cover Letter"},"method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Method"},"notes":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"title":"Notes"},"strategy_config":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Strategy Config"}},"type":"object","title":"UpdateCampaignRequest"},"UpdateChannelRequest":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"channel_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Name"},"channel_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Channel Type"},"scope_industries":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Scope Industries"},"quality_score":{"anyOf":[{"type":"number","maximum":1.0,"minimum":0.0},{"type":"null"}],"title":"Quality Score"},"discovery_notes":{"anyOf":[{"type":"string","maxLength":2000},{"type":"null"}],"title":"Discovery Notes"}},"type":"object","title":"UpdateChannelRequest"},"UpdateMetricRequest":{"properties":{"metric_key":{"type":"string","title":"Metric Key"},"delta":{"type":"integer","title":"Delta","default":1}},"type":"object","required":["metric_key"],"title":"UpdateMetricRequest"},"UpdateNichesRequest":{"properties":{"target_niches":{"items":{"type":"string"},"type":"array","title":"Target Niches"}},"type":"object","required":["target_niches"],"title":"UpdateNichesRequest"},"UpdateSearchPreferencesRequest":{"properties":{"target_roles":{"items":{"type":"string"},"type":"array","title":"Target Roles"},"preferred_locations":{"items":{"type":"string"},"type":"array","title":"Preferred Locations"},"excluded_keywords":{"items":{"type":"string"},"type":"array","title":"Excluded Keywords"}},"type":"object","title":"UpdateSearchPreferencesRequest"},"UploadReportRequest":{"properties":{"report_text":{"type":"string","maxLength":50000,"title":"Report Text"}},"type":"object","required":["report_text"],"title":"UploadReportRequest"},"UserCreate":{"properties":{"email":{"type":"string","format":"email","title":"Email"},"password":{"type":"string","title":"Password"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active","default":true},"is_superuser":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Superuser","default":false},"is_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified","default":false},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","default":""}},"type":"object","required":["email","password"],"title":"UserCreate"},"UserRead":{"properties":{"id":{"type":"string","format":"uuid","title":"Id"},"email":{"type":"string","format":"email","title":"Email"},"is_active":{"type":"boolean","title":"Is Active","default":true},"is_superuser":{"type":"boolean","title":"Is Superuser","default":false},"is_verified":{"type":"boolean","title":"Is Verified","default":false},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name","default":""},"preferred_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Language","default":"en"},"preferred_theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Theme","default":"system"},"tier":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Tier","default":"free"}},"type":"object","required":["id","email"],"title":"UserRead"},"UserUpdate":{"properties":{"password":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Password"},"email":{"anyOf":[{"type":"string","format":"email"},{"type":"null"}],"title":"Email"},"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"is_superuser":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Superuser"},"is_verified":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Verified"},"display_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Display Name"},"preferred_language":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Language"},"preferred_theme":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Preferred Theme"}},"type":"object","title":"UserUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"WatchRequest":{"properties":{"company_id":{"type":"integer","title":"Company Id"},"notify_on_new_job":{"type":"boolean","title":"Notify On New Job","default":true},"notify_on_news":{"type":"boolean","title":"Notify On News","default":true}},"type":"object","required":["company_id"],"title":"WatchRequest"},"WatchedCompanyOut":{"properties":{"watch_id":{"type":"integer","title":"Watch Id"},"company_id":{"type":"integer","title":"Company Id"},"added_at":{"type":"string","format":"date-time","title":"Added At"},"notify_on_new_job":{"type":"boolean","title":"Notify On New Job"},"notify_on_news":{"type":"boolean","title":"Notify On News"},"last_checked_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Last Checked At"},"company":{"$ref":"#/components/schemas/CompanyOut"}},"type":"object","required":["watch_id","company_id","added_at","notify_on_new_job","notify_on_news","last_checked_at","company"],"title":"WatchedCompanyOut"},"app__api__v1__campaigns__UpdateStatusRequest":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"UpdateStatusRequest"},"app__api__v1__channels__DiscoverRequest":{"properties":{"industries":{"items":{"type":"string"},"type":"array","title":"Industries","description":"Industry tags to search for (empty = cross-industry general search)"},"country":{"type":"string","title":"Country","description":"ISO 2-letter country code","default":"CA"},"province":{"type":"string","title":"Province","description":"Province / state code (empty = nationwide)","default":""},"city":{"type":"string","title":"City","description":"City name (empty = province-wide)","default":""}},"type":"object","title":"DiscoverRequest"},"app__api__v1__companies__DiscoverRequest":{"properties":{"location":{"type":"string","title":"Location","default":"Vancouver, BC"},"run_association":{"type":"boolean","title":"Run Association","default":true},"run_procurement":{"type":"boolean","title":"Run Procurement","default":true},"run_llm_recommend":{"type":"boolean","title":"Run Llm Recommend","default":true}},"type":"object","title":"DiscoverRequest"},"app__api__v1__radar__UpdateStatusRequest":{"properties":{"status":{"type":"string","title":"Status","description":"New, Screened, Drafted, Applied"}},"type":"object","required":["status"],"title":"UpdateStatusRequest"}},"securitySchemes":{"OAuth2PasswordBearer":{"type":"oauth2","flows":{"password":{"scopes":{},"tokenUrl":"/api/v1/auth/jwt/login"}}}}}}