https://{base-url}Conteúdo da documentação
Documentação Game API para integração de Slots AG GAME
V5.0.0Esta documentação da API de slots fornece a referência pública da Slots API V5.0.0 da AG GAME. Use a referência para analisar assinatura, abertura de jogos, fluxos de carteira, registros de transação e erros; depois, siga o processo de integração para confirmar acesso e materiais de teste específicos do projeto.
application/jsonEsta página publica o catálogo de endpoints, o método de assinatura, campos representativos e exemplos com dados fictícios para avaliação técnica. A URL base real, as credenciais, todas as restrições dos campos, a lista final de callbacks e a configuração de produção devem ser confirmadas pelo processo controlado de integração. As capacidades de recuperação de fundos e configuração do comerciante divulgam apenas sua finalidade; os caminhos exatos são fornecidos no pacote controlado de implementação. Os exemplos não contêm credenciais utilizáveis; não envie dados reais de jogadores ou transações pelos canais públicos.
Separe as configurações de teste e produção. Nunca coloque a chave de assinatura no navegador, em pacotes do cliente, logs, chamados ou conversas. Os valores fictícios não servem para produção.
Visão geral da API e escopo de acesso
Referência pública e materiais controlados do projeto
Esta página explica a finalidade do protocolo público atual. A URL base real, credenciais, restrições completas dos campos, lista final de callbacks e configuração de produção são confirmadas por projeto no processo de integração controlado.
Referência da Slots API
- Autenticação e assinatura
- Abertura de jogo e tratamento de sessão
- Fluxos de carteira única e de transferência
- Registros de transação e tratamento de erros
Preparação para testes e produção
Materiais necessários e próximos passos
Prepare o escopo do projeto, a arquitetura de carteira e os materiais de teste; depois, use o processo de integração para confirmar ambientes, responsabilidades e condições verificáveis de lançamento.
Iniciar o processo de integração · Conversar sobre acesso de teste
Exemplo mínimo de solicitação
O exemplo a seguir cria uma sessão de jogo. Antes de enviá-lo, calcule a assinatura a partir da string JSON final.
curl --request POST 'https://{base-url}/game/v5/game/url' \
--header 'Content-Type: application/json' \
--header 'X-MERCHANT-CODE: {merchant-code}' \
--header 'X-TIMESTAMP: {timestamp}' \
--header 'X-NONCE: {nonce}' \
--header 'X-SIGN: {hmac-sha256-signature}' \
--header 'X-CONTENT-PROCESSING-TYPE: {processing-type}' \
--data-raw '{
"reqTraceId": "trace-demo-001",
"gameCode": "{game-code}",
"playerId": "player-demo-001",
"currencyCode": "{currency-code}",
"language": "pt-BR",
"terminalType": "PC",
"returnUrl": "https://{merchant-host}/lobby",
"ipAddress": "192.0.2.10"
}'Autenticação e assinatura
O tipo de assinatura é fixo como HmacSHA256, e os cabeçalhos comuns devem acompanhar cada solicitação.
Cabeçalhos comuns da solicitação
| Header | Tipo | Obrigatório | Descrição |
|---|---|---|---|
X-MERCHANT-CODE | string | Obrigatório | Código de comerciante atribuído à plataforma |
X-TIMESTAMP | string | Obrigatório | Timestamp no momento da solicitação |
X-NONCE | string | Obrigatório | String aleatória usada em cada solicitação |
X-SIGN | string | Obrigatório | Assinatura da solicitação gerada com HmacSHA256 |
X-CONTENT-PROCESSING-TYPE | string | Obrigatório | Tipo de processamento do conteúdo enviado conforme a configuração da integração |
String de assinatura
- 1
Serialize o corpo da solicitação como a string JSON final
body. - 2
Concatene os campos exatamente na ordem abaixo, sem separadores.
- 3
Use a chave de assinatura para executar HMAC-SHA256 e coloque o resultado em
X-SIGN.
O body usado na assinatura deve ser exatamente igual ao corpo realmente enviado. Reformatar o JSON, mudar a ordem dos campos ou os espaços antes do envio pode gerar C10004.
import { createHmac } from "node:crypto";
const signType = "HmacSHA256";
const body = JSON.stringify(requestBody);
const signingText = merchantCode + timestamp + nonce + signType + body;
const signature = createHmac("sha256", secretKey)
.update(signingText, "utf8")
.digest("hex");Resposta comum
O resultado de negócio é retornado em code no corpo da resposta; não use apenas o status HTTP para determinar o resultado de uma transação.
| Campo | Tipo | Descrição |
|---|---|---|
code | string | Código do resultado de negócio |
msg | string | Mensagem do resultado |
success | boolean | Indicador de sucesso no exemplo de resposta |
data | object | Dados retornados pelo endpoint |
{
"code": "C10000",
"msg": "Request succeeded",
"success": true,
"data": {}
}Catálogo e endpoints típicos
Selecione o grupo de endpoints que corresponde à arquitetura da carteira do comerciante. Todos os endpoints da plataforma usam POST.
Catálogo de jogos e sessões
/game/v5/providersConsultar fornecedores de jogos
/game/v5/categoriesConsultar categorias de jogos
/game/v5/gamesConsultar jogos com paginação
/game/v5/game/urlCriar uma sessão de jogo para o jogador e obter a URL de início
/game/v5/player/force/logoutEncerrar à força a sessão de jogo do jogador
Callbacks da carteira única
{MERCHANT-URL}/wallet/balanceConsultar o saldo da carteira do jogador
{MERCHANT-URL}/player/infoConsultar dados do jogador
{MERCHANT-URL}/wallet/betReceber notificação de aposta
{MERCHANT-URL}/wallet/winReceber notificação de liquidação ou de aposta e liquidação
{MERCHANT-URL}/wallet/cancelReceber notificação de cancelamento do pedido
Carteira de transferência
/game/v5/cash/depositTransferir saldo para a carteira de jogo do jogador
/game/v5/cash/withdrawRetirar saldo da carteira de jogo do jogador
/game/v5/cash/balanceConsultar o saldo da carteira de jogo do jogador
/game/v5/cash/transactionConsultar transações da carteira com paginação
{CONTROLLED-PATH:FUND-RECOVERY}Recuperar todo o saldo da carteira de jogo por uma operação controlada
Registros e comerciante
/game/v5/game/recordConsultar registros dos jogos com paginação
{CONTROLLED-PATH:MERCHANT-CONFIGURATION}Consultar a configuração do comerciante e os dados da carteira por uma operação controlada
Nenhum endpoint encontrado.
A necessidade de o comerciante implementar /wallet/bete /wallet/cancel depende da configuração real da integração e do acordo técnico final. Confirme a lista de callbacks antes dos testes de integração.
POST/game/v5/game/urlCriar sessão de jogo
/game/v5/game/urlCriar sessão de jogoCria uma sessão de jogo para o jogador informado e retorna uma URL para iniciar o jogo.
Campos da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reqTraceId | string | Obrigatório | Identificador único da solicitação; não pode ser reutilizado |
gameCode | string | Obrigatório | Código do jogo |
playerId | string | Obrigatório | Identificador único do jogador no sistema do comerciante |
currencyCode | string | Obrigatório | Código da moeda da carteira |
language | string | Obrigatório | Idioma da interface do jogo |
terminalType | string | Opcional | Tipo de terminal: PHONE ou PC; o padrão é PHONE |
returnUrl | string | Opcional | URL de retorno após o jogador sair do jogo |
ipAddress | string | Obrigatório | Endereço IPv4 ou IPv6 do jogador |
subMerchantCode | string | Opcional | Código do subcomerciante; não pode conter sublinhado |
nickName | string | Opcional | Apelido do jogador |
avatarUrl | string | Opcional | URL do avatar do jogador |
{
"reqTraceId": "trace-demo-001",
"gameCode": "{game-code}",
"playerId": "player-demo-001",
"currencyCode": "{currency-code}",
"language": "pt-BR",
"terminalType": "PC",
"returnUrl": "https://{merchant-host}/lobby",
"ipAddress": "192.0.2.10"
}
{
"code": "C10000",
"msg": "Request succeeded",
"success": true,
"data": {
"gameCode": "{game-code}",
"playerId": "player-demo-001",
"gameUrl": "https://{game-launch-host}/session/{token}",
"expireTime": "2026-08-08T10:30:00Z"
}
}
Dados da resposta
| Campo | Tipo | Retornado | Descrição |
|---|---|---|---|
data.gameCode | string | Obrigatório | Código do jogo |
data.playerId | string | Obrigatório | Identificador do jogador |
data.gameUrl | string | Obrigatório | URL de início do jogo |
data.expireTime | string | Opcional | Horário de expiração da sessão |
POST{MERCHANT-URL}/wallet/winCallback de liquidação da carteira
{MERCHANT-URL}/wallet/winCallback de liquidação da carteiraNo modelo de carteira única, a plataforma envia à carteira do comerciante uma notificação de prêmio ou de aposta e liquidação. O comerciante deve processar a transação de forma idempotente e devolver o saldo resultante na resposta.
Campos da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reqTraceId | string | Obrigatório | Identificador único da solicitação |
playerId | string | Obrigatório | Identificador único do jogador no sistema do comerciante |
currencyCode | string | Obrigatório | Código da moeda da carteira |
gameCode | string | Obrigatório | Código do jogo |
transactionId | string | Obrigatório | Identificador único da transação na plataforma |
roundId | string | Obrigatório | Identificador único da rodada do jogo |
betId | string | Obrigatório | Identificador da aposta relacionada |
betAmount | string | Obrigatório | Valor apostado nesta transação |
winAmount | string | Obrigatório | Valor pago nesta transação |
isFree | boolean | Obrigatório | Indica se o registro foi gerado por uma partida grátis |
isEnd | boolean | Obrigatório | Indica se a rodada atual do jogo terminou |
betTime | string | Obrigatório | Horário da aposta |
settledTime | string | Obrigatório | Horário da liquidação |
type | string | Obrigatório | Tipo da notificação: win ou bet_win |
{
"reqTraceId": "trace-demo-002",
"playerId": "player-demo-001",
"currencyCode": "{currency-code}",
"gameCode": "{game-code}",
"transactionId": "txn-demo-002",
"roundId": "round-demo-001",
"betId": "bet-demo-001",
"betAmount": "10.00",
"winAmount": "18.50",
"isFree": false,
"isEnd": true,
"betTime": "2026-08-08T10:00:00Z",
"settledTime": "2026-08-08T10:00:08Z",
"type": "bet_win"
}
{
"code": "C10000",
"msg": "Request succeeded",
"success": true,
"data": {
"merchantBetId": "merchant-bet-demo-001",
"balance": "108.50"
}
}
POST/game/v5/cash/depositTransferir saldo para a carteira de jogo
/game/v5/cash/depositTransferir saldo para a carteira de jogoNo modelo de carteira de transferência, transfere o valor informado do sistema do comerciante para a carteira de jogo do jogador.
Campos da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reqTraceId | string | Obrigatório | Identificador único usado para rastrear a solicitação |
playerId | string | Obrigatório | Identificador único do jogador no sistema do comerciante |
currencyCode | string | Obrigatório | Código da moeda da carteira |
amount | string | Obrigatório | Valor da transferência |
merchantTransactionId | string | Obrigatório | Identificador único da transação do comerciante, usado na conciliação |
{
"reqTraceId": "trace-demo-003",
"playerId": "player-demo-001",
"currencyCode": "{currency-code}",
"amount": "100.00",
"merchantTransactionId": "merchant-txn-demo-001"
}
{
"code": "C10000",
"msg": "Request succeeded",
"success": true,
"data": {
"balance": "100.00"
}
}
Gere um merchantTransactionId único para cada transferência e guarde a solicitação e o resultado de negócio para conciliar o status final pelo endpoint de consulta de transações.
POST/game/v5/game/recordConsultar registros dos jogos
/game/v5/game/recordConsultar registros dos jogosConsulta com paginação os registros de apostas e prêmios do jogador em um intervalo de tempo.
Campos da solicitação
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
reqTraceId | string | Obrigatório | Identificador único da solicitação |
pageNum | integer | Obrigatório | Número da página |
pageSize | integer | Obrigatório | Registros por página |
reqData.startTime | string | Obrigatório | Início do intervalo da consulta |
reqData.endTime | string | Obrigatório | Fim do intervalo da consulta |
sort | string | Opcional | Ordem de classificação |
{
"reqTraceId": "trace-demo-004",
"pageNum": 1,
"pageSize": 50,
"reqData": {
"startTime": "2026-08-08T00:00:00Z",
"endTime": "2026-08-08T23:59:59Z"
},
"sort": "DESC"
}
{
"code": "C10000",
"msg": "Request succeeded",
"success": true,
"data": {
"gameRecordList": [{
"orderNo": "order-demo-001",
"playerId": "player-demo-001",
"betAmount": "10.00",
"winAmount": "18.50",
"betTime": "2026-08-08T10:00:00Z",
"winTime": "2026-08-08T10:00:08Z",
"gameCode": "{game-code}",
"currencyCode": "{currency-code}",
"roundId": "round-demo-001"
}]
}
}
Dúvidas técnicas
Dúvidas frequentes nos testes de integração sobre assinatura, carteiras, idempotência, timeouts e consultas de sessão.
Como a API da AG gera a assinatura da solicitação?
Serialize o corpo final da solicitação como body e concatene merchantCode + timestamp + nonce + signType + body, nessa ordem e sem separadores. signType é fixo como HmacSHA256. Calcule HMAC-SHA256 com a chave de assinatura e coloque o resultado em X-SIGN. O body usado na assinatura deve ser exatamente igual ao conteúdo enviado.
Ver o exemplo de autenticação e assinaturaPor que C10004 é retornado?
C10004 indica falha na validação da assinatura. Primeiro, verifique o código do comerciante, timestamp, nonce, chave de assinatura e o tipo fixo HmacSHA256. Depois, confirme que o middleware não serializou novamente a string JSON assinada, não mudou a ordem dos campos nem os espaços. Guarde reqTraceId e o horário da solicitação para diagnóstico, mas nunca registre a chave de assinatura.
Ver a lista completa de códigos de erroQual é a diferença entre carteira única e carteira de transferência?
No modelo de carteira única, o comerciante mantém o saldo do jogador, e a plataforma colabora com a carteira do comerciante por callbacks de saldo, aposta e liquidação. No modelo de transferência, o comerciante chama endpoints como /game/v5/cash/deposit e /game/v5/cash/withdraw para mover saldo entre seu sistema e a carteira de jogo do jogador. O modelo usado depende da configuração da integração e não deve ser misturado no mesmo fluxo de transação.
Ver o catálogo de endpoints de carteiraComo tratar callbacks de carteira repetidos?
O comerciante deve usar transactionId como base de idempotência das transações de callback. Quando a mesma transação chegar novamente, devolva o resultado e o saldo já confirmados; não debite nem credite outra vez. Guarde a solicitação, o resultado de negócio e o saldo final para conciliação. A necessidade de /wallet/bet e /wallet/cancel continua sujeita à lista final de callbacks do comerciante.
Ver o callback de liquidação da carteiraUma transferência pode ser repetida diretamente após timeout?
Não crie uma nova transação nem repita a transferência enquanto o resultado for desconhecido. Primeiro, use o merchantTransactionId original para chamar /game/v5/cash/transaction e consultar o resultado; depois, decida se deve reenviar conforme o acordo técnico final. Isso evita lançamentos duplicados quando a primeira solicitação teve sucesso, mas a resposta se perdeu na rede.
Ver o exemplo de transferência para a carteira de jogoPara que servem reqTraceId e merchantTransactionId?
reqTraceId é o identificador único de rastreamento de cada solicitação. Ele associa logs e ajuda a diagnosticar uma chamada; deve ser gerado e registrado por solicitação, inclusive em novas tentativas. merchantTransactionId é o identificador único da transação no sistema do comerciante, usado para conciliar transferências, consultar resultados e evitar o processamento repetido da mesma transação de negócio. Os dois têm finalidades diferentes e não se substituem.
Como criar uma sessão de jogo para o jogador?
Obtenha um gameCode disponível no catálogo, prepare o identificador do jogador, a moeda, o idioma e o endereço IP e chame /game/v5/game/url com os cabeçalhos comuns. Uma resposta bem-sucedida retorna gameUrl e pode retornar expireTime; o cliente deve abrir a URL enquanto a sessão estiver válida.
Ver como criar uma sessão de jogoComo consultar os registros de jogos do jogador?
Chame /game/v5/game/record com pageNum, pageSize e o intervalo reqData.startTime e reqData.endTime; informe sort quando necessário. Leia em gameRecordList os registros de pedido, jogador, valor apostado, prêmio, código do jogo e rodada e continue a consulta por página.
Ver o endpoint de registros dos jogosCódigos de erro
Registre reqTraceId, o código de erro de negócio e o horário da solicitação para ajudar a diagnosticar problemas rapidamente.
| Código | Mensagem | Ação recomendada |
|---|---|---|
C10000 | Request succeeded | Solicitação concluída com sucesso |
C10001 | Base service exception | Exceção no serviço de base |
C10002 | Request parameter error | Verifique os campos e tipos de dados |
C10003 | Invalid request header | Verifique os cinco cabeçalhos comuns |
C10004 | Signature error | Verifique a ordem da assinatura, a chave e o corpo original da solicitação |
C20001 | Merchant code absent | Verifique o código do comerciante |
G10001 | Game service exception | Exceção no serviço de jogos |
G20001 | Player ID empty | Informe playerId |
G20002 | Game ID absent | Verifique o código do jogo |
G20003 | Game offline | O jogo está off-line ou indisponível |
G30001 | Game user session expired | Crie uma nova sessão de jogo |
G30002 | Merchant balance insufficient | O saldo do comerciante é insuficiente |
G30003 | Player balance insufficient | O saldo do jogador é insuficiente |
G40001 | Third-party service exception | Exceção em serviço de terceiros |
Verificações da integração
Confirme estes controles no protocolo final do projeto e teste-os antes de mudar para produção. Esta página pública não afirma que o servidor já os tenha ativado.
- ✓
Solicitações rastreáveis e logs mínimos: gere um reqTraceId único para cada chamada. Guarde apenas horário, código de resultado e identificadores mascarados necessários ao diagnóstico; não registre chaves, assinaturas completas, tokens, dados do jogador nem a carga completa da transação.
- ✓
Assinaturas reproduzíveis: a entrada da assinatura corresponde exatamente à string JSON enviada, e os testes cobrem C10004.
- ✓
Regras antirreplay explícitas: confirme a tolerância do timestamp, a unicidade do nonce e a rejeição de solicitações repetidas; teste valores expirados, reutilizados e concorrentes.
- ✓
Autorização e limites de recursos explícitos: valide por comerciante o acesso a endpoints, carteiras e dados e confirme limites de frequência, concorrência, paginação e valor de transação, além dos alertas.
- ✓
Transações idempotentes: elimine duplicidades em notificações e transferências pelo identificador da transação, evitando lançamentos duplicados em solicitações repetidas.
- ✓
Resultados conciliáveis: em caso de timeout ou exceção de rede, consulte o resultado da transação antes de decidir se deve tentar novamente.
- ✓
Valores em ponto fixo: não use números binários de ponto flutuante para saldos, valores de aposta ou prêmios.
