Documentação da API

Primeiros passos (15 minutos)

Do zero ao fluxo completo em sandbox — cadastro, KYC, depósito, sessão de jogo e saque — com comandos que você pode copiar e executar.

Este roteiro percorre o fluxo inteiro em sandbox, sem depender de ninguém da nossa equipe: as rotas da tag Sandbox simulam as decisões de compliance e de análise de saque. Você só precisa de uma credencial bk_test_… (como pedir).

Prefere não escrever código? Use o testador no navegador ou a coleção Postman: os dois assinam por você.

0. Prepare o ambiente

export API_BASE_URL="https://backoffice.betfoguete.bet"
export OPERATOR_KEY="bk_test_…"      # a sua chave de sandbox
export OPERATOR_SECRET="sk_…"        # o secret (mostrado uma única vez)

Todos os exemplos abaixo usam o mesmo auxiliar de assinatura. Salve-o como sign.sh (o código em outras linguagens está em autenticação HMAC):

# uso: call METODO CAMINHO [CORPO]   → assina, envia e imprime a resposta
call() {
  local method="$1" path="$2" body="${3:-}" ts hash sig
  ts=$(date +%s)
  hash=$(printf '%s' "$body" | openssl dgst -sha256 -hex | sed 's/^.* //')
  sig=$(printf '%s\n%s\n%s\n%s' "$method" "$path" "$ts" "$hash" \
    | openssl dgst -sha256 -hmac "$OPERATOR_SECRET" -hex | sed 's/^.* //')
  curl -sS -X "$method" "$API_BASE_URL$path" \
    -H "X-Operator-Key: $OPERATOR_KEY" -H "X-Timestamp: $ts" -H "X-Signature: $sig" \
    -H "Idempotency-Key: $(uuidgen)" -H "Content-Type: application/json" \
    ${body:+-d "$body"}
  echo
}

1. Confirme a assinatura

call GET /api/v1/me

A resposta deve trazer "environment": "sandbox" e "isSandbox": true. Se receber INVALID_SIGNATURE, compare a sua implementação com o vetor de teste.

2. Cadastre um jogador

call POST /api/v1/players '{"externalId":"jogador-123","name":"Ana Souza","email":"ana@exemplo.com","cpf":"52998224725","birthDate":"1990-05-20"}'

Guarde o id devolvido (PLU-…) em PLAYER. O jogador nasce ativo, com KYC nao_iniciado.

3. KYC: envie o documento e simule a decisão

call POST /api/v1/players/$PLAYER/kyc/submissions '{"documentType":"RG","reference":"doc-001"}'
call POST /api/v1/sandbox/players/$PLAYER/kyc/decision '{"status":"aprovado"}'

Em produção a decisão é da equipe de compliance e chega pelo webhook kyc.status_changed.

4. Deposite

call POST /api/v1/players/$PLAYER/deposits '{"amount":"150.00","currency":"BRL","method":"PIX","externalReference":"psp-001"}'
call POST /api/v1/deposits/$DEPOSIT/confirm '{}'
call GET  /api/v1/players/$PLAYER/wallet

O depósito nasce pending; ao confirmar, o valor é creditado e available passa a 150.00.

5. Abra um jogo

call GET  /api/v1/games
call POST /api/v1/players/$PLAYER/game-sessions '{"gameId":"rocket-crash"}'

Devolve a gameUrl para abrir no navegador do jogador. Em sandbox é uma sessão de demonstração (saldo fictício).

6. Solicite e conclua um saque

call POST /api/v1/players/$PLAYER/withdrawals '{"amount":"50.00","currency":"BRL","method":"PIX","destination":"ana@exemplo.com"}'
call POST /api/v1/sandbox/withdrawals/$WITHDRAWAL/decision '{"decision":"approve"}'
call POST /api/v1/sandbox/withdrawals/$WITHDRAWAL/decision '{"decision":"pay"}'
call GET  /api/v1/players/$PLAYER/wallet

O saque entra under_review, passa a approved e depois paid; só então o valor é debitado (available volta a 100.00).

7. Receba os eventos

Cada passo acima gera webhooks (deposit.confirmed, withdrawal.status_changed, …). Peça à equipe para configurar a sua URL HTTPS de sandbox e valide com POST /api/v1/webhooks/test — veja webhooks.

Próximos passos