Case Study

Halo Integration

How a AAA studio would implement DBZ's embedded payments platform

Player Journey Overview

Five touchpoints where DBZ integrates into the Halo experience

1

Connect DBZ

OAuth2 login from the Halo menu. Player links gamertag to DBZ identity.

OAuth2
2

Earn Rewards

Win matches, complete challenges. Real money credited to DBZ wallet.

Gameplay
3

Cash Out

Withdraw earnings to linked bank account. KYC triggered on first withdrawal.

Payout
4

Tournaments

Enter competitive events with buy-in. Prize pools distributed automatically.

Buy-in / Prize
5

Web Store

Purchase Battle Pass, cosmetics via direct checkout. Bypass platform fees.

Checkout

Player Onboarding Flow

OAuth2 authentication and account creation in under 30 seconds

sequenceDiagram participant P as Player (Halo Client) participant H as Halo Backend participant Z as DBZ API P->>P: Opens Halo menu P->>P: Clicks "Earn Real Rewards" P->>Z: Redirect to DBZ OAuth2 authorization Z->>P: Login screen (gamertag or create account) P->>Z: Signs in with gamertag Z->>H: Returns auth code H->>Z: Exchange code for token Z->>H: Returns userId + gamertag + isVerified H->>Z: POST /v1/users (register if new) Z->>H: 201 Created - user object H->>P: Show balance widget: $0.00 Note over P,Z: No KYC required yet -- Tier 0: earn up to $25/month

Tier 0 allows players to start earning immediately with zero friction. KYC is deferred until the first withdrawal, reducing onboarding drop-off by keeping the initial flow to a single OAuth redirect.

Earning Rewards Flow

Server-authoritative crediting via the ledger API

sequenceDiagram participant P as Player (Halo Client) participant GS as Halo Game Server participant H as Halo Backend participant Z as DBZ API P->>GS: Wins ranked match GS->>H: Match result event (playerWon) H->>Z: POST /v1/ledger/credit
userId, amount: 25 ($0.25) Z->>H: 200 OK - balance: 25 H->>P: Toast notification: "+$0.25 earned" Note over P,Z: Player continues playing... P->>GS: Completes weekly challenge GS->>H: Challenge completed event H->>Z: POST /v1/ledger/credit
userId, amount: 200 ($2.00) Z->>H: 200 OK - balance: 1475 H->>P: Toast notification: "+$2.00 earned" H->>P: Balance widget updates: $14.75
Ranked Win
$0.25

Per match, up to 20/day

Weekly Challenge
$2.00

3 challenges per week

Monthly Potential
~$25.00

Tier 0 monthly cap

First Cash-Out Flow

PRIMARY WORKSTREAM

End-to-end payout: KYC verification, bank linking, and ACH settlement

sequenceDiagram participant P as Player (Halo Client) participant H as Halo Backend participant Z as DBZ API participant B as Bank (Chase) rect rgba(0,177,89,0.08) Note over P,Z: Step 1 -- Initiate Withdrawal P->>H: Taps "Withdraw" in rewards menu H->>Z: GET /v1/users/{userId} Z->>H: user.kycTier = "none" H->>P: KYC required for withdrawal end rect rgba(59,130,246,0.08) Note over P,Z: Step 2 -- KYC Verification (Tier 1) H->>Z: POST /v1/users/{userId}/verify
tier: 1 (email + phone) Z->>H: { verificationUrl } H->>P: Open webview with verificationUrl P->>Z: Enters email + phone number P->>Z: Verifies SMS code Z->>H: Webhook: user.kyc.approved (tier: 1) end rect rgba(0,177,89,0.08) Note over P,Z: Step 3 -- Link Bank Account H->>Z: POST /v1/users/{userId}/bank-accounts Z->>H: { linkUrl } (Plaid-hosted flow) H->>P: Open webview with linkUrl P->>B: Selects Chase, logs in via Plaid P->>Z: Confirms checking account ****6789 Z->>H: Webhook: bank_account.verified
bankAccountId, last4: "6789" end rect rgba(59,130,246,0.08) Note over P,Z: Step 4 -- Execute Payout H->>P: Confirm: $14.75 to Chase ****6789? P->>H: Confirms withdrawal H->>Z: POST /v1/payouts
userId, bankAccountId, amount: 1475 Z->>H: 201 Created - payout { status: "pending" } end rect rgba(0,177,89,0.08) Note over P,B: Step 5 -- Settlement Z->>Z: Status: pending -> processing Z->>B: ACH transfer initiated Z->>Z: Status: processing -> in_transit Z->>H: Webhook: payout.status_updated (in_transit) B->>B: Funds settle Z->>Z: Status: in_transit -> completed Z->>H: Webhook: payout.completed H->>P: Push notification: "Your $14.75 has arrived!" end

