Bifrost Bifrost
POSThttps://api.dev.bifrostgaming.com/v1/graphql

partnerGetMatchData

v1

Returns the full match report for a given match ID. Supports two output formats: Bifrost (default) and CRCON. The Bifrost format is identical to the public match JSON on the Frostbite stats website. The CRCON format is structurally identical to CRCON's get_map_scoreboard API response, including Steam profile/ban data and weapon type classifications — ideal for tools and integrations built around the CRCON ecosystem.

Operation Type

Query

Rate Limit: 120 requests per 60 seconds per partner (2 req/s)

Rate limits are enforced per partnerId via Redis using a fixed 60-second window. You can issue up to 120 requests per minute (an average of 2 requests per second), which allows processing the full list of 50 match IDs from partnerGetMatchIds in well under a minute.

Important usage notes

  • This endpoint does NOT require an encrypted payload. Pass your partnerId and partnerEncryptionKey directly as query variables.
  • Two output formats are available: Bifrost (default) and CRCON. Omit the format parameter or pass "bifrost" for the Frostbite stats format. Pass format: "crcon" for the CRCON-compatible format.
  • The Bifrost format is identical to the Frostbite stats website public match JSON endpoint.
  • The CRCON format is structurally identical to CRCON's get_map_scoreboard API response. It includes Steam profile data (avatars, profile URLs, country), VAC/game ban information, weapon type classifications (infantry, armor, etc.), weapon side mappings, team confidence detection, and CRCON-style map metadata.
  • Returns null (not an error) if the match ID does not exist or has no report data.
  • Match reports are pre-computed at match finalization and served from static files on disk for high performance. If the static file is unavailable, the API falls back to querying the database directly. Both Bifrost and CRCON static files are pre-generated.
  • The license field (Bifrost format) requires visible attribution to Frostbite (https://frostbite.bifrostgaming.com) when displaying data publicly.
  • Rate limit: 120 requests per 60 seconds (2 req/s average). When processing a batch from partnerGetMatchIds, a ~500ms delay between calls will comfortably stay within the limit. The rate limit applies regardless of format.
  • Player stats include weapon breakdowns (killsByWeapon, deathsByWeapon), nemesis tracking (mostKilled, killedMostBy), and distance records for kills.

Input Fields

FieldTypeRequiredDescription
partnerIdString!RequiredYour unique partner identifier, provided when your partner account was created.
partnerEncryptionKeyString!RequiredYour partner encryption key (Base64-encoded). This is used to verify your identity — it is NOT used to encrypt a payload for this endpoint.
matchIdString!RequiredThe unique match identifier (UUID format). Obtain match IDs from partnerGetMatchIds.
formatStringOptionalOutput format. "bifrost" (default) returns the Frostbite stats format. "crcon" returns a CRCON-compatible get_map_scoreboard response with Steam profiles, VAC ban data, weapon type classifications, and team confidence scores.

Code Examples

# Bifrost format (default)
curl -X POST https://api.dev.bifrostgaming.com/v1/graphql \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query PartnerGetMatchData($partnerId: String!, $partnerEncryptionKey: String!, $matchId: String!, $format: String) { partnerGetMatchData(partnerId: $partnerId, partnerEncryptionKey: $partnerEncryptionKey, matchId: $matchId, format: $format) }",
    "variables": {
      "partnerId": "your-partner-id",
      "partnerEncryptionKey": "your-base64-encryption-key",
      "matchId": "1bddf7cf-a78c-51ae-a095-456674dd2fee"
    }
  }'

# CRCON format (add format: "crcon")
curl -X POST https://api.dev.bifrostgaming.com/v1/graphql \
  -H "Content-Type: application/json" \
  -d '{
    "query": "query PartnerGetMatchData($partnerId: String!, $partnerEncryptionKey: String!, $matchId: String!, $format: String) { partnerGetMatchData(partnerId: $partnerId, partnerEncryptionKey: $partnerEncryptionKey, matchId: $matchId, format: $format) }",
    "variables": {
      "partnerId": "your-partner-id",
      "partnerEncryptionKey": "your-base64-encryption-key",
      "matchId": "1bddf7cf-a78c-51ae-a095-456674dd2fee",
      "format": "crcon"
    }
  }'

Postman Collection

Download a ready-to-use Postman collection for this endpoint. Import it into Postman to start testing immediately.

How to import into Postman
  1. Open Postman and click Import (top-left)
  2. Drag and drop the downloaded .json file, or click Upload Files and select it
  3. Click Import to confirm
  4. The collection appears in your sidebar — expand it and select the request
  5. In the Body tab, update the placeholder values (your-partner-id, etc.) with your actual credentials
  6. Click Send

The collection uses Postman's GraphQL body type, which provides syntax highlighting and variable editing. Make sure your Postman version is 7.2+ for GraphQL support.

Success Response200

