jService (jservice.io) is dead โ€” live trivia APIs, and how to host your own

For years, "build a trivia game" tutorials and bootcamp projects pointed at jservice.io โ€” a free API serving a huge archive of quiz-show clues. If your quiz app just hung and died, here's why: jservice.io no longer responds at all. The domain still resolves, but every connection times out, on both HTTP and HTTPS (we re-checked while writing this; our status page for it re-checks every 30 minutes and has watched it fail every single check since the end of August):

$ curl https://jservice.io/api/random
curl: (28) Failed to connect to jservice.io port 443 after 10001 ms: Timeout was reached

// browser
Uncaught TypeError: Failed to fetch   // the request just never completes

And the community successor many older threads point to, cluebase.lukelav.in, is gone as well โ€” its DNS no longer resolves.

Why nobody simply rehosts it: jService served real Jeopardy! clues collected from fan archives. That clue text is the show's copyrighted material, which is very likely part of why the mirrors-and-successors story here is so thin compared to other dead beginner APIs. This guide doesn't rehost any of it โ€” the starter dataset below is 60 general-knowledge clues we wrote ourselves, in the same field shape, so tutorial code runs unchanged while the data is original.

You have three honest options, fastest first.

1. Live trivia APIs (different schemas โ€” expect rewrites)

APIStatusNotes
Open Trivia DB (opentdb.com/api.php)โœ” alive, keylessMultiple-choice format: {question, correct_answer, incorrect_answers[]} inside a {response_code, results} envelope โ€” nothing like jservice's shape, so your parsing code changes completely. Rate-limited (one request per 5 seconds per IP โ€” see our OpenTDB guide for the details and a workaround); HTML entities in questions need decoding.
The Trivia APIโœ” alive, keyless tierClean bare-array JSON, camelCase fields (correctAnswer, incorrectAnswers), good tags/difficulty filters. Again a different schema, and the free tier is for non-commercial use.
Self-host jServicesource existsThe original service's code is open (sottenad/jService on GitHub, Rails) โ€” but it ships without the clue database, and refilling it means scraping fan archives of copyrighted clues yourself. For a weekend quiz app, that's a lot of yaks.

2. One curl: your own trivia API

We host a starter dataset โ€” 60 original general-knowledge clues across 10 categories, written by us, in the jservice field shape: clues have answer, question, value (100โ€“600), airdate, category_id, invalid_count; categories have title and clues_count. Pipe it into the importer:

curl -s https://mockbird.mockbird.workers.dev/data/trivia.db.json \
| curl -s -X POST 'https://mockbird.mockbird.workers.dev/api/projects/import?name=trivia' \
    --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/clues

3. The jservice endpoints, rebuilt

sortBy=random shuffles before pagination, so limit=1 is one random clue per request โ€” and ?_expand=category attaches the full category object under a category key, exactly where jservice put it:

jServiceYour Mockbird API
/api/random/clues?sortBy=random&limit=1&_expand=category
/api/random?count=5โ€ฆ&limit=5
/api/clues?value=400/clues?value=400
/api/clues?category=3/clues?category_id=3 โ€” or the nested route /categories/3/clues
/api/clues?min_date=โ€ฆ&max_date=โ€ฆ/clues?airdate_gte=2026-03-01&airdate_lte=2026-06-01
/api/clues?offset=100/clues?page=2&limit=100 (page-based; x-total-count header has the total)
/api/categories?count=10/categories
/api/category?id=3 (category + its clues)/categories/3?_embed=clues
POST /api/invalid (flag a bad clue)PATCH /clues/17 with {"invalid_count":1} โ€” it's your data, edit it directly

The classic quiz-game loop becomes:

const res = await fetch(BASE + "/clues?sortBy=random&limit=1&_expand=category");
const [clue] = await res.json();
ask.textContent    = clue.question;            // "This red planet is the fourth from the Sun"
cat.textContent    = clue.category.title;      // "space"
points.textContent = "$" + clue.value;         // "$200"
// later: check the player's guess against clue.answer ("Mars")

4. It's your data now

jService was read-only. This is full CRUD โ€” so the obvious upgrade to the tutorial project is letting players write their own questions:

curl -X POST "https://mockbird.mockbird.workers.dev/m/YOUR_ID/clues" \
  -H 'content-type: application/json' \
  -d '{"answer":"A 429","question":"This HTTP status tells a client it is sending requests too fast",
       "value":700,"airdate":"2026-09-14T12:00:00.000Z","category_id":9,"invalid_count":0}'

The record persists โ€” GET /clues?value=700 finds it, the random endpoint can serve it, and DELETE removes it when it turns out to be too easy. 60 clues is a seed, not a ceiling: paste a bigger dataset into the dashboard import panel (up to 1,000 records per collection โ€” write your own questions, or convert a quiz CSV), and the same data also gets GraphQL, delay/error simulation for teaching loading states, and a db.json export so you can leave with your data anytime.

5. Honest comparison

jservice.ioOpen Trivia DBThe Trivia APIYour Mockbird project
Works todayโœ˜ times outโœ”โœ”โœ” (~60s setup)
Drop-in for old jservice tutorialsโ€”โœ˜ different schema + envelopeโœ˜ different schemaโœ˜ new base URL, same field names
Dataset~200k real show clues~4k+ community questionslarge curated set60 original clues; yours to grow
Question styleanswer-in-question-form cluesmultiple choicemultiple choiceclue-style; add any fields you like
Writesโœ˜โœ˜โœ˜โœ” full CRUD
Key requirednono (rate-limited)no (free tier, non-commercial)no, bounded free limits (10k req/day)

If you want a big bank of ready-made multiple-choice questions, Open Trivia DB and The Trivia API are genuinely good and deserve the traffic โ€” use them. Host your own when you want the jservice shape, your own questions, writes, or an API that can't disappear from under your demo.

Create yours

The one-liner in section 2 is the whole setup โ€” or open the dashboard and paste the dataset into the import panel. jService has a lot of company in the beginner-API graveyard โ€” the Bored API's DNS is gone, numbersapi 404s, ICNDb serves gambling spam (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, NBA, and number-facts datasets too.

โšก 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.