WaveWarZINTELLIGENCE
OverviewBattlesLeaderboardsEventsClaimAPI
© 2026 WaveWarZ. All rights reserved.
Privacy PolicyTerms of Servicewavewarz.com ↗

Public API

NO AUTH REQUIRED

Every trade, battle, and payout on WaveWarZ happens on Solana mainnet — it's already public. This API just makes it easy to query without running your own RPC indexer. Built for AI agents, dashboards, bots, and anyone who wants live WaveWarZ data in JSON. Free, read-only, no API key.

Base URL: https://wavewarz.infoFormat: JSONCORS: open (*)Cache: 30–60s

Quick Start

No API key, no auth header, no rate-limit token — just call the endpoint.

curl https://wavewarz.info/api/public/stats

Endpoints

GET /api/public/statsGET /api/public/battlesGET /api/public/battles/:idGET /api/public/eventsGET /api/public/leaderboards/artistsGET /api/public/leaderboards/tradersGET /api/public/leaderboards/songs
GET/api/public/stats

Platform-wide totals: volume, live battle, artist payouts, trader claims, battle counts. The same numbers shown on the wavewarz.info homepage.

Example request

curl https://wavewarz.info/api/public/stats

Example response (trimmed)

{
  "updatedAt": "2026-07-18T11:32:05.023Z",
  "solPriceUsd": 74.95,
  "volume": { "totalSol": 41230.9, "totalUsd": 3090257.4, "last24hSol": 812.3, "last7dSol": 5104.1 },
  "liveBattle": null,
  "artistPayouts": { "totalSol": 412.3, "totalUsd": 30902.5, "note": "..." },
  "traderClaims": { "totalSol": 8210.1, "totalUsd": ..., "withdrawalCount": 3140, "note": "..." },
  "battles": { "total": 1904, "mainEvents": 88, "mainBattles": 264, "quickBattles": 1580, "communityBattles": 60 }
}
GET/api/public/battles

Flat, paginated feed of every battle — Main Events, Quick Battles, and Community Battles. Filter by type or fetch the single currently-live battle.

ParamTypeDescription
typestring"main" | "quick" | "community" — omit for all types
liveboolean"true" to return only the currently live battle (if any)
limitnumberdefault 50, max 200
offsetnumberdefault 0, for pagination

Example request

curl "https://wavewarz.info/api/public/battles?type=quick&limit=5"

Example response (trimmed)

{
  "updatedAt": "2026-07-18T11:32:08.026Z",
  "count": 5,
  "battles": [
    {
      "battleId": 1784343368,
      "type": "quick",
      "live": false,
      "winnerDecided": false,
      "winnerSide": null,
      "artist1": { "name": "STILL DEGEN", "wallet": "HqHj...vvS", "musicLink": "https://audius.co/...", "profilePictureUrl": null, "twitterHandle": null, "albumArtUrl": "https://...", "poolSol": 0.0004, "volumeSol": 0.0393 },
      "artist2": { "name": "I'm a Giant", "wallet": "JtcZ...7X", "musicLink": "https://audius.co/...", "profilePictureUrl": null, "twitterHandle": null, "albumArtUrl": "https://...", "poolSol": 0.0131, "volumeSol": 0.0246 },
      "factors": { "pollWinner": "artist2", "pollVotesArtist1": 1, "pollVotesArtist2": 4, "djWavyWinner": null, "djWavyReasoning": null },
      "imageUrl": "https://...",
      "createdAt": "2026-07-18T02:56:21.761769+00:00",
      "endsAt": "2026-07-18T03:05:02.761Z",
      "url": "https://wavewarz.info/battles/1784343368"
    }
  ]
}
GET/api/public/battles/:id

Full detail for a single battle by battle_id, including computed artist earnings once a winner is decided (1% trading fee + settlement bonus split, per the immutable fee schedule). "factors" holds the breakdown behind the winner: for Quick Battles, the Poll (with vote counts) + Charts (larger pool — see artist1/artist2 poolSol) + DJ Wavy (AI judge) picks, 2 of 3 wins; for Main/Community Events, the Human Judge + X Poll + SOL vote picks entered through the admin judging panel. Any factor can be null if it hasn't been recorded yet (or was a tie) — winnerSide is always the authoritative final result.

