{"openapi":"3.1.0","info":{"title":"Job Copilot API","description":"A FastAPI application for job management","version":"1.0.0"},"paths":{"/health/":{"get":{"tags":["health"],"summary":"Health Check","operationId":"health_check_health__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/ready":{"get":{"tags":["health"],"summary":"Readiness Check","operationId":"readiness_check_health_ready_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/health/changelog":{"get":{"tags":["health"],"summary":"Api Changelog","description":"API changelog for UI migration","operationId":"api_changelog_health_changelog_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/email/unsubscribe":{"get":{"tags":["email"],"summary":"Unsubscribe","operationId":"unsubscribe_email_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"}}}}}},"post":{"tags":["email"],"summary":"Unsubscribe One Click","description":"RFC 8058 one-click unsubscribe target (Gmail/Yahoo hit this with POST).","operationId":"unsubscribe_one_click_email_unsubscribe_post","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/email/open":{"get":{"tags":["email"],"summary":"Open Pixel","operationId":"open_pixel_email_open_get","parameters":[{"name":"t","in":"query","required":true,"schema":{"type":"string","title":"T"}},{"name":"sid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sid"}},{"name":"st","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"St"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/email/click":{"get":{"tags":["email"],"summary":"Click","operationId":"click_email_click_get","parameters":[{"name":"t","in":"query","required":true,"schema":{"type":"string","title":"T"}},{"name":"job","in":"query","required":false,"schema":{"type":"string","default":"all","title":"Job"}},{"name":"pos","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Pos"}},{"name":"aa","in":"query","required":false,"schema":{"type":"integer","default":0,"title":"Aa"}},{"name":"sid","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Sid"}},{"name":"st","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"St"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/landing/indexable-jobs":{"get":{"tags":["landing"],"summary":"Indexable Jobs","description":"Job IDs eligible for the public job sitemap (/job-sitemap.xml).\n\nSlice: the country gate, English, live (not expired), seen within 30 days,\nnamed employer, indexable source. Must stay in sync with the per-page\nindexability rule in next-app/src/app/job/[id]/page.tsx — a sitemap URL that\nthe page then noindexes is a GSC warning. lastmod = last_seen_at: a real\nfreshness signal (re-sighted daily by the harvester) instead of insert time.\n\nSharding: the slice is fetched and cached ONCE per 6h as a compact\n(id, lastmod) list, then sliced per request. So the shard count costs no\nextra DB work — the alternative, one query per shard, would multiply the\nheaviest scan on this router by the number of sitemap files.\n\nDefaults are the pre-sharding behaviour: no params returns the first\n_SITEMAP_MAX rows, exactly as before, so the frontend can move to the\nsitemap index on its own schedule.","operationId":"indexable_jobs_landing_indexable_jobs_get","parameters":[{"name":"page","in":"query","required":false,"schema":{"type":"integer","minimum":0,"description":"0-based shard index","default":0,"title":"Page"},"description":"0-based shard index"},{"name":"per_page","in":"query","required":false,"schema":{"type":"integer","maximum":50000,"minimum":0,"description":"URLs per shard; 0 uses SITEMAP_PAGE_MAX","default":0,"title":"Per Page"},"description":"URLs per shard; 0 uses SITEMAP_PAGE_MAX"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/landing/related-jobs":{"get":{"tags":["landing"],"summary":"Related Jobs","description":"Up to 8 sibling job pages for the on-page 'more jobs' crawl-mesh block,\nplus the hub paths this job belongs under.\n\nSame indexable slice as /indexable-jobs (DE/AE, English, <=30d), scoped to\nthe anchor job's city (country fallback). Served from the in-process hub\nsnapshot: the per-city SQL this used to run was the query that pinned the\nADB session cap during the Jul 29 crawl wave (each city was its own cache\nmiss, so one wave = hundreds of concurrent full scans). The snapshot is the\nexact same slice, refreshed once per 6h TTL, so the only per-request DB\nwork left is the anchor's primary-key lookup.\n\n`hubs` rides along here rather than in its own endpoint because the job page\nalready calls this one — it turns the job-to-job links (a closed loop) into\na real mesh by giving every job page a link back UP to its city, role and\ncompany hubs. Only hubs that clear the publication gate are returned, so a\njob page never links to a hub that would 404.","operationId":"related_jobs_landing_related_jobs_get","parameters":[{"name":"job_id","in":"query","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"}}}}}}},"/landing/job-stats":{"get":{"tags":["landing"],"summary":"Job Stats","operationId":"job_stats_landing_job_stats_get","parameters":[{"name":"country","in":"query","required":true,"schema":{"type":"string","title":"Country"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/landing/hubs":{"get":{"tags":["landing"],"summary":"Hubs","description":"Every hub that currently clears its gate.\n\nThe frontend uses this for generateStaticParams (with dynamicParams=false, so\na slug that isn't here 404s rather than rendering an empty page) and for the\nhub entries in sitemap.xml.","operationId":"hubs_landing_hubs_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/landing/hub":{"get":{"tags":["landing"],"summary":"Hub","description":"One hub's content: its jobs (paginated) plus the facet links that wire it\nto its siblings. Resolving by path keeps the frontend from having to know\nwhether /jobs/germany/berlin is a city or a role — the backend owns that.","operationId":"hub_landing_hub_get","parameters":[{"name":"path","in":"query","required":true,"schema":{"type":"string","description":"hub path, e.g. /jobs/uae/dubai/sales","title":"Path"},"description":"hub path, e.g. /jobs/uae/dubai/sales"},{"name":"page","in":"query","required":false,"schema":{"type":"integer","maximum":20,"minimum":1,"default":1,"title":"Page"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/partner/careerjet":{"get":{"tags":["partner"],"summary":"Careerjet","operationId":"careerjet_partner_careerjet_get","parameters":[{"name":"authorization","in":"header","required":false,"schema":{"type":"string","default":"","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/share/match":{"post":{"tags":["share"],"summary":"Create Match Card","operationId":"create_match_card_share_match_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateShareRequest"}}},"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":[]}]}},"/share/match/{share_id}":{"get":{"tags":["share"],"summary":"Get Match Card","operationId":"get_match_card_share_match__share_id__get","parameters":[{"name":"share_id","in":"path","required":true,"schema":{"type":"string","title":"Share Id"}},{"name":"track","in":"query","required":false,"schema":{"type":"integer","default":1,"title":"Track"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/profile/google_auth":{"post":{"tags":["profile"],"summary":"Google Auth","description":"Authenticate user with Google credential","operationId":"google_auth_profile_google_auth_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"}}}}}}},"/profile/me":{"get":{"tags":["profile"],"summary":"Get Current User Profile","description":"Get current user profile","operationId":"get_current_user_profile_profile_me_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"patch":{"tags":["profile"],"summary":"Update Profile","description":"Update user profile","operationId":"update_profile_profile_me_patch","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object","title":"Update Data"}}},"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":[]}]}},"/profile/logout":{"post":{"tags":["profile"],"summary":"Logout","description":"Logout - client should discard token","operationId":"logout_profile_logout_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/profile/onboarding":{"patch":{"tags":["profile"],"summary":"Update Onboarding","description":"Update user onboarding preferences","operationId":"update_onboarding_profile_onboarding_patch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OnboardingRequest"}}},"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":[]}]}},"/resumes/empty":{"post":{"tags":["resumes"],"summary":"Create Empty Resume","description":"Create an empty resume for manual editing","operationId":"create_empty_resume_resumes_empty_post","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/resumes/":{"get":{"tags":["resumes"],"summary":"List Resumes","description":"Get all resumes for current user with linked jobs","operationId":"list_resumes_resumes__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["resumes"],"summary":"Upload Resume","description":"Upload and process resume file (PDF or DOCX)","operationId":"upload_resume_resumes__post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_upload_resume_resumes__post"}}},"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":[]}]}},"/resumes/{resume_id}":{"get":{"tags":["resumes"],"summary":"Get Resume","description":"Get resume by ID","operationId":"get_resume_resumes__resume_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resume_id","in":"path","required":true,"schema":{"type":"integer","title":"Resume Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["resumes"],"summary":"Update Resume","description":"Update resume fields","operationId":"update_resume_resumes__resume_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resume_id","in":"path","required":true,"schema":{"type":"integer","title":"Resume Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResumeUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["resumes"],"summary":"Delete Resume","description":"Delete a resume and its user_job_resume links","operationId":"delete_resume_resumes__resume_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resume_id","in":"path","required":true,"schema":{"type":"integer","title":"Resume Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resumes/{resume_id}/duplicate":{"post":{"tags":["resumes"],"summary":"Duplicate Resume","description":"Duplicate a resume with optional field overrides","operationId":"duplicate_resume_resumes__resume_id__duplicate_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resume_id","in":"path","required":true,"schema":{"type":"integer","title":"Resume Id"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Overrides"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resumes/{resume_id}/export-token":{"post":{"tags":["resumes"],"summary":"Create Export Token","description":"Mint a short-lived, single-purpose token + download URL for a resume PDF.\nThe raw session JWT never goes into a URL - this token can only export.","operationId":"create_export_token_resumes__resume_id__export_token_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"resume_id","in":"path","required":true,"schema":{"type":"integer","title":"Resume Id"}},{"name":"kind","in":"query","required":false,"schema":{"type":"string","pattern":"^(resume|cover_letter)$","default":"resume","title":"Kind"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resumes/export/print-data":{"get":{"tags":["resumes"],"summary":"Export Print Data","description":"Resume payload for the print page, authenticated by export token only.\nReturns the exact GET /resumes/{id} shape so the frontend mapper is reused.","operationId":"export_print_data_resumes_export_print_data_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resumes/export/file.pdf":{"get":{"tags":["resumes"],"summary":"Export Pdf","description":"Stream the resume PDF - from the render cache when hot (pre-warmed at\ntoken mint), else rendered through the local Chromium container.","operationId":"export_pdf_resumes_export_file_pdf_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/resumes/export/preview.png":{"get":{"tags":["resumes"],"summary":"Export Preview","description":"First-page PNG preview - cached/pre-warmed like the PDF. Used by the\nChatGPT app to show the resume inline.","operationId":"export_preview_resumes_export_preview_png_get","parameters":[{"name":"token","in":"query","required":true,"schema":{"type":"string","title":"Token"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/suggest":{"get":{"tags":["jobs"],"summary":"Suggest Jobs","description":"Autocomplete for job titles and companies with role grouping","operationId":"suggest_jobs_jobs_suggest_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":10,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/locations/suggest":{"get":{"tags":["jobs"],"summary":"Suggest Locations","description":"Autocomplete canonical locations, ranked by live job count.\n\nBacked by the locations table (one row per canonical place), so job-filter\ndropdowns and target-location pickers share the same standardized entries.\nReturns location_id, which /jobs/ accepts as a filter, plus lat/lon for\ndistance search. city/state/country/count keys kept for older clients.\n\nscope=all additionally searches the full GeoNames gazetteer (234k cities)\nfor places not yet in the locations table - those come back with\nlocation_id null and count 0; their display_name geocodes exactly on write.","operationId":"suggest_locations_jobs_locations_suggest_get","parameters":[{"name":"q","in":"query","required":false,"schema":{"type":"string","default":"","title":"Q"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":50,"minimum":1,"default":10,"title":"Limit"}},{"name":"granularity","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Filter: city | state | country","title":"Granularity"},"description":"Filter: city | state | country"},{"name":"scope","in":"query","required":false,"schema":{"type":"string","description":"'jobs' = places with jobs only; 'all' = fall back to the global gazetteer (for target-location pickers)","default":"jobs","title":"Scope"},"description":"'jobs' = places with jobs only; 'all' = fall back to the global gazetteer (for target-location pickers)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/":{"get":{"tags":["jobs"],"summary":"List Jobs","description":"List jobs with pagination, filters, and similarity sorting","operationId":"list_jobs_jobs__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":20,"title":"Limit"}},{"name":"cursor","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Last job ID for keyset pagination (more efficient than skip)","title":"Cursor"},"description":"Last job ID for keyset pagination (more efficient than skip)"},{"name":"q","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Q"}},{"name":"location","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"}},{"name":"location_id","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Canonical location id(s) from /jobs/locations/suggest, comma-separated for multiple (hierarchical: state includes its cities; city is distance-based)","title":"Location Id"},"description":"Canonical location id(s) from /jobs/locations/suggest, comma-separated for multiple (hierarchical: state includes its cities; city is distance-based)"},{"name":"include_remote","in":"query","required":false,"schema":{"type":"boolean","description":"With a location filter, also include remote jobs from the same country","default":true,"title":"Include Remote"},"description":"With a location filter, also include remote jobs from the same country"},{"name":"near","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Place name for distance filtering (e.g. 'Bengaluru' or 'London, GB')","title":"Near"},"description":"Place name for distance filtering (e.g. 'Bengaluru' or 'London, GB')"},{"name":"lat","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":90,"minimum":-90},{"type":"null"}],"description":"Latitude for distance filtering (overrides near)","title":"Lat"},"description":"Latitude for distance filtering (overrides near)"},{"name":"lon","in":"query","required":false,"schema":{"anyOf":[{"type":"number","maximum":180,"minimum":-180},{"type":"null"}],"title":"Lon"}},{"name":"radius_km","in":"query","required":false,"schema":{"type":"number","maximum":20000,"exclusiveMinimum":0,"description":"Distance radius in km, used with near/lat+lon","default":50,"title":"Radius Km"},"description":"Distance radius in km, used with near/lat+lon"},{"name":"workplace_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workplace Type"}},{"name":"job_type","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Type"}},{"name":"job_level","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Level"}},{"name":"max_experience","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Experience"}},{"name":"autoapply","in":"query","required":false,"schema":{"type":"boolean","description":"Only jobs whose application form auto-apply can fill","default":false,"title":"Autoapply"},"description":"Only jobs whose application form auto-apply can fill"},{"name":"resume_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"}},{"name":"fields","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Comma-separated fields to return (e.g., id,title,company)","title":"Fields"},"description":"Comma-separated fields to return (e.g., id,title,company)"}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["jobs"],"summary":"Create Job","description":"Create a new job listing with fast extractors (no LLM)","operationId":"create_job_jobs__post","security":[{"HTTPBearer":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/{job_id}":{"get":{"tags":["jobs"],"summary":"Get Job","description":"Get job by ID (public).\n\nA tombstoned row still exists and still owns its URL — the purge stage\nstrips the payload rather than deleting the row (see scripts/\nexpire_sweep.py). It answers 410 Gone, not 404, and carries the\nredirect target when the row lost a fingerprint dedup, so the page can\nsend a 301 to the surviving twin instead of dead-ending a URL Google has\nindexed.","operationId":"get_job_jobs__job_id__get","parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/{job_id}/hide":{"post":{"tags":["jobs"],"summary":"Hide Job","description":"Hide a job from the user's feed ('not interested'). The negative signal\nalso feeds ranking evaluation via the job_hidden event.","operationId":"hide_job_jobs__job_id__hide_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"}}}}}},"delete":{"tags":["jobs"],"summary":"Unhide Job","description":"Undo a hide - the job becomes eligible for the feed again.","operationId":"unhide_job_jobs__job_id__hide_delete","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"}}}}}}},"/jobs/{job_id}/apply-click":{"post":{"tags":["jobs"],"summary":"Record Apply Click","description":"Persist a click on an external Apply link (fire-and-forget from the UI).","operationId":"record_apply_click_jobs__job_id__apply_click_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"path","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"source","in":"query","required":false,"schema":{"type":"string","maxLength":30,"default":"jobs","title":"Source"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/parse":{"post":{"tags":["jobs"],"summary":"Parse And Create Job","description":"Parse job description with fast extractors (no LLM) and save to database","operationId":"parse_and_create_job_jobs_parse_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobParseRequest"}}},"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":[]}]}},"/jobs/analyze":{"post":{"tags":["jobs"],"summary":"Analyze Job","description":"Analyze job against resume and track in pipeline","operationId":"analyze_job_jobs_analyze_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"resume_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/tailor":{"post":{"tags":["jobs"],"summary":"Tailor Resume","description":"Get tailoring suggestions - full resume vs full job","operationId":"tailor_resume_jobs_tailor_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"resume_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"}},{"name":"force","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Force"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/tailor/apply":{"post":{"tags":["jobs"],"summary":"Apply Suggestion","description":"Mark a suggestion as applied","operationId":"apply_suggestion_jobs_tailor_apply_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"suggestion_id","in":"query","required":true,"schema":{"type":"string","title":"Suggestion Id"}},{"name":"suggestion_type","in":"query","required":true,"schema":{"type":"string","title":"Suggestion Type"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Suggestion Data"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/cover-letter":{"post":{"tags":["jobs"],"summary":"Generate Cover Letter","description":"Generate a cover letter for a job application","operationId":"generate_cover_letter_jobs_cover_letter_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverLetterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoverLetterResponse"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/jobs/admin/scrape":{"post":{"tags":["jobs"],"summary":"Admin Scrape Jobs","description":"Admin backdoor: Scrape jobs and queue for parsing (no user context)","operationId":"admin_scrape_jobs_jobs_admin_scrape_post","parameters":[{"name":"x-admin-secret","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminScrapeRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/jobs/admin/parse":{"post":{"tags":["jobs"],"summary":"Admin Parse Job","description":"Admin: Parse and save a job directly (no user context, no LLM)","operationId":"admin_parse_job_jobs_admin_parse_post","parameters":[{"name":"x-admin-secret","in":"header","required":true,"schema":{"type":"string","title":"X-Admin-Secret"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AdminParseRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/":{"get":{"tags":["user-jobs"],"summary":"List User Jobs","description":"List user's tracked jobs with optional filters and stats","operationId":"list_user_jobs_user_jobs__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"status","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"}},{"name":"include_stats","in":"query","required":false,"schema":{"type":"boolean","default":false,"title":"Include Stats"}},{"name":"skip","in":"query","required":false,"schema":{"type":"integer","minimum":0,"default":0,"title":"Skip"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","maximum":100,"minimum":1,"default":50,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"post":{"tags":["user-jobs"],"summary":"Add Job To Pipeline","description":"Add a job to user's pipeline","operationId":"add_job_to_pipeline_user_jobs__post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"job_id","in":"query","required":true,"schema":{"type":"integer","title":"Job Id"}},{"name":"status","in":"query","required":false,"schema":{"type":"string","default":"bookmarked","title":"Status"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/pipeline":{"get":{"tags":["user-jobs"],"summary":"Get Pipeline","description":"Get job search pipeline counts by status","operationId":"get_pipeline_user_jobs_pipeline_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]}},"/user-jobs/priorities":{"get":{"tags":["user-jobs"],"summary":"Get Priorities","description":"Get priority jobs with next steps","operationId":"get_priorities_user_jobs_priorities_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","default":5,"title":"Limit"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/{user_job_id}":{"get":{"tags":["user-jobs"],"summary":"Get User Job","description":"Get a specific tracked job","operationId":"get_user_job_user_jobs__user_job_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"path","required":true,"schema":{"type":"integer","title":"User Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"patch":{"tags":["user-jobs"],"summary":"Update User Job","description":"Update user job details","operationId":"update_user_job_user_jobs__user_job_id__patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"path","required":true,"schema":{"type":"integer","title":"User Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserJobUpdate"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}},"delete":{"tags":["user-jobs"],"summary":"Delete User Job","description":"Remove job from pipeline","operationId":"delete_user_job_user_jobs__user_job_id__delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"path","required":true,"schema":{"type":"integer","title":"User Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/{user_job_id}/link-resume":{"post":{"tags":["user-jobs"],"summary":"Link Resume","description":"Link a resume to a tracked job","operationId":"link_resume_user_jobs__user_job_id__link_resume_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"path","required":true,"schema":{"type":"integer","title":"User Job Id"}},{"name":"resume_id","in":"query","required":true,"schema":{"type":"integer","title":"Resume Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/{user_job_id}/unlink-resume":{"delete":{"tags":["user-jobs"],"summary":"Unlink Resume","description":"Unlink resume from a tracked job","operationId":"unlink_resume_user_jobs__user_job_id__unlink_resume_delete","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"path","required":true,"schema":{"type":"integer","title":"User Job Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/resume-links/":{"get":{"tags":["user-jobs"],"summary":"List Resume Links","description":"List resume-job links with optional filtering","operationId":"list_resume_links_user_jobs_resume_links__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"User Job Id"}},{"name":"resume_id","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/user-jobs/{user_job_id}/cover-letter":{"patch":{"tags":["user-jobs"],"summary":"Save Cover Letter","description":"Persist a cover letter onto the resume linked to this tracked job.\n\nBody: {\"cover_letter\": {greeting, opening, body, why_company, closing,\nsign_off, name}} - the same JSON shape the web builder's cover-letter\npreview renders, so it appears there and exports via the PDF route.","operationId":"save_cover_letter_user_jobs__user_job_id__cover_letter_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"user_job_id","in":"path","required":true,"schema":{"type":"integer","title":"User Job Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":true,"title":"Body"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/profile":{"get":{"tags":["autoapply"],"summary":"Get Profile","operationId":"get_profile_autoapply_profile_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"put":{"tags":["autoapply"],"summary":"Put Profile","operationId":"put_profile_autoapply_profile_put","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileIn"}}},"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":[]}]}},"/autoapply/jobs/{job_id}/eligibility":{"get":{"tags":["autoapply"],"summary":"Eligibility","operationId":"eligibility_autoapply_jobs__job_id__eligibility_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":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/queue":{"get":{"tags":["autoapply"],"summary":"List Queue","operationId":"list_queue_autoapply_queue_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}},"security":[{"HTTPBearer":[]}]},"post":{"tags":["autoapply"],"summary":"Queue","operationId":"queue_autoapply_queue_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QueueIn"}}},"required":true},"responses":{"201":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}},"security":[{"HTTPBearer":[]}]}},"/autoapply/requests/{req_id}":{"get":{"tags":["autoapply"],"summary":"Get Request","operationId":"get_request_autoapply_requests__req_id__get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/requests/{req_id}/answers":{"patch":{"tags":["autoapply"],"summary":"Patch Answers","operationId":"patch_answers_autoapply_requests__req_id__answers_patch","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AnswersIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/requests/{req_id}/approve":{"post":{"tags":["autoapply"],"summary":"Approve","operationId":"approve_autoapply_requests__req_id__approve_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/requests/{req_id}/cancel":{"post":{"tags":["autoapply"],"summary":"Cancel","operationId":"cancel_autoapply_requests__req_id__cancel_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/requests/{req_id}/retry":{"post":{"tags":["autoapply"],"summary":"Retry","operationId":"retry_autoapply_requests__req_id__retry_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/requests/{req_id}/code":{"post":{"tags":["autoapply"],"summary":"Enter Code","description":"The security code the ATS emailed the candidate, for the runner waiting on it.","operationId":"enter_code_autoapply_requests__req_id__code_post","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CodeIn"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/autoapply/requests/{req_id}/screenshot":{"get":{"tags":["autoapply"],"summary":"Screenshot","operationId":"screenshot_autoapply_requests__req_id__screenshot_get","security":[{"HTTPBearer":[]}],"parameters":[{"name":"req_id","in":"path","required":true,"schema":{"type":"integer","title":"Req Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/checklists/defaults":{"get":{"tags":["checklists"],"summary":"Get Default Checklists","description":"Return default checklist items for each job status","operationId":"get_default_checklists_checklists_defaults_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/templates/by-stage/{stage}":{"get":{"tags":["templates"],"summary":"Get Templates By Stage","description":"Return templates for a specific stage","operationId":"get_templates_by_stage_templates_by_stage__stage__get","parameters":[{"name":"stage","in":"path","required":true,"schema":{"type":"string","title":"Stage"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/templates/stages":{"get":{"tags":["templates"],"summary":"Get Stages","description":"Return all stages in order","operationId":"get_stages_templates_stages_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}},"/tools/generate":{"post":{"tags":["tools"],"summary":"Generate","operationId":"generate_tools_generate_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/extract/resume":{"post":{"tags":["extract"],"summary":"Extract Resume","operationId":"extract_resume_extract_resume_post","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/Body_extract_resume_extract_resume_post"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/extract/job":{"post":{"tags":["extract"],"summary":"Extract Job","operationId":"extract_job_extract_job_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobURLRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/stats":{"get":{"tags":["admin"],"summary":"Get Stats","operationId":"get_stats_admin_stats_get","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"418":{"description":"Admin access required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/admin/maintenance":{"post":{"tags":["admin"],"summary":"Toggle Maintenance","operationId":"toggle_maintenance_admin_maintenance_post","parameters":[{"name":"authorization","in":"header","required":true,"schema":{"type":"string","title":"Authorization"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"418":{"description":"Admin access required"},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/":{"get":{"summary":"Root","operationId":"root__get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}}}}}},"components":{"schemas":{"AdminParseRequest":{"properties":{"title":{"type":"string","title":"Title"},"company":{"type":"string","title":"Company"},"description":{"type":"string","title":"Description"},"job_url":{"type":"string","title":"Job Url"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"job_url_hidden":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url Hidden"},"company_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Logo"},"date_posted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Posted"},"company_industry":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Industry"},"company_website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Website"},"workplace_type":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Workplace Type"},"compensation_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Compensation Min"},"compensation_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Compensation Max"},"compensation_currency":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compensation Currency"},"compensation_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Compensation Period"}},"type":"object","required":["title","company","description","job_url"],"title":"AdminParseRequest"},"AdminScrapeRequest":{"properties":{"keywords":{"items":{"type":"string"},"type":"array","title":"Keywords"},"locations":{"items":{"type":"string"},"type":"array","title":"Locations","default":["India"]},"sites":{"items":{"type":"string"},"type":"array","title":"Sites","default":["linkedin","indeed"]},"results_wanted":{"type":"integer","title":"Results Wanted","default":25},"hours_old":{"type":"integer","title":"Hours Old","default":72}},"type":"object","required":["keywords"],"title":"AdminScrapeRequest"},"AnswersIn":{"properties":{"answers":{"additionalProperties":true,"type":"object","title":"Answers"}},"type":"object","required":["answers"],"title":"AnswersIn"},"ApplicationProfile":{"properties":{"first_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"First Name"},"last_name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Last Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"city":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"City"},"country_code":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Country Code"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin"},"github":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Github"},"website":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Website"},"work_authorized":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Work Authorized"},"needs_sponsorship":{"additionalProperties":{"type":"boolean"},"type":"object","title":"Needs Sponsorship"},"willing_to_relocate":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Willing To Relocate"},"notice_period":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notice Period"},"salary_expectation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Salary Expectation"},"how_heard":{"type":"string","title":"How Heard","default":"Qarera"},"subject_to_noncompete":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Subject To Noncompete"},"agree_ai_attestations":{"type":"boolean","title":"Agree Ai Attestations","default":false},"agree_privacy_acknowledgements":{"type":"boolean","title":"Agree Privacy Acknowledgements","default":false}},"type":"object","title":"ApplicationProfile"},"Body_extract_resume_extract_resume_post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_extract_resume_extract_resume_post"},"Body_upload_resume_resumes__post":{"properties":{"file":{"type":"string","contentMediaType":"application/octet-stream","title":"File"}},"type":"object","required":["file"],"title":"Body_upload_resume_resumes__post"},"ChecklistProgress":{"properties":{"completed":{"items":{"type":"string"},"type":"array","title":"Completed","default":[]}},"type":"object","title":"ChecklistProgress"},"CodeIn":{"properties":{"code":{"type":"string","title":"Code"}},"type":"object","required":["code"],"title":"CodeIn"},"Contact":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Role"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"company":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company"}},"type":"object","title":"Contact"},"CoverLetterContent":{"properties":{"greeting":{"type":"string","title":"Greeting"},"opening":{"type":"string","title":"Opening"},"body":{"type":"string","title":"Body"},"why_company":{"type":"string","title":"Why Company"},"closing":{"type":"string","title":"Closing"},"sign_off":{"type":"string","title":"Sign Off"},"name":{"type":"string","title":"Name"}},"type":"object","required":["greeting","opening","body","why_company","closing","sign_off","name"],"title":"CoverLetterContent"},"CoverLetterRequest":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"resume_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"}},"type":"object","required":["job_id"],"title":"CoverLetterRequest"},"CoverLetterResponse":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"resume_id":{"type":"integer","title":"Resume Id"},"cover_letter":{"$ref":"#/components/schemas/CoverLetterContent"}},"type":"object","required":["job_id","resume_id","cover_letter"],"title":"CoverLetterResponse"},"CreateShareRequest":{"properties":{"job_id":{"type":"integer","title":"Job Id"},"resume_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"},"include_name":{"type":"boolean","title":"Include Name","default":false}},"type":"object","required":["job_id"],"title":"CreateShareRequest"},"GenerateRequest":{"properties":{"tool":{"type":"string","title":"Tool"},"inputs":{"additionalProperties":{"type":"string"},"type":"object","title":"Inputs"}},"type":"object","required":["tool","inputs"],"title":"GenerateRequest"},"GoogleAuthRequest":{"properties":{"credential":{"type":"string","title":"Credential"}},"type":"object","required":["credential"],"title":"GoogleAuthRequest"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"JobCreate":{"properties":{"title":{"type":"string","title":"Title"},"company":{"type":"string","title":"Company"},"location":{"type":"string","title":"Location"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url","default":""},"date_posted":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Date Posted"},"company_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Logo","default":"nan"},"is_remote":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Is Remote","default":false},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Description","default":""}},"type":"object","required":["title","company","location"],"title":"JobCreate"},"JobParseRequest":{"properties":{"title":{"type":"string","title":"Title"},"company":{"type":"string","title":"Company"},"description":{"type":"string","title":"Description"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"job_url":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Job Url","default":""},"company_logo":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Company Logo","default":""}},"type":"object","required":["title","company","description"],"title":"JobParseRequest"},"JobURLRequest":{"properties":{"url":{"type":"string","title":"Url"}},"type":"object","required":["url"],"title":"JobURLRequest"},"OnboardingRequest":{"properties":{"career_motivation":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Career Motivation"},"start_timeline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Start Timeline"},"target_roles":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Roles"},"target_locations":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Target Locations"}},"type":"object","title":"OnboardingRequest"},"ProfileIn":{"properties":{"profile":{"$ref":"#/components/schemas/ApplicationProfile"},"resume_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Resume Id"}},"type":"object","required":["profile"],"title":"ProfileIn"},"QueueIn":{"properties":{"job_id":{"type":"integer","title":"Job Id"}},"type":"object","required":["job_id"],"title":"QueueIn"},"ResumeUpdate":{"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Name"},"email":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Email"},"phone":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Phone"},"location":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Location"},"linkedin":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Linkedin"},"targetTitle":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Targettitle"},"summary":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Summary"},"experience":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Experience"},"experiences":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Experiences"},"education":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Education"},"standardizedSkills":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Standardizedskills"},"skills":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Skills"},"personal_data":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Personal Data"},"certifications":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Certifications"},"awards":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Awards"},"projects":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Projects"},"volunteering":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Volunteering"},"publications":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Publications"},"style_settings":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Style Settings"},"extractedKeywords":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Extractedkeywords"},"jobSearchKeywords":{"anyOf":[{"items":{},"type":"array"},{"type":"null"}],"title":"Jobsearchkeywords"},"atsRecommendations":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"title":"Atsrecommendations"}},"type":"object","title":"ResumeUpdate"},"UserJobUpdate":{"properties":{"status":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Status"},"deadline":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Deadline"},"date_applied":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Date Applied"},"follow_up_date":{"anyOf":[{"type":"string","format":"date"},{"type":"null"}],"title":"Follow Up Date"},"excitement_rating":{"anyOf":[{"type":"integer","maximum":5.0,"minimum":1.0},{"type":"null"}],"title":"Excitement Rating"},"notes":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Notes"},"checklist_progress":{"anyOf":[{"$ref":"#/components/schemas/ChecklistProgress"},{"type":"null"}]},"contacts":{"anyOf":[{"items":{"$ref":"#/components/schemas/Contact"},"type":"array"},{"type":"null"}],"title":"Contacts"}},"type":"object","title":"UserJobUpdate"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"}},"securitySchemes":{"HTTPBearer":{"type":"http","scheme":"bearer"}}}}