Visão geral

Resumo da sua conta

Saldo da API —

Crédito disponível para abrir sessões de jogo.

Saldo dos jogadores
—
Jogadores
0

Sessões criadas

últimos 14 dias

— no período

Sessões criadas — total, com as suas credenciais
Chaves ativas — limite de 10 por agente
Jogos com RTP ajustado — diferente do valor oficial
Último acesso — sessão anterior

Atividade recente

Últimas ações registradas na sua conta

QuandoAçãoDetalhe
Saldo da API —

Crédito disponível para distribuir entre os jogadores.

Em poder dos jogadores — soma dos saldos individuais das contas de jogador

Extrato

QuandoTipoJogador ValorSaldo após Referência

Novo jogador

Jogadores

O saldo acompanha as partidas: ao abrir uma sessão, o jogo carrega este valor e o devolve atualizado a cada rodada.

CódigoNomeMoedaSaldo StatusTransferir
Na fila — aguardando entrega
Entregues — confirmados pelo seu sistema
Desistidos — após todas as tentativas

Endereço de notificação

Enviamos eventos por POST em JSON. O endereço precisa usar HTTPS — sem TLS, o corpo e a assinatura trafegariam em claro.

Segredo atual: —

Fila de eventos

Cada evento leva um eventId no corpo e no cabeçalho X-Webhook-Id. Como reenviamos após falha, use-o para descartar repetições. As tentativas se afastam progressivamente: 30s, 2min, 10min, 1h e 6h.

CriadoEventoIdentificadorStatus TentativasDetalhe

Catálogo

Jogos por provedora

0 jogos no total

Jogos disponíveis

O RTP só pode ser ajustado nos jogos cujo motor já o utiliza. Os demais mostram o valor oficial do fabricante como referência.

A capa é cadastrada pelo administrador e vale para toda a instalação: ela sai no catálogo público, em coverUrl, para todos os operadores integrados. Clique na miniatura para enviar um arquivo — PNG, JPEG, WebP ou GIF, até 512 KB.

CapaJogoProvedora Oficial RTP (%)Ativo

Sessões de jogo

Apenas as sessões criadas com as suas credenciais.

JogoJogadorMoedaModoCriada

Credenciais de API

Use no cabeçalho Authorization: Bearer … ao criar sessões.

NomePrefixoCriadaÚltimo uso
Central de recursos

Documentação da API

Guia oficial com o fluxo necessário para operar os jogos em produção.

Gerado em —

Como começar

A integração usa uma API HTTPS com corpo em JSON. Sua aplicação consulta o catálogo, cria uma sessão real para o jogador e abre a launchUrl devolvida. Toda comunicação específica com os jogos é resolvida pela plataforma.

  1. Em Integração → Credenciais, gere uma chave agk_…. Ela aparece uma única vez.
  2. Implemente os quatro endpoints da carteira seamless descritos nesta documentação e configure um token exclusivo.
  3. Consulte GET /api/v1/games para montar seu catálogo. Use exatamente os identificadores devolvidos pela API.
  4. Chame POST /api/v1/sessions em modo real e abra a launchUrl em um iframe ou em uma nova aba.

Endereço base de todas as chamadas:

{{origem}}

Em produção, use HTTPS em todas as pontas e mantenha a chave da API e o token da carteira somente no servidor. As respostas de erro trazem error e, quando necessário, message.

Autenticação

Toda rota /api/v1 que envolve sessão ou jogador exige a chave no cabeçalho Authorization. O catálogo é público.

Authorization: Bearer agk_sua_chave_aqui
Content-Type: application/json

A chave identifica sua conta e limita o acesso às próprias sessões e transações. Revogá-la em Credenciais interrompe imediatamente as integrações que a utilizam.

GET /api/v1/auth/me

Confere a credencial sem criar sessão. Útil no seu deploy.

curl -H "Authorization: Bearer agk_sua_chave_aqui" \
  {{origem}}/api/v1/auth/me
{
  "authenticated": true,
  "type": "agent-api-key",
  "agent": {
    "id": 2,
    "code": "operadora-x",
    "name": "Operadora X",
    "role": "agent",
    "status": "active"
  }
}

Criar sessão de jogo

POST /api/v1/sessions — requer a chave. Responde 201 com a URL de lançamento.

curl -X POST {{origem}}/api/v1/sessions \
  -H "Authorization: Bearer agk_sua_chave_aqui" \
  -H "Content-Type: application/json" \
  -d '{
    "provider": "codigo_do_catalogo",
    "gameId": 12345,
    "playerId": "usuario-123",
    "currency": "BRL",
    "language": "pt-BR",
    "mode": "real",
    "returnUrl": "https://seu-site.com/lobby",
    "wallet": {
      "mode": "seamless",
      "baseUrl": "https://seu-site.com/api/wallet/",
      "token": "segredo-exclusivo-da-carteira"
    }
  }'
