braket.gg
EN

Braket for developers: overview

Braket (braket.gg) is a Steam-native tournament and competitive platform for game studios. You point a Braket arena at your game's Steam AppID, and Braket runs the whole competitive layer for you: Steam sign-in, player registration, World-Cup style group stages, single-elimination playoffs, finals and third-place small finals, season ladders, Steam-visible trophies, match recordings and replays, casting, Twitch integration, and a public REST API that mirrors everything on your public site.

Each studio gets its own arena: an isolated tenant served at https://<yourslug>.braket.gg (or your own custom domain). An arena has its own database, its own branding, its own admins, its own Steam keys, and its own API keys. Nothing is shared between arenas except the platform code and the network-wide integrations (one Twitch app, one signing key for data attestations).

This documentation set is written for the person integrating a game. It is exhaustive: every SDK function, every API endpoint, every field of every payload, and the exact bytes of the result-verification protocol are documented here so you can integrate from these pages alone.

The four integration levels

Braket is designed so that you get value with zero engineering, and then progressively deeper guarantees as you invest more. Each level is strictly additive: you never have to undo an earlier level to adopt a later one.

Level 0: run tournaments with zero code

Create an arena, enter your Steam AppID, set your branding, and you can run tournaments immediately. Players sign in with Steam (OpenID, no keys required from them), register for your open tournaments, ready up for their scheduled matches, play your game on Steam, and report the result. Admins confirm results, resolve disputes, and the bracket resolves 1st, 2nd and 3rd place automatically. The top three receive a Steam-visible tournament trophy.

At this level results are player-reported and admin-confirmed. You write no code and touch no SDK. This is covered in Getting started: your first Braket tournament and Tournament formats and lifecycle.

Level 1: read your data over the REST API

Every arena exposes a public, read-only REST API at https://<yourslug>.braket.gg/api/v1. It returns the same data your public site shows: the tournament list, a full tournament (players, group standings, playoff bracket, podium), the season ladder, and per-player stats. Use it to build a Discord bot, a stream overlay, a standings widget on your own website, or an in-game "current tournaments" panel.

Reads are public and rate-limited to 60 requests per minute per IP. Mint an API key (Authorization: Bearer bk_...) to raise that to 600 per minute. This is covered in Public REST API reference.

Level 2: game-verified results via the protocol

Instead of players clicking "I won", your game itself reports the result, and Braket confirms it only when both clients independently agree. This is the dual-attestation protocol (braket.result.v3): your game defines the result as its own JSON object (only matchId, sessionNonce, and winner are reserved keys), serializes it deterministically, and each client POSTs the SHA-256 of the exact bytes. Matching hashes confirm the match with resultSource: 'game_client' in seconds and with no clicks; a mismatch escalates to a dispute rather than recording a wrong result. A modified client cannot fabricate an outcome the honest client will not sign.

The protocol is plain HTTPS, JSON, SHA-256, and a single-use Steam Web API ticket for auth, so you can implement it in any engine (Unity, Godot, custom). It is specified byte-for-byte — discovery endpoint, submission endpoint, and the match-recording and replay endpoints — in The game-client result protocol (dual attestation).

For games with no client integration at all (for example, a game you do not control the source of), the AI referee can adjudicate directly: both sides attach a recording or stream, and the result confirms only when the AI referee sees both conclude the same outcome. This is the evidence-based twin of dual attestation and is covered in AI referee.

Level 3: drop-in engine SDK (Unreal or Unity)

If you ship on Unreal Engine or Unity, a drop-in Braket SDK implements Level 2 for you. On Unreal, drop the Braket/ folder into your project's Plugins/, set your arena URL in Project Settings, and you get a UBraketSubsystem that discovers the local player's live match, auto-polls for one, and submits verified results on match end with retries and backoff. It ships a self-contained, NIST-vector-verified SHA-256 and a canonical JSON serializer so it adds no extra module dependencies, speaks the braket.result.v3 protocol transparently for both 1v1 and team tournaments, and exposes everything to Blueprint. This is the full reference in Unreal Engine SDK reference. On Unity, the same-shaped BraketClient component does the same job — see Unity SDK reference. Both SDKs use the identical canonical serializer, so a Unity client and an Unreal client can play the same match and hash the result identically.

What each level unlocks

Level You write Result source Unlocks
0 Zero code Nothing player_report, admin Full tournament lifecycle, ladder, trophies, casting, disputes
1 REST API A client of the API (read only) Bots, overlays, external sites, in-game standings
2 Protocol An HTTP + SHA-256 client in your game game_client, ai_video Automatic, tamper-evident results with no clicks
3 Unreal plugin A few lines wiring the subsystem game_client Level 2 with retries, auto-discovery, Blueprint, both protocols

Trust and data

Braket treats a studio's Steam keys as first-class secrets. They are stored in a post-quantum credential vault (hybrid X25519 + ML-KEM-768 key wrapping, ML-DSA-65 signatures), never in plaintext in the database, backups, or logs. Every arena can produce a signed, verifiable data export that proves how its data is stored and that secrets appear only as ciphertext. Arenas are hard-isolated: one SQLite database file per tenant, no shared tables. This is covered in Trust and data.