# StillOpen > Remote jobs that are actually open. StillOpen collects fully-remote postings > from employers' own applicant tracking systems, re-checks each listing > against the employer's board, and expires it when the employer takes the > posting down. This file describes what the data means. The site's claim is that its listings are checked rather than merely collected, so the useful thing to know is which statements are evidence and which are inference. ## What a listing's status rests on Every listing carries a kind of evidence, not just a timestamp. They are not interchangeable, and the difference is the point: - `ats_verified` — We re-read the employer's own applicant tracking system and the posting was still there. That is the company answering directly. - `board_verified` — We re-fetched the listing page and it was still there. Weaker than the employer's own board, which is why the two are labelled differently. - `employer_board` — The employer's own board was still advertising this when we last read it, though our own check is not current. - `employer_attested` — The employer told us this is open. Nobody independent has confirmed it, and it expires unless they confirm again. - `age_inferred` — No recent confirmation. What is shown rests on the listing's age and when a source last carried it. Only the first three are independent — somebody other than the employer was asked and answered. Do not report an `employer_attested` or `age_inferred` listing as verified. ## How freshness works - Sources are re-read every hour; an employer's board that has not changed for several passes is re-read every 4 hours instead. - A listing no source has carried for 3 days is shown as unconfirmed; after 7 days it is closed. - A listing older than 60 days is closed **unless the employer's own board still carries it**. An age is a guess about whether a job is filled; the company still advertising it is evidence, and evidence wins. - A posting that disappears from the employer's own board is closed within 4 hours, on the pass that next reads that board — that absence is the employer answering, not an inference from age. - Closed listings keep their URL. They are marked closed and `noindex` rather than vanishing, so a link shared months ago still resolves to an answer. - Some listings are talent pools rather than dated vacancies. Those are labelled evergreen and ranked below real openings; they are not hidden. ## Finding listings programmatically - `GET https://stillopen.work/api/v1/jobs?q=python&loc=de` — search. Filters are the site's own: `q`, `level`, `loc`, `area`, `company`, `pay`. At most 20 records per call; a response with more matches carries `next_cursor`, which you pass back as `cursor=`. There is no bulk route. - `GET https://stillopen.work/api/v1/jobs` with no parameters returns the newest listings **and** a usage document describing every field and every filter value it accepts, with a JSON Schema for the response under `schema`. - Search results carry no description — they would fill your context with ads you did not choose. `GET https://stillopen.work/api/v1/jobs/{id}` returns one listing with the employer's ad in full. - An unrecognised filter value is an error rather than being ignored, because a dropped filter answers a different question and looks like a correct answer. - Every record carries `evidence_type`, `verified_at` and `posting_class`, so a listing can be presented with what stands behind it rather than as a bare claim that it is open. ## Model Context Protocol - `POST https://stillopen.work/api/v1/mcp` — the same answers as an MCP server, over Streamable HTTP. No key and no account. Four read-only tools: `search_jobs`, `get_job`, `check_job_status` and `get_company_stats`. - Protocol revisions `2026-07-28`, `2025-11-25`, `2025-06-18`, `2025-03-26` are served on that one endpoint. Nothing here holds a session: every request is answered on its own. - `check_job_status` takes up to 100 listing ids in one call and is the tool worth having — given a link somebody is about to apply through, it is what separates a live posting from a filled one. - `server/discover` returns instructions describing what each evidence type means and what may not be said about it. Read them before presenting a listing. ## Checking listings programmatically - `GET https://stillopen.work/api/v1/jobs/status?ids=186551,186548,186545` — per-listing status, evidence type, when it was last verified, and if it closed, when and whether that closure was observed or inferred. JSON, no key, rate limited. - `GET https://stillopen.work/api/v1/jobs/status` with no parameters returns a usage document describing every field, rather than an error. It carries a JSON Schema for the response under `schema`, so the payload can be validated rather than inferred from this prose. - `POST https://stillopen.work/api/v1/jobs/status` with a JSON body of the same ids — the same answer. **Use this form for a set belonging to one person**: ids in a query string are written to access logs, and a set of them is a profile. - Ids come from the listing URL: `/job/9620-company-title` is id 9620. - A merged listing answers under the id you asked for and reports `merged_into`, so an old id keeps working. ## Pages - [Job list](https://stillopen.work/): every open listing, newest first. - [How it works](https://stillopen.work/how-it-works): the verification method, and the measured error rate for each source published as a floor rather than a point estimate. - [About](https://stillopen.work/about): what the project is and what is being built. - [Privacy](https://stillopen.work/privacy): what is stored, which is close to nothing. No accounts; a pasted CV is matched in memory and discarded. - [Sitemap](https://stillopen.work/sitemap.xml) ## Crawling and citation GPTBot, ClaudeBot, CCBot, PerplexityBot and Google-Extended are **not** blocked, and that is a decision rather than an oversight: an assistant citing a listing is discovery of the same kind search is, and this project reads other people's boards under exactly these rules. Four backlink crawlers are blocked, because they sell link graphs and cost real CPU. See https://stillopen.work/robots.txt. Two requests, and they are the ones we honour towards our own sources. Link to a listing's canonical URL rather than reproducing it, so a reader lands on something that says whether the job is still open. And do not present a listing as open without its date and its evidence type — an unqualified "this job is open" is the claim this entire site exists to avoid making. The text of a job ad belongs to the employer who published it. We do not licence it onward.