{"openapi":"3.1.0","info":{"title":"Job Posting Parser API","description":"Job Posting Parser API is a hosted REST API that turns a job posting (title, location and description as text or HTML) into structured JSON: seniority, job function, remote/hybrid/onsite with the countries and regions allowed, annualized salary, skills and flags such as visa sponsorship. It is rules-based with no LLM, so the same input always gives the same output, and every label comes with a reason.\n\nUse it for job boards, ATS and HR-tech products, recruiting tools, job aggregators and labour-market analytics that need the same filters on every posting (for example \"senior remote data roles open to Europe paying over €80k\"). About 1 ms per posting; nothing is stored. Docs, accuracy, pricing and FAQ: https://job-parser-api.fly.dev/","contact":{"url":"https://job-parser-api.fly.dev/"},"version":"1.0.0"},"paths":{"/v1/parse":{"post":{"tags":["Parse"],"summary":"Parse one job posting into seniority, function, remote regions, salary and skills","description":"Send one posting; only `title` is required. Add `description` (plain text or HTML) to get salary, skills, years of experience and flags. Returns seniority (10 levels), job function (12 functions plus an engineering/data specialty), remote type with `regions_allowed` (ISO country codes and region slugs), salary with an annualized range, employment type, skills, flags such as visa sponsorship, and `reasons` explaining each label.","operationId":"parsePosting","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Posting"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParseResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/parse/batch":{"post":{"tags":["Parse"],"summary":"Parse up to 20 job postings in one call","description":"Same as /v1/parse for 1 to 20 postings in one call: `{\"postings\": [{\"title\": ...}, ...]}`. Results come back in the same order.","operationId":"parsePostingsBatch","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchResult"}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}},"/v1/taxonomy":{"get":{"tags":["Reference"],"summary":"List every value the parser can return","description":"Every value the parser can return: seniority levels, functions, specialties, remote types, region slugs, employment types, salary periods and annualization factors, degrees, skills and request limits. Use it to build filter dropdowns.","operationId":"getTaxonomy","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{}}}},"422":{"description":"Validation Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HTTPValidationError"}}}}}}}},"components":{"schemas":{"BatchRequest":{"properties":{"postings":{"items":{"$ref":"#/components/schemas/Posting"},"type":"array","maxItems":20,"minItems":1,"title":"Postings","description":"1 to 20 job postings, parsed in order"}},"additionalProperties":false,"type":"object","required":["postings"],"title":"BatchRequest"},"BatchResult":{"properties":{"count":{"type":"integer","title":"Count"},"results":{"items":{"$ref":"#/components/schemas/ParseResult"},"type":"array","title":"Results"}},"type":"object","required":["count","results"],"title":"BatchResult"},"FlagsOut":{"properties":{"visa_sponsorship":{"anyOf":[{"type":"boolean"},{"type":"null"}],"title":"Visa Sponsorship","description":"true offered, false explicitly not offered, null not mentioned"},"security_clearance_required":{"type":"boolean","title":"Security Clearance Required"},"equity_offered":{"type":"boolean","title":"Equity Offered"},"relocation_assistance":{"type":"boolean","title":"Relocation Assistance"},"travel":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Travel","description":"e.g. '25%' or 'yes'"},"degree":{"anyOf":[{"type":"string","enum":["bachelor","master","phd"]},{"type":"null"}],"title":"Degree"},"degree_required":{"type":"boolean","title":"Degree Required"},"languages_required":{"items":{"type":"string"},"type":"array","title":"Languages Required"},"talent_pool_posting":{"type":"boolean","title":"Talent Pool Posting","description":"Evergreen / general-application posting, not a specific opening"},"ai_ml_role":{"type":"boolean","title":"Ai Ml Role"}},"type":"object","required":["visa_sponsorship","security_clearance_required","equity_offered","relocation_assistance","travel","degree","degree_required","languages_required","talent_pool_posting","ai_ml_role"],"title":"FlagsOut"},"FunctionOut":{"properties":{"name":{"type":"string","enum":["engineering","data","design","product","marketing","sales","support","ops","finance","hr","legal","other"],"title":"Name"},"confidence":{"type":"number","title":"Confidence"},"specialty":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Specialty","description":"Engineering/data sub-area, e.g. backend, ml_ai, devops_sre"}},"type":"object","required":["name","confidence"],"title":"FunctionOut"},"HTTPValidationError":{"properties":{"detail":{"items":{"$ref":"#/components/schemas/ValidationError"},"type":"array","title":"Detail"}},"type":"object","title":"HTTPValidationError"},"MetaOut":{"properties":{"parser_version":{"type":"string","title":"Parser Version"},"description_chars":{"type":"integer","title":"Description Chars"},"description_was_html":{"type":"boolean","title":"Description Was Html"},"description_truncated":{"type":"boolean","title":"Description Truncated"}},"type":"object","required":["parser_version","description_chars","description_was_html","description_truncated"],"title":"MetaOut"},"ParseResult":{"properties":{"normalized_title":{"type":"string","title":"Normalized Title"},"seniority":{"$ref":"#/components/schemas/SeniorityOut"},"function":{"$ref":"#/components/schemas/FunctionOut"},"remote":{"$ref":"#/components/schemas/RemoteOut"},"salary":{"anyOf":[{"$ref":"#/components/schemas/SalaryOut"},{"type":"null"}]},"employment_type":{"type":"string","enum":["full_time","part_time","contract","temporary","internship","freelance","unknown"],"title":"Employment Type"},"experience_years":{"anyOf":[{"$ref":"#/components/schemas/YearsOut"},{"type":"null"}]},"skills":{"items":{"type":"string"},"type":"array","title":"Skills"},"flags":{"$ref":"#/components/schemas/FlagsOut"},"reasons":{"items":{"type":"string"},"type":"array","title":"Reasons","description":"Human-readable explanation of each classification"},"meta":{"$ref":"#/components/schemas/MetaOut"}},"type":"object","required":["normalized_title","seniority","function","remote","salary","employment_type","experience_years","skills","flags","reasons","meta"],"title":"ParseResult"},"Posting":{"properties":{"title":{"type":"string","maxLength":300,"minLength":1,"title":"Title","description":"Job title exactly as posted (max 300 characters). Gender tags, requisition IDs, location suffixes and pay snippets are cleaned out of normalized_title.","examples":["Sr. Backend Engineer (Python) - Remote, US"]},"location":{"anyOf":[{"type":"string","maxLength":500},{"type":"null"}],"title":"Location","description":"Location string as posted, e.g. 'Remote - US', 'Berlin, Germany' or 'Hybrid (London)'. Used for remote type and allowed regions.","examples":["Remote - US"]},"description":{"anyOf":[{"type":"string","maxLength":50000},{"type":"null"}],"title":"Description","description":"Full job description, plain text or HTML (max 50,000 characters). Optional, but salary, skills, experience and flags come from it.","examples":["Fully remote, US-based. Base salary $160,000 - $200,000 per year."]},"company":{"anyOf":[{"type":"string","maxLength":200},{"type":"null"}],"title":"Company","description":"Company name, used to strip it from the title and the skills list","examples":["Acme"]}},"additionalProperties":false,"type":"object","required":["title"],"title":"Posting","examples":[{"company":"Acme","description":"<p>Fully remote, US-based. Base salary $160,000 - $200,000 per year plus equity. 5+ years of experience with Python, Django and PostgreSQL. We are unable to sponsor visas.</p>","location":"Remote - US","title":"Sr. Backend Engineer (Python) - Remote, US"}]},"RemoteOut":{"properties":{"type":{"type":"string","enum":["remote","hybrid","onsite","unknown"],"title":"Type"},"confidence":{"type":"number","title":"Confidence"},"regions_allowed":{"items":{"type":"string"},"type":"array","title":"Regions Allowed","description":"ISO 3166-1 alpha-2 country codes (upper case) and region slugs (lower case, e.g. worldwide, europe, emea, latam)"},"timezones":{"items":{"type":"string"},"type":"array","title":"Timezones"}},"type":"object","required":["type","confidence","regions_allowed","timezones"],"title":"RemoteOut"},"SalaryOut":{"properties":{"min":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Min"},"max":{"anyOf":[{"type":"integer"},{"type":"number"},{"type":"null"}],"title":"Max"},"currency":{"type":"string","title":"Currency"},"period":{"type":"string","enum":["hour","day","week","month","year"],"title":"Period"},"text":{"type":"string","title":"Text","description":"The matched salary text"},"annualized_min":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Annualized Min"},"annualized_max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Annualized Max"}},"type":"object","required":["min","max","currency","period","text","annualized_min","annualized_max"],"title":"SalaryOut"},"SeniorityOut":{"properties":{"level":{"type":"string","enum":["intern","junior","mid","senior","staff","principal","lead","manager","director","exec"],"title":"Level"},"confidence":{"type":"number","title":"Confidence"}},"type":"object","required":["level","confidence"],"title":"SeniorityOut"},"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"},"YearsOut":{"properties":{"min":{"type":"integer","title":"Min"},"max":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max"}},"type":"object","required":["min","max"],"title":"YearsOut"}}},"externalDocs":{"description":"Docs, accuracy, pricing and FAQ","url":"https://job-parser-api.fly.dev/"}}