Example request

curl https://wavewarz.info/api/public/battles/1784343368

Example response (trimmed)

{
  "battleId": 1784343368,
  "type": "quick",
  "live": false,
  "winnerDecided": true,
  "winnerSide": "artist1",
  "factors": { "pollWinner": "artist1", "pollVotesArtist1": 5, "pollVotesArtist2": 2, "djWavyWinner": "artist1", "djWavyReasoning": "Stronger hook and better mix clarity in the second verse." },
  "artist1": { "name": "STILL DEGEN", "wallet": "...", "musicLink": "...", "poolSol": 1.2, "volumeSol": 3.4, "profilePictureUrl": null, "twitterHandle": "r3plic4nt206", "albumArtUrl": "https://..." },
  "artist2": { "name": "I'm a Giant", "wallet": "...", "musicLink": "...", "poolSol": 0.6, "volumeSol": 1.1, "profilePictureUrl": null, "twitterHandle": null, "albumArtUrl": "https://..." },
  "artistEarnings": {
    "artist1": { "tradingFeesSol": 0.034, "settlementBonusSol": 0.03, "totalSol": 0.064 },
    "artist2": { "tradingFeesSol": 0.011, "settlementBonusSol": 0.012, "totalSol": 0.023 }
  },
  "battleDurationSeconds": 521,
  "streamLink": null,
  "url": "https://wavewarz.info/battles/1784343368"
}
GET/api/public/events

Main Events grouped from individual rounds. A Main Event is typically 3 rounds (each its own battle_id from /api/public/battles) between the same two artists. Each round's winner is decided 2-of-3 (Human Judge + X Poll + SOL/Chart vote, entered by the WaveWarZ team through the admin judging panel). The EVENT winner is best-of-3: whoever wins the majority of rounds. Use this endpoint for the real event result — don't infer it from a single round's pool or volume.

ParamTypeDescription
subtypestring"standard" | "charity" | "spotlight" | "prediction" — omit for all
liveboolean"true" to return only events with a round currently live
limitnumberdefault 50, max 200

Example request

curl "https://wavewarz.info/api/public/events?limit=1"

Example response (trimmed)

{
  "updatedAt": "2026-07-18T17:04:14.215Z",
  "count": 1,
  "events": [
    {
      "eventId": "event-1783899858",
      "eventSubtype": "standard",
      "live": false,
      "artist1": { "name": "R3plic4nT", "wallet": "HEB2...hVt", "profilePictureUrl": null, "twitterHandle": "r3plic4nt206" },
      "artist2": { "name": "Stormi", "wallet": "2J32...8bXp", "profilePictureUrl": null, "twitterHandle": "Stormiunleashed" },
      "roundsWon": { "artist1": 0, "artist2": 3 },
      "winnerSide": "artist2",
      "totalVolumeSol": 3.5622,
      "imageUrl": "https://...",
      "startedAt": "2026-07-12T23:44:53.15946+00:00",
      "endsAt": "2026-07-13T00:46:57.808Z",
      "rounds": [
        { "battleId": 1783899858, "roundNumber": 1, "winnerSide": "artist2", "artist1PoolSol": 0.0712, "artist2PoolSol": 0.3546, "artist1VolumeSol": 0.3655, "artist2VolumeSol": 0.36, "live": false, "url": "https://wavewarz.info/battles/1783899858", "humanJudgeWinner": "artist2", "xPollWinner": "artist1", "solVoteWinner": "artist2", "judgedAt": "2026-07-13T00:50:12.000Z" }
      ]
    }
  ]
}
GET/api/public/leaderboards/artists

Main Event artist rankings — wins/losses/draws counted per event (not per round), plus volume and automatic on-chain earnings. Same source of truth as the Artists leaderboard page.

