{"openapi":"3.1.0","info":{"title":"WFH.team public API","version":"1.0.0","description":"Read-only public discovery endpoints for WFH.team remote jobs, remote companies, public talent profiles, blog posts, and newsletter issues. Private app and admin endpoints are intentionally omitted."},"servers":[{"url":"https://api.new.wfh.team"}],"paths":{"/api/public/jobs/":{"get":{"operationId":"listPublicRemoteJobs","summary":"List public remote jobs","description":"Search public remote job listings by keyword, company, location, skill, seniority, salary visibility, page, and page size.","parameters":[{"name":"search","in":"query","schema":{"type":"string"},"description":"Keyword search across title, company, and job content."},{"name":"company","in":"query","schema":{"type":"string"},"description":"Company name filter."},{"name":"location","in":"query","schema":{"type":"string"},"description":"Country, region, timezone, or remote-location filter."},{"name":"skill","in":"query","schema":{"type":"string"},"description":"Skill or tool filter."},{"name":"seniority","in":"query","schema":{"type":"string"},"description":"Seniority filter."},{"name":"salary","in":"query","schema":{"type":"string"},"description":"Salary visibility or range filter."},{"name":"page","in":"query","schema":{"type":"integer","minimum":1},"description":"Pagination page."},{"name":"page_size","in":"query","schema":{"type":"integer","minimum":1,"maximum":50},"description":"Results per page."}],"responses":{"200":{"description":"Paginated public remote job listings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedPublicJobs"},"examples":{"remoteCustomerSuccess":{"value":{"count":1,"next":null,"previous":null,"results":[{"id":123,"title":"Customer Success Manager","company":"Example Remote Co","description_excerpt":"Support remote customers across onboarding, renewals, and product adoption.","remote_policy":"Remote","countries":["United States"],"timezones":["Americas"],"employment_types":["Full-time"],"seniority":"mid","skills":["Customer Success","SaaS","Communication"],"salary_min_usd":90000,"salary_max_usd":130000,"first_seen_at":"2026-05-01T12:00:00Z","last_seen_at":"2026-05-30T12:00:00Z","logo_url":"https://api.new.wfh.team/company-logos/remote-company/example.png"}]}}}}}}}}},"/api/public/jobs/{id}/":{"get":{"operationId":"getPublicRemoteJob","summary":"Get a public remote job","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"description":"Public remote job detail.","content":{"application/json":{"schema":{"allOf":[{"$ref":"#/components/schemas/PublicJob"},{"type":"object","properties":{"description":{"type":"string"}}}]}}}}}}},"/api/public/companies/":{"get":{"operationId":"listPublicRemoteCompanies","summary":"List public remote companies","description":"Browse public remote-company profiles.","responses":{"200":{"description":"Paginated company profiles.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedPublicCompanies"}}}}}}},"/api/public/companies/{slug}/":{"get":{"operationId":"getPublicRemoteCompany","summary":"Get a public remote company profile","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Public remote company profile.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicCompany"}}}}}}},"/api/public/talent/":{"get":{"operationId":"listPublicTalent","summary":"List public candidate profiles","description":"Browse public candidate profiles when candidates have enabled public visibility.","responses":{"200":{"description":"Paginated public talent profiles.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedPublicTalent"}}}}}}},"/api/blog-posts/":{"get":{"operationId":"listBlogPosts","summary":"List published blog posts","responses":{"200":{"description":"Published WFH.team blog posts.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BlogPost"}}}}}}}},"/api/newsletter-issues/":{"get":{"operationId":"listNewsletterIssues","summary":"List public newsletter issues","parameters":[{"name":"page","in":"query","schema":{"type":"integer","minimum":1}},{"name":"search","in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated public newsletter issues.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}}}}}},"components":{"schemas":{"PaginatedPublicJobs":{"type":"object","properties":{"count":{"type":"integer"},"next":{"type":["string","null"]},"previous":{"type":["string","null"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicJob"}}},"required":["count","next","previous","results"]},"PublicJob":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"},"company":{"type":"string"},"description_excerpt":{"type":"string"},"remote_policy":{"type":"string"},"countries":{"type":"array","items":{"type":"string"}},"timezones":{"type":"array","items":{"type":"string"}},"employment_types":{"type":"array","items":{"type":"string"}},"seniority":{"type":"string"},"skills":{"type":"array","items":{"type":"string"}},"salary_min_usd":{"type":["integer","null"]},"salary_max_usd":{"type":["integer","null"]},"first_seen_at":{"type":"string","format":"date-time"},"last_seen_at":{"type":"string","format":"date-time"},"logo_url":{"type":"string"}}},"PaginatedPublicCompanies":{"type":"object","properties":{"count":{"type":"integer"},"next":{"type":["string","null"]},"previous":{"type":["string","null"]},"results":{"type":"array","items":{"$ref":"#/components/schemas/PublicCompany"}}}},"PublicCompany":{"type":"object","additionalProperties":true,"properties":{"slug":{"type":"string"},"name":{"type":"string"},"website":{"type":"string"},"description":{"type":"string"},"logo_url":{"type":"string"}}},"PaginatedPublicTalent":{"type":"object","properties":{"count":{"type":"integer"},"next":{"type":["string","null"]},"previous":{"type":["string","null"]},"results":{"type":"array","items":{"type":"object","additionalProperties":true}}}},"BlogPost":{"type":"object","properties":{"slug":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"},"publishedAt":{"type":"string","format":"date"},"readTime":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"hero":{"type":"string"},"sections":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}