D&D XP to Next Level Calculator
The D&D XP to next level calculator turns a character's cumulative experience total into an immediate progression answer.
Run — free
Enter the XP shown on the character sheet to see the character's current level, the next level, the cumulative threshold for reaching it, and exactly how many additional experience points remain. The calculation uses the standard fifth-edition level progression table from level 1 through level 20. It is useful during sessions, after awarding encounter XP, or while planning advancement without repeatedly scanning a reference table or subtracting totals by hand.
Enter the cumulative XP total from the character sheet
Use the character's complete experience point total, not only the XP gained in the latest encounter or the amount earned since the current level began. For example, a character with 14,500 total XP has already crossed the 14,000-point threshold for level 6. The calculator identifies that current level first, then finds the following threshold and subtracts the supplied total. Enter a whole number that is zero or greater. Fractional, negative, missing, or text values are rejected because standard character XP is tracked in whole points and silently rounding an input could produce a misleading answer near a level boundary. The output repeats the submitted total so it is easy to verify, then shows the derived current level, next level, cumulative XP required for that next level, and remaining XP. This makes the result auditable at a glance: adding the remaining amount to the current total should equal the displayed next-level threshold exactly. No class, ancestry, party size, or encounter details are needed because standard progression uses the same cumulative thresholds for every character.
Understand thresholds and exact boundary results
Level progression is based on cumulative thresholds rather than a separate counter that resets whenever a character advances. The standard sequence begins at 0 XP for level 1, 300 for level 2, 900 for level 3, and continues through 355,000 XP for level 20. When an entered total exactly equals a threshold, the character is treated as having reached that level. Thus 900 XP reports level 3 and calculates the distance to level 4, rather than reporting zero XP remaining for level 3. A total between thresholds belongs to the lower level, and the difference to the upper threshold is returned as `xp_to_next_level`. Characters at 355,000 XP or above are reported as level 20 with `max_level_reached` set to true and zero XP remaining. The calculator does not invent an unofficial level 21 target. These boundary rules matter when XP is awarded at the end of a session, because a single award may cross one or even several thresholds. You only need the new cumulative total; the lookup automatically finds the correct resulting level.
Use the result at the table or in campaign tooling
At the table, the result gives a quick answer when players ask how close they are to advancing. A game master can add the session award to each character's previous total, submit the new total, and announce both the attained level and the distance to the next one. In campaign notes or a virtual tabletop integration, the API provides stable named fields that can be stored, displayed, or used to trigger a level-up reminder. Each request costs $0.002 when called through the API, while the browser version can handle occasional manual checks. The calculation is deterministic and local: it makes no network request, uses no random value, and does not depend on the date. It specifically follows standard fifth-edition XP progression, so it should not be used for milestone leveling, custom advancement tables, earlier editions, or house rules that change thresholds. If a campaign uses milestones, the remaining-XP concept does not apply; record the game master's milestone conditions instead. For customized XP tables, perform the same threshold subtraction using the campaign's own published values.
What you can do with it
Finish a game session
Check every character's updated cumulative XP after awards and tell players exactly how much remains before their next level.
Update a campaign dashboard
Turn stored character XP totals into current-level and next-threshold fields for a campaign tracker or virtual tabletop display.
Plan advancement pacing
Compare the party's remaining XP with likely future awards when preparing upcoming sessions and story beats.
FAQ
Which D&D progression table does this use?
It uses the standard fifth-edition cumulative XP thresholds for character levels 1 through 20.
Should I enter XP earned during this level or total XP?
Enter the character's total cumulative XP from the character sheet. Do not reset the value after leveling up.
What happens when the XP total exactly matches a level threshold?
The character is considered to have reached that level, and the result measures progress toward the following level.
What does the calculator return for a level 20 character?
At 355,000 XP or more, it reports level 20, marks the maximum level as reached, and returns zero XP to the next level.
Does this work with milestone leveling or custom XP tables?
No. Milestone leveling has no standard remaining-XP value, and custom tables may use different thresholds.
What does an API request cost?
Each API request costs $0.002. The browser calculator is available for manual checks.
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/hobby/dnd-xp-to-next-level \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"current_xp":14500}'const res = await fetch("https://api.kit.forhosting.com/hobby/dnd-xp-to-next-level", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"current_xp": 14500
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/hobby/dnd-xp-to-next-level",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"current_xp": 14500
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/hobby/dnd-xp-to-next-level", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"current_xp":14500}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"current_xp":14500}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/hobby/dnd-xp-to-next-level", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"current_xp": 14500
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "hobby.dnd_xp_to_next_level",
"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. |