This site

Public API

Everything on this site comes from a public, read-only API: plain web addresses that return JSON, no key or login needed. You're welcome to use them for your own Discord bot, spreadsheet or tool.

Please: credit OP Ninja Statistics (opninja.nyvix.net) where people see the data, and don't ask more than once a minute - the boards only change every few minutes anyway. The files can change shape over time; there's no guarantee they stay the same (see Changes at the bottom).

All addresses start with https://ingest.nyvix.net. Everything is JSON unless it says otherwise, and works from a browser (CORS is open).

Quick start

Open ingest.nyvix.net/board.json in your browser to see what comes back. From code:

curl -s https://ingest.nyvix.net/board.json
// JavaScript (a web page, Node 18+ or discord.js)
const data = await fetch("https://ingest.nyvix.net/board.json").then(r => r.json());
const top = data.boards.Power.rows[0];
console.log(`#1 Power: ${top.name} with ${top.value}`);
# Python: pip install requests
import requests
data = requests.get("https://ingest.nyvix.net/board.json", timeout=20).json()
for row in data["boards"]["Honor"]["rows"][:10]:
    print(row["rank"], row["name"], row["value"], row["gains"].get("24h"))

Want it in Discord? See Make a Discord bot with the Public API.

The boards

Address
What you get
/board.json
Both top 100s right now
/board.json?at=<unix time>
Both top 100s as they were at that moment (Rewind)