CampoTipoDescrição
provider obrigatório string Identificador opaco recebido em GET /api/v1/games.
gameId obrigatório inteiro Identificador recebido no catálogo junto com provider.
playerId obrigatório string (até 128) Identificador único do jogador no seu sistema. O mesmo valor será enviado nas chamadas da carteira.
currency string Precisa ser a moeda do jogo. Padrão: a do catálogo.
language string Precisa constar em languages. Padrão: a primeira.
mode string Em produção, envie sempre real.
expiresInSeconds inteiro Validade da sessão em segundos. Opcional; padrão 3600.
returnUrl URL URL HTTPS para onde o jogador retorna ao sair.
wallet objeto Configuração seamless da sua carteira. É obrigatória para sessões reais.

Resposta 201

{
  "sessionToken": "0hV4v0Nn…",
  "game": { "provider": "codigo_do_catalogo", "gameId": 12345, "name": "Nome do jogo" },
  "playerId": "usuario-123",
  "mode": "real",
  "launchUrl": "{{origem}}/play/0hV4v0Nn…?mode=real&lang=pt-BR",
  "expiresAt": "2026-08-10T21:00:00+00:00",
  "walletMode": "seamless"
}

Abra a launchUrl exatamente como recebida, em um iframe ou redirecionamento. A plataforma escolhe e prepara o cliente correto do jogo; sua aplicação não monta URLs externas nem envia parâmetros específicos de provedora.

<iframe src="LAUNCH_URL" allow="autoplay; fullscreen"
        allowfullscreen width="100%" height="720"></iframe>

Funcionamento dos jogos

O fluxo é único para todos os jogos publicados. Sua aplicação trabalha apenas com o catálogo, a sessão e a carteira; a plataforma cuida da comunicação necessária para abrir e manter cada jogo funcionando.

  1. Seu servidor cria uma sessão real usando os identificadores do catálogo e informa o playerId e a carteira seamless.
  2. Antes de liberar a sessão, a plataforma chama POST {baseUrl}balance. Se a carteira não responder corretamente, o jogo não é aberto com um saldo incorreto.
  3. O navegador abre a launchUrl. Durante a partida, apostas chamam bet, prêmios chamam win e correções chamam rollback.
  4. Cada movimentação possui transactionId único. Sua carteira devolve o saldo atualizado e trata repetições de forma idempotente.
  5. Ao sair, o jogador volta para returnUrl. Sessões e transações podem ser consultadas pelas rotas oficiais para acompanhamento e conciliação.

Nunca abra endereços externos, reutilize tokens ou altere a launchUrl. Para todos os jogos, use somente a URL devolvida por POST /api/v1/sessions.

Consultar sessão e transações

GET /api/v1/sessions/{sessionToken}

Devolve os dados da sessão. O segredo da carteira nunca é exposto — apenas mode e baseUrl.

GET /api/v1/sessions/{sessionToken}/transactions?limit=100

Extrato das chamadas de carteira daquela sessão, para conciliação. limit vai de 1 a 500 (padrão 100).

As duas rotas exigem a chave e só enxergam sessões da sua própria conta.

Carteira do jogador

Em produção, o saldo permanece no seu sistema. A plataforma consulta e movimenta sua carteira seamless em tempo real durante toda a sessão.

Configuração seamless

{
  "provider": "codigo_do_catalogo",
  "gameId": 12345,
  "playerId": "usuario-123",
  "mode": "real",
  "wallet": {
    "mode": "seamless",
    "baseUrl": "https://seu-site.com/api/wallet/",
    "token": "segredo-do-operador"
  }
}

A baseUrl precisa ser HTTPS. O token é enviado em Authorization: Bearer em cada chamada e deve ser validado antes de qualquer movimentação.

O que chamamos no seu servidor

RotaQuandoCampos além dos comuns
POST {baseUrl}balance Ao abrir o jogo e ao sincronizar —
POST {baseUrl}bet Débito da aposta transactionId, roundId, amount
POST {baseUrl}win Crédito do prêmio transactionId, roundId, amount
POST {baseUrl}rollback Rodada desfeita transactionId, originalTransactionId, roundId

Campos comuns a todas: sessionToken, playerId, provider, gameId e currency.

POST https://seu-site.com/api/wallet/bet
Authorization: Bearer segredo-do-operador

{
  "sessionToken": "0hV4v0Nn…",
  "playerId": "usuario-123",
  "provider": "codigo_do_catalogo",
  "gameId": 12345,
  "currency": "BRL",
  "transactionId": "b7f1…",
  "roundId": 4821,
  "amount": 0.20
}

