KICKBACKCOMBAT RECORDLEADERBOARD ↗
FOR STREAMERS & BUILDERS / API V1

Your stream.
Their record.

Use public, confirmed Kickback stats in your overlays, bots, and community tools. Read-only. No sign-in or API key. This is accumulated player history, not live match telemetry.

One endpoint. Every public player.

GET https://kickbackstats.com/api/v1/players.json

Open the JSON feed ↗. The response contains a players array. Find players by their 17-digit Steam ID string; names can change. This v1 endpoint returns the full snapshot: player selection, searching, and mode selection happen in your code. Query parameters do not filter it.

Each player has id, name, totals, weapons, maps, and modes. Top-level stats combine game modes. modes.ffa, modes.defuse, and modes.explore each contain their own totals, weapons, and maps.

JavaScript / browser overlays

The optional helper downloads the snapshot and selects one player locally. It shares concurrent requests and caches successful fetches for one minute. Use this inside your overlay's JavaScript module:

import { getPlayer } from
  "https://kickbackstats.com/api/v1/client.js";

const result = await getPlayer("YOUR_17_DIGIT_STEAM_ID");
// Optional: getPlayer(id, { mode: "ffa" })
// Modes: all (default), ffa, defuse, explore.

if (!result.player) {
  // No confirmed stats for this player yet.
} else if (result.isStale) {
  // Show a "stats delayed" indicator.
} else {
  const p = result.player;
  const kdr = p.totals.kdrInfinite ? "∞" :
    p.totals.kdr === null ? "—" : p.totals.kdr.toFixed(2);
  // Use textContent, not innerHTML, for player/map/weapon names.
  document.querySelector("#player-name").textContent = p.name;
  document.querySelector("#kills").textContent = p.totals.kills;
  document.querySelector("#kdr").textContent = kdr;
}
// Poll about once every 300 seconds, not every frame.

This API supplies data; it is not itself a finished OBS Browser Source overlay. Your overlay needs matching HTML elements. For plain JavaScript, use fetch(url).then(r => r.json()) and find the player in data.players. Browser GET requests work across origins without cookies or custom headers.

PowerShell / stream automation

$url = 'https://kickbackstats.com/api/v1/players.json'
$data = Invoke-RestMethod -Uri $url
$player = $data.players | Where-Object id -EQ 'YOUR_17_DIGIT_STEAM_ID'
$player.totals
$player.weapons
$player.maps
$player.modes.ffa.totals

Fields & calculations

RecordFields
Player totals & each mapkills, deaths, kdr, kdrInfinite, revives, teamkills, rounds, objectiveWins, defuses
Each weaponid, kills, shots, successfulShots, damageMilli, damage, accuracyPercent
Each map's identityid, name — group by stable ID, not display name.
Snapshot metadataschemaVersion, generatedAt, refreshSeconds, staleAfterSeconds

Handle missing or delayed data

A missing player is absent from the array; the helper returns player: null. No confirmed rounds yet is not the same as an outage. An empty dataset is valid. Missing mode records have zero counters and empty weapon/map arrays.

On timeout, a non-200 response, or an unsupported schema, the helper throws. Catch errors, keep your last known values with an unavailable/delayed label, and retry with backoff. Do not turn a failed request into zero stats. Preserve timestamps and tolerate new optional fields within v1.

Only GET and HEAD are supported. Send no credentials, authentication tokens, custom request headers, or request body. Unsupported URLs/methods can return 403/404, not JSON errors. CORS is enabled for simple cross-origin reads. There is no per-key quota; poll at most once a minute per tool, preferably every five minutes, and share that snapshot across players.

Reports, moderation records, private Steam metadata, unconfirmed scores, and gameplay credentials are not exposed. This API cannot submit scores, change stats, or authenticate players.