"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.
Two community rehosts of the Bored API dataset are alive right now, and credit to both for keeping a beloved beginner API breathing:
| Mirror | Drop-in? | Notes |
|---|---|---|
bored.api.lewagon.com (Le Wagon bootcamp) | โ yes โ same path, same fields | curl "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 schema | Random 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.
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
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 API | Your 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"
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.
| boredapi.com | Le Wagon mirror | App Brewery mirror | Your 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 |
| Dataset | the original ~2,500 | the original dataset | original + extra fields | 46-activity starter; yours to grow |
| Writes | โ | โ | โ | โ full CRUD |
| Who keeps it alive | nobody (that's the point) | a bootcamp's goodwill | a course provider's goodwill | your project, bounded free limits (10k req/day) |
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.