Running pace calculator
Run 10 km in one hour and your pace is 6:00 per kilometre, or 9:39 per mile, at an average of 10 km/h. Enter the distance and your finish time to get pace in both units plus speed. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Distance
- 10 km
- Time seconds
- 3,600
- Finish time
- 1:00:00 km
- Distance km
- 10
- Distance mi
- 6.2137119224
- Pace s per km
- 360
A running pace calculator turns a race or workout distance and your finish time into the two numbers coaches and GPS watches speak fluently: minutes per kilometre and minutes per mile. Enter how far you ran or plan to run, the total time in seconds, and an optional unit (kilometres, miles, or metres); the tool returns pace per km, pace per mile, both distances converted, average speed in km/h and mph, a readable finish-time string, and step-by-step arithmetic you can audit.
What running pace means and how it is computed
Running pace is simply finish time divided by distance, reported as time needed to cover one kilometre or one statute mile at the same average rate. If you complete ten kilometres in three thousand six hundred seconds (one hour), your pace is three hundred sixty seconds per kilometre, written as six minutes zero seconds per kilometre. The same effort is about nine minutes thirty-nine seconds per mile because one international mile equals exactly one thousand six hundred nine point three four four metres.
Average speed is the reciprocal view: distance over time, usually shown as kilometres per hour or miles per hour for runners who prefer velocity language. This calculator always converts your input distance into both kilometres and miles before dividing, so a five-kilometre race and a three-point-one-mile race that represent the same course produce matching dual-unit paces within rounding.
Teachers of coaching math, watch vendors, and spreadsheet authors care that zero or negative inputs fail loudly: a zero distance would make pace infinite, and a zero time would invent an impossible infinite speed.
Practical tips, limits, and related searches
Prefer sending numbers rather than pre-formatted strings when you control the client; string numbers are accepted only when they match a strict finite numeric pattern. Use metres for track intervals (for example four hundred m repeats) and kilometres or miles for road races so the dual pace output matches how your training group talks. Keep distance and time inside the published maxima; ultra efforts longer than one hundred days or distances above one million units are rejected as out of range rather than returning nonsense.
This landing targets people searching for a running pace calculator, minutes per kilometre, minutes per mile, or race pace from finish time; it is not a VO2max predictor, not a fueling planner, and not a GPS file parser. Prefer this capability when you already know distance and elapsed time and only need pace and average speed; if your source is a FIT or GPX file, extract those two scalars first.
What you can do with it
Race-day target pace cards
Coaches enter goal distance and goal finish time to print min/km and min/mile splits for athletes who mix metric and imperial watches.
Training log normalization
Apps store distance and elapsed seconds from any unit system, then call this tool once to fill dual-unit pace columns for charts and exports.
FAQ
How is running pace calculated?
Pace is finish time divided by distance. This tool converts your distance to kilometres and statute miles, then returns seconds and formatted M:SS (or H:MM:SS) per km and per mile.
What units can I use for distance?
Kilometres (km, default), statute miles (mi), or metres (m).
What happens if distance or time is zero or negative?
Pace is undefined for non-positive distance, and non-positive time is not a valid finish time.
Is the running pace calculator free?
The browser tool is free and runs locally.
How do I enter a finish time like 1:00:00?
Enter the total time in seconds: one hour is 3600 seconds. The calculator then shows your finish time back in hours, minutes and seconds, so you can check that it matches your watch.
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/health/running-pace \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"distance":10,"time_seconds":3600}'const res = await fetch("https://api.kit.forhosting.com/health/running-pace", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"distance": 10,
"time_seconds": 3600
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/health/running-pace",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"distance": 10,
"time_seconds": 3600
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/health/running-pace", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"distance":10,"time_seconds":3600}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"distance":10,"time_seconds":3600}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/health/running-pace", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"distance": 10,
"time_seconds": 3600
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "health.running_pace",
"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.
Limits
max_distance | 1000000 |
max_time_seconds | 8640000 |
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
Non-positive distance or time is rejected with a clear invalid_input error so bad form data never looks like a world-record split.
What running pace means and how it is computed
The implementation stays inside ordinary IEEE double arithmetic with fixed twelve-decimal rounding on numeric fields and whole-second rounding only on the human-readable M:SS or H:MM:SS pace strings.
How to call the API and what comes back
Send a JSON body with two required finite positive numbers: distance (aliases dist, d, length) and time_seconds (aliases time, finish_time, finish_seconds, t, seconds). Optionally set unit (aliases distance_unit, distanceUnit, from) to km, mi, or m; when omitted the distance is interpreted in kilometres. Distance must stay within one million units of the chosen system and time within eight million six hundred forty thousand seconds so intermediate products remain finite on the Worker and in the browser. On success the response echoes rounded distance, unit, and time_seconds; sets finish_time to a formatted clock string; publishes distance_km and distance_mi; returns pace_s_per_km and pace_s_per_mi as raw seconds plus pace_per_km and pace_per_mi as formatted strings; adds speed_kmh and speed_mph; includes formula, message, and an ordered steps array showing the conversion and divisions. Failed validation—missing fields, non-finite numbers, non-positive distance or time, unknown unit, or values outside published limits—returns invalid_input and is never charged. Pricing is a flat $0.002 per successful request with unit item and zero marginal unit price.
Practical tips, limits, and related searches
Convert clock times to total seconds before you call the API: one hour fifteen minutes is four thousand five hundred seconds, not the string one colon fifteen. When comparing a watch that displays min/km with a friend who uses min/mile, trust the paired pace_per_km and pace_per_mi fields from a single call rather than reconverting by hand with approximate factors. Failed tasks that return invalid_input do not consume prepaid balance, which keeps exploratory scripts cheap when you deliberately send a zero distance to test client validation.
Integration use cases
Unit tests for fitness calculators
Generate known-good 5K, 10K, and half-marathon fixtures plus deliberate non-positive rejections for golden expected values.
Technical questions
Do I send time as HH:MM:SS?
No. Send total finish time as time_seconds (for example 3661 for 1:01:01). Formatted clock strings appear in the response fields finish_time, pace_per_km, and pace_per_mi.