Ambiente de testes

Sandbox — teste tudo sem risco

Ambiente isolado com seamless wallet mock, HMAC real, injeção de falhas e reset self-service. Valide sua integração antes de ir para produção.

O que está incluído

Tenant isolado

Operador sandbox dedicado, saldo fake ilimitado, dados separados da produção. Zero impacto em GGR real.

Seamless wallet mock

Endpoints authenticate, balance, debit, credit, rollback e query — protocolo idêntico ao de produção (PG Soft-style).

HMAC real

Assinatura SHA-256 igual à produção. Valide seu cliente antes de ligar em produção.

Injeção de falhas

Configure latência, 5xx, timeout e saldo insuficiente por query string. Teste retry, idempotência e rollback.

Reset self-service

Limpe usuários, saldos e transações a qualquer momento via endpoint. Ideal para pipelines de CI.

Docs + exemplos

cURL, snippets Node/Python, Postman collection e dashboard de métricas p50/p95/p99.

Credenciais Sandbox

Duas chaves — uma pra abrir sessão (launch token) e uma pra assinar chamadas da Seamless Wallet. Confira o prefixo dos 12 primeiros caracteres pra garantir que colou o valor certo do seu lado.

IGAMING_API_TOKEN_SANDBOX
ausente

Bearer token pra abrir sessão no sandbox. Copie do painel do operador.

SANDBOX_WALLET_HMAC_SECRET
ausente

Assina x-signature (HMAC-SHA256) nas chamadas /debit /credit /rollback.

Comece em 5 passos

Siga este guia para sair do zero até uma integração de seamless wallet funcional em minutos.

  1. 1

    Solicite acesso ao sandbox

    Peça um tenant sandbox. Você receberá um token com prefixo sk_sandbox_ e um segredo HMAC. Guarde o segredo com segurança — ele só é exibido uma vez.

  2. 2

    Configure seu backend

    Defina SANDBOX_BASE_URL, SANDBOX_TOKEN e SANDBOX_HMAC_SECRET como variáveis de ambiente no seu backend de carteira. Nunca commite no git.

  3. 3

    Assine toda requisição

    Para cada POST, calcule hex(hmac_sha256(raw_body, SANDBOX_HMAC_SECRET)) e envie em x-signature. Envie também x-idempotency-key para que retries não dupliquem débitos.

  4. 4

    Rode os cenários

    Exercite authenticate, balance, debit, credit e rollback. Depois injete falhas (err_rate, timeout_rate) para validar seu retry/rollback.

  5. 5

    Promova para produção

    Quando todos os cenários passarem, solicite credenciais de produção. O mesmo código funciona — você só troca a base URL, token e segredo HMAC.

Endpoints disponíveis

Mesmo contrato da API de produção. Basta apontar o base URL para o sandbox.

Rotas

POST
/authenticate

Valida token de sessão do jogador

POST
/balance

Consulta saldo atual

POST
/debit

Debita aposta (idempotente)

POST
/credit

Credita ganho (idempotente)

POST
/rollback

Estorna transação por idempotency key

POST
/query

Consulta status de uma transação

GET
/stats

Métricas agregadas do sandbox

GET
/reset

Reseta estado do mock

Base URL: https://sandbox.i-gaming.co/api/public/v1/sandbox/wallet

Exemplo — débito de aposta

curl
curl -X POST https://sandbox.i-gaming.co/api/public/v1/sandbox/wallet/debit \
  -H "content-type: application/json" \
  -H "x-signature: <hmac_sha256(body, SANDBOX_WALLET_HMAC_SECRET)>" \
  -H "x-idempotency-key: round_123" \
  -d '{"user_id":"demo_1","amount":100,"currency":"BRL","round_id":"r_1"}'

Assine o corpo raw com HMAC SHA-256 usando seu SANDBOX_HMAC_SECRET. Envie x-idempotency-key para garantir idempotência.

Assinatura HMAC — passo a passo

Toda requisição é autenticada com uma assinatura HMAC-SHA256 sobre o corpo cru. Siga estas regras para evitar erros de assinatura.

  • Assine os bytes CRUS do corpo — não uma versão re-serializada. Se você parsear e re-stringificar o JSON, o whitespace muda e a assinatura quebra.
  • O algoritmo é HMAC-SHA256. A saída é hex minúsculo, 64 caracteres. Sem base64, sem prefixo.
  • Envie a assinatura no header x-signature. Envie também content-type: application/json.
  • Envie um x-idempotency-key único por operação lógica. Reutilizar a chave retorna a mesma resposta — seguro para retry.
  • O servidor tolera ±5 minutos de desvio de relógio. Garanta que seus servidores estejam no NTP.
  • Verifique a assinatura da resposta (header x-signature na nossa resposta) para se defender de MITM.

Exemplo Node.js

node
import { createHmac } from "crypto";

const body = JSON.stringify({ user_id: "demo_1", amount: 100, currency: "BRL", round_id: "r_1" });
const signature = createHmac("sha256", process.env.SANDBOX_WALLET_HMAC_SECRET!).update(body).digest("hex");

await fetch("https://sandbox.i-gaming.co/api/public/v1/sandbox/wallet/debit", {
  method: "POST",
  headers: {
    "content-type": "application/json",
    "x-signature": signature,
    "x-idempotency-key": "round_123",
  },
  body,
});