The file has at (when the newest board was read), live (false when you asked for an older moment), first (the oldest moment you can ask for) and game_updated (the last game update). Each board (boards.Power, boards.Honor) has rows, plus top10, last and last_rank (the value needed for #10 and for the last rank).

Each row:

Field
Meaning
rank, name, value
As in the game; value uses the game's notation, e.g. 12.631DVg
id, uid
The player's Roblox user ID (id is also their address on this site: opninja.nyvix.net/player/id)
moves
Rank change over 5m, 1h, 6h, 24h: ▲3, ▼1, =, NEW (empty: not enough history); move is the 24 hour one
gains
Gained over 5m, 1h, 6h, 24h, as text (+1.48TVg); a trailing * means less history than the period
gs
The same gains as log10 numbers, for sorting
gap, next, nexts
To the rank above: how much they need, and when they pass at their pace over each period
trend
The last 24 hours as [minute, log10 of the value] pairs (minute 0 = 24 hours ago, 1440 = now)
active
Their value changed in the last 10 minutes
boost
Jumpy: their value jumped 5x up or down 4+ times in 24 hours (upgrades, boosts) - their gains and projections are rough. The site shows ⚡

A row, shortened:

{"rank": 2, "id": 251429304, "uid": 251429304, "name": "dhen1410", "value": "229.063TVg",
 "move": "=", "moves": {"5m": "=", "1h": "=", "6h": "", "24h": "="},
 "gains": {"5m": "+92.6DVg", "1h": "+651DVg", "6h": "+1.48TVg*", "24h": "+17.6TVg"},
 "gap": "Needs +29.2TVg to pass #1 phen1411", "trend": [[9, 74.33], [42, 74.33]],
 "active": true, "boost": false}

Players

Address
What you get
/players.json
Every player ever seen: id, name, uid, display, prev (earlier names), best (best rank per board), at1 (hours at #1, both boards), last (last seen, unix time), and per board the current rank (empty when off the board) and last value
/find.json?name=<username>
A current username to id and name ({} when not found)
/profile.json?id=<id>
One player: head (names, first and last seen), now (per board: rank, value, gains, peak, records, the players around them), boards (personal bests), overtakes (who they passed and who passed them)
/tip.json?board=Power&id=<id>
What the leaderboard's hover card shows: 24 hours of points (pts), per_hour, per_day, peak, best, highest and lowest rank today (rank_hi, rank_lo), passed / passed_by, and their place on the other board
/activity.json?id=<id>
Their activity feed (milestones, records, big climbs): items (ts, type, summary), 12 at a time - &page=2 for more while more is true

Records

Address
What you get
/recap.json
periods (the last 24 hours, and the last 7 days once there is more than 2 days of history): per board the biggest gain, biggest climb and most time at #1 (top1)
/months.json
One entry per calendar month (UTC), newest first: biggest gain, climb, most time at #1 (top1) and most overtakes. Finished months never change
/archive.json
The monthly archive: each finished month's final top 100 on both boards (months: key like 2026-10, label, boards.Power.rows ...), plus now (each id's rank today) to see where they are now
/alltime.json
All-time top 5s per board: steady (steadiest gains), streak (longest stretch in the top 10), best1h (best 1 hour gain), on_board (most time on the board), overtakes (most in a day)
/race.json?board=Power&days=1
The race replay of the top 10 (days=7 for a week): players (id, name, uid) and frames: [unix time, [[player index, log10 of the value], ...]]

Every record entry is {"id", "name", "uid", "text"}; text is ready to show ("+45.2TVg", "▲29 (#49 → #20)", "10.0 h").

Projections (the Calculator's numbers)

/calc.json has, per board, every top 100 player's pace - what the Calculator uses:

Field
Meaning
at
When the board was read (unix time)
players[]
id, uid, name, rank, lg (log10 of the value now), jumpy (see boost above)
g24, g7
Gained per hour over the last 24 hours / 7 days, as a plain number (1.9e72 = 1.9TVg)
r24, r7
The same as log10 growth per hour
ranks[]
The same for each rank (whoever holds it)
spans
How many hours r24 / r7 really cover (less than a week of history: shorter)

To project a value t hours ahead the site uses a steady amount per hour (tested against the history: it was closer than steady % growth in 66-82% of cases):

const value = Math.pow(10, p.lg) + (p.g24 ?? p.g7 ?? 0) * t;

Tomorrow's board in the Calculator does this for everyone and sorts the result. Power jumps when players upgrade, so Power projections are rough; Honor ones are close. wiki holds the realm, class and wing data read from the OP Ninja Simulator wiki.

Moons

Address
What you get
/status.json
moon: the moon right now - kind (blood, blue, lucky), name, effects, since (unix time) - or empty when there is none. Also last (newest board read) and players (players ever seen)
/moons.json
now, the last moons (recent: kind, start, end), how many of each in the last 7 days (counts), each moon's name and effects (moons) and the day / night schedule

Moons only come at night. With schedule (cycle, offset, night, all in seconds) it is night when (t - offset) mod cycle < night for a unix time t - a night every 15 minutes, lasting 7.5.

Blood Moon: 2x Honor, 2x Honor loss, PvP protection off, friendly fire. Blue Moon: 2x Ninjutsu, 2x Soul Force. Lucky Moon: 2x Luck. Funny Moon does nothing and isn't reported.

Refresh times and site status

Address
What you get
/refresh.json
How often each board refreshes in the game, measured from the last 24 hours. Per board a kind: steady (period in seconds and the next refresh), pairs (Power: a long wait then a quick second refresh - each with median, p10, p90 in seconds - and the next refresh between next_from and next_to) or irregular (usual, usual_pct, median, p10, p90). Also refreshes and last
/uptime.json
What Site status shows: the last 192 hours from h0 (the start of the first hour, unix time). Per board cover (% of each hour collected, null = no data yet), snaps (refreshes saved), timed / meta (refreshes timed to within 20 seconds / timed at all), last and usual (seconds between refreshes). collector: online, since, up (% of each hour it was checking in). restarts: [time, kind] (s scheduled, a automatic, b the collector PC started). gaps: b (board or both), from, to (empty: still going), why

Downloads, pictures and charts

Address
What you get
/export/players.csv
Every player with their current stats (CSV, opens in Excel or Google Sheets)
/export/history.csv?board=Power&days=30
Every sample of one board (CSV); ?player=<id> instead: one player, both boards, all history
/chart.svg?board=Power&players=<id>,<id>
A chart picture (SVG). Options: days, metric=rank, w, h, theme=light
/card/<id>.png
A player card picture with their latest stats (for a bio, a forum signature or a Discord embed)
/avatar/<uid>.png?s=150
Their Roblox headshot (s = 48 or 150 pixels)

Good to know

  • How fresh is it? Each board is read right after it refreshes in the game (see /refresh.json). at in /board.json says when; Site status shows whether the collector is running and how much of the last week was collected. If it's offline, nothing changes until it is back - the site never guesses missing data.
  • Caching: the board, player and record files are rebuilt once per new board read, /uptime.json at most once a minute. Asking more often than once a minute only gets you the same answer.
  • Numbers: values like 12.631DVg use the game's own notation; the wiki page Number suffixes lists them. log10 numbers (in trend, lg, gs) are easier to compare and sort: 12.631DVg = 70.1014, and 10 ** lg gives the plain number back.
  • Times are unix seconds (UTC).
  • IDs: id is the player's Roblox user ID (since October 2026; the smaller site numbers used before still work in addresses and ?id=) - the same number as in a profile address, e.g. opninja.nyvix.net/player/192325217.
  • Errors: an unknown id gives {}; a problem on the server gives HTTP 500 with {"error": "..."}. Try again a minute later.

Changes

  • October 15, 2026: added /refresh.json (refresh times), /uptime.json (site status), /archive.json (monthly archive) and jumpy in /calc.json; documented /calc.json, /race.json, /tip.json, /activity.json, /find.json and the card and avatar pictures.
  • October 2026: id became the Roblox user ID (the old site numbers still work).

Sources

  • Made by this site's sync service (the data comes from the in-game leaderboards)

Parts of this wiki use information from the OP Ninja Simulator Roblox Wiki on Fandom, by its contributors, licensed under CC BY-SA. Text adapted from it is shared under the same license; each page lists its sources. A big thank-you to Deadshot123def456 for keeping the Fandom wiki up to date.

Made with Baserow