Ctrl K
Comece aqui

Introducao

Aprenda a integrar catalogo de jogos, lancamento de sessoes e callbacks de saldo/transacao com a API do Solutions-One.

10 provedores 1,122 jogos ativos REST + JSON
Configuracao

Base URL

Todos os endpoints abaixo sao relativos a esta base publica de producao.

URL https://betcodebr.com/api/v1
Configuracao

Autenticacao

As rotas de listagem sao publicas. O endpoint de launch exige credenciais de agente no corpo da requisicao.

Essa rota de launch requer agent_code, agent_token e agent_secret no JSON.
Listagens publicas

GET /api/v1/providers e GET /api/v1/games nao exigem autenticacao.

Launch autenticado

Envie as credenciais do agente no body JSON de POST /api/v1/game-launch.

Configuracao

Callback URL

Cada agente possui um callback_url unico. Essa mesma URL recebe os eventos user_balance e transaction.

A callback_url deve ser HTTPS publica e responder HTTP 200 em todas as requisicoes.
Endpoints

Listar provedores

Retorna a lista de provedores cadastrados conforme base de dados.

GET /api/v1/providers
Exemplo de retorno
{
    "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"
        }
    ]
}
Endpoints

Listar jogos

Lista somente jogos ativos. Use provider + game_code retornados para lancamento.

GET /api/v1/games
Exemplo de retorno
{
    "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"
        }
    ]
}
Endpoints

Game launch

Cria sessao de jogo e retorna launch_url para abertura no iframe ou nova aba.

POST /api/v1/game-launch

Body Parameters

method string Obrigatorio

Use exatamente "game_launch".

agent_code string Obrigatorio

Codigo do agente.

agent_token string Obrigatorio

Token do agente.

agent_secret string Obrigatorio

Secret key do agente.

user_code string Obrigatorio

Identificador publico do jogador no sistema parceiro.

user_balance number Obrigatorio

Saldo do jogador. O backend exige valor positivo (> 0).

provider_code string Obrigatorio

Codigo do provedor, conforme /api/v1/providers.

game_code string Obrigatorio

Codigo do jogo ativo, conforme /api/v1/games.

lang string (2) Opcional

Idioma. Padrao: "pt".

Request body
{
    "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"
}
Exemplo de retorno
{
    "status": 1,
    "msg": "SUCCESS",
    "launch_url": "https://betcodebr.com/play/AG_BG_AlienFruits/eyJ0b2tlbiI6..."
}
Endpoints

Abrir launch_url

Use iframe ou nova aba conforme o produto parceiro.

Iframe
<iframe
  src="https://betcodebr.com/play/AG_BG_AlienFruits/eyJ0b2tlbiI6..."
  width="100%"
  height="720"
  frameborder="0"
  allowfullscreen
></iframe>
launch_url interna: protegida por token, expira por sessao — gere novamente via game-launch.
launch_url sports: pode vir direta do provedor.
Endpoints

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.

No modo demo o jogador usa ambiente de testes (ex: Open Platform pre-api). O saldo operacional da API nao e debitado, mas o saldo do jogador no jogo continua normal.
POST /api/v1/set-player-demo

Body Parameters

agent_code string Obrigatorio

Codigo do agente.

agent_token string Obrigatorio

Token do agente.

agent_secret string Obrigatorio

Secret key do agente.

user_code string Obrigatorio

Identificador do jogador no seu sistema.

is_demo boolean Obrigatorio

true para ativar modo demo, false para desativar.

Ativar demo

Envie is_demo: true para marcar o jogador como conta demo/influencer.

Desativar demo

Envie is_demo: false para voltar ao modo producao normal.

Request body (ativar)
{
    "agent_code": "AGT001",
    "agent_token": "xxxxxxxx",
    "agent_secret": "yyyyyyyy",
    "user_code": "player_123",
    "is_demo": true
}
Exemplo de retorno
{
    "status": 1,
    "msg": "SUCCESS",
    "user_code": "player_123",
    "is_demo": true
}
cURL
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.
Webhooks

Callback user_balance

Evento de consulta e sincronizacao de saldo do jogador enviado para sua callback_url.

Payload recebido
{
    "method": "user_balance",
    "user_code": "player_123",
    "user_balance": 100.5
}
Responda HTTP/1.1 200 OK para confirmar o recebimento.
Webhooks

Callback transaction

Evento de rodada processada. O objeto interno muda conforme o 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"
    }
}
Responda 200 OK e aplique idempotencia por txn_id no seu ledger.
Referencia

Status e erros

Codigos HTTP comuns no fluxo de game-launch.

400 Falha do provedor na criacao da launch_url. POST /api/v1/game-launch
403 Credenciais invalidas, jogo indisponivel ou saldo operacional insuficiente. POST /api/v1/game-launch
404 Jogo nao encontrado para o provider_code informado. POST /api/v1/game-launch
422 Validacao falhou (campos obrigatorios ausentes ou formato invalido). POST /api/v1/game-launch / set-player-demo
502 Falha ao sincronizar modo demo com os provedores. POST /api/v1/set-player-demo
Referencia

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.
Referencia

Exemplos cURL

Chamadas rapidas para homologacao e testes manuais.

Listar provedores
curl -s https://betcodebr.com/api/v1/providers
Listar jogos
curl -s https://betcodebr.com/api/v1/games
Game launch
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"
  }'
Referencia

Exemplo Node.js

Exemplo basico com fetch para requisitar launch_url.

Node.js (fetch)
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);
}
Integracao rapida

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.

Informe suas credenciais reais (agent_code, agent_token, agent_secret) ou peça para a IA usar variaveis de ambiente.
1

Copie o prompt completo com o botao abaixo.

2

Cole na IA junto com o stack do seu projeto (ex: Laravel, Node, Python).

3

Configure callback_url no painel do agente apontando para o endpoint que a IA criar.

Prompt de integracao completa
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).