Dungeon Runners · Community tools

Game API

Use public character data and leaderboards in your own tools. No login or API key needed.

Get a character

Send a GET request to https://play.dungeonrunnersreborn.com/api/v1/characters/{name}. Use the character’s current name; capitalization doesn’t matter. URL-encode spaces as %20.

cURL
curl --fail --silent --show-error \
  'https://play.dungeonrunnersreborn.com/api/v1/characters/ExampleHero'
JavaScript
async function getCharacter(name) {
  const response = await fetch(
    `https://play.dungeonrunnersreborn.com/api/v1/characters/${encodeURIComponent(name)}`,
    { credentials: 'omit' }
  );
  if (!response.ok) throw new Error(`Character API: HTTP ${response.status}`);
  return response.json();
}

getCharacter('ExampleHero')
  .then(character => console.log(character.name, character.level))
  .catch(console.error);

Character requests work from other websites (CORS). Omit cookies and credentials. Names can contain 1–64 ASCII letters, digits, underscores, or spaces. There is no endpoint to list all characters.

Response data

Example character response
{
  "schema_version": 1,
  "name": "ExampleHero",
  "class": "avatar.classes.FighterFemale",
  "level": 12,
  "appearance": {
    "skin": 0, "face": 0, "face_feature": 0, "hair": 0, "hair_color": 0
  },
  "spent_attributes": {
    "strength": 20, "agility": 10, "toughness": 15, "power": 0
  },
  "equipment": [
    {"slot": 10, "def": "1HAxe1PAL.1HAxe1-1", "level": 1, "mods": []}
  ],
  "equipped_skills": [
    {"slot": 100, "def": "skills.generic.ShadowLightning", "level": 1}
  ],
  "signature": "BASE64URL_PROTECTED_HEADER..BASE64URL_SIGNATURE"
}
  • class and def are game references, not display names or tooltips. appearance values are numeric selections.
  • spent_attributes contains allocated points, without equipment bonuses.
  • equipment and equipped_skills contain only equipped entries, sorted by slot, and may be empty. Each item modifier in mods has a def and level.

Inventory, bank contents, account details, and other private data are not included.

You can read the data without using signature. To check a saved sheet’s authenticity, use the character verifier. A valid signature does not mean the data is current.

Updates & errors

Character data refreshes roughly once an hour. Cache results and avoid frequent polling. For conditional requests, send the returned ETag unchanged in If-None-Match; on 304, reuse your cached response.

The site allows 120 requests per minute per IP, shared across web routes. Check the HTTP status before using a response:

StatusWhat to do
400Check the character name’s format.
404No public character is available under that name.
429 / 503Rate limited or temporarily unavailable. Wait before retrying; follow Retry-After when available.

Character API errors look like {"error":"Not Found","status":404}. Check /api/v1/status for feed health: source_checked_at is Unix seconds and stale means updates are delayed.

Leaderboards

GET these URLs using the same base URL. Each returns up to 100 entries in rows, plus generated_at (Unix seconds) and stale.

EndpointRanking
/api/levelLevel
/api/goldGold
/api/playedPlay time (played_seconds)
/api/pvpAll-time PvP
/api/pvp?period=weekThis week’s PvP

For past PvP weeks, use ?period=YYYY-MM-DD with a Monday date from the response’s weeks list. Weeks start Monday at 00:00 UTC.

Leaderboard responses can be cached for 15 seconds. Fetch them from your backend: they do not support cross-origin browser requests. Check the HTTP status; leaderboard errors may return HTML.