Trivia quiz score calculator with speed bonuses
This trivia quiz score calculator turns an answer sheet into a clear final total.
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
Supply whether each response was correct, the points available for that question, and response times when a speed rule applies. The result separates ordinary question points from speed bonus points, reports correct and incorrect counts, and shows a question-by-question breakdown. It works for casual pub trivia, classroom quizzes, live events, and automated game systems without hiding how the total was produced.
Enter the scoring facts for every question
Start with one answer record for each question that the player attempted. Mark the record as correct or incorrect and enter that question's point value. Different values are supported, so a ten-point warm-up, a twenty-point picture round, and a fifty-point final can coexist in the same calculation. A correct answer receives its listed base points, while an incorrect answer receives zero. Negative point values are rejected because this tool calculates rewards, not penalty schemes, and accepting a negative value would make an ordinary wrong-answer rule ambiguous. If the quiz uses speed, also include the response time in seconds for every answer, including incorrect answers. Requiring complete timing data keeps the score sheet auditable and prevents a missing time from silently being treated as an exceptionally fast response. The calculator preserves input order in its breakdown and numbers questions starting at one, making it straightforward to compare the output with a host's answer sheet, classroom record, or game log. Decimal point values and times are accepted when a format needs finer precision.
Choose the speed bonus rule that matches the quiz
Use the none rule when timing should not change the score. For a simple fast-answer reward, choose fixed threshold, provide the maximum qualifying response time, and set the fixed bonus points. A correct response at or below the threshold earns the full bonus; a correct response above it earns none. For a more gradual race against the clock, choose time remaining, provide the question time limit, and set the number of bonus points earned per remaining second. The calculator subtracts response time from the limit, clamps any late result to zero, and multiplies the remaining time by the rate. In every mode, only correct answers can earn a speed bonus. This avoids rewarding a quick guess that was wrong and follows the convention used by most timed trivia formats. All timing settings and bonus amounts must be finite, non-negative numbers. The explicit rule names also make automated score sheets easier to review: another person can reproduce the total without reverse-engineering a custom formula or relying on an unstated rounding convention.
Read, verify, and reuse the result
The result begins with question, correct, and incorrect counts, followed by the base score, total speed bonus, and final score. The breakdown then reports each question's earned base points, earned speed bonus, and combined score. This separation is useful when a contestant challenges a total: the host can identify whether the disagreement concerns correctness, the question value, or the timing rule instead of recalculating the entire round. Numeric results are rounded to six decimal places, which is precise enough for fractional bonus rates while keeping exports stable across repeated runs. Because the algorithm is deterministic and does not call a network service, the same input always produces the same JSON result. You can therefore use it interactively for a single player, call it once per contestant from a tournament system, or store the returned breakdown beside a leaderboard entry as an audit record. The API price is $0.002 per request, while the browser version can perform the same calculation locally for quick manual checks.
What you can do with it
Score a pub trivia round
Combine questions with different values and publish a transparent per-question total for each team.
Grade a timed classroom quiz
Award base credit for correct work and apply one consistent speed rule to the complete answer sheet.
Build a live game leaderboard
Calculate deterministic contestant totals and retain the breakdown used to order the leaderboard.
FAQ
How are incorrect answers scored?
An incorrect answer earns zero base points and zero speed bonus. This calculator does not apply wrong-answer penalties.
What happens if a point value is negative?
The request fails with an invalid input error. Point values must be finite numbers greater than or equal to zero.
Does an answer exactly on the threshold earn the fixed bonus?
Yes. A correct answer qualifies when its response time is equal to or less than the configured threshold.
Can a late answer create a negative speed bonus?
No. The time-remaining rule clamps the remaining time to zero, so a late correct answer keeps its base points without a bonus.
What does one calculation cost?
The API price is $0.002 per request. You can also run the same deterministic calculation in your browser.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/game/trivia-score-calc \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"answers":[{"correct":true,"points":10,"response_time_seconds":4},{"correct":false,"points":15,"response_time_seconds":8},{"correct":true,"points":20,"response_time_seconds":6}]}'const res = await fetch("https://api.kit.forhosting.com/game/trivia-score-calc", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"answers": [
{
"correct": true,
"points": 10,
"response_time_seconds": 4
},
{
"correct": false,
"points": 15,
"response_time_seconds": 8
},
{
"correct": true,
"points": 20,
"response_time_seconds": 6
}
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/trivia-score-calc",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"answers": [
{
"correct": true,
"points": 10,
"response_time_seconds": 4
},
{
"correct": false,
"points": 15,
"response_time_seconds": 8
},
{
"correct": true,
"points": 20,
"response_time_seconds": 6
}
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/trivia-score-calc", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"answers":[{"correct":true,"points":10,"response_time_seconds":4},{"correct":false,"points":15,"response_time_seconds":8},{"correct":true,"points":20,"response_time_seconds":6}]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"answers":[{"correct":true,"points":10,"response_time_seconds":4},{"correct":false,"points":15,"response_time_seconds":8},{"correct":true,"points":20,"response_time_seconds":6}]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/trivia-score-calc", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"answers": [
{
"correct": true,
"points": 10,
"response_time_seconds": 4
},
{
"correct": false,
"points": 15,
"response_time_seconds": 8
},
{
"correct": true,
"points": 20,
"response_time_seconds": 6
}
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.trivia_score_calc",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |