The Bored API (boredapi.com) is gone โ€” mirrors, and how to host your own activity API

"Build an app that suggests something to do when you're bored" is a rite-of-passage beginner project, and nearly every tutorial for it points at https://www.boredapi.com/api/activity. If yours just failed, here's why: the boredapi.com domain no longer resolves at all โ€” not a 404, not an expired cert, the DNS is simply gone (we re-checked while writing this; our status page for it re-checks every 30 minutes):

$ curl https://www.boredapi.com/api/activity
curl: (6) Could not resolve host: www.boredapi.com

// browser
Uncaught TypeError: Failed to fetch   // net::ERR_NAME_NOT_RESOLVED

You have three honest options, fastest first.

1. The mirrors (fastest โ€” but read the fine print)

Two community rehosts of the Bored API dataset are alive right now, and credit to both for keeping a beloved beginner API breathing:

MirrorDrop-in?Notes
bored.api.lewagon.com (Le Wagon bootcamp)โœ” yes โ€” same path, same fieldscurl "https://bored.api.lewagon.com/api/activity?type=social" works exactly like the original: change the hostname in your tutorial code and you're done.
bored-api.appbrewery.com (App Brewery / Angela Yu's courses)โœ˜ no โ€” new paths and a changed schemaRandom is /random, filtering is /filter?type=โ€ฆ (the old /api/activity path 404s). Records changed shape too: accessibility is now a descriptive string ("Few to no challenges"), a numeric availability replaced it, and duration/kidFriendly were added โ€” code written against the original fields breaks quietly.

The fine print: both mirrors are read-only random-activity endpoints run as free favours by coding schools โ€” which is exactly what boredapi.com was before it disappeared. If your project is due Friday, use the Le Wagon mirror. If you're building anything you'll maintain, keep reading.

2. One curl: your own activity API

We host a starter dataset โ€” 46 activities we wrote ourselves, in the original Bored API field shape: activity, type (all nine classic types), participants, price (0โ€“1), accessibility (0โ€“1), link, key. Pipe it into the importer:

curl -s https://mockbird.mockbird.workers.dev/data/activities.db.json \
| curl -s -X POST 'https://mockbird.mockbird.workers.dev/api/projects/import?name=bored' \
    --data-binary @-

The response contains your project id and an adminKey (save it โ€” it manages the project, and lets you claim it into an account later). Your API is live immediately, no signup, no key, CORS on:

https://mockbird.mockbird.workers.dev/m/YOUR_ID/activities

3. The /api/activity endpoint, rebuilt

sortBy=random shuffles the collection before pagination, so limit=1 is one random activity per request โ€” and every Bored API filter has a direct equivalent that composes with it:

Bored APIYour Mockbird API
/api/activity/activities?sortBy=random&limit=1
/api/activity?type=social/activities?sortBy=random&limit=1&type=social
/api/activity?participants=2โ€ฆ&participants=2
/api/activity?price=0 (free things)โ€ฆ&price=0
?minprice=0&maxprice=0.3โ€ฆ&price_gte=0&price_lte=0.3
?minaccessibility=0&maxaccessibility=0.1โ€ฆ&accessibility_lte=0.1
/api/activity?key=5881028/activities?key=5881028

One honest difference: the Bored API returned a bare object; a list endpoint returns an array of one โ€” destructure it. The classic tutorial app becomes:

const res = await fetch(BASE + "/activities?sortBy=random&limit=1&type=recreational&price=0");
const [activity] = await res.json();
suggestion.textContent = activity.activity;   // e.g. "Fly a kite"

4. It's your data now

The Bored API was read-only. This is full CRUD โ€” the obvious upgrade to the tutorial app is letting users add their own boredom cures:

curl -X POST "https://mockbird.mockbird.workers.dev/m/YOUR_ID/activities" \
  -H 'content-type: application/json' \
  -d '{"activity":"Water the plants you keep forgetting about","type":"busywork",
       "participants":1,"price":0,"accessibility":0.05,"link":"","key":"1000001"}'

The record persists โ€” GET /activities?key=1000001 finds it, the random endpoint can now serve it, and DELETE works when the suggestion turns out to be a bad idea. 46 activities is a seed, not a ceiling: paste a bigger dataset into the dashboard import panel (up to 1,000 records per collection), and you also get GraphQL on the same data, delay/error simulation for teaching loading states, and a db.json export to leave with your data anytime.

5. Honest comparison

boredapi.comLe Wagon mirrorApp Brewery mirrorYour Mockbird project
Works todayโœ˜ DNS goneโœ”โœ”โœ” (~60s setup)
Drop-in for old tutorialsโ€”โœ” same path + schemaโœ˜ new paths, changed fieldsโœ˜ new base URL, near-identical params
Datasetthe original ~2,500the original datasetoriginal + extra fields46-activity starter; yours to grow
Writesโœ˜โœ˜โœ˜โœ” full CRUD
Who keeps it alivenobody (that's the point)a bootcamp's goodwilla course provider's goodwillyour project, bounded free limits (10k req/day)

Create yours

The one-liner in section 2 is the whole setup โ€” or open the dashboard and paste the dataset into the import panel. The Bored API has a lot of company in the beginner-API graveyard โ€” ICNDb now serves gambling spam, numbersapi 404s with no mirror, jservice times out and forismatic is gone (the full tour, and the live status board tracking 71 of these). Same fix works for all of them: we keep ready-made quotes, countries, timezones, and currencies datasets, or host any CSV as an API.

โšก Skip the terminal: this link creates a live, seeded e-commerce backend (products, orders, customers, reviews) in the dashboard โ€” real URL, data browser already open, no signup. Or import your own OpenAPI spec, db.json, CSV, Postman collection, or HAR and mock your exact shapes.