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_SANDBOXBearer token pra abrir sessão no sandbox. Copie do painel do operador.
SANDBOX_WALLET_HMAC_SECRETAssina 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
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
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
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
Rode os cenários
Exercite authenticate, balance, debit, credit e rollback. Depois injete falhas (err_rate, timeout_rate) para validar seu retry/rollback.
- 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
/authenticateValida token de sessão do jogador
/balanceConsulta saldo atual
/debitDebita aposta (idempotente)
/creditCredita ganho (idempotente)
/rollbackEstorna transação por idempotency key
/queryConsulta status de uma transação
/statsMétricas agregadas do sandbox
/resetReseta estado do mock
https://sandbox.i-gaming.co/api/public/v1/sandbox/walletExemplo — débito de aposta
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
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
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
$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âmetro | Exemplo | Efeito |
|---|---|---|
lat_min | 50 | Latência mínima em ms |
lat_max | 800 | Latência máxima em ms |
err_rate | 0.1 | Probabilidade de 5xx (0.0–1.0) |
timeout_rate | 0.05 | Probabilidade de timeout (0.0–1.0) |
insuff_rate | 0.02 | Probabilidade de saldo insuficiente |
rtp | 0.97 | RTP 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.