โ† All guides

๐Ÿ“ก We check opentdb.com (and 70+ other public dev APIs) with a plain GET every 30 minutes โ€” see the live status page. As of publishing it's up and answering fast.

Open Trivia DB alternative โ€” a trivia API with no 5-second rate limit

Open Trivia DB is the trivia API behind most quiz-app tutorials โ€” thousands of user-contributed questions, no key required, CORS open, free. It's a genuinely nice community project, and with jService dead it's the last big free trivia API standing. If you're building a quiz UI, its data is the draw.

But building against it hurts in four specific ways (all checked live on September 16, 2026):

For the app you're building, the fix is a dataset in the same field shape on an API you control โ€” no rate limit, plain text, real writes. One curl, no signup:

1. Host a 40-question dataset in one curl

curl -s https://mockbird.mockbird.workers.dev/data/quizquestions.db.json \
  | curl -s -X POST 'https://mockbird.mockbird.workers.dev/api/projects/import?name=trivia' \
    -H 'content-type: application/json' --data-binary @-
# โ†’ {"id":"YOUR_ID","adminKey":"โ€ฆ"}  โ€” save both

The dataset is 40 original questions we wrote for this guide (free to use however you like) in OpenTDB's exact field shape โ€” type, difficulty, category, question, correct_answer, incorrect_answers[] โ€” across 7 familiar categories, easy/medium/hard, multiple-choice and true/false. The incorrect_answers arrays come back verbatim, and everything is plain text: no entities, nothing to decode.

2. The translation table

Open Trivia DBYour Mockbird project
api.php?amount=10/questions?limit=10
random draw/questions?sortBy=random&limit=10
&difficulty=easy?difficulty=easy โ€” same values
&category=18 (numeric id)?category=Science%3A%20Computers โ€” by name, no id lookup table
&type=boolean?type=boolean โ€” same values
&encode=url3986 + decode stepโ€” not needed; responses are plain text
session tokens (no repeats)page instead: ?page=2&limit=10 + X-Total-Count
1 request / 5 s / IPno per-second limit (10k requests/day per project)
curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/questions?sortBy=random&limit=1&select=question,correct_answer"

curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/questions?difficulty=easy&category=Geography"

3. Exact response-shape parity

Tutorial code reads data.results after checking data.response_code. One query param reproduces that envelope exactly, so your fetch code doesn't change:

curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/questions?mock_envelope=%7B%22response_code%22%3A0%2C%22results%22%3A%22%24data%22%7D&difficulty=easy&limit=10"
# โ†’ {"response_code":0,"results":[โ€ฆ]}   โ€” OpenTDB's shape, your data

# no match? {"response_code":0,"results":[]} โ€” always an array, never the
# singular-"result" surprise from their 429 body.

Set it once as the project default (PUT /api/projects/:id/settings {"envelope":โ€ฆ}) and every GET answers in that shape. Details in docs โ†’ envelope.

4. The part their API can't do: your own questions

curl -X POST https://mockbird.mockbird.workers.dev/m/YOUR_ID/questions \
  -H 'content-type: application/json' \
  -d '{"type":"multiple","difficulty":"easy","category":"House Rules",
       "question":"Which room is the couch in?","correct_answer":"Living room",
       "incorrect_answers":["Kitchen","Garage","Attic"]}'
# โ†’ 201 {"id":41,โ€ฆ}   โ€” and GET /questions/41 returns it. It persists.

That turns a fetch-and-render demo into a real product: a pub-quiz builder, a classroom review tool, a party game with an "add your own question" form. OpenTDB's contribution flow lives on their website; yours is a POST.

5. Rehearse their rate limit โ€” on purpose

If you ship against the real OpenTDB, your app will meet the 429. Rehearse it deterministically instead of by refreshing fast:

# two rate-limited responses, then success โ€” exercise your retry/backoff
curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/questions?mock_seq=429,429,200"

# slow response for your loading spinner
curl "https://mockbird.mockbird.workers.dev/m/YOUR_ID/questions?mock_delay=2000"

More recipes in testing loading & error states and simulating rate limits.

Where Open Trivia DB still wins

Credit where due: OpenTDB's catalogue is the product โ€” thousands of community-contributed questions across 24 categories, moderated for years, still free and keyless, and it answered our checks fast. Our dataset is 40 questions; theirs is thousands. The rate limit exists so the free service survives, which is fair โ€” it's just brutal to develop against. The honest split: production quiz content at human pace โ†’ OpenTDB (their questions are also exportable under CC BY-SA if you want to self-host). Development, tests, CI, demos, and apps that need writes, plain text, or more than one request per 5 seconds โ†’ your own project. Many apps sensibly do both: develop against Mockbird, ship against OpenTDB with a well-tested retry.

Start now

The one-curl import 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: two api.php?amount=3 requests back-to-back โ€” the second answered HTTP 429 with body {"response_code":5,"result":[]} (key is result, singular); 6 of 10 questions in a default-encoding batch contained HTML entities (", “, '); api.php?amount=0 answered HTTP 200 with {"response_code":2,"results":[]}; api_token.php?command=request issued a session token normally. Every Mockbird command on this page was run against a live project before publishing.

Full API reference in the docs. More guides: jService alternative ยท Numbers API alternative ยท TheMealDB alternative ยท Host a JSON file as an API ยท Simulate rate limits. Create your API โ†’

โšก Skip the terminal: this link opens the dashboard's import panel โ€” paste the dataset from section 1 and you're done. No signup.