Payout Status Lifecycle

pending processing in_transit completed

Tournament Flow

Skill-based competition with escrow, automated prize distribution

sequenceDiagram participant S as 343 Industries participant H as Halo Backend participant Z as DBZ API participant P as Player rect rgba(59,130,246,0.08) Note over S,Z: Tournament Setup S->>Z: POST /v1/tournaments
name: "Weekend Championship"
entryFee: 1000 ($10), prizePool: 50000 ($500) Z->>S: 201 Created - tournament object end H->>P: Tournament card: "Weekend Championship"
$10 entry -- $500 pool -- 50 players max rect rgba(0,177,89,0.08) Note over P,Z: Player Entry P->>H: Taps "Enter Tournament" H->>Z: POST /v1/tournaments/{id}/enter
userId Z->>Z: Deduct $10 from player wallet
(charge bank if insufficient balance) Z->>Z: Funds held in escrow Z->>H: 200 OK - entry confirmed H->>P: "You're in! Tournament starts Saturday 2PM" end Note over P,Z: Tournament plays out over the weekend... rect rgba(59,130,246,0.08) Note over S,Z: Results + Prize Distribution S->>Z: POST /v1/tournaments/{id}/results
rankings: [player1, player2, player3, ...] Z->>Z: Distribute prizes automatically Note right of Z: 1st: $250 (50%)
2nd: $150 (30%)
3rd: $75 (15%)
DBZ fee: $25 (5%) Z->>H: Webhook: tournament.completed
with prize breakdown H->>P: "Congratulations! You won $250!" end Note over P,Z: Winners can withdraw to bank immediately
$250
1st Place (50%)
$150
2nd Place (30%)
$75
3rd Place (15%)
$25
DBZ Fee (5%)

Web Store Flow

Direct-to-consumer checkout bypassing platform fees

sequenceDiagram participant P as Player participant W as halo-store.com participant H as 343 Backend participant Z as DBZ API P->>P: Sees in-game prompt:
"Buy Battle Pass for $8 (save $2)" P->>W: Opens halo-store.com rect rgba(59,130,246,0.08) Note over W,Z: Create Checkout Session W->>Z: POST /v1/checkout/sessions
lineItems: [{ name: "Battle Pass",
amount: 800, quantity: 1 }] Z->>W: { sessionId, checkoutUrl } W->>P: Render checkout widget end rect rgba(0,177,89,0.08) Note over P,Z: Payment P->>Z: Pays via linked bank account
(or card via DBZ) Z->>H: Webhook: checkout.completed
sessionId, userId, amount: 800 H->>H: Activate Battle Pass for player end P->>P: Returns to game P->>P: Battle Pass is active Note over W,Z: 343 pays ~3% processing
vs 30% Xbox Store fee --
saving $2.70 per transaction

Fee Comparison: Web Store vs. Platform Store

Xbox Store (Traditional)
$10.00 Battle Pass price
-$3.00 platform fee (30%)
$7.00 studio revenue
DBZ Web Store (Direct)
$8.00 reduced price for player
-$0.24 processing fee (~3%)
$7.76 studio revenue (+$0.76)

Player saves $2.00. Studio earns $0.76 more per transaction. Both sides win.

In-Game Purchases

How players buy skins, bundles, and virtual currency through DBZ's direct checkout

The Economics: Why Direct Checkout Wins

Every purchase through the Xbox Store costs 343 Industries 30% in platform fees. DBZ's direct web checkout charges ~3%. On a $20 armor bundle, that's the difference between keeping $14 and keeping $19.40. At scale, this changes the entire business model.

Item Xbox Store Price Xbox Fee (30%) Studio Keeps DBZ Web Price (20% off) DBZ Fee (~3%) Studio Keeps
Weapon Skin $8.00 -$2.40 $5.60 $6.40 -$0.19 $6.21
Battle Pass $10.00 -$3.00 $7.00 $8.00 -$0.24 $7.76
Armor Bundle $20.00 -$6.00 $14.00 $16.00 -$0.48 $15.52
Premium Bundle $40.00 -$12.00 $28.00 $32.00 -$0.96 $31.04
1,000 Halo Credits $9.99 -$3.00 $6.99 $7.99 -$0.24 $7.75

At 1M monthly transactions averaging $15, the platform fee difference is $4.05M/month in additional revenue for the studio. The player also saves 20%. Both sides win.

In-Game Item Purchase Flow

Player browses the in-game store, selects an item, and is directed to the DBZ-powered web checkout. The entitlement is activated in real-time via webhook.