ParamTypeDescription
limitnumberdefault 100, max 500

Example request

curl "https://wavewarz.info/api/public/leaderboards/artists?limit=10"

Example response (trimmed)

{
  "updatedAt": "2026-07-18T11:32:05.023Z",
  "count": 51,
  "artists": [
    {
      "wallet": "23oq...GmG",
      "name": "Geek Myth",
      "wins": 3, "losses": 0, "draws": 0,
      "totalVolumeSol": "39.3387", "totalVolumeUsd": "$2,949.22",
      "totalEarningsSol": "0.4752", "totalEarningsUsd": "$35.63",
      "winRate": 100, "battles": 3,
      "pfpUrl": null, "twitterHandle": "GeEkMyTh_ETH"
    }
  ]
}
GET/api/public/leaderboards/traders

Trader rankings by total SOL volume, with win rate and net P&L. Net P&L includes both mid-battle sells and real settlement claims (claimShares), parsed directly from on-chain vault transactions — not just recorded trade rows.

ParamTypeDescription
limitnumberdefault 100, max 500

Example request

curl "https://wavewarz.info/api/public/leaderboards/traders?limit=10"

Example response (trimmed)

{
  "updatedAt": "2026-07-18T11:32:06.854Z",
  "solPriceUsd": 74.95,
  "count": 130,
  "traders": [
    {
      "wallet": "B97z...TSA",
      "totalVolumeSol": 46.85, "totalVolumeSolFmt": "46.8508", "totalVolumeUsd": "$3,511.47",
      "tradeCount": 448, "battleCount": 102,
      "wins": 69, "losses": 16, "winRate": 81.18,
      "netPnlSol": 2.398, "netPnlFmt": "2.3983", "netPnlUsd": "$179.76", "netPnlPositive": true
    }
  ]
}
GET/api/public/leaderboards/songs

Quick Battle song rankings, one row per unique Audius track (keyed by permalink, not the hand-typed battle title) aggregated across every battle it has appeared in.

ParamTypeDescription
limitnumberdefault 100, max 500
sortstring"volume" (default) | "battles" | "winRate"

Example request

curl "https://wavewarz.info/api/public/leaderboards/songs?sort=battles&limit=10"

Example response (trimmed)

{
  "updatedAt": "2026-07-18T11:32:07.820Z",
  "count": 797,
  "songs": [
    {
      "songTitle": "Fuck yo feelingZ",
      "artistName": "GodclouD",
      "musicLink": "https://audius.co/GodclouD/fuck-yo-feelingz",
      "genre": "Electronic",
      "artUrl": "https://...",
      "battles": 22, "wins": 16, "losses": 6, "winRate": 73,
      "totalVolumeSol": 8.6312, "totalUniqueTraders": 30,
      "lastPlayed": "2026-07-17T01:50:56.696344+00:00"
    }
  ]
}

Notes for Agents & Developers

  • All SOL amounts are plain numbers (not lamports). Multiply by solPriceUsd where provided to convert to USD.
  • "Live" means now < created_at + battle_duration — pure timer math, not a database status flag (status text is inconsistently cased across historical rows).
  • WaveWarZ runs one battle at a time — expect at most one live battle across the whole platform.
  • Don't confuse a round (one battle_id, from /api/public/battles) with a Main Event (best-of-3 rounds, from /api/public/events) — an individual round's winner and the overall event winner are frequently different artists.
  • In Quick Battles, artist1 / artist2 fields hold song titles, not artist names — check musicLink for the Audius track and the song leaderboard's artistName field for the actual performer.
  • Traders do not receive automatic payouts — they must manually claim. netPnlSol in the trader leaderboard already accounts for real on-chain claims, not just recorded buy/sell rows.
  • Responses are cached 30–60s server-side (Cache-Control header) — safe to poll every 30s from a live UI.
  • No rate limit is currently enforced, but please cache client-side rather than polling faster than the cache TTL.

Questions or want a new field/endpoint added? Reach out to the WaveWarZ team on X.