Exam time per question calculator
A 90-minute exam with 60 questions gives 90 seconds per question, or 1.5 minutes each, and a pace of 40 questions per hour. Hold back minutes for instructions or a final review and the budget is recalculated on what remains. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Total minutes
- 90
- Questions
- 60
- Reserve minutes
- 0
- Available minutes
- 90
- Available seconds
- 5,400
- Seconds per question
- 90
Timed exams punish uneven pacing more often than raw content gaps: students who linger on early items run out of minutes for later ones, and proctors cannot pause the clock when a section feels harder than expected. This exam time per question calculator turns a simple planning step into a reproducible budget. Enter total exam duration in minutes, the number of scored questions, and optionally minutes you want to hold back for reading instructions or a final review pass. The engine subtracts that reserve, converts remaining time to seconds, and divides by the question count so you see seconds per question, minutes per question, questions you can complete per hour at that pace, and a short pace label such as 1 min 30 sec.
How the per-question budget is computed
The core identity is intentionally plain so coaches can explain it on a whiteboard without software. Start with total exam duration in minutes. Optionally subtract reserve minutes set aside for reading the cover sheet, bubbling answers, or a deliberate review pass at the end.
Whatever remains is available minutes. Multiply available minutes by sixty to obtain available seconds, then divide by the positive integer question count. That quotient is seconds per question; dividing available minutes by the same count yields minutes per question.
Questions per hour is the reciprocal pacing rate: sixty divided by minutes per question, which equals three thousand six hundred divided by seconds per question. A ninety-minute exam with sixty items and no reserve yields ninety seconds per item, or one and a half minutes each, and forty questions per hour if you held that cadence for a full hour. Adding a ten-minute reserve on the same exam leaves eighty minutes for sixty items, or eighty seconds each.
The calculator rounds minute fields with configurable half-up decimals and reports seconds with one decimal so goldens stay stable across runtimes. It does not invent section weights, difficulty tiers, or adaptive stopping rules; those belong in a separate planning step once you know the flat budget. Because the algorithm is pure arithmetic with no clocks or network calls, the same inputs always produce the same outputs for grading scripts and browser widgets alike.
What you can do with it
Classroom test blueprints
Teachers enter period length and planned item count to confirm the average seconds per question before printing a unit exam.
Standardized test coaching
Tutors convert official section times into seconds and minutes per item so practice sets match real exam pressure.
FAQ
Can I enter duration in hours?
Convert hours to minutes first (for example 2 hours → 120).
What if questions is zero or missing?
A positive integer question count is required; empty, zero, or non-integer values are rejected and not billed.
How do I set aside time to review my answers at the end?
Enter the minutes you want to keep in reserve. They are subtracted before the split, so a 90-minute exam with 60 questions and a 10-minute reserve leaves eighty minutes, or eighty seconds per question. The reserve must be shorter than the exam itself.
How many questions per hour does my pace give?
Sixty divided by your minutes per question. At 90 seconds per question that is 40 questions an hour, a handy check that your practice sets match the pressure of a real timed section.
Does it give harder sections more time?
No. It works out one flat budget for every question, with no section weights or difficulty levels. If the exam mixes reading, essay and multiple-choice blocks, pair this budget with your own timer for each block.
Related tools
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/edu/time-per-question \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_minutes":90,"questions":60}'const res = await fetch("https://api.kit.forhosting.com/edu/time-per-question", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_minutes": 90,
"questions": 60
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/time-per-question",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_minutes": 90,
"questions": 60
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/time-per-question", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_minutes":90,"questions":60}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_minutes":90,"questions":60}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/time-per-question", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"total_minutes": 90,
"questions": 60
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.time_per_question",
"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. |
Technical notes
Teachers use the same numbers when writing blueprints; LMS plugins and study apps call the API so every learner sees the same deterministic split.
Input contract, response fields, and validation errors
Optional decimals is an integer from zero to six controlling rounding of minute-scale outputs; the default is two. POST a JSON body with two required values. total_minutes is the full exam length in minutes; it must be a finite number strictly greater than zero and may arrive as a JSON number or a numeric string. Aliases duration_minutes, exam_minutes, and time_minutes are accepted so form builders can keep familiar labels. questions is the positive integer count of scored items; aliases include num_questions, question_count, and n. Optional reserve_minutes defaults to zero and must be finite, non-negative, and strictly less than total_minutes so remaining time stays positive; review_minutes and buffer_minutes work as aliases. On success the body echoes total_minutes, questions, and reserve_minutes after rounding, then available_minutes, available_seconds, seconds_per_question, minutes_per_question, questions_per_hour, a pace_label string such as 1 min 30 sec, and a formula field restating the identity. Missing required fields, non-finite values, zero or fractional question counts, non-positive total duration, or a reserve that consumes the whole exam fail with invalid_input naming the problem. Those validation failures are not billed. Pair the numeric budget with your own section timers if the exam has reading, essay, and multiple-choice blocks of different lengths; this endpoint returns one flat average so planners can then allocate harder items more time and easier items less while still finishing inside the official clock.
Where exam pacing math earns its keep
Tutoring centers and SAT, ACT, GRE, and professional-licensure coaches translate official section clocks into seconds per item so students practice under realistic pressure instead of open-ended drills. Assessment designers who weight multiple-choice and free-response differently still start from the flat average, then scale by difficulty after they know minutes per question for the whole booklet. Failed validation does not consume balance. Learning management systems and homework apps call the same contract when they show a pacing banner above a timed quiz, ensuring the free browser path matches the API path byte-for-byte on the pure module.
Integration use cases
LMS timed-quiz banners
Learning platforms show a deterministic per-question budget above timed assessments using the same pure math as the free widget.
Technical questions
How do I calculate time per question on an exam?
Send total_minutes and questions. The API subtracts optional reserve_minutes, converts remaining time to seconds, and divides by the question count to return seconds_per_question and minutes_per_question.
What does reserve_minutes do?
It holds back minutes for instructions or final review before dividing. Remaining time must stay positive, so reserve_minutes must be strictly less than total_minutes.
What does the exam time per question calculator cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.