sequenceDiagram participant P as Player (Halo) participant G as Halo Game Client participant H as 343 Backend participant Z as DBZ API P->>G: Browses in-game store P->>G: Selects "Mjolnir Armor Set" ($16) G->>P: "Buy on halo-store.com for $16
(Xbox price: $20)" rect rgba(59,130,246,0.08) Note over G,Z: Checkout Session G->>H: Player wants to buy item SKU_MJOLNIR H->>Z: POST /v1/checkout/sessions
lineItems: [{ name: "Mjolnir Armor Set",
sku: "SKU_MJOLNIR",
amount: 1600, quantity: 1 }]
userId: "usr_halo_5839"
metadata: { gameId: "halo-infinite" } Z-->>H: { sessionId, checkoutUrl, expiresAt } H-->>G: Open checkoutUrl end rect rgba(0,177,89,0.08) Note over P,Z: Player Pays G->>P: Opens DBZ checkout (webview) P->>Z: Selects payment method:
DBZ balance / linked bank / card P->>Z: Confirms purchase Z->>Z: Process payment Z->>H: Webhook: checkout.completed
{ sessionId, userId, amount: 1600,
lineItems: ["SKU_MJOLNIR"] } end rect rgba(139,92,246,0.08) Note over H,G: Entitlement Delivery H->>H: Grant SKU_MJOLNIR to player H->>G: Push: inventory updated G->>P: "Mjolnir Armor Set unlocked!" end Note over P,Z: Total time: under 30 seconds

Virtual Currency Purchase Flow

Players can also buy Halo Credits (the in-game virtual currency) through DBZ's checkout. Credits are managed by DBZ's virtual currency ledger, so the studio gets real-time balance tracking, conversion support, and audit trails.

sequenceDiagram participant P as Player participant H as 343 Backend participant Z as DBZ API P->>H: "Buy 1,000 Halo Credits for $7.99" rect rgba(59,130,246,0.08) Note over H,Z: Purchase H->>Z: POST /v1/checkout/sessions
lineItems: [{ name: "1,000 Halo Credits",
amount: 799, quantity: 1,
type: "virtual_currency",
creditAmount: 1000 }] Z-->>H: { sessionId, checkoutUrl } H-->>P: Open checkout P->>Z: Pays $7.99 end rect rgba(0,177,89,0.08) Note over H,Z: Credit + Confirm Z->>Z: Payment confirmed Z->>Z: POST /v1/ledger/credit (internal)
userId, currencyId: "halo_credits",
amount: 1000 Z->>H: Webhook: checkout.completed
+ ledger.credited
{ userId, credits: 1000, balance: 3450 } H->>P: "1,000 Halo Credits added!
Balance: 3,450" end Note over P,Z: Credits live on DBZ's ledger.
Player spends them in-game,
343 calls POST /v1/ledger/debit
for each purchase.

Spending Credits In-Game

Once a player has Halo Credits, they spend them on items within the game. The studio debits the ledger via API — no additional payment processing needed.

// Player buys a weapon skin with Halo Credits
const debit = await zbd.ledger.debit({
  userId: 'usr_halo_5839',
  currencyId: 'halo_credits',
  amount: 500,  // 500 Halo Credits
  description: 'MA40 AR Desert Camo Skin',
  metadata: {
    sku: 'SKU_MA40_DESERT',
    gameSession: 'gs_abc123'
  }
}, {
  idempotencyKey: 'purchase_usr5839_SKU_MA40_DESERT'
});

// debit.data.balance === 2950 (was 3450)
// Item granted in-game by 343's backend

Why Not Just Use Xbox Store?

Xbox Store (Status Quo)

  • 30% revenue share to Microsoft
  • No player identity across platforms
  • Refund disputes handled by Xbox (studio has limited control)
  • Virtual currency locked to Xbox ecosystem
  • No visibility into player spending patterns
  • Settlement in 30-60 days

DBZ Direct Checkout

  • ~3% processing fee
  • Cross-platform player identity (DBZ gamertag)
  • Studio controls refund policy
  • Virtual currency works across all platforms
  • Full analytics on spending behavior
  • Settlement in 1-2 business days

Industry Precedent: Fortnite Web Store

Epic Games launched a direct web store offering a permanent 20% discount on V-Bucks and cosmetics. Despite the lower price, Epic earns more per transaction because they avoid the 30% platform fee. This model is now proven at scale — DBZ's Checkout API gives any studio the same capability without building their own payment infrastructure.

Platform Rules: What's Allowed?

Web store for game items is legal — but platforms have rules about how you direct players there:

  • iOS (post-Epic v. Apple): Apps can link to external purchase options. Apple may charge a reduced commission (currently under appeal as of Dec 2025).
  • EU (DMA): Apple must allow sideloading and alternative payment methods. Epic launched the Epic Games Store on iOS in the EU.
  • Xbox/PlayStation: No restriction on web stores for cosmetics and virtual currency. Players routinely buy from publisher websites.
  • Steam: Developers can sell cosmetics outside Steam. Cannot bypass Steam for Steam-delivered DLC content.

