Public key (read): CEP4xLkvW7L5iyUcdO20unyYJ98mu2

Submit key (insert-only, ships in the game client): v7zUvu1Vbw1OBHJU5Kk1hGWzPaieC4lI

Private key (admin, keep secret): HAazzU9NX7vYJDhvV7dIqH3U9XE1TRY8IGO

Submit a run (POST), header X-Submit-Key: v7zUvu1Vbw1OBHJU5Kk1hGWzPaieC4lI, fields: name, patch, difficulty, level, score, json_info
  /api/submit

Score a run + record the fight (POST), same header, fields: score, defender_id, attacker_won
  /api/submit/{id}/score

Top 20 of a patch + difficulty (GET)
  /api/CEP4xLkvW7L5iyUcdO20unyYJ98mu2/top/20?patch=0.1&difficulty=normal

One run with its build (GET)
  /api/CEP4xLkvW7L5iyUcdO20unyYJ98mu2/run/1

Several runs, no builds (GET)
  /api/CEP4xLkvW7L5iyUcdO20unyYJ98mu2/runs/1,2,3

Patches with runs on them (GET)
  /api/CEP4xLkvW7L5iyUcdO20unyYJ98mu2/patches?difficulty=normal

Arena roster -- opponents for a level, hidden runs included (GET)
  /api/CEP4xLkvW7L5iyUcdO20unyYJ98mu2/closest/10/20?patch=0.1&difficulty=normal

Top 100 by score, every patch (GET)
  /api/CEP4xLkvW7L5iyUcdO20unyYJ98mu2/json

Difficulty

All difficulties | normal | hard

Patches

All patches

Runs -- normal

HIDDEN keeps a run off the board, out of the patch counts and out of the high-score check, while it stays available as an arena opponent. That is what seeds a fresh board with starting champions.

A hidden run is a RESERVE, not an equal: a roster is filled from the real runs first, and the hidden ones only top up what those left over -- at the end of the list, so they are the last champions fought. Once there are enough real runs near a player's level, hidden ones stop being sent out at all.

Id Name Patch Difficulty Level Score
rivals beaten
Defending
W / L
Ranked JSON

Battles

Who met who in the arena. The defense columns above are these rows tallied up.

When Attacker Defender Winner