O que devolver

{ "success": true, "balance": 999.80 }

balance é obrigatório e é o saldo depois da operação. Para recusar, responda {"success": false, "code": "insufficient_funds", "message": "…"} — a rodada é cancelada com essa mensagem. Um HTTP 5xx é tratado como indisponibilidade temporária e pode ser repetido.

Cada transactionId é gravado e reenviado de forma idempotente: se o mesmo chegar duas vezes, devolva o resultado da primeira em vez de debitar de novo.

Webhook

Configure a URL em Integração → Webhook. Enviamos POST em JSON e guardamos a fila de entrega, com reenvios em 30s, 2min, 10min, 1h e 6h.

Cabeçalhos e corpo

Content-Type: application/json
X-Webhook-Event: session.created
X-Webhook-Id: 5f3c9a…
X-Webhook-Signature: sha256=9d2b…

{
  "eventId": "5f3c9a…",
  "event": "session.created",
  "agentCode": "operadora-x",
  "sentAt": "2026-08-10T20:31:00+00:00",
  "data": { }
}

Eventos

EventoQuandodata
session.created Sessão de jogo criada com a sua chave sessionToken, playerCode, provider, gameId, gameCode, currency, mode, balance
player.balance Saldo do jogador mudou durante a partida playerCode, sessionToken, previousBalance, balance, amount, kind (bet ou win)

Conferindo a assinatura

X-Webhook-Signature é o HMAC-SHA256 do corpo exato que chegou, com o segredo do webhook. Calcule sobre os bytes crus, antes de qualquer parse — reserializar o JSON muda a assinatura.

// Node.js / Express
const bruto = req.body;                       // Buffer, via express.raw()
const esperado = "sha256=" + require("crypto")
  .createHmac("sha256", SEGREDO_WEBHOOK)
  .update(bruto)
  .digest("hex");

const recebido = req.get("X-Webhook-Signature") || "";
if (!crypto.timingSafeEqual(Buffer.from(esperado), Buffer.from(recebido))) {
  return res.sendStatus(401);
}
// PHP
$bruto = file_get_contents('php://input');
$esperado = 'sha256=' . hash_hmac('sha256', $bruto, SEGREDO_WEBHOOK);
if (!hash_equals($esperado, $_SERVER['HTTP_X_WEBHOOK_SIGNATURE'] ?? '')) {
    http_response_code(401);
    exit;
}

Responda 2xx assim que receber e processe depois. Como reenviamos após falha, o mesmo eventId pode chegar duas vezes — guarde-o e descarte repetições.

Erros

{ "error": "seamless_wallet_required",
  "message": "Sessões real exigem wallet.mode=seamless" }
HTTPerrorCausa
400invalid_request provider, gameId ou playerId ausente.
400invalid_player_id Código vazio ou com mais de 128 caracteres.
400unsupported_currency Moeda diferente da que o jogo opera.
400unsupported_language Idioma fora de languages.
400unsupported_mode Para esta integração de produção, envie real.
400seamless_wallet_required Sessão real sem wallet.mode=seamless.
400invalid_wallet_url baseUrl ausente ou sem HTTPS.
401invalid_api_key Chave ausente, revogada ou de conta suspensa.
403player_blocked Jogador bloqueado em Jogadores.
404provider_not_found provider não corresponde a um item disponível no catálogo.
404game_not_found Jogo inexistente ou desativado.
404session_not_found Token inválido, expirado ou de outro agente.

Respostas HTTP 5xx indicam indisponibilidade temporária. Registre a resposta e repita com espera progressiva, sem alterar o payload nem criar várias sessões em paralelo.

Antes de ir para produção

  • A chave agk_… fica só no seu servidor — nunca no navegador nem em aplicativo distribuído.
  • Use uma chave exclusiva para produção e mantenha um processo seguro para rotação sem interromper a operação.
  • O webhook confere a assinatura e responde 2xx rápido, guardando o eventId contra repetições.
  • A carteira seamless trata transactionId de forma idempotente e devolve sempre balance.
  • Sessões são criadas sob demanda, com expiresInSeconds curto o bastante para a sua operação.
  • Você acompanha Sessões e Auditoria no painel para conferir o que a sua integração fez.

Conteúdo e identidade

Alterações globais na página inicial pública.

Abrir home
Cores

A prévia acompanha os campos em tempo real.

Prévia ao vivo

Visualização responsiva da página real.

Trocar senha

A troca encerra todas as sessões abertas do painel, inclusive esta.

Mínimo de 12 caracteres e 5 caracteres distintos.

Auditoria

QuandoAgenteAçãoDetalheOrigem

Novo agente

Agentes cadastrados

CódigoNomePapelStatusÚltimo acesso