How to Get Your API Key
1
Sign Up

Create a free account with your email. → Register here

2
Pay with USDT

Send USDT via TRC20 and submit the transaction hash. → Subscribe page

3
Get Your API Key

After payment is confirmed, find your API key (BET14-XXXX...) in the dashboard.

4
Embed iframe on Your Site

Follow the integration guide below to add games to your betting site.

Available Games
Game Interval slug (embed URL)
🐉 Dragon Tiger 30 sec dragontiger
🃏 Baccarat 30 sec baccarat
ðŸ”Ū Big Six Ball 1 min bigsixball
Integration — Server-side Variable Injection Recommended

Store your API key in a server environment variable (.env) and inject it into the iframe src at render time. The key is never in source code or Git, and the game loads directly from the bet14 server — no resource issues. The key is visible in rendered HTML, but this is the industry-standard embed approach.

Embed URL
https://bet14mini.com/embed/{slug}/?key={API_KEY}
.env / server config
BET14_API_KEY=YOUR_API_KEY
game.php
<?php $apiKey = getenv('BET14_API_KEY'); $slug = 'dragontiger'; // or dynamic ?> <iframe src="https://bet14mini.com/embed/<?= $slug ?>/?key=<?= htmlspecialchars($apiKey) ?>" allowfullscreen ></iframe>
.env + Express (EJS/Pug template)
# .env BET14_API_KEY=YOUR_API_KEY // routes/game.js router.get('/game/:slug', (req, res) => { const allowed = ['dragontiger', 'baccarat', 'bigsixball']; const slug = allowed.includes(req.params.slug) ? req.params.slug : 'dragontiger'; res.render('game', { embedUrl: `https://bet14mini.com/embed/${slug}/?key=${process.env.BET14_API_KEY}` }); }); // views/game.ejs <iframe src="<%- embedUrl %>" style="width:100%;aspect-ratio:830/553;border:none" allowfullscreen sandbox="allow-scripts allow-same-origin allow-popups"></iframe>
.env.local + Next.js Server Component
# .env.local BET14_API_KEY=YOUR_API_KEY // app/game/[slug]/page.jsx (Server Component) const ALLOWED = ['dragontiger', 'baccarat', 'bigsixball']; export default function GamePage({ params }) { const slug = ALLOWED.includes(params.slug) ? params.slug : 'dragontiger'; const apiKey = process.env.BET14_API_KEY; const src = `https://bet14mini.com/embed/${slug}/?key=${apiKey}`; return ( <iframe src={src} style={{ width: '100%', aspectRatio: '830/553', border: 'none' }} allowFullScreen sandbox="allow-scripts allow-same-origin allow-popups" /> ); }
.env + Nuxt 3 (SSR)
# .env BET14_API_KEY=YOUR_API_KEY // nuxt.config.ts export default defineNuxtConfig({ runtimeConfig: { bet14ApiKey: process.env.BET14_API_KEY, // server-only } }); // pages/game/[slug].vue <template> <iframe :src="embedUrl" style="width:100%;aspect-ratio:830/553;border:none" allowfullscreen sandbox="allow-scripts allow-same-origin allow-popups" /> </template> <script setup> const route = useRoute(); const config = useRuntimeConfig(); const slug = ['dragontiger','baccarat','bigsixball'].includes(route.params.slug) ? route.params.slug : 'dragontiger'; const embedUrl = `https://bet14mini.com/embed/${slug}/?key=${config.bet14ApiKey}`; </script>
appsettings.json + Razor Page
// appsettings.json (or env var Bet14ApiKey) { "Bet14ApiKey": "YOUR_API_KEY" } // Pages/Game.cshtml.cs public class GameModel : PageModel { public string EmbedUrl { get; private set; } = ""; private readonly IConfiguration _cfg; public GameModel(IConfiguration cfg) => _cfg = cfg; public IActionResult OnGet(string slug = "dragontiger") { var allowed = new[] { "dragontiger", "baccarat", "bigsixball" }; if (!allowed.Contains(slug)) slug = "dragontiger"; EmbedUrl = $"https://bet14mini.com/embed/{slug}/?key={_cfg["Bet14ApiKey"]}"; return Page(); } } // Pages/Game.cshtml <iframe src="@Model.EmbedUrl" style="width:100%;aspect-ratio:830/553;border:none" allowfullscreen sandbox="allow-scripts allow-same-origin allow-popups"></iframe>
ðŸ’Ą Recommended ratio: 830 × 553 px — responsive: width:100%; aspect-ratio:830/553; border:none;
🔒 Keep the key only in .env and never commit it to Git. (Add .env to .gitignore)
Game Server Real-time API

