The FAST Widget
Drop-in challenge engine for any sportsbook. One script tag. Shadow DOM isolation. Full white-label support. No build step required.
<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>
<script
src="https://widget.fundedfast.eu/fast-widget.iife.js"
data-api-key="pk_your-widget-key"
data-user-id="current-user-id"
data-user-token="<from your backend>" // required in production
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>
<script src="..." data-api-key="pk_..." data-user-id="..."
data-mode="fab" // default: floating button, bottom corner
// data-mode="sidebar" - renders inline, fills the script tag's parent element
// data-mode="fullpage" - fullscreen page: seamless background, centered content & nav
data-fast-widget
></script>
// When a user buys a challenge, FAST calls your backend approval URL
// (signed POST, 5s timeout). Charge the wallet, then respond
// { "approved": true } - or false to decline. Configure it in
// Backoffice > Settings > Approval URL. The widget just reports events:
<script>
window.FastWidget.mount({
apiKey: 'pk_your-widget-key',
userId: 'player-42',
onEvent: (event, data) => {
if (event === 'challenge.purchased') { /* approved, challenge live */ }
if (event === 'challenge.purchase_failed') { /* declined or errored */ }
}
});
</script>
// Activate the modular Shell for full engagement suite
<script>
window.FastWidget.mount({
apiBase: 'https://api.fundedfast.eu/v1',
apiKey: 'pk_your-widget-key',
userId: 'player-42',
theme: 'dark',
// Modules auto-detected from your plan tier:
// Launch: challenges
// Growth: + bonuses, missions, tournaments
// Pro: + loyalty (all modules)
onEvent: (event, data) => {
console.log(event, data);
// Events: bonus.activated, mission.joined,
// tournament.joined, reward.claimed, ...
}
});
</script>
Security Model
The widget uses a pk_ public key - safe to embed in frontend code.
Read-only access to user progress, challenges, bonuses, missions, tournaments, and loyalty. Cannot modify rulesets or access other users.
User Token Lifecycle
data-user-token is minted by your backend (POST /v1/sse/token, server key) and lasts 1 hour.
The widget auto-renews it before expiry - open tabs keep working. Renewal is capped at 24h per token; past that, onTokenExpired fires and your page re-mints: widget.update({ userToken }).
Engagement Modules
Challenges - Funded account challenges with progress ring, shop, withdrawal
Bonuses - Wagering requirements with progress tracking, offer activation
Missions - Time-boxed objectives with join, progress bars, rewards
Tournaments - Live leaderboard competitions with scoring and prizes
Loyalty - Points, tier progression, cashback, benefits
Modules are controlled by your plan and load automatically — no extra config needed.