Exemplo Python

python
import hmac, hashlib, json, os, requests

body = json.dumps({"user_id":"demo_1","amount":100,"currency":"BRL","round_id":"r_1"}, separators=(",",":"))
sig = hmac.new(os.environ["SANDBOX_WALLET_HMAC_SECRET"].encode(), body.encode(), hashlib.sha256).hexdigest()

requests.post(
  "https://sandbox.i-gaming.co/api/public/v1/sandbox/wallet/debit",
  data=body,
  headers={
    "content-type": "application/json",
    "x-signature": sig,
    "x-idempotency-key": "round_123",
  },
)

Exemplo PHP

php
<?php
$body = json_encode(["user_id"=>"demo_1","amount"=>100,"currency"=>"BRL","round_id"=>"r_1"]);
$sig = hash_hmac("sha256", $body, getenv("SANDBOX_WALLET_HMAC_SECRET"));
$ch = curl_init("https://sandbox.i-gaming.co/api/public/v1/sandbox/wallet/debit");
curl_setopt_array($ch, [
  CURLOPT_POST => true,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    "content-type: application/json",
    "x-signature: $sig",
    "x-idempotency-key: round_123",
  ],
  CURLOPT_POSTFIELDS => $body,
]);
$response = curl_exec($ch);

Injeção de falhas

Simule cenários reais de produção passando parâmetros na query string.

ParâmetroExemploEfeito
lat_min50Latência mínima em ms
lat_max800Latência máxima em ms
err_rate0.1Probabilidade de 5xx (0.0–1.0)
timeout_rate0.05Probabilidade de timeout (0.0–1.0)
insuff_rate0.02Probabilidade de saldo insuficiente
rtp0.97RTP alvo para simulação de rounds

Exemplo de URL com falhas

https://sandbox.i-gaming.co/api/public/v1/sandbox/wallet/debit?lat_max=800&err_rate=0.1&timeout_rate=0.05

Combine parâmetros para testar edge cases: alta latência + 10% de erro + 5% de timeout.

Cenários de teste que você deve cobrir

Antes de ir ao ar, exercite estes fluxos no sandbox. Cada um expõe uma classe de bug que vemos em produção.

Caminho feliz

authenticate → balance → debit → credit. Saldo deve bater com inicial − aposta + prêmio.

Saldo insuficiente

Coloque insuff_rate=1 e confirme que seu jogo mostra erro adequado em vez de quebrar.

Timeout de rede no débito

Coloque timeout_rate=1 no debit. Seu backend NÃO deve creditar a rodada — precisa fazer retry ou rollback seguro.

Débito duplicado (idempotência)

Envie o mesmo débito duas vezes com o mesmo x-idempotency-key. O saldo deve ser debitado apenas uma vez.

Rollback após falha de vitória

Simule falha no credit e emita um rollback. O jogador não pode perder dinheiro.

Apostas concorrentes

Dispare 20 débitos paralelos para o mesmo usuário. Sem saldo negativo, sem gasto duplo.

Multi-moeda

Teste BRL, USD, EUR, AUD, MYR. Valores são sempre inteiros em centavos da moeda do operador.

Reset e replay

Chame /reset entre suítes de teste para ter um estado limpo no CI.

Checklist de go-live

Marque cada item antes de solicitar credenciais de produção.

  • Todas as requisições POST assinadas com HMAC-SHA256 sobre o corpo cru
  • Todo debit/credit carrega um x-idempotency-key único
  • Retry com backoff em 5xx e timeouts (máx 3 tentativas)
  • Fluxo de rollback implementado e testado
  • Logs estruturados para toda chamada de wallet (request id, round id, latência, status)
  • Servidores no NTP com desvio ≤ ±5 minutos
  • Segredos em vault, nunca no git ou logs
  • Receptor de webhook verifica a assinatura da nossa resposta
  • Alertas de taxa de erro, latência p95 e taxa de rollback
  • Moeda e unidade validadas (centavos inteiros, sem floats)

Perguntas frequentes

O sandbox tem custo?

Não. O sandbox é gratuito para avaliação e integração. Você só paga quando for para produção.

Tem limite de taxa?

O sandbox permite até 200 req/s por token. Fale com a gente se precisar rodar cargas maiores.

Os dados do sandbox são persistentes?

O estado fica em memória por sessão. Use /reset para limpar. Para suítes de CI longas, solicite um sandbox persistente.

Quão diferente é a produção?

A API é idêntica. Produção adiciona KYC real, dinheiro real, RLS real, webhooks reais e monitoramento real — mas seu código de integração não muda.

Onde consigo ajuda?

Abra ticket em contato@i-gaming.co ou use o chat no painel do operador. Tempo médio de resposta abaixo de 2h em dias úteis.

Por que estou recebendo portal_response_bad_signature?

9 em cada 10 vezes: você re-serializou o corpo JSON antes de assinar, ou seu segredo tem espaço no começo/fim. Assine os bytes crus e faça trim no segredo.

Importante

O sandbox não é para teste de carga da nossa infra de produção. Use volumes realistas. Abuso pode resultar em revogação do token.

Pronto para testar?

Peça acesso ao sandbox e receba credenciais em até 24h com token, HMAC secret e link para o dashboard de métricas.

Sandbox 100% gratuito. Sem cartão de crédito.