Each game server exposes a state endpoint pollable every 300ms. Betting sites can consume this data to display the current round, phase, and card results in their own UI, or use it for payout calculations.

Endpoints
https://bet14mini.com/embed/{slug}/api/current ← Current round statehttps://bet14mini.com/embed/{slug}/api/results?limit=N ← Last N result history

No auth header required. The key is validated when the iframe loads; after that, the game server API can be called freely.

Common Response Fields
FieldTypeDescription
roundintegerGlobal cumulative round number
daily_roundintegerDaily round number (for display)
datestringServer date (YYYY-MM-DD)
phasestringCurrent phase — see table below
remainMsintegerMilliseconds remaining in current phase. Valid only during betting phase.
Phase Values & Cycle
phaseMeaningAdditional Fields
bettingAccepting bets (timer countdown)remainMs active
revealingRevealing cards/resultCard/score fields appear
resultResult confirmed — final outcomeresult field confirmed
waitingWaiting for next round—
GET /embed/dragontiger/api/current
{ "round": 13463, "daily_round": 2280, "date": "2026-05-17", "phase": "result", "remainMs": 0, "dragon": { "suit": "S", "value": "4" }, "tiger": { "suit": "C", "value": "2" }, "result": "dragon" }
FieldTypeDescription
dragon.suitstringDragon card suit: S(Spade) D(Diamond) H(Heart) C(Club)
dragon.valuestringDragon card value: 2–10, J, Q, K, A
tiger.suit / tiger.valuestringTiger card (same structure)
resultstring"dragon" | "tiger" | "tie"

dragon and tiger fields appear from the revealing phase. null during betting.

GET /embed/baccarat/api/current
{ "round": 8821, "daily_round": 1104, "date": "2026-05-17", "phase": "result", "remainMs": 0, "player_cards": [{"suit":"H","value":"5"}, {"suit":"D","value":"3"}], "banker_cards": [{"suit":"C","value":"K"}, {"suit":"S","value":"7"}], "player_total": 8, "banker_total": 7, "natural": true, "result": "player" }
FieldTypeDescription
player_cardsarrayPlayer hand (2–3 cards, each {suit, value})
banker_cardsarrayBanker hand (2–3 cards)
player_totalintegerPlayer total (0–9)
banker_totalintegerBanker total (0–9)
naturalbooleanNatural (8 or 9) flag
resultstring"player" | "banker" | "tie"

Card fields appear from the revealing phase. player_total is null before reveal.

GET /embed/bigsixball/api/current
{ "round": 5201, "daily_round": 420, "date": "2026-05-17", "phase": "result", "remainMs": 0, "result_map": { "manu": 1, "mancity": 2, "liverpool": 3, "chelsea": 4, "arsenal": 5, "tottenham": 6 } }
FieldTypeDescription
result_mapobjectTeam name → rank (1=1st). Confirmed in result phase.
team_orderarrayLaunch order index array (for animation, usually not needed)

Teams: manu / mancity / liverpool / chelsea / arsenal / tottenham
1st place = key with value 1 in result_map.

GET /embed/{slug}/api/results?limit=N — Recent result history
Dragon Tiger
[ { "round":13463, "daily_round":2280, "date":"2026-05-17", "dragon":{"suit":"S","value":"4"}, "tiger":{"suit":"C","value":"2"}, "result":"dragon" }, { "round":13462, "daily_round":2279, "date":"2026-05-17", "dragon":{"suit":"H","value":"A"}, "tiger":{"suit":"D","value":"9"}, "result":"tiger" }, ... ]

Latest round is first. Returns up to limit entries.

ðŸ’Ą iframe postMessage Events: The game iframe sends a message to the parent page on every phase change.
window.addEventListener('message', (e) => { // e.data.type = 'dragontiger_phase' | 'baccarat_phase' | 'bigsix_phase' const { type, round, daily_round, phase, remainMs } = e.data; if (type === 'dragontiger_phase' && phase === 'result') { // fetch /embed/dragontiger/api/current for card data } });
Only fires on phase changes. Card data must be fetched separately via /api/current after receiving this event.
Error Codes
HTTPMeaningCause & Resolution
401 Unauthorized API key missing or invalid — check your key
401 Expired Subscription expired — renew — Renew
404 Not Found Game not found — verify a valid slug
503 Service Unavailable Game server maintenance — try again shortly
Important Notes