Towing and payload capacity calculator
A tow rating is only half of the loading picture. A vehicle can remain below its published towing capacity while exceeding the payload available for people, luggage, accessories, and trailer tongue weight.
Run — free
This calculator checks both limits together. Enter the vehicle GVWR and curb weight, its rated towing capacity, the empty trailer and cargo weights, and everything carried by the tow vehicle. The result shows each margin separately, identifies the tighter constraint, and makes an overloaded combination easy to spot before a trip.
Start with ratings for the exact vehicle
Use the ratings for the specific tow vehicle, not a headline number from an advertisement. GVWR is the maximum permitted weight of the loaded vehicle itself. Curb weight is the vehicle's weight with standard equipment and operating fluids, but definitions and installed options can affect the real figure. Their difference is the calculated payload capacity used here. Towing capacity is the maximum loaded trailer weight allowed for the relevant engine, drivetrain, axle ratio, body style, and towing package. Those configurations can have very different limits even when the badge on the vehicle is identical. A door-jamb label, owner's manual, towing guide, or manufacturer data tied to the vehicle identification number is generally more useful than a generic model-page figure. Keep every number in one selected unit, either pounds or kilograms. The calculator does not convert mixed entries because an unnoticed unit mismatch could produce a plausible but dangerously incorrect result. If a scale ticket is available, prefer measured loaded weights over estimates wherever the requested field matches the measurement.
Build the loaded trailer and vehicle payload
Loaded trailer weight is the empty trailer weight plus everything added to it: luggage, tools, food, water, batteries, propane, optional equipment, and other cargo. Tongue weight is entered separately because it matters in two places conceptually. It is part of the loaded trailer, but the downward tongue or pin load is also carried by the tow vehicle and consumes payload. Do not add tongue weight to trailer cargo again if the empty and cargo figures already describe the complete trailer weight; this calculator compares empty trailer plus cargo with towing capacity, then includes the entered tongue weight in vehicle payload used. Payload used also includes the driver, passengers, items in the cabin or bed, and accessories not reflected in the curb weight. Examples include a bed cover, aftermarket bumper, cargo rack, or weight-distributing hitch hardware. Estimates are useful for planning, but weighing the ready-to-travel combination is the stronger check. Payload is frequently the first limit reached by families towing a large travel trailer, even when the trailer remains comfortably below the advertised tow rating.
Read both margins and check the limits not covered
The result reports payload capacity, payload used, loaded trailer weight, utilization percentages, and the remaining margin for both constraints. A negative remaining value means that limit is exceeded by the displayed amount. The overall result is within limits only when both the towing and payload checks pass. The limiting factor identifies the smaller numerical margin in the selected weight unit, which is a practical signal of where an added load would matter first. However, passing these two calculations is not a complete towing approval. You must also check gross combined weight rating, front and rear axle ratings, tire load limits, receiver and ball ratings, trailer GVWR, tongue-weight guidance, brake requirements, and any speed or equipment restrictions from the manufacturers and local rules. Weight distribution can overload an axle even when total vehicle weight is below GVWR. Treat this calculator as a screening and planning tool, then confirm the loaded setup with authoritative labels, manuals, and scale measurements. The API uses the same deterministic calculation and costs $0.002 per request when you automate repeated checks.
What you can do with it
Screen a travel-trailer combination
Compare the planned trailer, family, luggage, and tongue load with the tow vehicle's published towing and payload limits.
Evaluate cargo changes before departure
See whether full water tanks, bicycles, tools, or extra passengers consume the remaining trailer or vehicle margin.
Compare candidate tow vehicles
Run the same loaded trailer against configuration-specific ratings to reveal when payload, rather than headline tow rating, is decisive.
FAQ
How is payload capacity calculated?
Payload capacity is GVWR minus curb weight. The result then compares that capacity with occupants, vehicle cargo, and trailer tongue weight.
Does tongue weight count against payload?
Yes. The downward tongue or pin load is carried by the tow vehicle, so this calculator includes it in payload used.
Should tongue weight also be added to loaded trailer weight?
No separate addition is needed here. Loaded trailer weight is empty trailer plus trailer cargo; tongue weight is part of that total and is entered separately only to calculate vehicle payload use.
Can I mix pounds and kilograms?
No. Select one unit and enter every weight in that unit. The output uses the same unit.
Does a passing result prove the combination is safe and legal?
No. It checks towing capacity and payload only. You must separately verify combined, axle, tire, hitch, trailer, braking, equipment, and legal limits.
What does the API request cost?
The API costs $0.002 per request. The calculation is deterministic and does not use a network service or AI.
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/travel/towing-capacity-check \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"unit":"lb","gvwr":7000,"curb_weight":5200,"towing_capacity":6500,"trailer_empty_weight":4200,"tongue_weight":650}'const res = await fetch("https://api.kit.forhosting.com/travel/towing-capacity-check", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"unit": "lb",
"gvwr": 7000,
"curb_weight": 5200,
"towing_capacity": 6500,
"trailer_empty_weight": 4200,
"tongue_weight": 650
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/towing-capacity-check",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"unit": "lb",
"gvwr": 7000,
"curb_weight": 5200,
"towing_capacity": 6500,
"trailer_empty_weight": 4200,
"tongue_weight": 650
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/towing-capacity-check", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"unit":"lb","gvwr":7000,"curb_weight":5200,"towing_capacity":6500,"trailer_empty_weight":4200,"tongue_weight":650}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"unit":"lb","gvwr":7000,"curb_weight":5200,"towing_capacity":6500,"trailer_empty_weight":4200,"tongue_weight":650}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/towing-capacity-check", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"unit": "lb",
"gvwr": 7000,
"curb_weight": 5200,
"towing_capacity": 6500,
"trailer_empty_weight": 4200,
"tongue_weight": 650
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.towing_capacity_check",
"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. |