Road trip fuel stop calculator
Plan fuel stops before a long drive by combining the trip distance, the vehicle's practical range on a full tank, and a reserve percentage.
Run — free
The calculator reduces the stated range by your chosen safety margin, then uses that safer interval to estimate how many refueling stops the journey requires. It works with miles or kilometers as long as both distance inputs use the same unit. The result is a planning baseline, not a promise that every road will have an open station at exactly the recommended point.
Choose realistic distance and range inputs
Start with the full distance you expect to drive, including planned detours when they are known. Enter the vehicle's range per full tank in the same unit: use miles for both values or kilometers for both values. A dashboard estimate can be useful, but a range based on your own recent driving is usually a better planning input. Highway speed, hills, wind, temperature, traffic, tire pressure, roof boxes, trailers, and passenger or cargo load can all change consumption. For that reason, avoid treating the manufacturer's best-case figure as guaranteed range. Electric vehicles can use the same arithmetic when the input represents usable driving range per full charge, although this calculator describes the result as fuel stops. The trip begins with a full tank, so that initial supply is not counted as a stop. A trip shorter than the safety-adjusted interval therefore returns zero stops, while a longer route returns only the refueling visits needed after departure and before arrival.
Use the safety margin as a reserve
The safety margin is the percentage of nominal tank range that you do not plan to consume between stops. With a 400-mile range and a 20 percent margin, the recommended interval is 320 miles. This reserve gives you room for station closures, missed exits, queues, unexpected diversions, or consumption that is worse than the estimate. A larger percentage produces shorter intervals and usually more stops; a smaller percentage makes the plan more efficient but leaves less flexibility. The margin must be at least zero and below 100 percent, because reserving the entire range would leave no drivable planning interval. Choose a margin that reflects the route rather than relying on one universal number. A well-served motorway may justify a smaller reserve than a remote road with long gaps between services. The calculation is deterministic: it multiplies full-tank range by the usable percentage and rounds only the displayed interval to a stable precision, so repeated identical inputs produce the same result.
Turn the interval into an actual stop plan
Use the recommended distance as a maximum planning gap, then place real stops at suitable stations before each interval expires. The stop count is calculated by dividing total distance by the adjusted interval, rounding up to the number of tank segments required, and subtracting the full tank available at departure. This means an exact 640-mile trip with a 320-mile interval needs one en-route stop: the first tank covers the first segment and the refill covers the second. The number is a minimum under the supplied assumptions, not a list of station locations. Check the route separately for opening hours, fuel type, charger compatibility, construction, seasonal closures, and gaps between services. It can be sensible to stop earlier for meals or rest and let that visit replace a later fuel-only stop. Recalculate if the route changes or observed consumption differs materially from the planned range. For safety, never continue solely because the calculated interval says more distance should remain; the vehicle's gauge, warnings, road conditions, and available services should guide the real decision.
What you can do with it
Plan a cross-country drive
Estimate a conservative spacing and minimum stop count before choosing stations along a long highway route.
Compare vehicle options
See how different full-tank ranges affect refueling frequency for the same itinerary and reserve preference.
Prepare for remote roads
Apply a larger reserve to shorten planned gaps where fuel availability is sparse or uncertain.
FAQ
What does the calculation cost?
The API price is $0.002 per request.
Can I use miles or kilometers?
Yes. Use either unit, but total_distance and range_per_tank must use the same one. The returned interval uses that unit too.
Does the stop count include the starting full tank?
No. It counts en-route refueling stops only; the calculation assumes the vehicle leaves with a full tank.
Why use a safety margin?
It reserves part of the stated range for detours, station problems, and real-world consumption differences instead of planning to arrive empty.
Does this choose fuel stations for me?
No. It calculates spacing and count. You should map actual stations and verify availability separately.
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/travel2/road-trip-fuel-stops \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"total_distance":1000,"range_per_tank":400,"safety_margin_percent":20}'const res = await fetch("https://api.kit.forhosting.com/travel2/road-trip-fuel-stops", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"total_distance": 1000,
"range_per_tank": 400,
"safety_margin_percent": 20
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel2/road-trip-fuel-stops",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"total_distance": 1000,
"range_per_tank": 400,
"safety_margin_percent": 20
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel2/road-trip-fuel-stops", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"total_distance":1000,"range_per_tank":400,"safety_margin_percent":20}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"total_distance":1000,"range_per_tank":400,"safety_margin_percent":20}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel2/road-trip-fuel-stops", 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_distance": 1000,
"range_per_tank": 400,
"safety_margin_percent": 20
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel2.road_trip_fuel_stops",
"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. |