Introducao
Aprenda a integrar catalogo de jogos, lancamento de sessoes e callbacks de saldo/transacao com a API do Solutions-One.
Base URL
Todos os endpoints abaixo sao relativos a esta base publica de producao.
https://betcodebr.com/api/v1
Autenticacao
As rotas de listagem sao publicas. O endpoint de launch exige credenciais de agente no corpo da requisicao.
agent_code, agent_token e agent_secret no JSON.
GET /api/v1/providers e GET /api/v1/games nao exigem autenticacao.
Envie as credenciais do agente no body JSON de POST /api/v1/game-launch.
Callback URL
Cada agente possui um callback_url unico. Essa mesma URL recebe os eventos user_balance e transaction.
Listar provedores
Retorna a lista de provedores cadastrados conforme base de dados.
/api/v1/providers
{
"status": 1,
"msg": "Lista de provedores",
"providers": [
{
"id": "1",
"code": "BG",
"name": "BG",
"type": "slot",
"status": "1"
},
{
"id": "2",
"code": "CP",
"name": "CP",
"type": "slot",
"status": "1"
},
{
"id": "3",
"code": "FC",
"name": "FC",
"type": "slot",
"status": "1"
}
]
}
Listar jogos
Lista somente jogos ativos. Use provider + game_code retornados para lancamento.
/api/v1/games
{
"status": 1,
"msg": "SUCCESS",
"games": [
{
"game_name": "Alien Fruits",
"game_code": "AG_BG_AlienFruits",
"provider": "BG",
"img_url": "https://betcodebr.com/storage/games/playfiver/GPKBG_AlienFruits.webp",
"game_type": "slot",
"status": "1",
"original": "1",
"distribution": "ag"
},
{
"game_name": "Alien Fruits 2",
"game_code": "AG_BG_AlienFruits2",
"provider": "BG",
"img_url": "https://game-assets-swst1-prd.ssapi.tech/cdn-cgi/image/f=webp,w=250,h=250/tm/bgaming/alien-fruits-2-600x600?cacheBust=2",
"game_type": "slot",
"status": "1",
"original": "1",
"distribution": "ag"
}
]
}
Game launch
Cria sessao de jogo e retorna launch_url para abertura no iframe ou nova aba.
/api/v1/game-launch
Body Parameters
Use exatamente "game_launch".
Codigo do agente.
Token do agente.
Secret key do agente.
Identificador publico do jogador no sistema parceiro.
Saldo do jogador. O backend exige valor positivo (> 0).
Codigo do provedor, conforme /api/v1/providers.
Codigo do jogo ativo, conforme /api/v1/games.
Idioma. Padrao: "pt".
{
"method": "game_launch",
"agent_code": "AGT001",
"agent_token": "xxxxxxxx",
"agent_secret": "yyyyyyyy",
"user_code": "player_123",
"user_balance": 100.5,
"provider_code": "BG",
"game_code": "AG_BG_AlienFruits",
"lang": "pt"
}
{
"status": 1,
"msg": "SUCCESS",
"launch_url": "https://betcodebr.com/play/AG_BG_AlienFruits/eyJ0b2tlbiI6..."
}
Abrir launch_url
Use iframe ou nova aba conforme o produto parceiro.
<iframe
src="https://betcodebr.com/play/AG_BG_AlienFruits/eyJ0b2tlbiI6..."
width="100%"
height="720"
frameborder="0"
allowfullscreen
></iframe>
launch_url sports: pode vir direta do provedor.
Modo demo
Ative ou desative o modo demo de um jogador direto do painel do seu cassino, sem precisar acessar o painel da API a cada alteracao.
/api/v1/set-player-demo
Body Parameters
Codigo do agente.
Token do agente.
Secret key do agente.
Identificador do jogador no seu sistema.
true para ativar modo demo, false para desativar.
Envie is_demo: true para marcar o jogador como conta demo/influencer.
Envie is_demo: false para voltar ao modo producao normal.
{
"agent_code": "AGT001",
"agent_token": "xxxxxxxx",
"agent_secret": "yyyyyyyy",
"user_code": "player_123",
"is_demo": true
}
{
"status": 1,
"msg": "SUCCESS",
"user_code": "player_123",
"is_demo": true
}
curl -s -X POST https://betcodebr.com/api/v1/set-player-demo \
-H "Content-Type: application/json" \
-d '{
"agent_code": "AGT001",
"agent_token": "xxxxxxxx",
"agent_secret": "yyyyyyyy",
"user_code": "player_123",
"is_demo": true
}'
- Use no painel do cassino com toggle/botao por jogador.
- O jogador e criado automaticamente se ainda nao existir.
- Sincroniza com PG Soft e Spribe quando o jogador ja jogou nesses provedores.
- Ideal para contas de teste, influencers e homologacao.
Callback user_balance
Evento de consulta e sincronizacao de saldo do jogador enviado para sua callback_url.
{
"method": "user_balance",
"user_code": "player_123",
"user_balance": 100.5
}
HTTP/1.1 200 OK para confirmar o recebimento.
Callback transaction
Evento de rodada processada. O objeto interno muda conforme o game_type.
{
"method": "transaction",
"user_code": "player_123",
"user_balance": 97.3,
"game_type": "slot",
"slot": {
"provider_code": "BG",
"game_code": "AG_BG_AlienFruits",
"type": "BASE",
"bet_money": 1,
"win_money": 0.3,
"txn_id": "txn_20260101_00001",
"txn_type": "debit_credit"
}
}
{
"method": "transaction",
"user_code": "player_123",
"user_balance": 96.8,
"game_type": "pool",
"pool": {
"provider_code": "BG",
"game_code": "pool_fish_hunter",
"bet_money": 2,
"win_money": 1.5,
"txn_id": "txn_20260101_00002",
"txn_type": "debit_credit"
}
}
txn_id no seu ledger.
Status e erros
Codigos HTTP comuns no fluxo de game-launch.
Boas praticas
Recomendacoes publicas para integracao segura e estavel.
- Use callback_url em HTTPS publico.
- Registre logs de callbacks para auditoria.
- Aplique idempotencia por txn_id.
- Nao exponha agent_token e agent_secret no frontend.
- Atualize catalogo local consumindo /providers e /games periodicamente.
- Use /set-player-demo no seu painel para contas demo, sem depender do painel da API.
Exemplos cURL
Chamadas rapidas para homologacao e testes manuais.
curl -s https://betcodebr.com/api/v1/providers
curl -s https://betcodebr.com/api/v1/games
curl -s -X POST https://betcodebr.com/api/v1/game-launch \
-H "Content-Type: application/json" \
-d '{
"method": "game_launch",
"agent_code": "AGT001",
"agent_token": "xxxxxxxx",
"agent_secret": "yyyyyyyy",
"user_code": "player_123",
"user_balance": 100.50,
"provider_code": "BG",
"game_code": "AG_BG_AlienFruits",
"lang": "pt"
}'
Exemplo Node.js
Exemplo basico com fetch para requisitar launch_url.
async function launch() {
const res = await fetch("https://betcodebr.com/api/v1/game-launch", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
method: "game_launch",
agent_code: "AGT001",
agent_token: "xxxxxxxx",
agent_secret: "yyyyyyyy",
user_code: "player_123",
user_balance: 100.50,
provider_code: "BG",
game_code: "AG_BG_AlienFruits",
lang: "pt"
})
});
const json = await res.json();
console.log(json.launch_url);
}
Prompt para IA
Copie o prompt abaixo e cole na sua IA (ChatGPT, Claude, Cursor, etc.). Com um unico prompt ela tera contexto completo para integrar catalogo, launch e webhooks.
agent_code, agent_token, agent_secret)
ou peça para a IA usar variaveis de ambiente.
Copie o prompt completo com o botao abaixo.
Cole na IA junto com o stack do seu projeto (ex: Laravel, Node, Python).
Configure callback_url no painel do agente apontando para o endpoint que a IA criar.
Integre a API de jogos (agregador de cassino) no meu projeto. Implemente backend + frontend conforme as especificacoes abaixo.
## Contexto
Sou um parceiro/operador que precisa:
1. Listar provedores e jogos disponiveis
2. Lançar sessoes de jogo para meus usuarios
3. Ativar/desativar modo demo por jogador direto do meu painel
4. Receber webhooks de saldo e transacoes na minha callback_url
5. Atualizar o saldo do jogador no meu sistema com idempotencia
## Base URL
https://betcodebr.com/api/v1
## Autenticacao
- GET /providers e GET /games sao publicos (sem autenticacao).
- POST /game-launch e POST /set-player-demo exigem credenciais do agente no body JSON:
- agent_code (string, obrigatorio)
- agent_token (string, obrigatorio)
- agent_secret (string, obrigatorio)
- NUNCA exponha agent_token e agent_secret no frontend. O launch deve ser feito pelo backend.
## Endpoints da API (consumir)
### 1. Listar provedores
GET https://betcodebr.com/api/v1/providers
Resposta exemplo:
{
"status": 1,
"msg": "Lista de provedores",
"providers": [
{
"id": "1",
"code": "BG",
"name": "BG",
"type": "slot",
"status": "1"
},
{
"id": "2",
"code": "CP",
"name": "CP",
"type": "slot",
"status": "1"
},
{
"id": "3",
"code": "FC",
"name": "FC",
"type": "slot",
"status": "1"
}
]
}
### 2. Listar jogos
GET https://betcodebr.com/api/v1/games
Retorna apenas jogos ativos. Use provider + game_code retornados para o launch.
Resposta exemplo:
{
"status": 1,
"msg": "SUCCESS",
"games": [
{
"game_name": "Alien Fruits",
"game_code": "AG_BG_AlienFruits",
"provider": "BG",
"img_url": "https://betcodebr.com/storage/games/playfiver/GPKBG_AlienFruits.webp",
"game_type": "slot",
"status": "1",
"original": "1",
"distribution": "ag"
},
{
"game_name": "Alien Fruits 2",
"game_code": "AG_BG_AlienFruits2",
"provider": "BG",
"img_url": "https://game-assets-swst1-prd.ssapi.tech/cdn-cgi/image/f=webp,w=250,h=250/tm/bgaming/alien-fruits-2-600x600?cacheBust=2",
"game_type": "slot",
"status": "1",
"original": "1",
"distribution": "ag"
}
]
}
### 3. Game launch (criar sessao)
POST https://betcodebr.com/api/v1/game-launch
Content-Type: application/json
Body obrigatorio:
- method: "game_launch" (exatamente este valor)
- agent_code, agent_token, agent_secret
- user_code: identificador unico do jogador no MEU sistema
- user_balance: saldo atual do jogador (number, deve ser > 0)
- provider_code: codigo do provedor (de /providers)
- game_code: codigo do jogo (de /games)
- lang: idioma opcional, padrao "pt"
Request exemplo:
{
"method": "game_launch",
"agent_code": "AGT001",
"agent_token": "xxxxxxxx",
"agent_secret": "yyyyyyyy",
"user_code": "player_123",
"user_balance": 100.5,
"provider_code": "BG",
"game_code": "AG_BG_AlienFruits",
"lang": "pt"
}
Resposta sucesso (200):
{
"status": 1,
"msg": "SUCCESS",
"launch_url": "https://betcodebr.com/play/AG_BG_AlienFruits/eyJ0b2tlbiI6..."
}
Use launch_url retornada para abrir o jogo em iframe ou nova aba:
<iframe src="{launch_url}" width="100%" height="720" frameborder="0" allowfullscreen></iframe>
A launch_url e protegida por token e expira por sessao — gere novamente via game-launch quando necessario.
### Erros comuns no game-launch
- 400: falha do provedor na criacao da launch_url
- 403: credenciais invalidas, jogo indisponivel ou saldo operacional insuficiente
- 404: jogo nao encontrado para o provider_code informado
- 422: validacao falhou (campos obrigatorios ausentes ou formato invalido)
### 4. Modo demo por jogador
POST https://betcodebr.com/api/v1/set-player-demo
Content-Type: application/json
Permite ativar ou desativar o modo demo de um jogador especifico direto do painel do cassino, sem acessar o painel da API.
Body obrigatorio:
- agent_code, agent_token, agent_secret
- user_code: identificador do jogador no MEU sistema
- is_demo: true para ativar, false para desativar
Request exemplo (ativar):
{
"agent_code": "AGT001",
"agent_token": "xxxxxxxx",
"agent_secret": "yyyyyyyy",
"user_code": "player_123",
"is_demo": true
}
Resposta sucesso (200):
{
"status": 1,
"msg": "SUCCESS",
"user_code": "player_123",
"is_demo": true
}
Comportamento:
- Jogador em demo usa ambiente de testes nos provedores (ex: Open Platform pre-api)
- O saldo operacional da API AG nao e debitado em modo demo
- O saldo do jogador no jogo continua normal
- Sincroniza automaticamente com PG Soft e Spribe quando aplicavel
- Chame antes ou depois do primeiro launch — o jogador e criado automaticamente se nao existir
Implemente no meu painel um botao/toggle "Modo Demo" que chama este endpoint.
## Webhooks (minha callback_url — eu recebo)
Cada agente possui uma callback_url unica (HTTPS publica) cadastrada no painel.
A MESMA URL recebe dois tipos de evento, identificados pelo campo "method".
### Evento user_balance
Consulta/sincronizacao de saldo do jogador.
Payload recebido:
{
"method": "user_balance",
"user_code": "player_123",
"user_balance": 100.5
}
Responda HTTP 200 com JSON:
{"status": 1, "user_balance": <saldo_atual_do_jogador>}
### Evento transaction
Rodada processada. O objeto interno muda conforme game_type.
Payload slot:
{
"method": "transaction",
"user_code": "player_123",
"user_balance": 97.3,
"game_type": "slot",
"slot": {
"provider_code": "BG",
"game_code": "AG_BG_AlienFruits",
"type": "BASE",
"bet_money": 1,
"win_money": 0.3,
"txn_id": "txn_20260101_00001",
"txn_type": "debit_credit"
}
}
Payload pool:
{
"method": "transaction",
"user_code": "player_123",
"user_balance": 96.8,
"game_type": "pool",
"pool": {
"provider_code": "BG",
"game_code": "pool_fish_hunter",
"bet_money": 2,
"win_money": 1.5,
"txn_id": "txn_20260101_00002",
"txn_type": "debit_credit"
}
}
Regras:
- Responda HTTP 200 sempre
- Aplique idempotencia por txn_id no meu ledger (nao processar a mesma txn_id duas vezes)
- bet_money = valor apostado, win_money = valor ganho
- user_balance = saldo apos a transacao
- Registre logs de todos os callbacks para auditoria
## O que implementar no meu projeto
### Backend
1. Servico/classe GameApiClient com metodos: listProviders(), listGames(), launchGame(...), setPlayerDemo(userCode, isDemo)
2. Endpoint interno POST /api/games/launch (ou similar) que:
- Autentica meu usuario logado
- Busca saldo do jogador no meu banco
- Chama POST /game-launch com credenciais do agente (via env/config)
- Retorna launch_url para o frontend
3. Endpoint POST /api/games/demo (ou similar) que:
- Autentica meu usuario logado (admin/operador)
- Chama POST /set-player-demo com credenciais do agente
- Retorna status atual do modo demo do jogador
4. Endpoint POST /webhooks/games (minha callback_url) que:
- Recebe user_balance e transaction
- Valida payload
- Atualiza saldo do jogador
- Registra transacao com idempotencia por txn_id
- Retorna {"status": 1, "user_balance": <saldo>}
### Frontend
1. Pagina de catalogo consumindo meu endpoint que espelha /games (ou cache local)
2. Botao "Jogar" que chama meu backend de launch e abre launch_url em iframe/modal ou nova aba
3. Toggle/botao "Modo Demo" por jogador no painel administrativo do cassino
4. Tratamento de erros (403, 404, 422, 502) com mensagens amigaveis
### Configuracao (.env)
GAME_API_BASE_URL=https://betcodebr.com/api/v1
GAME_AGENT_CODE=seu_agent_code
GAME_AGENT_TOKEN=seu_agent_token
GAME_AGENT_SECRET=seu_agent_secret
GAME_CALLBACK_URL=https://meudominio.com/webhooks/games
### Boas praticas
- Credenciais do agente somente no backend
- callback_url em HTTPS publico
- Idempotencia por txn_id
- Cache/sync periodico de /providers e /games
- Logs de callbacks e launches
## Entregaveis
Implemente codigo completo e funcional adaptado ao stack do meu projeto.
Inclua: models/migrations se necessario, servico de integracao, rotas, controllers, tratamento de erros e exemplo de uso no frontend.
Pergunte apenas se faltar informacao critica (stack, ORM, estrutura de pastas).