// Integrations

Plug PlayFab player stats into your portal.

Surface PlayFab player stats on the Traced game page (top-10 leaderboards) and player profiles (stat cards). Available on Pro and Studio tiers.

1. Connect your PlayFab title

  1. In the dashboard, open /p/[your-project]/integrations.
  2. Click the PlayFab card.
  3. Paste your Title ID and Title Secret Key (PlayFab Game Manager → Settings → API Features).
  4. Click Save & Discover Stats.

The Title Secret Key is stored in Supabase Vault and never returned to your browser — only the Traced Edge Function reads it for outbound PlayFab calls.

2. Whitelist stats

The dashboard auto-discovers every stat your PlayFab title has configured. Toggle the ones you want public:

  • Display label — overrides the raw stat name (e.g. kdr_v2 → “Kill / Death”)
  • Sort direction — descending for “higher is better” (kills, XP), ascending for “lower is better” (best lap time)

Default is OFF. Changes propagate to the portal within 5 minutes.

3. Link player identities (in your Unity game)

After your existing PlayFab login completes, call Traced.RegisterPlayer with the PlayFab ID:

var login = await PlayFabClientAPI.LoginWithCustomIDAsync(...);

Traced.RegisterPlayer(
    playerId: login.PlayFabId,            // or your own player_id
    displayName: login.DisplayName,
    externalIds: new Dictionary<ExternalIdProvider, string> {
        { ExternalIdProvider.PlayFab, login.PlayFabId }
    }
);

One call per player per login. The SDK bundles the registration into its next batch — no extra HTTP request.

What players see

Game page — leaderboard cards under the existing player feed. Players in the top 10 who are linked to a Traced profile become clickable; unlinked players show as plain text (the leaderboard always matches PlayFab's actual top 10).

Player profile page — a Stats card with your whitelisted stats. Hidden entirely if the player has no PlayFab link.

Multi-platform games

The SDK supports multiple external IDs per player. If your game's identity layer is PlayFab and you also know the player's Steam / Xbox / Oculus ID, attach them too:

Traced.RegisterPlayer(
    playerId: playfabId,
    externalIds: new Dictionary<ExternalIdProvider, string> {
        { ExternalIdProvider.PlayFab, playfabId },
    },
    customExternalIds: new Dictionary<string, string> {
        { "steam", steamId },
        { "oculus", oculusUserId }
    }
);

Custom string-keyed IDs are stored as-is. When the SDK adds formal Steam/Oculus support, your existing data lights up automatically.

Costs & caching

  • Leaderboards cache for 5 minutes per stat per project
  • Player stats cache for 15 minutes per player
  • Stat definitions cache for 1 hour
  • On PlayFab outages we serve stale cache rather than fail the portal

For a portal averaging 100 page views/hour with 5 whitelisted stats, that's ~12 PlayFab Admin API calls/hour — well within PlayFab's 100 req/sec/title limit.