BINGOfácil — Guia de Integração

Bingo ao vivo de 90 bolas, pronto pra rodar DENTRO da sua plataforma. Sua casa continua dona do saldo e do PIX do jogador — a gente entrega o jogo, embutido na sua tela, e conversa com a sua carteira por uma API assinada.

Como funciona em uma linha: você abre uma sessão pro seu jogador, embute a URL de jogo num iframe e implementa 4 endpoints de carteira que o jogo chama pra debitar aposta e creditar prêmio. Todo o resto (sorteio, narração, cartelas, prêmios) é por nossa conta.

1. Visão geral

Dois planos de comunicação:

PlanoDireçãoO que faz
ControleSua plataforma → BINGOfácilAbre sessão de jogo pro seu jogador (POST /integ/v1/session)
CarteiraBINGOfácil → sua plataformaDebita aposta, credita prêmio, consulta saldo, estorna (wallet/v1/*)

O jogador NUNCA sai da sua plataforma: o jogo roda embutido (iframe) com a cara que você já conhece. O saldo é o SEU saldo — a gente nunca guarda dinheiro do seu jogador.

2. Autenticação (HMAC)

Toda chamada — nos dois sentidos — vai assinada com o secret do seu par de credenciais. Headers:

HeaderConteúdo
X-Api-Keysua chave pública (bfk_…)
X-Timestampepoch em milissegundos do envio
X-SignatureHMAC_SHA256(secret, timestamp + "." + corpoBrutoJSON) em hex

Regras: janela de ±60 segundos no timestamp (relógio via NTP); corpo assinado é o JSON BRUTO (byte a byte, sem re-serializar); toda operação de dinheiro leva

idempotency_key única — repetir a mesma chave devolve o MESMO resultado sem mover dinheiro de novo.

Assinatura em Node:

import crypto from 'node:crypto';

function assinar(secret, body) {
  const ts = String(Date.now());
  const sig = crypto.createHmac('sha256', secret).update(`${ts}.${body}`).digest('hex');
  return { 'X-Api-Key': API_KEY, 'X-Timestamp': ts, 'X-Signature': sig };
}

3. Plano de controle — abrir sessão de jogo

POST /integ/v1/session *(disponível na fase de integração)*

{ "player_ref": "id-do-jogador-na-sua-base", "idempotency_key": "uuid-v4" }

Resposta: { "launch_url": "https://…?lt=…" } — embuta num iframe. O token de lançamento é de uso único e expira; abra uma sessão nova a cada entrada do jogador.

4. Plano de carteira — o que você implementa

Quatro endpoints HTTPS na SUA base (a wallet_base_url que você nos informa), todos verificando a assinatura HMAC acima:

EndpointQuando o jogo chamaCorpo
POST wallet/v1/balanceAo abrir o jogo e antes de comprar{ player_ref }
POST wallet/v1/debitCompra de cartela{ player_ref, valor_centavos, rodada_ref, idempotency_key }
POST wallet/v1/creditPrêmio ganho{ player_ref, valor_centavos, rodada_ref, idempotency_key }
POST wallet/v1/rollbackEstorno de um débito que não completou{ player_ref, idempotency_key_original, idempotency_key }

Regras de ouro:

status 400 — o jogo trata e avisa o jogador.

5. Erros e boas práticas

CódigoSignificadoO que fazer
400 SALDO_INSUFICIENTEJogador sem saldo pro débitoFluxo normal — o jogo avisa
401Assinatura/timestamp inválido ou credencial desativadaConfira secret, relógio (NTP) e status da credencial
409idempotency_key reusada com payload diferenteBug no seu lado — gere chave nova por operação
5xxErro transitórioRe-tente com a MESMA idempotency_key

Checklist antes de ir ao ar: HTTPS válido nos seus endpoints; assinatura verificada em TODA chamada recebida; idempotência testada com replay; teto de crédito configurado; teste ponta a ponta com valores de teste aprovado.

6. Referência

A primeira plataforma integrada roda este mesmo contrato em produção — no onboarding a gente compartilha exemplos reais de requisição e resposta de cada endpoint. Dúvidas: fale com quem te entregou as credenciais.