Bandwidth calculator
This bandwidth calculator estimates how long a file transfer will take when you know the file size and the available connection speed.
Run — free
Runs in your browser. Free, unlimited — your data never leaves this page.
Enter a size, choose its decimal or binary unit, then enter a bandwidth in bits or bytes per second. The result reports the exact calculated duration in seconds, minutes, and hours, along with a practical days-hours-minutes-seconds breakdown. It works for downloads, uploads, backups, migrations, and any other transfer where the effective speed is known.
Match each number to the correct unit
A reliable estimate starts with units that describe the numbers you actually have. File sizes are commonly shown in bytes, kilobytes, megabytes, gigabytes, or terabytes. This calculator supports decimal units such as MB and GB, where each step is a power of 1000, as well as binary units such as MiB and GiB, where each step is a power of 1024. Bandwidth is often advertised in bits per second, especially as Mbps or Gbps, while file-copy tools may report bytes per second with labels such as MB/s. The distinction matters because one byte contains eight bits. A 100 MB file does not take one second over a 100 Mbps link; under ideal conditions it takes eight seconds. Select the labels exactly as supplied by your source instead of changing the number mentally. The calculator normalizes the file size to bytes and the speed to bits per second before dividing, preventing the common eightfold error caused by treating bits and bytes as interchangeable.
Understand what the transfer time represents
The result is an idealized transfer duration based on constant usable bandwidth. It answers a precise planning question: if a file contains this many bytes and data moves continuously at this many bits per second, how much elapsed time is required? The primary value is returned in seconds, with equivalent totals in minutes and hours and a whole-second calendar-style breakdown. Real transfers can take longer because advertised link speed is not always available to one task. Protocol headers, encryption, wireless interference, server limits, congestion, disk performance, and other users sharing the connection all reduce effective throughput. For a realistic forecast, enter a measured transfer speed rather than the maximum printed on a router or service plan. If measurements vary, calculate once with a typical speed and again with a conservative speed to create a useful range. The calculator does not add an arbitrary overhead percentage, because doing so would hide the assumptions and could make a measured effective rate less accurate rather than more accurate.
Plan downloads, uploads, backups, and migrations
Transfer-time estimates are useful anywhere a large payload must fit into a schedule. Before downloading a game or system image, compare its expected duration with the time available on the connection. Before uploading video, choose a measured upstream speed, which may be much lower than the downstream figure advertised by an internet provider. Backup operators can test whether a nightly data set fits inside the maintenance window, while infrastructure teams can estimate the first copy of a database or object archive during a migration. The same calculation also helps explain why a fast local network does not guarantee a fast remote transfer: the slowest effective segment determines the bandwidth value you should enter. For automation, the API charges $0.002 per request and returns normalized values that are easy to store or compare. Inputs are deterministic, no network request is made by the calculation, and invalid cases are rejected clearly. A negative file size or speed has no physical meaning, while a zero speed can never complete a nonzero transfer, so those values produce an input error instead of an infinite or misleading duration.
What you can do with it
Schedule a large download
Estimate whether an operating-system image, game, or media package will finish before a deadline.
Check an upload window
Use measured upstream bandwidth to forecast delivery time for video, backups, or client assets.
Plan a data migration
Compare transfer durations at several effective link speeds before moving archives or databases.
FAQ
Does the calculator work for both downloads and uploads?
Yes. The arithmetic is identical; enter the effective downstream speed for a download or upstream speed for an upload.
Why are bits and bytes different?
Bandwidth is commonly stated in bits per second, while files are measured in bytes. One byte equals eight bits, and the calculator performs that conversion.
Are GB and GiB the same?
No. GB is decimal and equals one billion bytes, while GiB is binary and equals 1,073,741,824 bytes.
Will a real transfer finish in exactly this time?
Not necessarily. The result assumes a constant effective speed; congestion, protocol overhead, storage limits, and shared traffic can extend the actual duration.
What happens if speed is zero or a value is negative?
The request returns an invalid-input error because zero speed cannot complete a transfer and negative size or speed is not meaningful.
What does the API request cost?
Each API request costs $0.002. The same deterministic calculation can also run in the 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/elec/bandwidth \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"file_size":1.5,"speed":100}'const res = await fetch("https://api.kit.forhosting.com/elec/bandwidth", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"file_size": 1.5,
"speed": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/elec/bandwidth",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"file_size": 1.5,
"speed": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/elec/bandwidth", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"file_size":1.5,"speed":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"file_size":1.5,"speed":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/elec/bandwidth", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"file_size": 1.5,
"speed": 100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "elec.bandwidth",
"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. |