Partner Documentação do Documentation Parceiro
<canvas> on your site; engine, RNG and matchmaking stay on our backend.<canvas> no seu site; engine, RNG e matchmaking ficam no nosso backend.
Overview Visão geral
| Guessiano (server-authoritative) | |
@guessiano/sdk)@guessiano/sdk) | |
launchTokenlaunchToken | |
wallet.settlementwallet.settlement |
apiUrl, an apiKeyId and an hmacSecret (shown once). Manage everything in the partner portal.apiUrl, um apiKeyId e um hmacSecret (mostrado uma única vez). Gerencie tudo no portal do parceiro.Quickstart (5 min) Quickstart (5 min)
integrity published in /sdk/<version>/manifest.json:integrity publicado em /sdk/<versão>/manifest.json:
<div id="guessiano"></div> <script src="https://cdn.YOUR-DOMAIN.com/sdk/1.0.0/guessiano.umd.js" integrity="sha384-…" crossorigin="anonymous"></script> <script> Guessiano.mount('#guessiano', { apiUrl: 'https://api.YOUR-DOMAIN.com', launchToken: '<token minted by YOUR backend>', }); </script>
npm i @guessiano/sdk and import { Guessiano } from '@guessiano/sdk'.npm i @guessiano/sdk e import { Guessiano } from '@guessiano/sdk'.
3-step flow Fluxo de 3 passos
POST /v1/sessions with the balance/bet → launchToken (5 min).POST /v1/sessions com o saldo/aposta → launchToken (5 min).
Guessiano.mount({ apiUrl, launchToken }). gameJwt and renders.gameJwt e renderiza.
wallet.settlement and apply the result.wallet.settlement e aplica o resultado.
Wallet models — Modelos de wallet — internal × seamless
| internal | Guessiano | |
| seamless |
Seamless end-to-end Seamless end-to-end recommended recomendado
POST /v1/sessions send balanceCents (the player's current balance) and the bet. We show that balance in the game.POST /v1/sessions mande balanceCents (saldo atual do jogador) e a aposta. Mostramos esse saldo no jogo.
wallet.settlement. You apply net to the wallet; the screen already shows balanceAfter.wallet.settlement. Você aplica net na carteira; a tela já mostra balanceAfter.
The wallet.settlement contract O contrato do wallet.settlement
wallet.settlement contractwallet.settlementwalletMode | "external" in seamless (or "internal")"external" no seamless (ou "internal") |
outcome | "win" · "loss" · "draw" |
stake | |
payout | totalPot − rake; draw: stake; loss: 0)totalPot − rake; empate: stake; derrota: 0) |
net | payout − stake |
balanceAfter | |
currency | "BRL")"BRL") |
balanceCents you send is the balance before resolving the bet (the stake still "in play"). On loss the balance drops by stake; on win it rises by payout − stake. The SDK updates the screen to balanceAfter; the real transaction is yours.balanceCents enviado é o saldo antes de resolver a aposta (a stake ainda "em jogo"). Em derrota o saldo cai stake; em vitória sobe payout − stake. A SDK atualiza a tela para balanceAfter; a transação real é sua.Front: capture the result and settle Front: capture o resultado e liquide
const game = await Guessiano.mount('#guessiano', { apiUrl, launchToken }); game.on('wallet.settlement', async (e) => { const { walletMode, outcome, stake, payout, net, balanceAfter } = e.payload; if (walletMode === 'external') { // call YOUR backend to credit/debit the player wallet await fetch('/your-backend/settle', { method: 'POST', body: JSON.stringify({ outcome, net, stake, payout }), }); } // the game screen already shows balanceAfter — nothing to do on the front });
HMAC signing Assinatura HMAC backend
hmacSecret:hmacSecret:
Signature = HMAC-SHA256(hmacSecret,
timestamp + "\n" + METHOD + "\n" + path + "\n" + sha256(body))X-Operator-ID, X-Operator-Timestamp (epoch s), X-Operator-Signature (hex). 60s window, anti-replay.X-Operator-ID, X-Operator-Timestamp (epoch s), X-Operator-Signature (hex). Janela de 60 s, anti-replay.
import { createHash, createHmac } from 'node:crypto'; const ts = Math.floor(Date.now() / 1000); const path = '/v1/sessions'; const body = JSON.stringify({ externalPlayerId:'user-42', displayName:'Ana', balanceCents:100000 }); const bodyHash = createHash('sha256').update(body).digest('hex'); const msg = `${ts}\nPOST\n${path}\n${bodyHash}`; const sig = createHmac('sha256', HMAC_SECRET).update(msg).digest('hex'); // headers: X-Operator-ID, X-Operator-Timestamp=ts, X-Operator-Signature=sig
$ts = time(); $path = '/v1/sessions'; $body = json_encode(['externalPlayerId'=>'user-42','displayName'=>'Ana','balanceCents'=>100000]); $msg = "$ts\nPOST\n$path\n" . hash('sha256', $body); $sig = hash_hmac('sha256', $msg, $HMAC_SECRET);
import hashlib, hmac, json, time ts = int(time.time()) path = '/v1/sessions' body = json.dumps({'externalPlayerId':'user-42','displayName':'Ana','balanceCents':100000}) msg = f'{ts}\nPOST\n{path}\n' + hashlib.sha256(body.encode()).hexdigest() sig = hmac.new(HMAC_SECRET.encode(), msg.encode(), hashlib.sha256).hexdigest()
body) must be byte-identical to the body you send. Full runnable example: examples/partner-integration/ in the repo.body) deve ser byte-idêntico ao corpo enviado. Exemplo executável completo: examples/partner-integration/ no repositório.POST /v1/sessions HMAC
{ externalPlayerId, displayName, currency?, balanceCents? } → { launchToken, region, expiresInSec: 300, walletMode }. In seamless, balanceCents sets the displayed balance. Call from your backend; deliver the launchToken to your front.{ externalPlayerId, displayName, currency?, balanceCents? } → { launchToken, region, expiresInSec: 300, walletMode }. No seamless, balanceCents define o saldo exibido. Chame do seu backend; entregue o launchToken ao seu front.
POST /v1/sessions/redeem browser
{ launchToken } → { gameJwt, refreshToken, playerId, tenantId, displayName, gemBalance, expiresInSec }.{ launchToken } → { gameJwt, refreshToken, playerId, tenantId, displayName, gemBalance, expiresInSec }.
CORS
Guessiano.mount(selector, options)
apiUrl | string | |
launchToken | string | |
locale | 'pt-BR'|'en-US'|'es-419'|'pt-PT' | |
colorblind | boolean | |
onEvent | (evt)=>void | |
onBalanceRequest / onDepositRequest | fn |
on/off, pause/resume, setLocale, unmount, playerId().on/off, pause/resume, setLocale, unmount, playerId().
Events Eventos
ready · match.matched · match.started · match.ended · balance.changed · wallet.settlement · navigation.lobby · error.
Distribution & SRI Distribuição & SRI
/sdk/<version>/guessiano.umd.js | integrityintegrity |
/sdk/<version>/manifest.json | |
/sdk/v1/… |
guessiano.umd.js (script), .esm.js (bundlers), .cjs.js (Node). SemVer: a breaking change → new major in the path.guessiano.umd.js (script), .esm.js (bundlers), .cjs.js (Node). SemVer: breaking change → novo major no caminho.
Self-service portal Portal self-service
hmacSecret appears once), manage CORS origins and track your KPIs. Sign in with the e-mail + temporary password from provisioning.hmacSecret aparece uma vez), gerencia as origens CORS e acompanha seus KPIs. Login com o e-mail + senha temporária do provisionamento.
Errors & troubleshooting Erros & troubleshooting
expired_timestamp | |
bad_signature | |
replay_detected | |
unknown_operator | X-Operator-ID or revoked credentialX-Operator-ID inválido ou credencial revogada |
Guessiano ·