API do Bingo de Rede
REST sobre HTTPS, autenticação por token do operador, valores sempre em centavos.
O saldo oficial do jogador é o nosso. A plataforma do operador deve espelhar o valor consultado em /players/:id/balance.
Todos os valores monetários são inteiros em centavos (R$ 5,00 = 500).
Jogadores
/api/public/v1/playersCria o jogador na nossa base e devolve o id usado nas outras chamadas.
Requisição
{
"email": "jogador@exemplo.com",
"name": "Maria Souza",
"point_id": "uuid-do-ponto",
"affiliate_code": "ABC123"
}Resposta
{ "ok": true, "player_id": "uuid", "email": "jogador@exemplo.com" }/api/public/v1/players/:idConsulta o cadastro do jogador.
Resposta
{ "ok": true, "player": { "id": "uuid", "name": "Maria Souza" } }/api/public/v1/players/:id/balanceSaldo atual em centavos — fonte da verdade.
Resposta
{ "ok": true, "balance_cents": 25000 }Cartelas
/api/public/v1/cards/buyCompra cartelas na rodada, aplicando os pacotes bônus da região. Idempotente pela chave enviada.
Requisição
{
"player_id": "uuid",
"round_id": "uuid",
"qty": 10,
"payment": "operator_settled",
"idempotency_key": "pedido-9931"
}Resposta
{ "ok": true, "mode": "operator_settled", "result": { "cards_total": 12, "bonus_qty": 2 } }/api/public/v1/cards?round_id=&player_id=Lista as cartelas de uma rodada ou de um jogador.
Resposta
{ "ok": true, "cards": [{ "id": "uuid", "serial": "R7-000123", "is_bonus": false }] }/api/public/v1/cards/serial/:serialConsulta a cartela pelo serial e os prêmios ligados a ela.
Resposta
{ "ok": true, "card": { "serial": "R7-000123" }, "prizes": [] }Rodadas
/api/public/v1/rounds/schedule?date=2026-07-21&room_id=Programação do dia, por sala.
Resposta
{ "ok": true, "date": "2026-07-21", "rounds": [{ "id": "uuid", "scheduled_at": "…", "card_price": 500 }] }/api/public/v1/rounds/:id/liveEstado ao vivo: bolas sorteadas, bola atual e status.
Resposta
{ "ok": true, "state": { "status": "drawing", "balls": [12, 44], "current_ball": 44 } }/api/public/v1/rounds/:id/resultsResultado final com ganhadores e valores.
Resposta
{ "ok": true, "winners": [{ "prize_type": "bingo", "amount": 150000 }] }/api/public/v1/rounds/:id/reconcile?state_hash=&ball_count=Reconciliação do estado: status, fita/sequence, ganhadores e hashes para o cliente corrigir divergência.
Resposta
{ "ok": true, "hashes": { "state_hash": "sha256…", "tape_hash": "sha256…", "ball_count": 24 }, "verdict": { "in_sync": false, "divergences": ["tape_behind"] } }/api/public/v1/rounds/:id/fairnessVerificação provably fair: hash publicado antes, semente revelada depois.
Resposta
{ "ok": true, "seed_hash": "sha256…", "server_seed": "…", "balls": [12, 44], "verified": true }Prêmios
/api/public/v1/prizes/winners?round_id=Ganhadores da rodada.
Resposta
{ "ok": true, "winners": [{ "card_serial": "R7-000123", "amount": 150000 }] }/api/public/v1/prizes/payouts?status=pendingPagamentos de prêmio e seus status.
Resposta
{ "ok": true, "payouts": [{ "id": "uuid", "status": "pending", "mode": "pix_preapproved" }] }/api/public/v1/prizes/payouts/:id/confirmConfirma a retirada no ponto validando o serial da cartela.
Requisição
{ "card_serial": "R7-000123" }Resposta
{ "ok": true, "status": "paid" }/api/public/v1/prizes/payouts/:id/sendDispara o PIX de um pagamento aprovado.
Resposta
{ "ok": true, "status": "sent" }Relatórios
/api/public/v1/reports/sales?from=&to=Vendas por período.
Resposta
{ "ok": true, "rows": [{ "date": "2026-07-20", "cards": 480, "revenue_cents": 240000 }] }/api/public/v1/reports/balances?from=&to=Entradas, saídas e saldos por período.
Resposta
{ "ok": true, "rows": [{ "type": "prize", "total_cents": -150000 }] }Salas e regiões
/api/public/v1/roomsSalas disponíveis para montar o lobby do operador.
Resposta
{ "ok": true, "rooms": [{ "id": "uuid", "name": "Sala Ouro", "card_format": "grid_3x5" }] }/api/public/v1/regionsRegiões acessíveis ao token.
Resposta
{ "ok": true, "regions": [{ "id": "uuid", "name": "Zona Sul" }] }Lançamento embarcado
/api/public/v1/launchGera um launch token curto e de uso único que abre o jogo já autenticado.
Requisição
{ "player_id": "uuid", "room_id": "uuid", "ttl_seconds": 120 }Resposta
{ "ok": true, "url": "https://seu-dominio/launch?t=…", "expires_at": "…" }Webhooks
/api/public/v1/webhooksWebhooks cadastrados para este token.
Resposta
{ "ok": true, "webhooks": [{ "id": "uuid", "url": "https://…", "events": ["prize.won"] }] }/api/public/v1/webhooksCadastra um webhook. O segredo aparece só nesta resposta.
Requisição
{
"url": "https://sua-plataforma/hooks/bingo",
"events": ["round.started", "sales.locked", "prize.won", "round.finished", "payment.confirmed", "payout.sent"]
}Resposta
{ "ok": true, "webhook": { "id": "uuid" }, "secret": "whsec_…" }Carteira do cassino (seamless wallet)
- Cabeçalhos obrigatórios: x-operator, x-game, x-dl-ts (horário em segundos) e x-dl-sig (assinatura).
- Assinatura: HMAC-SHA256 da mensagem "<MÉTODO>\n<caminho>\n<horário>.<corpo exato>", em hexadecimal, com a chave de débito do cassino.
- Janela de tempo: um minuto para mais ou para menos. Relógio fora de hora é recusado.
- Se o portal assinar a resposta (x-dl-resp-ts e x-dl-resp-sig), o bingo confere e descarta resposta com assinatura errada.
- Repetição sem cobrar duas vezes: a referência da compra é sempre bingo:<rodada>:<compra>, derivada da compra e nunca do horário. A mesma referência devolve o mesmo lançamento.
- Toda chamada recusada por queda do portal entra em fila e é reenviada automaticamente; nada é perdido e nada é cobrado duas vezes.
/api/public/dl/seamless/authenticateEntrada do jogador. Recusa aqui = ninguém entra e nada é cobrado.
Requisição
{
"launch_token": "<token do link de abertura>",
"player_id": "<id do jogador no cassino>",
"currency": "BRL",
"game_slug": "live-bingo",
"operator": "dl-casino",
"integration_host": "live-bingo.i-gaming.co",
"sent_at": "2026-09-17T20:00:00.000Z"
}Resposta
{ "ok": true, "balance_cents": 8847177, "currency": "BRL" }/api/public/dl/seamless/balanceSaldo do jogador. É a única fonte de verdade mostrada na tela.
Requisição
{ "launch_token": "…", "player_id": "…", "currency": "BRL" }Resposta
{ "ok": true, "balance_cents": 8847177 }/api/public/dl/seamless/betDébito da compra de cartelas. Só depois do débito a cartela é emitida.
Requisição
{
"launch_token": "…",
"player_id": "…",
"amount_cents": 500,
"round_id": "<rodada>",
"reference": "bingo:<round_id>:<purchase_id>"
}Resposta
{ "ok": true, "balance_cents": 8846677, "transaction_id": "…" }/api/public/dl/seamless/livewinPrêmio do jogador, creditado na carteira do cassino ao fim da rodada.
Requisição
{
"launch_token": "…",
"player_id": "…",
"amount_cents": 150000,
"round_id": "<rodada>",
"reference": "bingo:<round_id>:win"
}Resposta
{ "ok": true, "balance_cents": 8996677 }/api/public/dl/seamless/endroundFim da rodada sem prêmio para aquele jogador (fecha a aposta no cassino).
Requisição
{ "launch_token": "…", "player_id": "…", "round_id": "<rodada>" }Resposta
{ "ok": true }/api/public/dl/seamless/rollbackDevolução quando a sala é cancelada, no valor exato do débito.
Requisição
{ "launch_token": "…", "player_id": "…", "reference": "bingo:<round_id>:<purchase_id>" }Resposta
{ "ok": true, "balance_cents": 8847177 }/api/public/v1/casino/authenticateO portal confirma no bingo a sessão de um jogador antes de abrir o jogo. Usa a chave de API do cassino no cabeçalho Authorization.
Requisição
{
"player_id": "<uuid do jogador no bingo>",
"launch_token": "<token do link de abertura>",
"external_id": "<id do jogador no cassino>"
}Resposta
{ "ok": true, "operator": "dl-casino", "currency": "BRL", "balance_cents": 8847177, "source_of_truth": "casino" }Eventos e assinatura
Enviamos POST assinado com HMAC SHA-256 e reenviamos em caso de falha, com espera progressiva.
Headers de assinatura
x-bingo-timestamp: 1784500000 x-bingo-signature: sha256=HMAC_SHA256(secret, timestamp + "." + body)
Responda 2xx em até 10s. Sem 2xx, tentamos novamente algumas vezes antes de desistir.