RPG XP to next level calculator
This RPG XP to next level calculator tells you exactly how much experience a character still needs before advancing.
Run — free
Enter the current level, the XP already earned within that level, and choose either a linear or quadratic progression curve. The calculator applies a transparent fixed formula, reports the full threshold for the level, and subtracts current progress. It is useful for balancing prototypes, checking progression tables, designing quests, or giving players a clear answer without building a spreadsheet.
Choose a progression curve that matches your design
An experience curve controls how quickly the work required for advancement grows as a character becomes stronger. In this calculator, the linear curve sets the current level threshold to 100 multiplied by the current level. Level 10 therefore requires 1,000 XP earned during that level before level 11 is reached. This curve adds the same 100 XP increment to the requirement at every new level, making progression easy to predict and explain. The quadratic curve sets the threshold to 100 multiplied by the square of the current level. At level 10, that produces a 10,000 XP threshold. Quadratic growth begins gently but becomes much steeper, so high levels take substantially longer. These are intentionally simple reference curves rather than rules from a particular game. They are useful when prototyping a new progression system, comparing two pacing models, or producing a baseline that can later be adjusted with rewards, multipliers, or custom tables. Select the curve that represents the pacing you want to inspect.
Enter XP earned during the current level
The current XP field means progress inside the current level, not the character's lifetime accumulated experience. If a level 12 character has earned 875 XP since reaching level 12, enter 875. With the linear curve, the threshold is 1,200 XP, so the calculator returns 325 XP to the next level. Keeping level-local XP separate from lifetime XP makes the calculation unambiguous and mirrors games that reset an experience bar after every advancement. The calculator also returns the threshold it used, the selected curve, the current and next levels, and the submitted progress so the result can be recorded or checked without reconstructing the inputs. XP may include decimals when a game awards fractional experience, while the level itself must be a positive whole number. Current XP cannot be negative and cannot exceed the selected curve's threshold for that level. An over-threshold value is rejected because it likely means lifetime XP or a missed level-up was supplied.
Use the result to balance rewards and pacing
The remaining XP figure becomes most useful when compared with the rewards available to the player. Divide the returned amount by an average quest reward to estimate how many quests remain, or compare it with XP per encounter to test whether a level will feel too short or too repetitive. Designers can calculate several representative levels under both curves and see where their pacing begins to diverge. A linear curve supports steady, readable advancement, while a quadratic curve creates increasingly long high-level goals unless reward values also grow. Because the formulas are deterministic, the same input always returns the same result in the browser and through the API. That makes the calculator suitable for build scripts, balancing sheets, automated tests, community tools, and player-facing progress displays. The calculation does not simulate bonuses, rested experience, prestige systems, level caps, or custom lookup tables. Apply those game-specific rules before entering current XP, or treat this result as a neutral baseline against which a more elaborate progression system can be measured.
What you can do with it
Balance quest rewards
Compare remaining XP with typical quest payouts to estimate how many activities a player needs before advancing.
Prototype a progression system
Test representative levels with linear and quadratic curves before committing to a more detailed experience table.
Show player progress
Turn a character's current level-local XP into a clear remaining amount for dashboards, bots, and companion tools.
FAQ
What does the linear XP curve calculate?
It sets the XP threshold for the current level to 100 multiplied by that level, then subtracts current XP.
What does the quadratic XP curve calculate?
It sets the XP threshold to 100 multiplied by the square of the current level, then subtracts current XP.
Should current XP be lifetime experience?
No. Enter only the XP earned within the current level. Lifetime cumulative XP must first be converted to level-local progress.
Why is XP above the threshold rejected?
It indicates that the character should already have advanced or that cumulative XP was entered, so returning a negative remainder would be misleading.
Can current XP contain decimals?
Yes. Current XP may be any finite nonnegative number up to the threshold, although the current level must be a whole number.
How much does an API calculation cost?
Each API request costs $0.002. The same deterministic calculation is also available free in your 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/game/rpg-xp-to-next-level \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"current_level":12,"current_xp":875,"curve_type":"linear"}'const res = await fetch("https://api.kit.forhosting.com/game/rpg-xp-to-next-level", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"current_level": 12,
"current_xp": 875,
"curve_type": "linear"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/game/rpg-xp-to-next-level",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"current_level": 12,
"current_xp": 875,
"curve_type": "linear"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/game/rpg-xp-to-next-level", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"current_level":12,"current_xp":875,"curve_type":"linear"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"current_level":12,"current_xp":875,"curve_type":"linear"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/game/rpg-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_level": 12,
"current_xp": 875,
"curve_type": "linear"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "game.rpg_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. |