โ† All guides

๐Ÿ“ก 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.

GitHub Jobs API alternative โ€” the job-board API from your tutorial is gone. Here's a free stand-in.

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.

1. A jobs API in one paste

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",โ€ฆ},โ€ฆ]

2. GitHub Jobs โ†’ Mockbird translation

jobs.github.com (dead)Mockbird
GET /positions.jsonGET /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.jsonGET /m/PROJECT_ID/positions/1
Bare JSON array responseBare JSON array response (same โ€” no code changes)
Read-onlyPOST/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"

3. The part the original never had: posting a job

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.

4. Rehearse the failure you just experienced

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.

Want real live job listings instead?

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:

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.

Start now

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 โ†’

โšก Skip the terminal: this link creates a project in the dashboard in one click โ€” then add the positions resource from section 1 in the UI. No signup.