Production-ready game engine for building Snake & Ladder experiences.
Power your WhatsApp bots, Telegram bots, and web apps with our realtime API.
From room management to canvas rendering — a complete backend so you can focus on building your client.
Integrate directly into your Baileys or WhiskeySockets handler:
const axios = require('axios'); const API = axios.create({ baseURL: 'https://api.domain.com/api/game', headers: { 'X-API-Key': 'UTG-yourkey' } }); // !buat - Create new room if (cmd === 'buat') { const { data } = await API.post('/create-room', { name: `Room ${sender}`, maxPlayers: 4 }); sock.sendMessage(jid, { text: `🎲 Room dibuat!\nKode: *${data.roomCode}*` }); } // !join ABC123 - Join by code if (cmd === 'join') { const { data } = await API.post('/join-room', { roomCode: args[0], playerName: pushName }); sock.sendMessage(jid, { text: `✅ ${pushName} bergabung!` }); } // !dadu - Roll dice if (cmd === 'dadu') { const { data } = await API.post('/roll', { roomId: userRoom } ); // Send board image const img = await API.get( `/render/${data.roomId}`, { responseType: 'arraybuffer' } ); sock.sendMessage(jid, { image: Buffer.from(img.data), caption: `🎲 Dadu: ${data.dice}\n📍 Posisi: ${data.newPosition}` }); }
Works with any Telegram bot library. Session stored by your bot, game state by our API.
const TelegramBot = require('node-telegram-bot-api'); const bot = new TelegramBot(TOKEN, { polling: true }); bot.onText(/\/dadu/, async (msg) => { const chatId = msg.chat.id; const roomId = sessions[chatId]; // your session const { data } = await API.post('/roll', { roomId } ); // Get rendered board image const img = await API.get( `/render/${roomId}?format=webp`, { responseType: 'stream' } ); await bot.sendPhoto(chatId, img.data, { caption: [ `🎲 *${data.playerName}* melempar dadu: *${data.dice}*`, data.moveEvent === 'snake' ? `🐍 Kena ular! ${data.eventDetail.from} → ${data.eventDetail.to}` : data.moveEvent === 'ladder' ? `🪜 Naik tangga! ${data.eventDetail.from} → ${data.eventDetail.to}` : `📍 Posisi baru: ${data.newPosition}`, data.winner ? `🏆 *${data.winner.name} MENANG!*` : '' ].filter(Boolean).join('\n'), parse_mode: 'Markdown', }); });
Use REST API for game actions + WebSocket for realtime updates:
// Connect to room WebSocket const ws = new WebSocket( `wss://api.domain.com/ws?token=${jwt}&roomId=${roomId}` ); ws.onmessage = ({ data }) => { const msg = JSON.parse(data); switch (msg.event) { case 'dice_rolled': updateBoard(msg.players); // Refresh board image boardImg.src = `/api/game/render/${roomId}?t=${Date.now()}`; showToast(`${msg.playerName} rolled ${msg.dice}`); break; case 'snake': playSound('snake'); showEffect('🐍 Hit a snake!'); break; case 'ladder': playSound('ladder'); showEffect('🪜 Climbed a ladder!'); break; case 'game_started': hideWaitingScreen(); showGame(); break; } };
Start free, scale as you grow. All plans include full API access.
Join thousands of developers building multiplayer games with our API.
🎲 Create Free Account