{"openapi":"3.1.0","info":{"title":"Angld","version":"0.1.0"},"paths":{"/api/auth/register":{"post":{"tags":["auth"],"summary":"Register","description":"Register a new user.\n\nWraps the entire flow in a try/except that logs the actual exception\ntype + message + traceback. FastAPI's default 500 handler only emits\nthe generic \"Internal Server Error\" line in fly logs — without the\ndetail we can't diagnose intermittent failures (e.g. the 2026-05-12\npost-deploy smoke hit a sustained ~2 min window where every\n/api/auth/register returned 500 and the prod logs of that window were\nevicted before we could grab them).","operationId":"register_api_auth_register_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/google":{"post":{"tags":["auth"],"summary":"Google Auth","operationId":"google_auth_api_auth_google_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoogleAuthRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/login":{"post":{"tags":["auth"],"summary":"Login","operationId":"login_api_auth_login_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/me":{"get":{"tags":["auth"],"summary":"Get Me","operationId":"get_me_api_auth_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/role-options":{"get":{"tags":["auth"],"summary":"Role Options","operationId":"role_options_api_auth_role_options_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/auth/dismiss-onboarding":{"post":{"tags":["auth"],"summary":"Dismiss Onboarding","operationId":"dismiss_onboarding_api_auth_dismiss_onboarding_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/dismiss-help":{"post":{"tags":["auth"],"summary":"Dismiss Help","operationId":"dismiss_help_api_auth_dismiss_help_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/express-interest":{"post":{"tags":["auth"],"summary":"Express Interest","operationId":"express_interest_api_auth_express_interest_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/analytics-ids":{"patch":{"tags":["auth"],"summary":"Update Analytics Ids","description":"Persist the browser's GA4 client_id / PostHog distinct_id on the user.\n\nIdempotent and only fills blanks — the first non-null value wins so a later\ncookie reset (new client_id) doesn't fragment a user's server-side events.","operationId":"update_analytics_ids_api_auth_analytics_ids_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalyticsIdsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/change-email":{"put":{"tags":["auth"],"summary":"Change Email","operationId":"change_email_api_auth_change_email_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeEmailRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/change-password":{"put":{"tags":["auth"],"summary":"Change Password","operationId":"change_password_api_auth_change_password_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangePasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/account":{"delete":{"tags":["auth"],"summary":"Delete Account","operationId":"delete_account_api_auth_account_delete","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteAccountRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/auth/forgot-password":{"post":{"tags":["auth"],"summary":"Forgot Password","operationId":"forgot_password_api_auth_forgot_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/auth/reset-password":{"post":{"tags":["auth"],"summary":"Reset Password","operationId":"reset_password_api_auth_reset_password_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users":{"get":{"tags":["admin"],"summary":"List Users","operationId":"list_users_api_admin_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/funnel-summary":{"get":{"tags":["admin"],"summary":"Funnel Summary","description":"Sequential monotonic funnel. Each user counted at their highest stage and all prior.","operationId":"funnel_summary_api_admin_funnel_summary_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/activation-velocity":{"get":{"tags":["admin"],"summary":"Activation Velocity","description":"Median/p25/p75 hours for key activation transitions.","operationId":"activation_velocity_api_admin_activation_velocity_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/cohorts":{"get":{"tags":["admin"],"summary":"Cohorts","description":"Weekly signup cohorts with retention data.","operationId":"cohorts_api_admin_cohorts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"metric","in":"query","required":false,"schema":{"type":"string","default":"active","title":"Metric"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/stuck-users":{"get":{"tags":["admin"],"summary":"Stuck Users","description":"Users grouped by where they're stuck in the funnel.","operationId":"stuck_users_api_admin_stuck_users_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/attribution":{"get":{"tags":["admin"],"summary":"Attribution","description":"Acquisition source (signup UTM) crossed with activation + paid conversion.","operationId":"attribution_api_admin_attribution_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/funnel-by-source":{"get":{"tags":["admin"],"summary":"Funnel By Source","description":"Funnel split by the source of each user's first job (paste vs daily_match\nvs manual) — shows post-job progression by acquisition path.","operationId":"funnel_by_source_api_admin_funnel_by_source_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/event-flow":{"get":{"tags":["admin"],"summary":"Event Flow","description":"Top event→event transitions across users, for a flow / Sankey view.","operationId":"event_flow_api_admin_event_flow_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"window","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Window"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/credits":{"get":{"tags":["admin"],"summary":"Get User Credits","description":"Get credit transaction history for a user.","operationId":"get_user_credits_api_admin_users__user_id__credits_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/events":{"get":{"tags":["admin"],"summary":"Get User Events","description":"Get chronological event timeline for a user.","operationId":"get_user_events_api_admin_users__user_id__events_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/jobs-breakdown":{"get":{"tags":["admin"],"summary":"Get User Jobs Breakdown","description":"Get per-job funnel breakdown for a user.","operationId":"get_user_jobs_breakdown_api_admin_users__user_id__jobs_breakdown_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/grant-credits":{"post":{"tags":["admin"],"summary":"Grant Credits","operationId":"grant_credits_api_admin_users__user_id__grant_credits_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreditsGrantRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/promo-codes":{"get":{"tags":["admin"],"summary":"List Promo Codes","operationId":"list_promo_codes_api_admin_promo_codes_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Create Promo Code","operationId":"create_promo_code_api_admin_promo_codes_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeCreateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/promo-codes/{promo_id}":{"patch":{"tags":["admin"],"summary":"Update Promo Code","operationId":"update_promo_code_api_admin_promo_codes__promo_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"promo_id","in":"path","required":true,"schema":{"type":"integer","title":"Promo Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoCodeUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/refresh-job-matches":{"post":{"tags":["admin"],"summary":"Admin Refresh Job Matches","description":"Force-regenerate the daily-matches batch for a single user, bypassing\nthe 24h cooldown. Useful for testing and unsticking users.\n\nImports inside the function so the admin route doesn't pull the LinkdAPI\nconfig at module load time (admin route loads even when LINKDAPI is unset).","operationId":"admin_refresh_job_matches_api_admin_users__user_id__refresh_job_matches_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}":{"delete":{"tags":["admin"],"summary":"Admin Delete User","operationId":"admin_delete_user_api_admin_users__user_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/pipeline-mode":{"patch":{"tags":["admin"],"summary":"Set Pipeline Mode","operationId":"set_pipeline_mode_api_admin_users__user_id__pipeline_mode_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PipelineModeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/users/{user_id}/set-analyst":{"patch":{"tags":["admin"],"summary":"Set Analyst","description":"Promote/demote a user to the read-mostly analyst tier. Admin-only —\nthis is the one lever that grants analyst access, so it stays behind\nfull admin rather than get_current_analyst.","operationId":"set_analyst_api_admin_users__user_id__set_analyst_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"path","required":true,"schema":{"type":"integer","title":"User Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnalystUpdateRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/pipeline-status":{"get":{"tags":["admin"],"summary":"Get Pipeline Status","description":"Overview of pipeline configuration across all users.","operationId":"get_pipeline_status_api_admin_pipeline_status_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/discovery-traces":{"get":{"tags":["admin"],"summary":"List Discovery Traces","description":"List discovery_v2 pipeline runs — what the model did per job (branch\ndecisions, cost/latency, pool size, errors) without the full per-stage\npayloads. See DiscoveryTrace in app/models.py; GET the /{trace_id}\ndetail route for the full brief/plan/judgment + per-stage call log.","operationId":"list_discovery_traces_api_admin_discovery_traces_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Id"}},{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Job Id"}},{"name":"errors_only","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Errors Only"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/discovery-traces/{trace_id}":{"get":{"tags":["admin"],"summary":"Get Discovery Trace","description":"Full discovery_v2 trace: brief/plan/judgment/rejudgment plus the\nper-stage call log (every Sonnet/LinkdAPI query the pipeline fielded for\nthis job, in order, with tokens/latency).","operationId":"get_discovery_trace_api_admin_discovery_traces__trace_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"trace_id","in":"path","required":true,"schema":{"type":"integer","title":"Trace Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/evals/models":{"get":{"tags":["admin"],"summary":"List Eval Models","description":"Return the full eval model registry plus the currently active pair.","operationId":"list_eval_models_api_admin_evals_models_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/evals/active":{"post":{"tags":["admin"],"summary":"Set Active Eval Models","description":"Update the active incumbent and/or challenger model. Push the change\nthrough to the live AIService and ShadowPipelineRunner so the next request\nuses the new model — no server restart needed.","operationId":"set_active_eval_models_api_admin_evals_active_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetActiveModelsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/evals/reset":{"post":{"tags":["admin"],"summary":"Reset Eval Data","description":"Delete eval and shadow rows for the (incumbent, challenger) pair —\nor just by challenger if incumbent is omitted. Defaults to the currently\nactive pair when both fields are missing.","operationId":"reset_eval_data_api_admin_evals_reset_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetEvalRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/evals/summary":{"get":{"tags":["admin"],"summary":"Get Eval Summary","description":"Aggregate eval stats for the active incumbent/challenger pair.","operationId":"get_eval_summary_api_admin_evals_summary_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/evals/dimension-breakdown":{"get":{"tags":["admin"],"summary":"Get Dimension Breakdown","description":"Aggregate scores by dimension for the active incumbent/challenger pair.","operationId":"get_dimension_breakdown_api_admin_evals_dimension_breakdown_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/evals/cost-breakdown":{"get":{"tags":["admin"],"summary":"Get Cost Breakdown","description":"Monthly cost breakdown for the active incumbent/challenger pair.","operationId":"get_cost_breakdown_api_admin_evals_cost_breakdown_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/evals":{"get":{"tags":["admin"],"summary":"List Evals","description":"List eval runs for the active incumbent/challenger pair, with job context.","operationId":"list_evals_api_admin_evals_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/evals/{eval_id}":{"get":{"tags":["admin"],"summary":"Get Eval Detail","description":"Get eval run with all step scores.","operationId":"get_eval_detail_api_admin_evals__eval_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"eval_id","in":"path","required":true,"schema":{"type":"integer","title":"Eval Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/evals/{eval_id}/retry":{"post":{"tags":["admin"],"summary":"Retry Eval","description":"Retry a failed eval run.","operationId":"retry_eval_api_admin_evals__eval_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"eval_id","in":"path","required":true,"schema":{"type":"integer","title":"Eval Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/cost-breakdown":{"get":{"tags":["admin"],"summary":"Get Cost Breakdown","description":"Per-step cost breakdown across all eval jobs, with averages.\n\nCosts are computed using the per-model OpenRouter pricing from the eval\nmodel registry — incumbent pricing comes from ``eval_runs.incumbent_model_id``,\nchallenger pricing from ``eval_runs.challenger_model_id``. Tavily / Apify /\nClaude-web-search costs are not surfaced — current pipelines don't use\nthose tools on the hot path.","operationId":"get_cost_breakdown_api_admin_cost_breakdown_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/benchmark/golden-jobs":{"get":{"tags":["admin"],"summary":"List Golden Jobs","operationId":"list_golden_jobs_api_admin_benchmark_golden_jobs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Create Golden Job","operationId":"create_golden_job_api_admin_benchmark_golden_jobs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoldenJobUpsert"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/benchmark/golden-jobs/{golden_id}":{"patch":{"tags":["admin"],"summary":"Update Golden Job","operationId":"update_golden_job_api_admin_benchmark_golden_jobs__golden_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"golden_id","in":"path","required":true,"schema":{"type":"integer","title":"Golden Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GoldenJobPatch"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["admin"],"summary":"Delete Golden Job","operationId":"delete_golden_job_api_admin_benchmark_golden_jobs__golden_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"golden_id","in":"path","required":true,"schema":{"type":"integer","title":"Golden Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/benchmark/presets":{"get":{"tags":["admin"],"summary":"List Benchmark Presets","operationId":"list_benchmark_presets_api_admin_benchmark_presets_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Create Benchmark Preset","operationId":"create_benchmark_preset_api_admin_benchmark_presets_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BenchmarkPresetCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/benchmark/runs":{"get":{"tags":["admin"],"summary":"List Benchmark Runs","operationId":"list_benchmark_runs_api_admin_benchmark_runs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["admin"],"summary":"Create Benchmark Run","description":"Create and start a new benchmark run (sandboxed). Does not affect production config.","operationId":"create_benchmark_run_api_admin_benchmark_runs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateBenchmarkRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/benchmark/runs/{run_id}":{"get":{"tags":["admin"],"summary":"Get Benchmark Run","operationId":"get_benchmark_run_api_admin_benchmark_runs__run_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"run_id","in":"path","required":true,"schema":{"type":"integer","title":"Run Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/benchmark/iterations/{iteration_id}":{"get":{"tags":["admin"],"summary":"Get Benchmark Iteration","operationId":"get_benchmark_iteration_api_admin_benchmark_iterations__iteration_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"iteration_id","in":"path","required":true,"schema":{"type":"integer","title":"Iteration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/benchmark/iterations/{iteration_id}/analyze":{"post":{"tags":["admin"],"summary":"Analyze Benchmark Iteration Endpoint","operationId":"analyze_benchmark_iteration_endpoint_api_admin_benchmark_iterations__iteration_id__analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"iteration_id","in":"path","required":true,"schema":{"type":"integer","title":"Iteration Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/linkedin-growth/comment-targets/run":{"post":{"tags":["admin","linkedin-growth"],"summary":"Run Comment Targets Endpoint","description":"S1 — daily comment-sniping targets.","operationId":"run_comment_targets_endpoint_api_admin_linkedin_growth_comment_targets_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentTargetsRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/influencers/build":{"post":{"tags":["admin","linkedin-growth"],"summary":"Build Influencer List Endpoint","description":"S4 mode 1 — rebuild the influencer list (persistent JSON).","operationId":"build_influencer_list_endpoint_api_admin_linkedin_growth_influencers_build_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/influencers":{"get":{"tags":["admin","linkedin-growth"],"summary":"Get Influencer List Endpoint","description":"Read the current influencer list (or empty if none built yet).","operationId":"get_influencer_list_endpoint_api_admin_linkedin_growth_influencers_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/influencers/weekly":{"post":{"tags":["admin","linkedin-growth"],"summary":"Run Weekly Brief Endpoint","description":"S4 mode 2 — weekly influencer brief over the curated list.","operationId":"run_weekly_brief_endpoint_api_admin_linkedin_growth_influencers_weekly_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WeeklyBriefRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/company-response/event-types":{"get":{"tags":["admin","linkedin-growth"],"summary":"List Event Types","description":"Allowed `event` values for the company-response endpoint.","operationId":"list_event_types_api_admin_linkedin_growth_company_response_event_types_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/company-response/run":{"post":{"tags":["admin","linkedin-growth"],"summary":"Run Company Response Endpoint","description":"S6 — rapid response to company news.","operationId":"run_company_response_endpoint_api_admin_linkedin_growth_company_response_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyResponseRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BriefResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/comment-targets/latest":{"get":{"tags":["admin","linkedin-growth"],"summary":"Get Latest Comment Targets","operationId":"get_latest_comment_targets_api_admin_linkedin_growth_comment_targets_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestBriefResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/influencers/weekly/latest":{"get":{"tags":["admin","linkedin-growth"],"summary":"Get Latest Weekly Brief","operationId":"get_latest_weekly_brief_api_admin_linkedin_growth_influencers_weekly_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestBriefResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/linkedin-growth/company-response/latest":{"get":{"tags":["admin","linkedin-growth"],"summary":"Get Latest Company Response","operationId":"get_latest_company_response_api_admin_linkedin_growth_company_response_latest_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LatestBriefResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/jobs/stats":{"get":{"tags":["jobs"],"summary":"Get Job Stats","operationId":"get_job_stats_api_jobs_stats_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobStats"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/jobs/":{"get":{"tags":["jobs"],"summary":"List Jobs","operationId":"list_jobs_api_jobs__get","security":[{"HTTPBearer":[]}],"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/JobRead"},"title":"Response List Jobs Api Jobs  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["jobs"],"summary":"Create Job","operationId":"create_job_api_jobs__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","operationId":"get_job_api_jobs__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["jobs"],"summary":"Update Job","operationId":"update_job_api_jobs__job_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["jobs"],"summary":"Delete Job","operationId":"delete_job_api_jobs__job_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/{job_id}/status":{"patch":{"tags":["jobs"],"summary":"Update Job Status","operationId":"update_job_status_api_jobs__job_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/jobs/backfill-fit-scores":{"post":{"tags":["jobs"],"summary":"Backfill Fit Scores","description":"Run fit analysis for all user jobs that don't have one yet.","operationId":"backfill_fit_scores_api_jobs_backfill_fit_scores_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/contacts/job/{job_id}":{"get":{"tags":["contacts"],"summary":"List Contacts","operationId":"list_contacts_api_contacts_job__job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactRead"},"title":"Response List Contacts Api Contacts Job  Job Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/contacts/{contact_id}":{"get":{"tags":["contacts"],"summary":"Get Contact","operationId":"get_contact_api_contacts__contact_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["contacts"],"summary":"Update Contact","operationId":"update_contact_api_contacts__contact_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["contacts"],"summary":"Delete Contact","operationId":"delete_contact_api_contacts__contact_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/contacts/":{"post":{"tags":["contacts"],"summary":"Create Contact","operationId":"create_contact_api_contacts__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/contacts/{contact_id}/status":{"patch":{"tags":["contacts"],"summary":"Update Contact Status","operationId":"update_contact_status_api_contacts__contact_id__status_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StatusUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/emails/contact/{contact_id}":{"get":{"tags":["emails"],"summary":"List Drafts","operationId":"list_drafts_api_emails_contact__contact_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EmailDraftRead"},"title":"Response List Drafts Api Emails Contact  Contact Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/emails/":{"post":{"tags":["emails"],"summary":"Create Draft","operationId":"create_draft_api_emails__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/emails/{draft_id}":{"patch":{"tags":["emails"],"summary":"Update Draft","operationId":"update_draft_api_emails__draft_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/emails/{draft_id}/mark-sent":{"post":{"tags":["emails"],"summary":"Mark Sent","operationId":"mark_sent_api_emails__draft_id__mark_sent_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reminders/":{"get":{"tags":["reminders"],"summary":"List Reminders","operationId":"list_reminders_api_reminders__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"upcoming","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Upcoming"}},{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ReminderRead"},"title":"Response List Reminders Api Reminders  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["reminders"],"summary":"Create Reminder","operationId":"create_reminder_api_reminders__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reminders/{reminder_id}/complete":{"patch":{"tags":["reminders"],"summary":"Complete Reminder","operationId":"complete_reminder_api_reminders__reminder_id__complete_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"integer","title":"Reminder Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReminderRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/reminders/{reminder_id}":{"delete":{"tags":["reminders"],"summary":"Delete Reminder","operationId":"delete_reminder_api_reminders__reminder_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"reminder_id","in":"path","required":true,"schema":{"type":"integer","title":"Reminder Id"}}],"responses":{"204":{"description":"Successful Response"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/activity/":{"get":{"tags":["activity"],"summary":"List Activity","operationId":"list_activity_api_activity__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Job Id"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":20,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActivityLogRead"},"title":"Response List Activity Api Activity  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/profile/":{"get":{"tags":["profile"],"summary":"Get Profile","operationId":"get_profile_api_profile__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["profile"],"summary":"Upsert Profile","operationId":"upsert_profile_api_profile__put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/parse-resume":{"post":{"tags":["profile"],"summary":"Parse Resume File","description":"Parse a resume from an uploaded PDF file and save to profile.","operationId":"parse_resume_file_api_profile_parse_resume_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_parse_resume_file_api_profile_parse_resume_post"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/parse-resume-text":{"post":{"tags":["profile"],"summary":"Parse Resume Text","description":"Parse a resume from pasted text and save to profile.","operationId":"parse_resume_text_api_profile_parse_resume_text_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeTextRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/profile/resume-info":{"get":{"tags":["profile"],"summary":"Get Resume Info","description":"Get resume file metadata.","operationId":"get_resume_info_api_profile_resume_info_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/ai/parse-job":{"post":{"tags":["ai"],"summary":"Parse Job","operationId":"parse_job_api_ai_parse_job_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/ai/parse-job-url":{"post":{"tags":["ai"],"summary":"Parse Job Url","operationId":"parse_job_url_api_ai_parse_job_url_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseJobUrlRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/ai/discover-contacts/{job_id}":{"post":{"tags":["ai"],"summary":"Discover Contacts","operationId":"discover_contacts_api_ai_discover_contacts__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/retry-with-linkedin-url/{job_id}":{"post":{"tags":["ai"],"summary":"Retry With Linkedin Url","description":"User-provided LinkedIn URL fallback. Called when v2 discovery surfaced\nthe ``unresolvable`` SSE event and the user pasted the company's LinkedIn\nURL into the modal.\n\nFlow:\n  1. Parse slug from URL (accepts full URL or raw slug).\n  2. Call LinkdAPI to confirm the slug is a real company entity.\n  3. Save URL to ``job.linkedin_company_url`` so v2's resolver\n     short-circuits straight to it.\n  4. Reserve a run (no charge yet).\n  5. Run discovery (which will now succeed — the resolver short-circuits).\n     The 1-credit charge is taken only if the result is good.\n  6. Auto-research every discovered contact.\n  7. Generate summary + fit (best-effort, fail-open).\n\nReturns ``{contacts, credits, refunded?}`` on success. Returns 400 if the\nURL is malformed or the slug doesn't resolve on LinkedIn.","operationId":"retry_with_linkedin_url_api_ai_retry_with_linkedin_url__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkedInUrlRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/research-contact/{contact_id}":{"post":{"tags":["ai"],"summary":"Research Contact","description":"FOX-66 deep-dive research.\n\nPulls the contact's recent posts/comments and their company's news from\nLinkdAPI when a URN is available; falls back to Claude with built-in\nweb_search when it isn't. Synthesizes 4–6 outreach angles each citing a\nreal source. Caches result on Contact; idempotent on subsequent calls.","operationId":"research_contact_api_ai_research_contact__contact_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/draft-email/{contact_id}":{"post":{"tags":["ai"],"summary":"Draft Email","operationId":"draft_email_api_ai_draft_email__contact_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DraftEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/discover-peers/{job_id}":{"post":{"tags":["ai"],"summary":"Discover Peers","operationId":"discover_peers_api_ai_discover_peers__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/outreach-strategy/{job_id}":{"post":{"tags":["ai"],"summary":"Outreach Strategy","operationId":"outreach_strategy_api_ai_outreach_strategy__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/backfill-job-pipeline/{job_id}":{"post":{"tags":["ai"],"summary":"Backfill Job Pipeline","description":"Run any post-discovery pipeline stages that didn't complete on the\noriginal SSE run. Idempotent — skips stages whose output is already\npresent. No credit charged.\n\nRecovers from the silent-failure mode where individual stages of\n``/process-job-pipeline`` raise exceptions (typically transient\nAnthropic 5xx / 429 from Sonnet calls firing right after discovery\ncompletes), get caught by each stage's try/except, and yielded as an\n``error`` SSE event the frontend treats as a warning. By the time the\nuser lands on the job page, the API is usually back; this lets them\nrecover everything in one call instead of clicking the per-stage\n\"Generate AI Summary\" / \"Generate Outreach Strategy\" / \"Research\"\nbuttons separately. Prod incidents that motivated this: UHC job 280\n(2026-05-03) and Vertex Inc. jobs 311 + 313 (2026-05-11) — both had\ndiscovered_contacts logged but every subsequent Sonnet stage failed.\n\nStages run (all in parallel, all best-effort):\n  1. Auto-research the suggested-first contact (only if its\n     ``researched_at`` AND ``research_attempted_at`` are both NULL).\n  2. Generate summary_card + fit_analysis (only if either is missing\n     and the user has a profile to compare against for fit).\n  3. Generate outreach_strategy (only if missing AND we have at least\n     one decision-maker contact).\n\nReturns a dict with which stages ran and which failed, e.g.:\n  ``{\"ran\": [\"summary_fit\", \"strategy\"], \"failed\": {\"auto_research\": \"...\"},\n     \"skipped\": [\"nothing_missing\"]}``","operationId":"backfill_job_pipeline_api_ai_backfill_job_pipeline__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/generate-summary/{job_id}":{"post":{"tags":["ai"],"summary":"Generate Summary","operationId":"generate_summary_api_ai_generate_summary__job_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/humanize-email/{draft_id}":{"post":{"tags":["ai"],"summary":"Humanize Email Endpoint","operationId":"humanize_email_endpoint_api_ai_humanize_email__draft_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/refine-email/{draft_id}":{"post":{"tags":["ai"],"summary":"Refine Email Endpoint","operationId":"refine_email_endpoint_api_ai_refine_email__draft_id__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"draft_id","in":"path","required":true,"schema":{"type":"integer","title":"Draft Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RefineEmailRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailDraftRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/ai/process-job-pipeline":{"post":{"tags":["ai"],"summary":"Process Job Pipeline","description":"SSE endpoint: parse → save → discover contacts → strategy → summary → fit analysis","operationId":"process_job_pipeline_api_ai_process_job_pipeline_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseJobRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/feedback/":{"post":{"tags":["feedback"],"summary":"Submit Feedback","operationId":"submit_feedback_api_feedback__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FeedbackRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/feedback/contact/{contact_id}":{"get":{"tags":["feedback"],"summary":"Get Contact Feedback","operationId":"get_contact_feedback_api_feedback_contact__contact_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/FeedbackRead"},"title":"Response Get Contact Feedback Api Feedback Contact  Contact Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback/analytics":{"get":{"tags":["feedback"],"summary":"Feedback Analytics","operationId":"feedback_analytics_api_feedback_analytics_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/feedback/contact-accuracy":{"post":{"tags":["feedback"],"summary":"Submit Contact Accuracy","operationId":"submit_contact_accuracy_api_feedback_contact_accuracy_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAccuracyFeedbackCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactAccuracyFeedbackRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/feedback/contact-accuracy/{contact_id}":{"get":{"tags":["feedback"],"summary":"Get Contact Accuracy","operationId":"get_contact_accuracy_api_feedback_contact_accuracy__contact_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"contact_id","in":"path","required":true,"schema":{"type":"integer","title":"Contact Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ContactAccuracyFeedbackRead"},"title":"Response Get Contact Accuracy Api Feedback Contact Accuracy  Contact Id  Get"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/feedback/bug-report":{"post":{"tags":["feedback"],"summary":"Submit Bug Report","operationId":"submit_bug_report_api_feedback_bug_report_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BugReportCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BugReportRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/events/":{"post":{"tags":["events"],"summary":"Log Event","description":"Accept frontend-only events (session_started, page views, etc.).","operationId":"log_event_api_events__post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserEventCreate"}}},"required":true},"responses":{"202":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/prompts/":{"get":{"tags":["prompts"],"summary":"Get Prompts","operationId":"get_prompts_api_prompts__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/SystemPromptRead"},"type":"array","title":"Response Get Prompts Api Prompts  Get"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/prompts/{key}":{"get":{"tags":["prompts"],"summary":"Get Prompt","operationId":"get_prompt_api_prompts__key__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemPromptRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["prompts"],"summary":"Update Prompt","operationId":"update_prompt_api_prompts__key__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"key","in":"path","required":true,"schema":{"type":"string","title":"Key"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemPromptUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemPromptRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/billing/packs":{"get":{"tags":["billing"],"summary":"List Credit Packs","description":"Public pack catalogue. Stripe Price IDs are stripped — frontend only\nneeds id/credits/price_usd to render cards and pass pack_id to checkout.","operationId":"list_credit_packs_api_billing_packs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/billing/credits":{"get":{"tags":["billing"],"summary":"Get Credits","operationId":"get_credits_api_billing_credits_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/redeem-code":{"post":{"tags":["billing"],"summary":"Redeem Promo Code","description":"Redeem a coach/promo code for bonus credits. One code per user, ever.","operationId":"redeem_promo_code_api_billing_redeem_code_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemCodeRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/checkout":{"post":{"tags":["billing"],"summary":"Create Checkout Session","operationId":"create_checkout_session_api_billing_checkout_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckoutRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/billing/webhook":{"post":{"tags":["billing"],"summary":"Stripe Webhook","description":"Stripe webhook — NO auth middleware. Signature verification IS the auth.","operationId":"stripe_webhook_api_billing_webhook_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/blog/posts":{"get":{"tags":["blog"],"summary":"List Published Posts","operationId":"list_published_posts_api_blog_posts_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Per Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/posts/{slug}":{"get":{"tags":["blog"],"summary":"Get Published Post","operationId":"get_published_post_api_blog_posts__slug__get","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string","title":"Slug"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/admin/posts/{post_id}":{"get":{"tags":["blog"],"summary":"Admin Get Post","operationId":"admin_get_post_api_blog_admin_posts__post_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["blog"],"summary":"Admin Update Post","operationId":"admin_update_post_api_blog_admin_posts__post_id__put","security":[{"HTTPBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["blog"],"summary":"Admin Delete Post","operationId":"admin_delete_post_api_blog_admin_posts__post_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/admin/posts":{"post":{"tags":["blog"],"summary":"Admin Create Post","operationId":"admin_create_post_api_blog_admin_posts_post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"get":{"tags":["blog"],"summary":"Admin List Posts","operationId":"admin_list_posts_api_blog_admin_posts_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Per Page"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/admin/publish-scheduled":{"post":{"tags":["blog"],"summary":"Admin Publish Scheduled","operationId":"admin_publish_scheduled_api_blog_admin_publish_scheduled_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/blog/admin/api/posts":{"get":{"tags":["blog"],"summary":"Api List Posts","operationId":"api_list_posts_api_blog_admin_api_posts_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":1,"default":1,"title":"Page"}},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":20,"title":"Per Page"}},{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"batch_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostListResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["blog"],"summary":"Api Create Post","operationId":"api_create_post_api_blog_admin_api_posts_post","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostCreateAPI"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/admin/api/posts/{post_id}":{"get":{"tags":["blog"],"summary":"Api Get Post","operationId":"api_get_post_api_blog_admin_api_posts__post_id__get","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"put":{"tags":["blog"],"summary":"Api Update Post","operationId":"api_update_post_api_blog_admin_api_posts__post_id__put","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostUpdateAPI"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/admin/api/posts/{post_id}/publish":{"post":{"tags":["blog"],"summary":"Api Publish Post","operationId":"api_publish_post_api_blog_admin_api_posts__post_id__publish_post","parameters":[{"name":"post_id","in":"path","required":true,"schema":{"type":"integer","title":"Post Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BlogPostResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/blog/admin/api/tags":{"get":{"tags":["blog"],"summary":"Api List Tags","operationId":"api_list_tags_api_blog_admin_api_tags_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"items":{"$ref":"#/components/schemas/BlogTagResponse"},"type":"array","title":"Response Api List Tags Api Blog Admin Api Tags Get"}}}}}}},"/api/onboarding/state":{"get":{"tags":["onboarding"],"summary":"Get State","operationId":"get_state_api_onboarding_state_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingState"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/onboarding/advance":{"post":{"tags":["onboarding"],"summary":"Advance","operationId":"advance_api_onboarding_advance_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingAdvance"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingState"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/onboarding/derive-criteria":{"post":{"tags":["onboarding"],"summary":"Derive Criteria","description":"Pre-fill match criteria from the user's resume. Returns empty defaults\nwhen the resume hasn't parsed yet (or never will) so the frontend can\nrender the form and let the user fill it in by hand — never blocks the\nonboarding flow. The form always works without this prefill.","operationId":"derive_criteria_api_onboarding_derive_criteria_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCriteria"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/onboarding/match-jobs":{"post":{"tags":["onboarding"],"summary":"Match Jobs","operationId":"match_jobs_api_onboarding_match_jobs_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingCriteria"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingMatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/onboarding/pick-match":{"post":{"tags":["onboarding"],"summary":"Pick Match","description":"Preflight for the onboarding match pipeline.\n\nReturns ``raw_text`` (LinkdAPI JD if available, metadata-only fallback) and\nthe metadata needed to seed ``/api/ai/process-job-pipeline``. The Job row\nitself is created by the SSE pipeline so onboarding and Smart Paste share\none job-creation path — see [.claude/plans/i-want-to-update-elegant-peacock.md].\n\nFor LinkedIn job URLs, fetch the real JD via LinkdAPI up front. Without\nthis, discovery would run on metadata-only text (\"[Added from Match Me]…\nLinkedIn URL: …\") and parse_job would correctly report \"the role's\nspecific responsibilities are not provided\" — leaving discovery blind.\nLive example: job 213 Sinch Sr PMM → surfaced a junior IC at a Sinch\nsubsidiary as the \"hiring manager\" because discovery had no signal.","operationId":"pick_match_api_onboarding_pick_match_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingPickMatch"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingPickMatchResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/onboarding/complete":{"post":{"tags":["onboarding"],"summary":"Complete","operationId":"complete_api_onboarding_complete_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingState"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/job-matches/preferences":{"get":{"tags":["job-matches"],"summary":"Get Preferences","operationId":"get_preferences_api_job_matches_preferences_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobMatchPreferencesRead"}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["job-matches"],"summary":"Update Preferences","description":"Update prefs. Does NOT regenerate today's batch — changes apply tomorrow.","operationId":"update_preferences_api_job_matches_preferences_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobMatchPreferencesUpdate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobMatchPreferencesRead"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/job-matches/":{"get":{"tags":["job-matches"],"summary":"Get Matches","description":"Return the current batch. Generates lazily if there isn't a fresh one.\n\nFirst-visit behavior: if the user has no preferences row, derive one from\ntheir resume (single LLM call) before generating, so the user never has\nto fill a form before seeing matches.","operationId":"get_matches_api_job_matches__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobMatchBatchResponse"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/job-matches/{match_id}/find-hms":{"post":{"tags":["job-matches"],"summary":"Find Hms","description":"Pre-flight for the Daily Match → pipeline conversion.\n\nFetches the LinkedIn JD via LinkdAPI (we absorb that ~$0.005) so the\nSmart Paste SSE pipeline has real raw_text to parse. Does NOT charge a\ncredit here — the SSE pipeline charges 1 credit when it runs discovery,\nsame as a manually-pasted job. This keeps daily-match conversions on the\nexact same code path + UX as Smart Paste.\n\nIdempotent: if the match is already converted, returns the existing\npipeline_job_id so the frontend can navigate directly without re-running.","operationId":"find_hms_api_job_matches__match_id__find_hms_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"match_id","in":"path","required":true,"schema":{"type":"integer","title":"Match Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/FindHMsPreflightResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/coach-outreach/run":{"post":{"tags":["admin-coach-outreach"],"summary":"Run","description":"SSE: process pasted emails one-by-one, streaming progress per prospect.","operationId":"run_api_admin_coach_outreach_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/coach-outreach/company-run":{"post":{"tags":["admin-coach-outreach"],"summary":"Company Run","description":"SSE: pull a company's roster by title, rank, and draft outreach for the top N.","operationId":"company_run_api_admin_coach_outreach_company_run_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompanyRunRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/coach-outreach/prospects":{"get":{"tags":["admin-coach-outreach"],"summary":"List Prospects","description":"List recent prospects, newest first.","operationId":"list_prospects_api_admin_coach_outreach_prospects_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/coach-outreach/saved-companies":{"get":{"tags":["admin-coach-outreach"],"summary":"List Saved Companies","description":"List the admin's auto-saved companies, most recently used first, each\nwith how many prospects have been pulled from it so far.","operationId":"list_saved_companies_api_admin_coach_outreach_saved_companies_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/coach-outreach/saved-companies/{company_pk}":{"delete":{"tags":["admin-coach-outreach"],"summary":"Delete Saved Company","description":"Remove a saved company (admin-owned). Already-pulled prospects stay.","operationId":"delete_saved_company_api_admin_coach_outreach_saved_companies__company_pk__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"company_pk","in":"path","required":true,"schema":{"type":"integer","title":"Company Pk"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/coach-outreach/prospects/{prospect_id}":{"patch":{"tags":["admin-coach-outreach"],"summary":"Update Prospect","description":"Save an edited draft, mark a prospect sent, or skip it.","operationId":"update_prospect_api_admin_coach_outreach_prospects__prospect_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"integer","title":"Prospect Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProspectUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/coach-outreach/prospects/{prospect_id}/redraft":{"post":{"tags":["admin-coach-outreach"],"summary":"Redraft Prospect Route","description":"Regenerate the draft for a prospect using the current prompt.","operationId":"redraft_prospect_route_api_admin_coach_outreach_prospects__prospect_id__redraft_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"integer","title":"Prospect Id"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedraftRequest","default":{}}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/coach-outreach/prospects/{prospect_id}/identify":{"post":{"tags":["admin-coach-outreach"],"summary":"Identify Prospect","description":"needs_review recovery: research + draft from an admin-supplied LinkedIn URL.","operationId":"identify_prospect_api_admin_coach_outreach_prospects__prospect_id__identify_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"prospect_id","in":"path","required":true,"schema":{"type":"integer","title":"Prospect Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/IdentifyRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/coach-leads":{"post":{"tags":["coach-leads"],"summary":"Create Coach Lead","operationId":"create_coach_lead_api_coach_leads_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoachLeadCreate"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/moment-of-truth":{"get":{"tags":["moment-of-truth"],"summary":"List Deliveries","operationId":"list_deliveries_api_admin_moment_of_truth_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/moment-of-truth/candidates":{"get":{"tags":["moment-of-truth"],"summary":"List Candidates","description":"Everyone currently eligible for a recovery email but not yet\ntriggered — the same eligibility rules as the sweep (mot_sweep.py), just\nwith a much larger limit since this is for browsing, not sending. A user\ndrops off this list the moment a delivery row exists for them (Generate,\nor the automated sweep), matching the one-email-per-user-ever dedupe.","operationId":"list_candidates_api_admin_moment_of_truth_candidates_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/api/admin/moment-of-truth/{delivery_id}":{"get":{"tags":["moment-of-truth"],"summary":"Get Delivery","operationId":"get_delivery_api_admin_moment_of_truth__delivery_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"integer","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/moment-of-truth/{delivery_id}/approve":{"post":{"tags":["moment-of-truth"],"summary":"Approve Delivery","operationId":"approve_delivery_api_admin_moment_of_truth__delivery_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"integer","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/moment-of-truth/{delivery_id}/reject":{"post":{"tags":["moment-of-truth"],"summary":"Reject Delivery","operationId":"reject_delivery_api_admin_moment_of_truth__delivery_id__reject_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"delivery_id","in":"path","required":true,"schema":{"type":"integer","title":"Delivery Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/admin/moment-of-truth/trigger":{"post":{"tags":["moment-of-truth"],"summary":"Trigger Delivery","description":"Queue a delivery on demand for a user (testing without waiting for the\nsweep). ``user`` is a numeric id or an email. Returns immediately with the\n``pending`` row; the pipeline + email build run in the background (they take\ntens of seconds) and the row flips to ``ready_for_review`` (or ``failed`` /\n``skipped``) — the admin list polls for the update.","operationId":"trigger_delivery_api_admin_moment_of_truth_trigger_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/MoTTriggerRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/api/unsubscribe":{"get":{"tags":["moment-of-truth"],"summary":"Unsubscribe","description":"One-click unsubscribe from recovery emails. Sets the opt-out flag.","operationId":"unsubscribe_api_unsubscribe_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"text/html":{"schema":{"type":"string"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/api/health":{"get":{"summary":"Health","operationId":"health_api_health_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/ready":{"get":{"summary":"Ready","operationId":"ready_api_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/api/contact":{"post":{"summary":"Contact Form","description":"Send a contact form message to the site owner.","operationId":"contact_form_api_contact_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ContactFormRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/{full_path}":{"get":{"summary":"Serve Spa","operationId":"serve_spa__full_path__get","parameters":[{"name":"full_path","in":"path","required":true,"schema":{"type":"string","title":"Full Path"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"ActivityLogRead":{"properties":{"id":{"type":"integer","title":"Id"},"job_id":{"type":"integer","title":"Job Id"},"contact_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Id"},"action":{"type":"string","title":"Action"},"details":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Details"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"job_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Company"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"}},"type":"object","required":["id","job_id","action","created_at"],"title":"ActivityLogRead"},"AnalystUpdateRequest":{"properties":{"is_analyst":{"type":"boolean","title":"Is Analyst"}},"type":"object","required":["is_analyst"],"title":"AnalystUpdateRequest"},"AnalyticsIdsRequest":{"properties":{"ga_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ga Client Id"},"posthog_distinct_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posthog Distinct Id"}},"type":"object","title":"AnalyticsIdsRequest","description":"Client-captured analytics identities, POSTed once after login so\nserver-side events attribute to the same person the browser SDKs created."},"BenchmarkPresetCreate":{"properties":{"name":{"type":"string","title":"Name"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"config_json":{"type":"object","title":"Config Json"}},"type":"object","required":["name","config_json"],"title":"BenchmarkPresetCreate"},"BlogPostCreate":{"properties":{"title":{"type":"string","title":"Title"},"slug":{"type":"string","title":"Slug"},"content_markdown":{"type":"string","title":"Content Markdown"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"status":{"type":"string","title":"Status","default":"draft"},"publish_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publish At"},"primary_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Keyword"},"secondary_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Secondary Keywords"},"source_articles":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Source Articles"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"batch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch Id"},"cta_headline":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Cta Headline"},"cta_button":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Cta Button"},"noindex":{"type":"boolean","title":"Noindex","default":false}},"type":"object","required":["title","slug","content_markdown"],"title":"BlogPostCreate"},"BlogPostCreateAPI":{"properties":{"title":{"type":"string","title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"content_markdown":{"type":"string","title":"Content Markdown"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtitle"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"status":{"type":"string","title":"Status","default":"draft"},"publish_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publish At"},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For"},"primary_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Keyword"},"secondary_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Secondary Keywords"},"source_articles":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Source Articles"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"batch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch Id"},"cta_headline":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Cta Headline"},"cta_button":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Cta Button"},"noindex":{"type":"boolean","title":"Noindex","default":false}},"type":"object","required":["title","content_markdown"],"title":"BlogPostCreateAPI","description":"Schema for MCP/API-key blog creation — slug is optional (auto-generated from title)."},"BlogPostListItem":{"properties":{"id":{"type":"integer","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"author_name":{"type":"string","title":"Author Name"},"status":{"type":"string","title":"Status"},"publish_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish At"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"primary_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Keyword"},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Word Count"},"reading_time_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reading Time Minutes"},"batch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch Id"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","slug","title","author_name","status","created_at"],"title":"BlogPostListItem"},"BlogPostListResponse":{"properties":{"posts":{"items":{"$ref":"#/components/schemas/BlogPostListItem"},"type":"array","title":"Posts"},"total":{"type":"integer","title":"Total"},"page":{"type":"integer","title":"Page"},"per_page":{"type":"integer","title":"Per Page"},"total_pages":{"type":"integer","title":"Total Pages"}},"type":"object","required":["posts","total","page","per_page","total_pages"],"title":"BlogPostListResponse"},"BlogPostResponse":{"properties":{"id":{"type":"integer","title":"Id"},"slug":{"type":"string","title":"Slug"},"title":{"type":"string","title":"Title"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"content_markdown":{"type":"string","title":"Content Markdown"},"content_html":{"type":"string","title":"Content Html"},"author_name":{"type":"string","title":"Author Name"},"status":{"type":"string","title":"Status"},"publish_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Publish At"},"published_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Published At"},"primary_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Keyword"},"secondary_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Secondary Keywords"},"source_articles":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Source Articles"},"word_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Word Count"},"reading_time_minutes":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Reading Time Minutes"},"batch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch Id"},"cta_headline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta Headline"},"cta_button":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Cta Button"},"noindex":{"type":"boolean","title":"Noindex","default":false},"redirect_to":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Redirect To"},"tags":{"items":{"type":"string"},"type":"array","title":"Tags","default":[]},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["id","slug","title","content_markdown","content_html","author_name","status","created_at","updated_at"],"title":"BlogPostResponse"},"BlogPostUpdate":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"content_markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Markdown"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"publish_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publish At"},"primary_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Keyword"},"secondary_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Secondary Keywords"},"source_articles":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Source Articles"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"cta_headline":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Cta Headline"},"cta_button":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Cta Button"},"noindex":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Noindex"},"redirect_to":{"anyOf":[{"type":"string","maxLength":300,"pattern":"^(/[a-z0-9][a-z0-9/_-]*|[a-z0-9-]*)$"},{"type":"null"}],"title":"Redirect To"}},"type":"object","title":"BlogPostUpdate"},"BlogPostUpdateAPI":{"properties":{"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"slug":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Slug"},"content_markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Content Markdown"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subtitle"},"meta_description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Meta Description"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"publish_at":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Publish At"},"scheduled_for":{"anyOf":[{"type":"string","format":"date-time"},{"type":"null"}],"title":"Scheduled For"},"primary_keyword":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Primary Keyword"},"secondary_keywords":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Secondary Keywords"},"source_articles":{"anyOf":[{"items":{"type":"object"},"type":"array"},{"type":"null"}],"title":"Source Articles"},"tags":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Tags"},"cta_headline":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Cta Headline"},"cta_button":{"anyOf":[{"type":"string","maxLength":36},{"type":"null"}],"title":"Cta Button"},"noindex":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Noindex"},"redirect_to":{"anyOf":[{"type":"string","maxLength":300,"pattern":"^(/[a-z0-9][a-z0-9/_-]*|[a-z0-9-]*)$"},{"type":"null"}],"title":"Redirect To"}},"type":"object","title":"BlogPostUpdateAPI","description":"Schema for MCP/API-key blog updates — supports scheduled_for alias."},"BlogTagResponse":{"properties":{"id":{"type":"integer","title":"Id"},"name":{"type":"string","title":"Name"},"slug":{"type":"string","title":"Slug"}},"type":"object","required":["id","name","slug"],"title":"BlogTagResponse"},"Body_parse_resume_file_api_profile_parse_resume_post":{"properties":{"file":{"type":"string","format":"binary","title":"File"}},"type":"object","title":"Body_parse_resume_file_api_profile_parse_resume_post"},"BriefResponse":{"properties":{"markdown":{"type":"string","title":"Markdown"},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At"}},"type":"object","required":["markdown"],"title":"BriefResponse"},"BugReportCreate":{"properties":{"area":{"type":"string","title":"Area"},"description":{"type":"string","title":"Description"}},"type":"object","required":["area","description"],"title":"BugReportCreate"},"BugReportRead":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"user_email":{"type":"string","title":"User Email"},"user_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"User Name"},"area":{"type":"string","title":"Area"},"description":{"type":"string","title":"Description"},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","user_id","user_email","area","description","status","created_at"],"title":"BugReportRead"},"ChangeEmailRequest":{"properties":{"new_email":{"type":"string","title":"New Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["new_email","password"],"title":"ChangeEmailRequest"},"ChangePasswordRequest":{"properties":{"current_password":{"type":"string","title":"Current Password"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["current_password","new_password"],"title":"ChangePasswordRequest"},"CheckoutRequest":{"properties":{"pack_id":{"type":"string","title":"Pack Id"},"ga_client_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ga Client Id"}},"type":"object","required":["pack_id"],"title":"CheckoutRequest"},"CoachLeadCreate":{"properties":{"name":{"type":"string","maxLength":120,"title":"Name"},"email":{"type":"string","maxLength":254,"title":"Email"},"company":{"type":"string","maxLength":160,"title":"Company"},"profile_url":{"type":"string","maxLength":300,"title":"Profile Url"},"client_count":{"anyOf":[{"type":"string","maxLength":40},{"type":"null"}],"title":"Client Count"},"share_method":{"anyOf":[{"type":"string","maxLength":60},{"type":"null"}],"title":"Share Method"},"nickname":{"anyOf":[{"type":"string","maxLength":120},{"type":"null"}],"title":"Nickname"}},"type":"object","required":["name","email","company","profile_url"],"title":"CoachLeadCreate"},"CommentTargetsRequest":{"properties":{"per_keyword":{"type":"integer","maximum":15.0,"minimum":1.0,"title":"Per Keyword","default":5},"top":{"type":"integer","maximum":50.0,"minimum":1.0,"title":"Top","default":20},"include_comments":{"type":"boolean","title":"Include Comments","default":true},"hashtags":{"type":"string","title":"Hashtags","default":""}},"type":"object","title":"CommentTargetsRequest"},"CompanyResponseRequest":{"properties":{"company":{"type":"string","minLength":2,"title":"Company"},"event":{"type":"string","title":"Event","default":"layoff"},"extra":{"type":"string","title":"Extra","default":""}},"type":"object","required":["company"],"title":"CompanyResponseRequest"},"CompanyRunRequest":{"properties":{"company_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Id"},"company_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Url"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"generalized_title":{"type":"string","title":"Generalized Title"},"email_pattern":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email Pattern"},"count":{"type":"integer","title":"Count","default":5},"premium_only":{"type":"boolean","title":"Premium Only","default":false},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"headline_include":{"items":{"type":"string"},"type":"array","title":"Headline Include","default":[]},"headline_exclude":{"items":{"type":"string"},"type":"array","title":"Headline Exclude","default":[]}},"type":"object","required":["generalized_title"],"title":"CompanyRunRequest"},"ContactAccuracyFeedbackCreate":{"properties":{"contact_id":{"type":"integer","title":"Contact Id"},"feedback":{"type":"string","title":"Feedback"}},"type":"object","required":["contact_id","feedback"],"title":"ContactAccuracyFeedbackCreate"},"ContactAccuracyFeedbackRead":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"contact_id":{"type":"integer","title":"Contact Id"},"job_id":{"type":"integer","title":"Job Id"},"confidence_level_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Level Given"},"persona_confidence_given":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Persona Confidence Given"},"estimated_company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Company Size"},"feedback":{"type":"string","title":"Feedback"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","user_id","contact_id","job_id","feedback","created_at"],"title":"ContactAccuracyFeedbackRead"},"ContactCreate":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"name":{"type":"string","title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"confidence_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Level"},"confidence_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Reasoning"},"contact_type":{"type":"string","title":"Contact Type","default":"decision_maker"},"is_suggested_first_contact":{"type":"boolean","title":"Is Suggested First Contact","default":false},"suggested_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Reason"},"status":{"type":"string","title":"Status","default":"Identified"},"research_brief":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Research Brief"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["job_id","name"],"title":"ContactCreate"},"ContactFormRequest":{"properties":{"name":{"type":"string","title":"Name"},"email":{"type":"string","title":"Email"},"message":{"type":"string","title":"Message"}},"type":"object","required":["name","email","message"],"title":"ContactFormRequest"},"ContactRead":{"properties":{"id":{"type":"integer","title":"Id"},"job_id":{"type":"integer","title":"Job Id"},"name":{"type":"string","title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"confidence_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Level"},"confidence_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Reasoning"},"contact_type":{"type":"string","title":"Contact Type","default":"decision_maker"},"is_suggested_first_contact":{"type":"boolean","title":"Is Suggested First Contact","default":false},"suggested_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Suggested Reason"},"status":{"type":"string","title":"Status"},"research_brief":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Research Brief"},"profile_picture_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Profile Picture Url"},"is_hiring":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Hiring"},"is_premium":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Premium"},"follower_count":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Follower Count"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"deterministic_score":{"anyOf":[{"type":"number"},{"type":"null"}],"title":"Deterministic Score"},"industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Industry"},"role_relationship":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role Relationship"},"evidence_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Evidence Level"},"researched_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Researched At"},"research_attempted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Research Attempted At"},"urn":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Urn"},"company_linkedin_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Linkedin Id"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"email_drafts":{"items":{"$ref":"#/components/schemas/EmailDraftRead"},"type":"array","title":"Email Drafts","default":[]}},"type":"object","required":["id","job_id","name","status","created_at","updated_at"],"title":"ContactRead"},"ContactUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"confidence_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Level"},"confidence_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Confidence Reasoning"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"ContactUpdate"},"CreateBenchmarkRunRequest":{"properties":{"golden_job_ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"title":"Golden Job Ids"},"config_json":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Config Json"},"preset_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Preset Id"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"budget_cap_usd":{"type":"number","title":"Budget Cap Usd","default":10.0}},"type":"object","title":"CreateBenchmarkRunRequest"},"CreditsGrantRequest":{"properties":{"amount":{"type":"integer","title":"Amount"}},"type":"object","required":["amount"],"title":"CreditsGrantRequest"},"DeleteAccountRequest":{"properties":{"password":{"type":"string","title":"Password","default":""}},"type":"object","title":"DeleteAccountRequest"},"DraftEmailRequest":{"properties":{"draft_type":{"type":"string","title":"Draft Type","default":"initial"},"format":{"type":"string","title":"Format","default":"email"},"selected_angles":{"items":{},"type":"array","title":"Selected Angles","default":[]}},"type":"object","title":"DraftEmailRequest"},"EmailDraftCreate":{"properties":{"contact_id":{"type":"integer","title":"Contact Id"},"subject":{"type":"string","title":"Subject"},"body":{"type":"string","title":"Body"},"draft_type":{"type":"string","title":"Draft Type","default":"initial"},"format":{"type":"string","title":"Format","default":"email"}},"type":"object","required":["contact_id","subject","body"],"title":"EmailDraftCreate"},"EmailDraftRead":{"properties":{"id":{"type":"integer","title":"Id"},"contact_id":{"type":"integer","title":"Contact Id"},"version":{"type":"integer","title":"Version"},"subject":{"type":"string","title":"Subject"},"body":{"type":"string","title":"Body"},"draft_type":{"type":"string","title":"Draft Type"},"format":{"type":"string","title":"Format","default":"email"},"is_sent":{"type":"boolean","title":"Is Sent"},"sent_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sent At"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"grounding":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Grounding"}},"type":"object","required":["id","contact_id","version","subject","body","draft_type","is_sent","created_at"],"title":"EmailDraftRead"},"EmailDraftUpdate":{"properties":{"subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Subject"},"body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Body"}},"type":"object","title":"EmailDraftUpdate"},"FeedbackCreate":{"properties":{"contact_id":{"type":"integer","title":"Contact Id"},"target_type":{"type":"string","title":"Target Type"},"target_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Index"},"signal":{"type":"string","title":"Signal"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"reason_detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason Detail"}},"type":"object","required":["contact_id","target_type","signal"],"title":"FeedbackCreate"},"FeedbackRead":{"properties":{"id":{"type":"integer","title":"Id"},"user_id":{"type":"integer","title":"User Id"},"contact_id":{"type":"integer","title":"Contact Id"},"job_id":{"type":"integer","title":"Job Id"},"target_type":{"type":"string","title":"Target Type"},"target_index":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Target Index"},"signal":{"type":"string","title":"Signal"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason"},"reason_detail":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Reason Detail"},"prompt_version":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Prompt Version"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"}},"type":"object","required":["id","user_id","contact_id","job_id","target_type","signal","created_at"],"title":"FeedbackRead"},"FindHMsPreflightResponse":{"properties":{"already_converted":{"type":"boolean","title":"Already Converted"},"pipeline_job_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pipeline Job Id"},"raw_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Text"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"match_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Match Id"}},"type":"object","required":["already_converted"],"title":"FindHMsPreflightResponse","description":"Lightweight pre-flight payload for the Daily Matches conversion.\n\nTwo shapes:\n  - already_converted = True → frontend skips the SSE pipeline + navigates\n    straight to /jobs/{pipeline_job_id} (idempotency on retries / refresh).\n  - already_converted = False → frontend feeds raw_text + url + match_id to\n    /api/ai/process-job-pipeline (the same Smart Paste endpoint)."},"ForgotPasswordRequest":{"properties":{"email":{"type":"string","title":"Email"}},"type":"object","required":["email"],"title":"ForgotPasswordRequest"},"GoldenJobPatch":{"properties":{"expected_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Name"},"expected_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Title"},"expected_linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Linkedin Url"},"expected_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Company"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"GoldenJobPatch"},"GoldenJobUpsert":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"expected_name":{"type":"string","title":"Expected Name"},"expected_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Title"},"expected_linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Linkedin Url"},"expected_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expected Company"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["job_id","expected_name"],"title":"GoldenJobUpsert"},"GoogleAuthRequest":{"properties":{"credential":{"type":"string","title":"Credential"},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer"},"landing_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landing Path"},"has_job_link":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Job Link"}},"type":"object","required":["credential"],"title":"GoogleAuthRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"IdentifyRequest":{"properties":{"linkedin_url":{"type":"string","title":"Linkedin Url"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["linkedin_url"],"title":"IdentifyRequest"},"JobCreate":{"properties":{"company":{"type":"string","title":"Company"},"title":{"type":"string","title":"Title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"raw_posting_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Posting Text"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"remote_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remote Status"},"seniority_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seniority Level"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"key_requirements":{"items":{"type":"string"},"type":"array","title":"Key Requirements","default":[]},"relevant_skills":{"items":{"type":"string"},"type":"array","title":"Relevant Skills","default":[]},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"hiring_manager_persona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Persona"},"hiring_manager_persona_confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Persona Confidence"},"hiring_manager_inference_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Inference Reasoning"},"estimated_company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Company Size"},"company_size_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size Reasoning"},"team_or_product_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Or Product Scope"},"linkedin_company_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Company Url"},"status":{"type":"string","title":"Status","default":"New"}},"type":"object","required":["company","title"],"title":"JobCreate"},"JobMatchBatchResponse":{"properties":{"batch_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Batch Id"},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At"},"expires_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Expires At"},"matches":{"items":{"$ref":"#/components/schemas/JobMatchItem"},"type":"array","title":"Matches","default":[]},"preferences":{"$ref":"#/components/schemas/JobMatchPreferencesRead"},"preferences_changed_since_batch":{"type":"boolean","title":"Preferences Changed Since Batch","default":false},"has_preferences":{"type":"boolean","title":"Has Preferences","default":true}},"type":"object","required":["preferences"],"title":"JobMatchBatchResponse"},"JobMatchItem":{"properties":{"id":{"type":"integer","title":"Id"},"title":{"type":"string","title":"Title"},"company_name":{"type":"string","title":"Company Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"posted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Posted At"},"ranking_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Ranking Reasoning"},"company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url"},"converted_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Converted At"},"pipeline_job_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Pipeline Job Id"}},"type":"object","required":["id","title","company_name"],"title":"JobMatchItem"},"JobMatchPreferencesRead":{"properties":{"target_titles":{"items":{"type":"string"},"type":"array","title":"Target Titles","default":[]},"target_seniority":{"type":"string","title":"Target Seniority","default":"mid"},"target_function":{"type":"string","title":"Target Function","default":"operations"},"email_digest_enabled":{"type":"boolean","title":"Email Digest Enabled","default":false},"last_changed_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Changed At"}},"type":"object","title":"JobMatchPreferencesRead"},"JobMatchPreferencesUpdate":{"properties":{"target_titles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Titles"},"target_seniority":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Seniority"},"target_function":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Function"},"email_digest_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Email Digest Enabled"}},"type":"object","title":"JobMatchPreferencesUpdate"},"JobRead":{"properties":{"id":{"type":"integer","title":"Id"},"company":{"type":"string","title":"Company"},"title":{"type":"string","title":"Title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"raw_posting_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Posting Text"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"remote_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remote Status"},"seniority_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seniority Level"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"key_requirements":{"items":{"type":"string"},"type":"array","title":"Key Requirements","default":[]},"relevant_skills":{"items":{"type":"string"},"type":"array","title":"Relevant Skills","default":[]},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"hiring_manager_persona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Persona"},"hiring_manager_persona_confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Persona Confidence"},"hiring_manager_inference_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Inference Reasoning"},"estimated_company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Company Size"},"company_size_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size Reasoning"},"team_or_product_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Or Product Scope"},"outreach_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outreach Strategy"},"outreach_strategy_is_generic":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Outreach Strategy Is Generic"},"discovery_refunded":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Discovery Refunded"},"discovery_refund_reason":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Discovery Refund Reason"},"summary_card":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary Card"},"fit_analysis":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Fit Analysis"},"contact_discovery_count":{"type":"integer","title":"Contact Discovery Count","default":0},"status":{"type":"string","title":"Status"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"},"contacts":{"items":{"$ref":"#/components/schemas/ContactRead"},"type":"array","title":"Contacts","default":[]}},"type":"object","required":["id","company","title","status","created_at","updated_at"],"title":"JobRead"},"JobStats":{"properties":{"total":{"type":"integer","title":"Total","default":0},"by_status":{"additionalProperties":{"type":"integer"},"type":"object","title":"By Status","default":{}},"emails_drafted":{"type":"integer","title":"Emails Drafted","default":0},"responses":{"type":"integer","title":"Responses","default":0}},"type":"object","title":"JobStats"},"JobUpdate":{"properties":{"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description"},"raw_posting_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Posting Text"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"remote_status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Remote Status"},"seniority_level":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Seniority Level"},"department":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Department"},"key_requirements":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Key Requirements"},"relevant_skills":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Relevant Skills"},"source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Source"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"hiring_manager_persona":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Persona"},"hiring_manager_persona_confidence":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Persona Confidence"},"hiring_manager_inference_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Hiring Manager Inference Reasoning"},"estimated_company_size":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Estimated Company Size"},"company_size_reasoning":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Size Reasoning"},"team_or_product_scope":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Team Or Product Scope"},"outreach_strategy":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Outreach Strategy"},"summary_card":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary Card"},"fit_analysis":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Fit Analysis"}},"type":"object","title":"JobUpdate"},"LatestBriefResponse":{"properties":{"markdown":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Markdown"},"generated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Generated At"}},"type":"object","title":"LatestBriefResponse"},"LinkedInUrlRequest":{"properties":{"linkedin_url":{"type":"string","title":"Linkedin Url"}},"type":"object","required":["linkedin_url"],"title":"LinkedInUrlRequest","description":"Body for /retry-with-linkedin-url/{job_id}: user-provided LinkedIn\ncompany URL when our resolver couldn't find the entity automatically."},"LoginRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"}},"type":"object","required":["email","password"],"title":"LoginRequest"},"MoTTriggerRequest":{"properties":{"user":{"type":"string","title":"User"},"kind":{"type":"string","title":"Kind"}},"type":"object","required":["user","kind"],"title":"MoTTriggerRequest"},"OnboardingAdvance":{"properties":{"step":{"type":"integer","title":"Step"},"path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Path"}},"type":"object","required":["step"],"title":"OnboardingAdvance"},"OnboardingCriteria":{"properties":{"title":{"type":"string","title":"Title"},"geography":{"type":"string","title":"Geography"},"workplace_types":{"items":{"type":"string"},"type":"array","title":"Workplace Types"},"location_ids":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location Ids"}},"type":"object","required":["title","geography","workplace_types"],"title":"OnboardingCriteria"},"OnboardingMatchItem":{"properties":{"linkedapi_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedapi Id"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Title"},"company_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"why":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Why"}},"type":"object","title":"OnboardingMatchItem"},"OnboardingMatchResponse":{"properties":{"matches":{"items":{"$ref":"#/components/schemas/OnboardingMatchItem"},"type":"array","title":"Matches"}},"type":"object","required":["matches"],"title":"OnboardingMatchResponse"},"OnboardingPickMatch":{"properties":{"linkedapi_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedapi Id"},"title":{"type":"string","title":"Title"},"company_name":{"type":"string","title":"Company Name"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"why":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Why"}},"type":"object","required":["title","company_name"],"title":"OnboardingPickMatch"},"OnboardingPickMatchResponse":{"properties":{"raw_text":{"type":"string","title":"Raw Text"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"company":{"type":"string","title":"Company"},"title":{"type":"string","title":"Title"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"linkedapi_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedapi Id"}},"type":"object","required":["raw_text","company","title"],"title":"OnboardingPickMatchResponse"},"OnboardingState":{"properties":{"step":{"type":"integer","title":"Step"},"completed":{"type":"boolean","title":"Completed"},"has_resume":{"type":"boolean","title":"Has Resume"},"current_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Title"},"target_roles":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Roles"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"}},"type":"object","required":["step","completed","has_resume"],"title":"OnboardingState"},"ParseJobRequest":{"properties":{"raw_text":{"type":"string","title":"Raw Text"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Url"},"match_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Match Id"}},"type":"object","required":["raw_text"],"title":"ParseJobRequest"},"ParseJobUrlRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"ParseJobUrlRequest"},"PipelineModeUpdate":{"properties":{"mode":{"type":"string","title":"Mode"}},"type":"object","required":["mode"],"title":"PipelineModeUpdate"},"ProfileUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"current_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Current Title"},"target_roles":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Target Roles"},"key_skills":{"items":{"type":"string"},"type":"array","title":"Key Skills","default":[]},"experience_summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Experience Summary"},"linkedin_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin Url"},"tone_preference":{"type":"string","title":"Tone Preference","default":"professional"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"work_history":{"items":{"type":"object"},"type":"array","title":"Work History","default":[]},"education":{"items":{"type":"object"},"type":"array","title":"Education","default":[]},"certifications":{"items":{"type":"string"},"type":"array","title":"Certifications","default":[]},"raw_resume_text":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Raw Resume Text"}},"type":"object","title":"ProfileUpdate"},"PromoCodeCreateRequest":{"properties":{"credits":{"type":"integer","title":"Credits"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Code"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"}},"type":"object","required":["credits"],"title":"PromoCodeCreateRequest"},"PromoCodeUpdateRequest":{"properties":{"is_active":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Active"},"credits":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Credits"},"max_uses":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Uses"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Label"}},"type":"object","title":"PromoCodeUpdateRequest"},"ProspectUpdate":{"properties":{"draft_subject":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Subject"},"draft_body":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Draft Body"},"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},"type":"object","title":"ProspectUpdate"},"RedeemCodeRequest":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"RedeemCodeRequest"},"RedraftRequest":{"properties":{"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","title":"RedraftRequest"},"RefineEmailRequest":{"properties":{"instruction":{"type":"string","title":"Instruction"}},"type":"object","required":["instruction"],"title":"RefineEmailRequest"},"RegisterRequest":{"properties":{"email":{"type":"string","title":"Email"},"password":{"type":"string","title":"Password"},"name":{"type":"string","title":"Name"},"role_interests":{"items":{"type":"string"},"type":"array","title":"Role Interests","default":[]},"utm_source":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Source"},"utm_medium":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Medium"},"utm_campaign":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Campaign"},"utm_content":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Content"},"utm_term":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utm Term"},"referrer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Referrer"},"landing_path":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Landing Path"},"has_job_link":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Has Job Link"}},"type":"object","required":["email","password","name"],"title":"RegisterRequest"},"ReminderCreate":{"properties":{"contact_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Id"},"job_id":{"type":"integer","title":"Job Id"},"remind_date":{"type":"string","format":"date","title":"Remind Date"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"}},"type":"object","required":["job_id","remind_date"],"title":"ReminderCreate"},"ReminderRead":{"properties":{"id":{"type":"integer","title":"Id"},"contact_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Contact Id"},"job_id":{"type":"integer","title":"Job Id"},"remind_date":{"type":"string","format":"date","title":"Remind Date"},"note":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Note"},"is_completed":{"type":"boolean","title":"Is Completed"},"created_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Created At"},"job_company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Company"},"job_title":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Title"},"contact_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Contact Name"}},"type":"object","required":["id","job_id","remind_date","is_completed","created_at"],"title":"ReminderRead"},"ResetEvalRequest":{"properties":{"incumbent_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Incumbent Model Id"},"challenger_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenger Model Id"}},"type":"object","title":"ResetEvalRequest"},"ResetPasswordRequest":{"properties":{"token":{"type":"string","title":"Token"},"new_password":{"type":"string","title":"New Password"}},"type":"object","required":["token","new_password"],"title":"ResetPasswordRequest"},"ResumeTextRequest":{"properties":{"raw_text":{"type":"string","title":"Raw Text"}},"type":"object","required":["raw_text"],"title":"ResumeTextRequest"},"RunRequest":{"properties":{"emails":{"items":{"type":"string"},"type":"array","title":"Emails"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"}},"type":"object","required":["emails"],"title":"RunRequest"},"SetActiveModelsRequest":{"properties":{"incumbent_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Incumbent Model Id"},"challenger_model_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Challenger Model Id"}},"type":"object","title":"SetActiveModelsRequest"},"StatusUpdate":{"properties":{"status":{"type":"string","title":"Status"}},"type":"object","required":["status"],"title":"StatusUpdate"},"SystemPromptRead":{"properties":{"key":{"type":"string","title":"Key"},"label":{"type":"string","title":"Label"},"description":{"type":"string","title":"Description"},"content":{"type":"string","title":"Content"},"version":{"type":"integer","title":"Version","default":1},"updated_by":{"type":"string","title":"Updated By","default":"system"},"updated_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Updated At"}},"type":"object","required":["key","label","description","content","updated_at"],"title":"SystemPromptRead"},"SystemPromptUpdate":{"properties":{"content":{"type":"string","title":"Content"}},"type":"object","required":["content"],"title":"SystemPromptUpdate"},"UserEventCreate":{"properties":{"event_type":{"type":"string","title":"Event Type"},"properties":{"anyOf":[{"type":"object"},{"type":"null"}],"title":"Properties"}},"type":"object","required":["event_type"],"title":"UserEventCreate"},"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"},"WeeklyBriefRequest":{"properties":{"top_per_inf":{"type":"integer","maximum":10.0,"minimum":1.0,"title":"Top Per Inf","default":3},"top_global":{"type":"integer","maximum":30.0,"minimum":1.0,"title":"Top Global","default":10}},"type":"object","title":"WeeklyBriefRequest"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}