Travel per diem calculator
This travel per diem calculator turns a daily allowance, a trip length, and departure and return day percentages into a clear reimbursement total.
Run — free
It treats the stated trip length as calendar days, pays every middle day at the full allowance, and prorates the first and last days independently. The result also shows the effective reimbursable days and each endpoint amount, making the calculation easy to review, explain, or copy into an expense record.
Enter the allowance and count calendar travel days
Start with the daily allowance that applies to the traveler, destination, and policy period. The calculator does not choose a government, employer, or client rate for you; it uses the amount you provide and preserves its currency context without converting it. Enter the total number of calendar travel days, counting both the departure date and the return date. A trip that starts on Monday and ends on Friday therefore contains five travel days, even when the traveler leaves late on Monday or returns early on Friday. Those partial-day details belong in the percentage fields rather than in the day count. Keeping the count as a whole number makes the audit trail unambiguous: middle days are always full days, while only the endpoints are prorated. Before using the result, confirm that the allowance and percentages come from the same reimbursement policy. If the daily allowance is 120 in your accounting currency, enter 120; do not include a currency symbol, thousands separator, mileage, lodging, or separately reimbursed expenses in that field.
Prorate departure and return days with percentages
Use first_day_percent for the departure day and last_day_percent for the return day. A value of 100 pays the complete daily allowance, 75 pays three quarters, 50 pays half, and 0 excludes that endpoint from reimbursement. The calculator converts each percentage into a fraction of one day, adds all full middle days, and multiplies the resulting reimbursable-day total by the daily allowance. For example, a five-day trip with 75 percent on both endpoints contains three full middle days plus 0.75 plus 0.75, or 4.5 reimbursable days. The two percentages are independent because many policies treat departure and return differently. A one-day trip is a special case: the same calendar day is both the first and last day, so the percentages must match and the day is counted once. This rule prevents accidental double reimbursement. Percentages must remain between 0 and 100, and the travel-day count must be a whole number from 1 through 10,000.
Review the reimbursement breakdown before submitting it
The output includes the original allowance and travel-day inputs, the percentages applied to both endpoints, the number of full middle days, the effective reimbursable days, the first-day and last-day amounts, and the final reimbursement. This breakdown is useful when an approver needs to reproduce the total without guessing which convention was used. For a multi-day trip, the formula is the first-day fraction plus every full middle day plus the last-day fraction, all multiplied by the daily allowance. For a one-day trip, the matching endpoint fraction is used once. Results are rounded only to remove floating-point noise, not automatically to two decimal places, because currencies and internal accounting policies can use different precision rules. Apply your organization’s required currency rounding after reviewing the result. The calculation covers allowance reimbursement only. It does not add lodging, transportation, mileage, taxes, exchange-rate adjustments, meal deductions, or destination-specific rate selection. The browser calculation is free, while automated API requests cost $0.002 each.
What you can do with it
Prepare an employee expense claim
Calculate the allowance portion of a trip and retain a transparent breakdown for the employee and approver.
Check a travel reimbursement
Reproduce a submitted total using the stated daily rate and the policy percentages for departure and return days.
Automate project travel costs
Use the API to apply known per-diem rates and endpoint percentages consistently across planned or completed trips.
FAQ
What does the calculator cost?
It is free to run in your browser. An API request costs $0.002.
Does the travel-day count include departure and return days?
Yes. Enter the total calendar days from departure through return, including both endpoints.
How are partial days calculated?
Each endpoint percentage is divided by 100 and multiplied by the daily allowance. All middle days receive the full allowance.
How does a one-day trip work?
Because the first and last day are the same calendar day, their percentages must match and that fraction is counted once.
Does this calculator select an official per-diem rate?
No. Supply the daily allowance required by your employer, client, contract, or applicable policy.
Does the result include lodging, mileage, or currency conversion?
No. It calculates only the per-diem allowance from the values entered and does not add other expenses or convert currencies.
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/per-diem \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"daily_allowance":120,"travel_days":5}'const res = await fetch("https://api.kit.forhosting.com/travel/per-diem", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"daily_allowance": 120,
"travel_days": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/travel/per-diem",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"daily_allowance": 120,
"travel_days": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/travel/per-diem", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"daily_allowance":120,"travel_days":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"daily_allowance":120,"travel_days":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/travel/per-diem", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"daily_allowance": 120,
"travel_days": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "travel.per_diem",
"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. |