CDN Endpoint

The FAST Widget

Drop-in challenge engine for any sportsbook. One script tag. Shadow DOM isolation. Full white-label support. No build step required.

// Minimal embed
<script
  src="https://widget.fundedfast.eu/fast-widget.iife.js"
  data-api-key="pk_your-widget-key"
  data-user-id="current-user-id"
  data-fast-widget
></script>
// Full customization
<script
  src="https://widget.fundedfast.eu/fast-widget.iife.js"
  data-api-key="pk_your-widget-key"
  data-user-id="current-user-id"
  data-lang="en"                // en, de, hr
  data-theme="dark"              // dark, light
  data-position="bottom-right"    // bottom-right, bottom-left
  data-brand-color="#c9a227"      // primary brand color
  data-brand-color-end="#f0d78c"  // gradient end
  data-brand-logo="https://..."   // operator logo URL
  data-brand-font="Inter"        // Google Font name
  data-currency="EUR"           // display currency
  data-show-leaderboard="true"   // toggle sections
  data-show-badges="true"
  data-show-history="true"
  data-show-shop="true"
  data-show-confetti="true"
  data-show-lang-picker="true"
  data-fab-size="56"            // FAB button size in px
  data-fast-widget
></script>
// Payment integration (beforePurchase hook)
<script>
  window.FastWidget.mount({
    apiKey: 'pk_your-widget-key',
    userId: 'player-42',
    beforePurchase: async (tierId, tier) => {
      // Collect payment before FAST creates the challenge
      const payment = await yourAPI.charge(tier.purchasePrice);
      return payment.success; // false = cancel, widget shows error
    },
    onEvent: (event, data) => {
      if (event === 'challenge.purchased') { /* payment done, challenge live */ }
      if (event === 'challenge.purchase_blocked') { /* payment failed */ }
    }
  });
</script>

Security Model

The widget uses a pk_ public key - safe to embed in frontend code.