{
  "data": {
    "partnerGetMatchData": {
      "license": {
        "notice": "Use of these game stats on a public facing website requires that you visibly attribute them to Frostbite, with a link to https://frostbite.bifrostgaming.com",
        "warning": "Your origin IP may be blocked and other measures taken if you do not attribute correctly"
      },
      "match": {
        "matchId": "1bddf7cf-a78c-51ae-a095-456674dd2fee",
        "gameType": "HLL",
        "serverName": "D-DAY 24/7 | NEWCOMERS WELCOME",
        "mapId": "utahbeach_offensive_us",
        "mapName": "Utah Beach (Day, Allies Off.)",
        "gamemode": "Offensive",
        "matchTime": "2026-03-20 11:25:28",
        "durationSeconds": 3152,
        "durationFormatted": "52:32",
        "alliedFaction": "USA",
        "axisFaction": "Germany",
        "alliedScore": 5,
        "axisScore": 0,
        "winner": "Allies",
        "totalPlayers": 97,
        "totalKills": 1053
      },
      "teams": [
        { "team": "Allies", "faction": "USA", "playerCount": 50, "totalKills": 513, "totalDeaths": 470, "totalTeamkills": 19, "score": 5 },
        { "team": "Axis", "faction": "Germany", "playerCount": 47, "totalKills": 540, "totalDeaths": 440, "totalTeamkills": 21, "score": 0 }
      ],
      "players": [
        {
          "playerId": "76561198012345678",
          "playerName": "OGren Kiesel",
          "level": 210,
          "team": "Allies",
          "faction": "USA",
          "primaryRole": "Rifleman",
          "kills": 42, "deaths": 18, "kdRatio": 2.33,
          "teamkills": 1, "teamkillsReceived": 0,
          "combatScore": 840, "offenseScore": 320, "defenseScore": 120, "supportScore": 210,
          "timePlayedSeconds": 3152,
          "killStreak": 8, "deathStreak": 3,
          "killsByWeapon": [
            { "weapon": "M1 GARAND", "count": 22, "headshots": 8, "avgDistance": 67.3 },
            { "weapon": "MK2 GRENADE", "count": 5, "headshots": 0, "avgDistance": 12.1 }
          ],
          "mostKilled": [{ "playerId": "76561198087654321", "playerName": "Feind_Hans", "count": 4 }],
          "killedMostBy": [{ "playerId": "76561198099887766", "playerName": "Sniper_Wolf", "count": 3 }]
        }
      ],
      "killFeed": [
        {
          "eventTime": "2026-03-20 10:33:16", "matchSecond": 0,
          "killerId": "76561198012345678", "killerName": "OGren Kiesel", "killerTeam": "Allies",
          "victimId": "76561198087654321", "victimName": "Feind_Hans", "victimTeam": "Axis",
          "weapon": "M1 GARAND", "isTeamkill": false, "isHeadshot": true, "distance": 84.2
        }
      ],
      "weaponStats": [{ "weapon": "M1 GARAND", "kills": 98, "headshots": 32, "avgDistance": 61.4, "primaryTeam": "Allies" }],
      "highlights": {
        "topKiller": { "playerName": "OGren Kiesel", "kills": 42 },
        "topWeapon": { "weapon": "M1 GARAND", "kills": 98 },
        "longestKill": { "distance": 312.5, "weapon": "M1903 SPRINGFIELD" },
        "shortestKill": { "distance": 0.3, "weapon": "MK2 GRENADE" }
      },
      "killTimeline": [{ "intervalStart": 0, "intervalEnd": 300, "totalKills": 42, "alliedKills": 22, "axisKills": 20 }]
    }
  }
}

Error Responses

Response Fields

FieldTypeRequiredDescription
── Bifrost format (default) ──Required
licenseObjectRequiredAttribution notice and usage warning. You must visibly credit Frostbite when displaying this data publicly.
matchObjectRequiredMatch metadata: matchId, gameType, serverName, mapId, mapName, gamemode, matchTime, duration, factions, scores, winner, totalPlayers, totalKills.
teams[Object]RequiredArray of team stats (Allies/Axis): faction, playerCount, totalKills, totalDeaths, totalTeamkills, score.
players[Object]RequiredArray of per-player stats sorted by kills. Includes kills, deaths, K/D, roles, combat/offense/defense/support scores, weapon breakdowns (killsByWeapon, deathsByWeapon), nemesis data (mostKilled, killedMostBy), and kill distance records.
killFeed[Object]RequiredChronological array of every kill event: killer, victim, weapon, distance, headshot, teamkill, timestamp.
weaponStats[Object]RequiredAggregated weapon statistics: weapon name, total kills, headshots, average distance, primary team.
highlightsObjectRequiredMatch highlights: topKiller, topWeapon, longestKill, shortestKill.
killTimeline[Object]RequiredKill counts aggregated into 5-minute intervals for timeline visualisation.
── CRCON format (format: "crcon") ──RequiredThe response is the CRCON scoreboard object directly — structurally identical to the result field in CRCON's get_map_scoreboard response.
idStringRequiredMatch ID.
creation_timeStringRequiredISO 8601 timestamp of when the report was generated.
start / endStringRequiredISO 8601 match start and end timestamps.
server_numberStringRequiredServer identifier.
map_nameStringRequiredRCON map name (e.g. "utahbeach_offensive_us").
resultObjectRequiredScore object: { axis: number, allied: number }.
game_layoutObjectRequiredEmpty object (reserved for future use).
player_stats[][Object]RequiredArray of per-player stats in CRCON format. Includes kills, deaths, kills_by_type (grouped by weapon type), teamkills, streaks, combat/offense/defense/support scores, weapons map, most_killed/death_by nemesis maps, team confidence (side/confidence/ratio), and steaminfo (profile, bans, country).
player_stats[].steaminfoObjectRequiredSteam profile and ban data: profile (personaname, avatars, profileurl, country), bans (VACBanned, NumberOfVACBans, DaysSinceLastBan, CommunityBanned, NumberOfGameBans), has_bans flag.
player_stats[].teamObjectRequiredTeam detection: { side: "allies"|"axis"|"unknown", confidence: "strong"|"mixed", ratio: number }. Uses CRCON's weapon-side algorithm.
mapObjectRequiredCRCON map object with id, name, tag, pretty_name, shortname, allies/axis faction info, orientation, game_mode, attackers, environment, image_name.

In partnership with

Brilliant game servers for communities large and small.

Get yours today!

Shrapnelworks Logo

A Shrapnelworks product