๐ก We check jobs.github.com (and 70+ other public dev APIs) with a plain GET every 30 minutes โ see the live status page. Spoiler: it has been dead since 2021.
For years, https://jobs.github.com/positions.json was the dataset for learning React, Vue, and fetch(): a real jobs API, no key, CORS-friendly, with ?description=, ?location=, and ?full_time=true filters. It powered a generation of job-board tutorials, YouTube build-alongs, and Frontend Mentor challenges.
GitHub deprecated it in 2021 โ new postings stopped May 19, 2021, and the API shut down entirely on August 19, 2021. Today (checked live, September 16, 2026) jobs.github.com resolves to 0.0.0.0 and the connection is refused outright โ not a 404, not a redirect: nothing answers. Every positions.json fetch in every tutorial written before 2021 throws a network error on line one.
The tutorials, though, are still out there being followed. If you just hit that wall, here's a free positions API with the same bones โ same bare-array response shape, equivalent filters, plus the things GitHub Jobs never had: writes that persist, sorting, pagination headers, and failure-mode rehearsal. No signup.
BASE=https://mockbird.mockbird.workers.dev
P=$(curl -s -X POST $BASE/api/projects -H 'content-type: application/json' \
-d '{"name":"jobs-board","blank":true}')
PID=$(echo $P | sed 's/.*"id": *"\([^"]*\)".*/\1/')
KEY=$(echo $P | sed 's/.*"adminKey": *"\([^"]*\)".*/\1/')
curl -s -X POST $BASE/api/projects/$PID/resources -H "x-admin-key: $KEY" \
-H 'content-type: application/json' -d '{
"name":"positions",
"fields":[
{"name":"title","type":"jobTitle"},
{"name":"company","type":"company"},
{"name":"location","type":"city"},
{"name":"type","type":"oneOf","values":["Full Time","Part Time","Contract"]},
{"name":"remote","type":"boolean"},
{"name":"url","type":"url"},
{"name":"company_logo","type":"avatar"},
{"name":"created_at","type":"pastDate"},
{"name":"description","type":"paragraph"},
{"name":"how_to_apply","type":"sentence"}
],
"seed":12
}'
That's the GitHub Jobs record shape โ title, company, location, type, url, company_logo, created_at, description, how_to_apply โ with realistic values (real job titles, real cities, working avatar URLs for the logos), plus a remote boolean GitHub's version predates. And like the original, the list endpoint returns a bare JSON array โ no envelope to unwrap, so tutorial code that does setJobs(data) works as-is:
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?limit=3"
# โ [{"id":1,"title":"DevOps Engineer","company":"Atlasworks","location":"Bogota",
# "type":"Full Time","remote":true,"created_at":"2026-09-02T10:02:18.668Z",โฆ},โฆ]
| jobs.github.com (dead) | Mockbird |
|---|---|
GET /positions.json | GET /m/PROJECT_ID/positions |
?description=react (keyword search) | ?q=react (any field) or ?title_like=react / ?description_like=react |
?location=berlin | ?location_like=berlin (case-insensitive substring) |
?full_time=true | ?type=Full%20Time (exact match) |
?page=1 (50 per page, no total) | ?page=1&limit=50 + an X-Total-Count header |
GET /positions/ID.json | GET /m/PROJECT_ID/positions/1 |
| Bare JSON array response | Bare JSON array response (same โ no code changes) |
| Read-only | POST/PUT/PATCH/DELETE persist for real |
Verified examples, run live before publishing:
# full-time roles only
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?type=Full%20Time&limit=100"
# keyword in the title
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?title_like=engineer"
# remote roles posted since June โ range filters GitHub Jobs never had
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?remote=true&created_at_gte=2026-06-01"
# newest first (a job board's default view)
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?sortBy=created_at&order=desc"
# lighter payload for the list view
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?select=title,company,location"
GitHub Jobs was read-only, so every tutorial stopped at the list-and-detail pages. Your version doesn't have to:
curl -X POST https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions \
-H 'content-type: application/json' \
-d '{"title":"Senior React Developer","company":"Acme Remote","location":"Berlin",
"type":"Full Time","remote":true,"url":"https://example.com/jobs/1",
"created_at":"2026-09-16T00:00:00.000Z","description":"Build things.",
"how_to_apply":"Email us."}'
# โ 201 {"id":13,โฆ} โ and GET /positions/13 returns it. It persists.
Now the tutorial project grows a "post a job" form, an edit page, a delete button โ a full-CRUD portfolio piece instead of a fetch demo.
You found this page because an API your code depended on vanished. That's worth testing for on purpose:
# fail, fail, recover โ point your retry/backoff logic at it
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?mock_seq=500,502,200"
# slow network for your loading skeletons
curl "https://mockbird.mockbird.workers.dev/m/PROJECT_ID/positions?mock_delay=2000"
More recipes in testing loading & error states.
A mock is the wrong tool if your goal is a job board with real, current postings. Two keyless APIs still serve real data and deserve the traffic:
{"data":[โฆ]} envelope).Both are read-only and shaped differently from GitHub Jobs, so tutorial code needs adapting either way. The honest split: real data to show real users โ Remotive/Arbeitnow. A stable fixture you control โ deterministic tests, offline dev, CRUD, failure drills โ Mockbird. They compose, too: build against your mock, swap the base URL to a real feed for the demo.
The one-paste block in section 1, or zero setup at all:
curl https://mockbird.mockbird.workers.dev/m/demo/products?limit=3
Facts checked live on September 16, 2026: jobs.github.com resolves to 0.0.0.0; curl https://jobs.github.com/positions.json fails with "Couldn't connect to server" (no HTTP response at all). GitHub's changelog announced the deprecation April 19, 2021: no new postings after May 19, 2021, full shutdown August 19, 2021. Remotive and Arbeitnow both answered keyless requests during the same check. Every Mockbird command on this page was run against a live project before publishing.
Full API reference in the docs. More guides: Mock API for React ยท JSONPlaceholder alternative ยท FakeStoreAPI alternative ยท Bored API alternative ยท CoinDesk BPI alternative ยท Studio Ghibli API (another dead Heroku host). Create your API โ