Studio Dashboard View

What 343 Industries sees in their DBZ developer console

Connected Players
45,200
+1,240 this week
Paid Out (March)
$12,400
+$3,200 vs Feb
Payout Success
98.2%
12 failures this month
Wallet Balance
$48,600
Below $50K threshold
Wallet balance below $10,000 threshold

Current balance: $48,600. Estimated runway: 12 days at current payout velocity. Top up recommended.

Recent Activity

Event Reference Amount Detail Time
payout.completed usr_halo_5839 $0.25 Ranked win reward 2 min ago
tournament.completed Weekend Championship $500.00 50 players, prizes distributed 1 hour ago
checkout.completed usr_halo_2941 $8.00 Battle Pass purchase 3 hours ago
payout.failed usr_halo_7721 $15.00 bank_account_closed 5 hours ago
user.kyc.approved usr_halo_1102 -- Tier 1 verified 6 hours ago

What the Studio NEVER Sees

DBZ keeps studios completely out of PII and PCI scope

Studio Sees (Safe Tokens)

Tokenized bank account IDs
Masked account numbers (****6789)
KYC tier status (approved / pending)
Payout status lifecycle
Aggregated compliance metrics

DBZ Handles (Never Exposed)

Full bank account numbers
Routing numbers
SSNs / government IDs
ID documents / selfie verification
Sanctions screening / AML monitoring
Tax reporting (1099s)
PCI compliance

Regulatory Considerations

Legal framework for a studio paying players real money

Why This Is Not Gambling

US gambling law requires three elements: Prize + Chance + Consideration. In the Halo rewards model, 343 Industries pays players from its own marketing budget — there is no buy-in from the player. No consideration means no gambling, period.

The model is legally classified as a promotional reward — the same category as airline miles or credit card cashback. Not a sweepstakes (rewards are deterministic), not employment (though the IRS still taxes it).

Risk Matrix for Halo Integration

Area Risk Impact on Halo DBZ Handles It
COPPA (minors) HIGH Halo has players under 13. Paying them requires PII collection, triggering COPPA ($53K/violation). DBZ age-gates rewards to 18+ in the hosted KYC flow. 343 never touches age data.
Tax reporting MED 1099-MISC required at $2,000/year (2026+ OBBBA threshold). At $0.25/match = 8,000 wins to trigger. DBZ collects W-9s during KYC Tier 2. Auto-generates 1099s. 343 never handles tax data.
State restrictions MED ~9 states restrict real-money skill gaming (AZ, AR, CT, DE, LA, MT, SC, SD, TN). DBZ's is-supported-region API auto-disables rewards in restricted states.
FTC dark patterns MED "Earn real money playing Halo" could be deceptive if average earnings are $3/month. DBZ provides earnings disclosure templates. Dashboard shows average player earnings for transparency.
Gambling LOW No player buy-in = no consideration = not gambling. API design separates reward endpoints (no buy-in) from tournament endpoints (separate compliance).
App Store ToS LOW Mistplay, DBZ games, Swagbucks all approved on iOS and Android. Structured as promotional rewards, not gambling. DBZ has existing App Store precedent.

Tournaments Are Different

When the Weekend Championship has a $10 buy-in, consideration IS present. The gambling test then hinges on skill vs. chance. Halo multiplayer is predominantly skill-based, so it qualifies as skill-based gaming — legal in ~41 states.

DBZ's tournament API requires a skillCertification attestation and automatically geo-fences buy-in tournaments out of the ~9 restricted states. 343 doesn't need to track state laws — DBZ's API rejects entries from restricted jurisdictions.

Why this matters for the business case: Compliance is the hardest part of paying players. 343 Industries doesn't want to manage 1099s, COPPA audits, state-by-state geo-fencing, and age verification. DBZ handles all of it behind the API. The studio calls POST /v1/payouts and DBZ manages the rest. That's the moat — not the payment rails, but the regulatory infrastructure that makes paying players legal and safe.

Integration Complexity

Total engineering effort: ~280 lines of code across ~2 weeks

Component Lines of Code Time to Implement Owner
OAuth2 login ~50 lines 1 day Game client team
Reward crediting ~30 lines per event 2-3 days Game server team
Payout triggering ~20 lines 1 day Backend team
Webhook handler ~80 lines 1 day Backend team
Tournament creation ~40 lines 2 days Backend team
Web store integration ~60 lines 2 days Web team
KYC / bank linking UI 0 lines (DBZ hosted) 0 days DBZ
Compliance / AML 0 lines 0 days DBZ
Total ~280 lines ~2 weeks Split across teams

The heaviest lift is the webhook handler at ~80 lines -- everything else is straightforward REST calls. KYC, bank linking, and compliance are entirely DBZ-hosted, meaning the studio writes zero code for the most complex parts of the integration.