WaveWarZINTELLIGENCE
OverviewBattlesCalendarLeaderboardsBenefitsVoter GuideWavIDClaim ↗APIMerch ↗
© 2026 WaveWarZ. All rights reserved.
Privacy PolicyTerms of Servicewavewarz.com ↗
← API docsNEWEST FIRST

WaveWarZ Stats API — changelog

Every change to what the public API returns — a number, a field, a filter, or how a record is computed. If you build on wavewarz.info/api/public/*, this is the page to watch: a value moving under you without notice is a broken contract, so we log it here.

Rendered at wavewarz.info/api-docs/changelog. Newest first.

In scope: response values, new/changed/removed fields, filter changes, recomputations. Not in scope: internal database work with no API-visible effect, UI-only changes, performance work.

Entry shape: date · endpoints affected · type (ADDITIVE — new optional field, safe; CORRECTION — a wrong value fixed; RECOMPUTE — a formula changed; BREAKING — a field renamed or removed) · what changed · how much your numbers move · how to verify it yourself.


2026-10-12 — One battle's volume restored; two Quick Battles' winners filled in

Endpoints: /stats (volume.totalSol), /battles, /battles/:id (volumeSol per artist; winnerDecided and winnerSide), /leaderboards/songs where they count wins — Type: CORRECTION

Battle `1760215752` volume. It served 0.5539 and 0.3058 SOL (0.8597 in all) until September, then dropped to 0.2023 and 0.1905 SOL, exactly its two pools. The cause was the webhook: a re-sent delivery for an old battle replaced the chain-derived volume with the payload figure or the pool (fixed in code the same day, so a battle that already has trade rows keeps its volume). It is back to 0.5539 and 0.3058 SOL, which equals the sum of its 15 trade rows and a fresh read of the vault. volume.totalSol in /stats rises by 0.4669 SOL, from 980.0881 to 980.5551 SOL (rounded).

Battles `1789610754` and `1789787083` winners. Both Quick Battles from September had no stored winner (winnerDecided false). wavewarz.com shows artist 1 as the winner of both: poll artist 1, charts artist 1, DJ Wavy artist 2, two of three. Their results were filled in from the wavewarz.com record. winnerDecided is now true and winnerSide is artist1 for both; song leaderboards that count wins may move for the songs involved.

Not changed: the 30 non-test battles that store 0.0042 on artist 2 against 0 on chain are still as stored, pending a question to the wavewarz.com team.


2026-10-12 — Five Quick Battles from October 9-10 added (they were missing from the index)

Endpoints: /stats (volume.totalSol, battle and trade counts), /battles, /battles/:id, /leaderboards/* — Type: ADDITIVE (new records)

Five Quick Battles played on the night of October 9 to 10 UTC never reached the index while its storage was locked (see the status note of 2026-10-10). They have now been imported: 1791598241, 1791598919, 1791599596, 1791600998 and 1791603005. Their trades and volume were read from the chain, and their poll, DJ Wavy, chart and overall results were taken from the wavewarz.com record. No existing battle was changed.

How much your numbers move: volume.totalSol in /stats rises by 0.7700 SOL, from 979.3181 to 980.0881 SOL (battles: 0.1500, 0.1500, 0.1500, 0.1500 and 0.1700 SOL). Battle and trade counts rise by 5 and 14. Leaderboards that count songs, artists or traders may shift slightly where these songs or wallets appear.

How to verify: GET /api/public/battles/1791603005, or sum the buy and sell instructions on that battle's vault.


2026-10-12 — 84 older battles' volume lowered to what the chain shows (overstated at save time)

Endpoints: /stats (volume.totalSol), /battles, /battles/:id (volumeSol per artist), /leaderboards/* where they total volume — Type: CORRECTION

Unlike the two corrections before it, this one moves numbers down. 84 battles (created December 2025 to March 2026) stored a volume higher than the buys and sells actually recorded for them. The most likely cause is that these rows kept the volume wavewarz.com calculated and sent with the battle, saved before the chain hydration step, and that figure counts differently from a parse of the vault's buy and sell instructions. For every one of the 84, the chain figure agrees with the sum of the battle's buy and sell rows in our trades table, and 83 of the 84 also match an independent chain read by the protocol team. Each was recomputed from the vault with scripts/fix-volume-from-chain.ts (passing the battle ids), the same method as the earlier corrections. Only volumeSol changed; winners, pools and payouts were not touched.

How much your numbers move: these 84 battles together go from 25.7580 to 18.7709 SOL (-6.9871). volume.totalSol in /stats falls by the same 6.9871 SOL, to 979.3181 SOL. Biggest single moves: battle 1769653724 3.5010 to 2.6411 SOL; battle 1767577018 1.3872 to 0.9062 SOL; battle 1770604952 3.3119 to 2.8567 SOL.

Not changed: battle 1760215752 goes the other way (stored 0.3928, recorded trades 0.8597 SOL). It is an undercount, not part of this group, and was left alone pending review.

Verify: GET /api/public/battles/:id for any id below; volumeSol per side should now match the sum of buys and sells on the battle's vault.

BattleOld volume (SOL)New volume (SOL)
17733639540.44410.2384
17733630640.14310.0710
17732832340.34410.2806
17732807760.16380.0960
17708648450.18550.1287
17708639420.27020.2378
17708613990.19140.1193
17707787230.39820.2492
17707770510.05550.0406
17707761780.18150.0998
17706915940.04170.0272
17706909390.07320.0492
17706878950.05350.0250
17706049523.31192.8567
17704331520.09680.0470
17704325130.09290.0499
17704293820.05940.0280
17703503740.03770.0170
17703471410.05150.0283
17703458790.04560.0253
17703443480.06330.0312
17701778660.02590.0110
17701737080.12740.0650
17701730660.05350.0340
17700869860.03580.0160
17700846590.23280.1352
17700840060.07320.0350
17700101880.06330.0492
17698329280.08500.0410
17698300840.05350.0250
17698275540.39820.2541
17698263450.09290.0597
17697408920.07910.0602
17697391130.47510.2464
17697383750.09290.0646
17696537243.50102.6411
17695695330.06330.0366
17695674440.12260.1078
17695651600.26030.1300
17693058560.07320.0461
17692232030.13230.0848
17692219210.24060.1569
17692207320.18150.1379
17692194790.66220.4079
17691385190.44750.2947
17691329630.73310.6713
17690494500.47700.3761
17690483900.44750.2989
17690461570.09290.0598
17689618590.21520.1262
17682693760.09470.0459
17680154470.93010.6855
17678368530.50070.4981
17677534600.05350.0250
17677505030.08300.0597
17677499170.28990.2077
17676645870.11650.0884
17676640320.15200.1291
17676633700.14800.1446
17675779940.80210.5120
17675770181.38720.9062
17673736200.05740.0270
17672340600.25250.1872
17672013710.21700.1178
17671136630.19340.1215
17669532520.00820.0037
17667680910.13620.0901
17666820270.17370.0923
17660785310.22490.1427
17659389250.10270.0500
17659087380.00620.0010
17656896110.00620.0010
17655572531.12711.0553
17654804110.10270.0500
17654721170.36440.3500
17654715800.48460.4633
17654020440.20120.1984
17653875320.55580.3553
17653238710.01610.0106
17652981090.16180.1460
17652114390.31940.1600
17650478210.42780.2955
17650462720.21110.1296
17650360440.00620.0017

2026-10-12 — 33 more pre-2026-04 battles' volume corrected (pool-fallback bug)

Endpoints: /stats (volume.totalSol), /battles, /battles/:id (volumeSol per artist), /leaderboards/* where they total volume — Type: CORRECTION

A follow-up to the 2026-09-13 correction. 33 more battles (all created before 2026-04-27) still stored volume equal to the pool, an undercount left by the retired backfill-volume.ts. The earlier repair's automatic sweep missed them because its query stops at 1,000 rows and these are older than the newest 1,000. Each was recomputed from the vault's buy and sell instructions on chain (scripts/fix-volume-from-chain.ts, passing the battle ids), the same method as before. Only volumeSol changed; winners, pools and payouts were not touched.

How much your numbers move: these 33 battles together go from 7.3034 to 32.3005 SOL (+24.9971). volume.totalSol in /stats moves from 961.7748 to 986.7719 SOL (+2.6%). Biggest single moves: battle 1757898875 1.8753 to 6.7992 SOL, 1757207855 0.0514 to 2.6899 SOL, 1753063414 0.0816 to 1.6156 SOL.

Verify: GET /api/public/battles/:id for any id below; volumeSol per side should now match the sum of buys and sells on the battle's vault.

BattleOld volume (SOL)New volume (SOL)
17709494910.36540.4286
17705160000.00980.0100
17699888030.01230.0274
17685296180.02000.0693
17642077850.41200.7812
17642056120.04020.5751
17638648250.10360.5514
17630423520.02560.0260
17627407340.20101.2093
17617883170.00870.4756
17614386410.03670.2809
17614373090.03180.2262
17606661340.62770.8611
17606634460.17910.7340
17605766780.31381.0460
17605746990.12731.2622
17602267750.00010.0198
17597154330.36822.0237
17594521500.00010.3969
17585055320.40372.3058
17585033150.14622.1584
17578988751.87536.7992
17572116190.01390.3156
17572078550.05142.6899
17566895570.89702.8626
17548760690.38331.9035
17546057880.00100.0050
17538563300.00010.0595
17530634140.08161.6156
17523354040.00300.0089
17518378070.26300.2670
17514216070.20690.2100
17514202880.09360.0950

2026-09-13 — 29 pre-2026-04 battles' volume corrected (pool-fallback bug)

Endpoints: /stats (volume.totalSol), /battles, /battles/:id (volumeSol per artist) — Type: CORRECTION

29 battles (24 from 2025-07-21 → 2026-03-10, plus 5 later single-trade battles where the values coincidentally matched) had volumeSol exactly equal to poolSol per artist side — a known-bad backfill (scripts/backfill-volume.ts, retired) had written pool-adjacent chain state into the volume field instead of true buy+sell flow, and the correct tool's auto-sweep never caught these because they're old enough that a prior Helius pass returned no vault history for them.

Recomputed all 29 directly from vault buy/sell instruction data (scripts/fix-volume-from-chain.ts). Net effect is small platform-wide (most of these are low-volume early battles) but several individual battles move meaningfully — e.g. battle 1753061890: 1.7406 → 2.8110 SOL; 1753665241: 0.6370 → 2.3570 SOL. Full before/after list in the commit.

Verify: GET /api/public/battles/:id for any of the 29 IDs above — volumeSol per side should no longer equal poolSol unless the battle genuinely had one buy and no sell.

2026-09-09 — artist trade-fee rate corrected to 1.005%

Endpoints: /stats (artistPayouts), /battles/:id (artistEarnings), /leaderboards/artists (totalEarnings) — Type: RECOMPUTE

The per-trade fee is 1.500% of gross buy volume, and the program splits it 67 / 33 between the artist and the platform — so the artist's share is 1.005% and the platform's is 0.495%, not the 1.00% / 0.50% our older docs stated. Confirmed by decomposing the on-chain SOL transfers on every buy across a 223-buy sample: the artist leg lands at exactly 1.0050%, the platform leg at 0.4950%.

How much your numbers move: artist trading-fee figures rise about **0.5% relative** (roughly 9.28 → 9.33 SOL platform-wide). Platform figures fall ~1% relative. Settlement bonuses (5% / 2% / 3% of the loser pool) are unchanged.

2026-09-09 — trader P&L and volume rebuilt from chain

Endpoints: /leaderboards/traders — Type: CORRECTION + ADDITIVE

The trades table was only holding ~43% of buy value and ~46% of sell value — per-trade rows are captured from a battle's on-chain vault history, and the fetch was silently truncating on the largest battles. The trader leaderboard's netPnlSol, totalVolumeSol and win/loss all derive from that table, so aggregate trader P&L was reading +204 SOL when the real figure is about −17 (and that −17 is simply the fees flowing to artists and the platform — traders in aggregate net out to roughly minus the fee, by design).

The full trade history was re-fetched from chain. After the rebuild:

legnowon-chainmatch
buys, by value712.73 SOL714.3299.8%
sells, by value212.75 SOL213.8999.5%
claims, by value478.51 SOL483.4899.0%
distinct traders157157complete

Aggregate trader P&L now reads −19.88 SOL (vs an independent chain rebuild of −17.04). 23 wallets in profit (was showing 64); the 38 wallets that showed a positive P&L with zero trades are gone.

Each trader now carries `dataComplete` (boolean). It is true only when every battle that wallet traded has a fully verified trade history. When false, netPnlSol / totalVolumeSol / win-loss for that wallet are a lower bound and the site hides the P&L figure. The response also carries `dataCompleteShare` (0–1) — the fraction of battles verified so far (currently ~0.96). As the last battles verify, wallets flip to true with their real numbers.

Not affected: /stats volume, artist payouts, and settlement come from a different table (battles) that was independently reconstructed and holds up to within 0.7%.

2026-09-09 — total_distribution_amount backfilled from chain

Endpoints: /stats, /battles, /battles/:id — Type: CORRECTION

total_distribution_amount (the total SOL a battle settled) was populated by a step that silently failed on most battles — it summed to ~44 SOL across 197 battles. It is now 449 SOL across 1,436 battles, read directly from the on-chain Battle account. Only that field changed; recorded winners were not touched.

How much your numbers move: anything using total_distribution_amount, or a "platform paid out" / "total settled" figure derived from it, rises roughly 10x.

Verify: SELECT SUM(total_distribution_amount) FROM battles WHERE NOT is_test_battle → ~449.

2026-09-08 — Quick Battle artist records count per song

Endpoints: none yet (/leaderboards/artists is Main-Event-only and unaffected; logged because it governs any future Quick-Battle artist record) — Type: RECOMPUTE

An artist's Quick Battle win/loss is the sum of their songs' outcomes, not one flag per battle. When an artist runs two of their own songs against each other (about 1 in 4 Quick Battles historically), one song wins and one loses — so that contributes one win and one loss to the artist, not a coin flip. "Opponents defeated" for Quick Battles excludes self and reads as unique other artists — "battled X artists' songs".

How much your numbers move: win rate barely shifts (an equal win and loss are added); records get heavier — e.g. one artist goes 110-70 → 146-96.

2026-09-08 — community leaderboard excludes Benefit Battles

Endpoints: none (the community leaderboard is a site page, not a public API endpoint; logged for completeness) — Type: CORRECTION

Benefit Battles (charity fundraisers, both sides on one wallet) were collapsing into a single competitor row with an equal win/loss. They are now filtered out — they're fundraisers, not rivalries.


Coming soon (not shipped yet)

launcher_wallet — ADDITIVE

A new field on /battles and /battles/:id: the wallet that actually created the battle on chain. It differs from the existing creator_wallet (a UI hint from wavewarz.com that is wrong about a third of the time), which will stay and be relabelled in the docs as a soft hint.

volume_source — ADDITIVE

A new field on /battles and /battles/:id: an enum (chain_trades | pool_field | site | unknown) saying how that battle's total_volume_* was derived, so you can filter on volume confidence.


Before this changelog (2026-07)

No formal changelog was kept before September 2026. Known API-affecting changes: 2026-07-18 — public API launch (7 endpoints); 2026-07-21 — Quick Battle winners backfilled and the factors object added to battle responses; 2026-04 — historical trading-volume figures repaired for battles that settled before 2026-04-27.

Machine-readable source: docs/API-CHANGELOG.md. Building on the API and want to be told before a value moves? Open an issue on that repo.