FunTrivia APIfuntrivia.com ↗
Access FunTrivia's trivia questions, quizzes, categories, and answers via API. Browse by category, search by keyword, or fetch random quizzes with full Q&A data.
What is the FunTrivia API?
The FunTrivia API provides access to trivia questions and quizzes across 14 endpoints, covering category browsing, keyword search, and full quiz retrieval with questions, answer options, correct answers, and difficulty ratings. Use get_quiz_detail to pull a complete quiz by URL, or get_trivia_questions_by_subtopic to fetch questions for a granular topic with explanations and incorrect choices included in every response.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/fcf298a7-65f1-4c50-bb96-0b8b3ae47407/get_trivia_categories' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace funtrivia-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.funtrivia_api import FunTrivia, TriviaCategory, TriviaSubtopic, QuizCategory, QuizSummary, Quiz, TriviaQuestion, QuizQuestion
client = FunTrivia()
# Browse trivia categories and drill into subtopics
for category in client.triviacategories.list():
print(category.id, category.name)
break
# Construct a known category and get its subtopics
animals = client.triviacategory(id="1")
for subtopic in animals.subtopics():
print(subtopic.id, subtopic.name)
break
# Get trivia questions from a subtopic
african = client.triviasubtopic(id="21375")
for question in african.questions():
print(question.question, question.answer, question.difficulty)
break
# Get random trivia questions
for q in client.triviaquestions.random():
print(q.question, q.answer, q.choices)
break
# Search for quizzes by keyword
for quiz_summary in client.quizsummaries.search(query="science"):
print(quiz_summary.title, quiz_summary.url)
# Drill into quiz details
detail = quiz_summary.details()
print(detail.title, detail.metadata)
for qn in detail.questions:
print(qn.question, qn.options, qn.answer)
break
# Browse quiz categories and list quizzes
movies_cat = client.quizcategory(slug="movies/index")
for quiz_item in movies_cat.quizzes():
print(quiz_item.title, quiz_item.url)
break
# Get newest, top-rated, hot topics, and most played quizzes
for newest in client.quizsummaries.newest():
print(newest.title, newest.url)
break
for top in client.quizsummaries.top_rated():
print(top.title, top.url)
break
for hot in client.quizsummaries.hot_topics():
print(hot.title, hot.url)
break
for played in client.quizsummaries.most_played():
print(played.title, played.url)
break
# Get a random full quiz
random_quiz = client.quizsummaries.random()
print(random_quiz.title)
for qn in random_quiz.questions:
print(qn.question, qn.options, qn.answer)
Retrieve the list of top-level trivia categories from the questions section of FunTrivia. Each category has an ID usable with get_trivia_subtopics_by_category and get_trivia_questions_by_category.
No input parameters required.
{
"type": "object",
"fields": {
"items": "array of category objects with id and name"
},
"sample": {
"data": {
"items": [
{
"id": "1",
"name": "Animals"
},
{
"id": "7",
"name": "Movies"
},
{
"id": "9",
"name": "Science"
}
]
},
"status": "success"
}
}About the FunTrivia API
Trivia Questions Endpoints
The trivia question side of the API is organized as a two-level hierarchy. get_trivia_categories returns top-level category objects (id, name), and get_trivia_subtopics_by_category accepts a cat_id to return subtopic objects with their own ids. Those subtopic ids feed into get_trivia_questions_by_subtopic, which returns question objects containing the question text, the correct answer, an explanation, a difficulty value, and an array of incorrect choices. get_trivia_questions_by_category skips the subtopic level and returns questions directly from a category's main page. get_random_trivia_questions requires no input and returns a mixed set across all categories — useful for sampling content without committing to a topic path.
Quiz Endpoints
The quiz side mirrors the question hierarchy but adds richer discovery options. get_quiz_categories returns category objects with a slug field used to construct paths for get_quizzes_by_category. That endpoint accepts slug paths like 'animals/index' for top-level categories or 'brain_teasers/word_play/something_in_common' for deeper subcategory trees, and it returns a category string plus a quizzes array of titles and URLs. get_quiz_detail accepts a full quiz URL (both /trivia-quiz/ and /quiz/ URL formats are supported) and returns the quiz title, metadata, and a questions array with options and correct answers. search_quizzes accepts a free-text query and returns matching quiz titles and URLs for keyword-driven discovery.
Discovery and Trending Endpoints
Four endpoints return curated lists of quizzes without requiring any input: get_newest_quizzes surfaces recently added content, get_top_rated returns highly rated quizzes, get_hot_topics reflects trending quizzes at the time of the call, and get_most_played_quizzes returns currently high-traffic quizzes. All four return arrays of quiz objects with title and URL fields, which can then be passed to get_quiz_detail for full question data. get_random_quiz returns a complete quiz with metadata and questions in a single call.
Response Shape Notes
Question objects across both the trivia and quiz endpoints include multiple-choice options alongside the correct answer, making them usable directly in quiz interfaces without additional processing. The explanation field in trivia question responses provides context for the correct answer. Not all categories expose subtopics — get_trivia_subtopics_by_category returns an empty array for categories that have no sub-level, so callers should handle both cases.
The FunTrivia API is a managed, monitored endpoint for funtrivia.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when funtrivia.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official funtrivia.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a trivia game app seeded with categorized questions, answer choices, and difficulty ratings from get_trivia_questions_by_subtopic
- Power a daily trivia widget using get_random_trivia_questions or get_random_quiz for fresh content on each load
- Create a quiz browser that surfaces trending content by combining get_hot_topics and get_most_played_quizzes with get_quiz_detail
- Index FunTrivia quizzes by keyword using search_quizzes to build a topic-specific trivia database
- Track newly published trivia content by polling get_newest_quizzes and storing returned titles and URLs
- Generate categorized question sets for e-learning modules by walking get_quiz_categories, get_quizzes_by_category, and get_quiz_detail
- Build a CLI trivia tool that fetches top-rated quizzes and presents questions with shuffled answer choices
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.