Games2API
Games2API Painel de Controle
Carregando painel

Guia de Integração API

Documentação técnica para implementação da Games2API

Seamless Mode

URL Base da API

Todas as requisições devem ser enviadas para a URL base utilizando obrigatoriamente o protocolo HTTPS:

https://api.games2api.xyz

O endpoint raiz aceita somente POST. Requisições GET e DELETE retornam HTTP 405 com METHOD_NOT_ALLOWED.

Autenticação & Cabeçalhos

Toda chamada é autenticada pelas credenciais do agente enviadas no corpo JSON: agent_code + agent_token.

POST / HTTP/1.1
Host: api.games2api.xyz
Content-Type: application/json
Accept: application/json
X-Request-Id: pedido-2026-000123

{
  "method": "game_list",
  "agent_code": "DEMO",
  "agent_token": "SEU_AGENT_TOKEN"
}

O cabeçalho Content-Type: application/json é obrigatório. Accept: application/json é recomendado.

Cabeçalho opcional de correlação

Envie X-Request-Id (ou o campo request_id no JSON) para correlacionar logs. Se ausente, a API gera um req_... automaticamente. O mesmo valor volta no campo request_id de todas as respostas — inclusive nas de erro.

Métodos & Formatos de Dados

Utilize o método HTTP POST para todas as requisições. O corpo da mensagem deve estar estruturado em formato JSON. O roteamento é feito pelo campo method no corpo.

O cabeçalho Content-Type: application/json é indispensável.

Valores monetários são números decimais (ex.: 10.50), nunca formatados com símbolo ou separador de milhar.

Limites de Tamanho por Campo

Tabela consolidada dos limites aplicados pela API. Campos fora do limite retornam HTTP 400 com INVALID_REQUEST. Os limites são medidos em caracteres (bytes da string UTF-8), não em palavras.

CampoTipoObrigatórioLimite / regraDescrição
methodstringSimaté 32 (recomendado)Nome do método, sempre em minúsculas.
agent_codestringSimaté 191 — não pode ser numérico no game_launchCódigo do agente autenticado.
agent_tokenstringSimaté 255Token do agente. Nunca exponha no navegador.
agent_secretstringCallbackaté 255Secret do agente, enviado pela Games2API nos callbacks.
user_codestringDepende1 a 191 — sempre stringIdentificador do jogador no seu sistema.
request_idstringNãogeral: 8 a 64; freespin/bônus: 8 a 128Chave de correlação/idempotência. Padrão [A-Za-z0-9][A-Za-z0-9._:-]*.
provider_codestringDependeaté 128 (catálogo: 45)Use exatamente o valor retornado pelo catálogo.
game_codestringDependeaté 191Código público do jogo retornado pelo catálogo.
langstringDependeaté 16pt, es ou en. Subtags viram a principal (pt-BR → pt).
currencystringNão3 (ISO 4217)Padrão: moeda cadastrada no agente.
emailstringDependeaté 254, formato válidoLocaliza o jogador no CRM de bônus.
amount (financeiro)decimalDepende> 0 (bônus) / ≥ 0 (depósito); sem máximo explícitoValor em moeda corrente, 2 casas decimais.
amount (free spins)inteiroSim1 a 1000Quantidade de giros grátis.
spinsinteiroSim (Beterraba)1 a 10000Quantidade de giros no contrato Beterraba.
levelinteiroNão (Beterraba)≥ 1 e presente em available_levelsNível do bônus Beterraba. Padrão 1.
bonus_idstringSim (Beterraba)8 a 64 — [A-Za-z0-9._:-]Chave de idempotência da concessão.
bet_amountdecimalDepende> 0; padrão 1.00Valor de cada giro (Originals, Aviatrix, SP).
bet_levelinteiroDepende0 a 6 (Ryan)Nível de aposta do Ryan; repassado ao 1GAMEHUB.
max_promo_windecimalNão (Aviatrix)> 0; padrão 1000.00Prêmio promocional máximo.
expires_in_daysinteiroNão> 0; padrão 7Validade do bônus em dias.
rtpnúmero/stringNão—Repassado ao 1GAMEHUB.
bonus_namestringNãoaté 100Nome da campanha PGSoft.
descriptionstringNãoaté 255Descrição do bônus PGSoft.
page_numberinteiroNão≥ 1; padrão 1Paginação de bonus_games.
row_countinteiroNão1 a 5000; padrão 500Itens por página em bonus_games.
perPageinteiroSim (get_game_log)≥ 1Quantidade máxima de registros no histórico.
subagent_codestringSim (subagentes)até 191Código do sub-agente.

Formato das Respostas

Sucesso

{
  "status": 1,
  "msg": "SUCCESS",
  "request_id": "pedido-2026-000123"
}

Falha padronizada

{
  "status": 0,
  "msg": "GAME_NOT_FOUND",
  "request_id": "pedido-2026-000123",
  "error": {
    "code": "GAME_NOT_FOUND",
    "category": "configuration",
    "retryable": false,
    "provider": "PGSOFT",
    "game_code": "fortune-tiger",
    "message": "Jogo não encontrado ou inativo."
  }
}

Considere sucesso somente quando o HTTP estiver entre 200 e 299 e "status": 1. O código HTTP acompanha a categoria: 4xx para erro definitivo do pedido, 5xx para dependência indisponível e 2xx para sucesso.

Quando error.retryable for true, aguarde error.retry_after_ms antes de repetir. 4xx nunca deve ser repetido sem corrigir a requisição.

Referência de Endpoints

Lançar Jogo (Game Launch)

POST

Gera a URL de acesso para o jogador entrar no jogo. No modo Seamless o cadastro do jogador é criado automaticamente na primeira chamada; o saldo vem da sua carteira pelos callbacks.

{
    "method": "game_launch",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "user_code": "user123",
    "provider_code": "PGSOFT",
    "game_code": "fortune-tiger",
    "lang": "pt",
    "currency": "BRL",
    "request_id": "launch-2026-000123"
}
CampoTipoObrigatórioLimite / regraDescrição
user_codestringSim1 a 191; não pode ser numéricoIdentificador do jogador. Obrigatoriamente string (envie "123", não 123).
provider_codestringSimaté 128Provedor retornado por provider_list.
game_codestringSimaté 191Jogo retornado por game_list.
langstringSimaté 16pt, es ou en.
currencystringNão3 (ISO 4217)Sobrescreve a moeda do agente. Usado principalmente pelo provedor SP.
request_idstringNão8 a 64Correlação. Devolvido em request_id.

Exemplo de Resposta (HTTP 200):

{
    "status": 1,
    "msg": "SUCCESS",
    "launch_url": "https://...",
    "request_id": "launch-2026-000123"
}

Erros: GAME_NOT_FOUND (404), CURRENCY_NOT_SUPPORTED (422), PROVIDER_UNAVAILABLE/UPSTREAM_TIMEOUT (502/504, repetível).

Consultar Saldo (Callback)

Webhook POST

A Games2API envia esta requisição para o seu servidor (siteEndPoint) para obter o saldo do jogador. Responda em até 30 segundos.

Recebido pela Games2API

{
    "method": "user_balance",
    "agent_code": "DEMO",
    "agent_secret": "SUA_SECRET_KEY",
    "user_code": "user123",
    "request_id": "req_...",
    "provider_code": "PGSOFT",
    "game_code": "fortune-tiger",
    "session_id": "req_...",
    "currency": "BRL"
}

Resposta esperada do seu servidor

{
    "status": 1,
    "user_balance": 1500.00
}
CampoTipoObrigatórioLimite / regraDescrição
methodstring—fixouser_balance.
agent_codestringRecebidoaté 191Confira se é o seu agente.
agent_secretstringRecebidoaté 255Valide com hash_equals. Nunca processe sem validar.
user_codestringRecebidoaté 191Jogador consultado.
provider_code / game_codestringRecebido—Contexto da sessão, apenas para correlação.
user_balancedecimalResposta≥ 0Saldo atual. A API também aceita o nome balance.

Se a resposta não trouxer status: 1 com saldo numérico, a tentativa é tratada como falha e enfileirada para nova tentativa automática.

Notificar Transação (Callback)

Webhook POST

Enviada para o seu servidor a cada aposta, ganho ou estorno. Use txn_id para deduplicar: reenvios do mesmo txn_id não podem debitar/creditar duas vezes.

Recebido pela Games2API

{
    "method": "transaction",
    "agent_code": "DEMO",
    "agent_secret": "SUA_SECRET_KEY",
    "agent_balance": 5000.00,
    "user_code": "user123",
    "user_balance": 1500.00,
    "game_type": "slot",
    "request_id": "req_...",
    "slot": {
        "provider_code": "PGSOFT",
        "game_code": "fortune-tiger",
        "bet_money": 1.00,
        "win_money": 2.50,
        "txn_id": "TXN_UNICO",
        "txn_type": "credit",
        "currency": "BRL"
    }
}

Resposta esperada do seu servidor

{
    "status": 1,
    "user_balance": 1501.50
}
CampoTipoObrigatórioLimite / regraDescrição
agent_balancedecimalRecebido≥ 0Saldo do agente na Games2API, somente leitura.
user_balancedecimalRecebido≥ 0Saldo do jogador antes da transação.
slot.provider_codestringRecebidoaté 128Provedor do jogo.
slot.game_codestringRecebidoaté 191Jogo.
slot.bet_moneydecimalRecebido≥ 0Valor apostado nesta transação.
slot.win_moneydecimalRecebido≥ 0Valor ganho nesta transação.
slot.txn_idstringRecebidoaté 191Chave de idempotência única da transação.
slot.txn_typestringRecebidodebit / credit / bonus / refundNatureza da transação.
slot.currencystringRecebido3Moeda da transação.
user_balance (resposta)decimalResposta≥ 0Saldo final após aplicar bet/win.

Sem uma resposta válida, a transação é considerada não confirmada e pode ser reenviada. Implemente deduplicação por txn_id antes de alterar saldo.

Listar Provedores

POST

Lista os provedores ativos. Use o campo code como provider_code. Cache de 5 minutos.

{
    "method": "provider_list",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN"
}

Resposta resumida:

{
    "status": 1,
    "msg": "Lista de provedores",
    "providers": [{
        "code": "PGSOFT",
        "name": "PGSOFT",
        "Status": 1,
        "type": "slot",
        "types": ["slot"],
        "types_normalized": ["SLOT"],
        "currencies": ["BRL", "USD"],
        "currencies_known": true,
        "currencies_source": "observed",
        "currencies_count": 2,
        "currencies_rejected_count": 0,
        "currencies_tested_at": "2026-10-04 18:00:00+00"
    }]
}
CampoTipoObrigatórioLimite / regraDescrição
typesarrayResposta—Tipos brutos publicados pelo provedor.
types_normalizedarrayRespostaSLOT / CASINO / CRASH / ...Tipos normalizados para exibição.
currenciesarray/nullResposta—null quando ainda não há matriz de moedas.
currencies_knownbooleanResposta—Indica se existe matriz de moedas para o provedor.
currencies_sourcestring/nullRespostaobserved / probedOrigem da evidência de moedas.

Lista de Jogos, Free Spins e Moedas

POST

O método game_list exige provider_code e informa a elegibilidade de cada jogo e a matriz de moedas do provedor. Cache de 1 hora.

{
    "method": "game_list",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "provider_code": "ORIGINALS"
}
{
    "status": 1,
    "msg": "SUCCESS",
    "games": [{
        "id": 123,
        "game_code": "jogodotigrinho",
        "game_name": "Jogo do Tigrinho",
        "banner": "https://.../jogodotigrinho-v2.png",
        "status": 1,
        "provider": "ORIGINALS",
        "type": "SLOT",
        "freespins_supported": true,
        "currencies": ["BRL", "USD"],
        "currencies_known": true,
        "currencies_tested_at": "2026-10-04 18:00:00+00"
    }]
}
CampoTipoObrigatórioLimite / regraDescrição
provider_codestringSimaté 128Provedor retornado por provider_list.
freespins_supportedbooleanResposta—Suporte individual do jogo a rodadas grátis.
currenciesarray/nullResposta—Moedas aceitas; null quando ainda não há informação.
currencies_knownbooleanResposta—Indica se o provedor possui matriz de moedas.
currencies_tested_atstring/nullResposta—Data da evidência mais recente.

Listar Jogos Elegíveis

POST

Use freespin_games como fonte dinâmica. provider_code é opcional; sem ele, a API lista todos os jogos ativos elegíveis. Não mantenha lista fixa no painel.

{
    "method": "freespin_games",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "provider_code": "ORIGINALS"
}
{
    "status": 1,
    "msg": "SUCCESS",
    "providers": {
        "ORIGINALS": { "method": "freespin", "list_in_freespin_games": true, "note": null },
        "BETERRABA": { "method": "freespin_grant", "list_in_freespin_games": true, "note": "..." }
    },
    "count": 1,
    "count_by_api": { "ORIGINALS": 1 },
    "games": [{ "game_code": "jogodotigrinho", "game_name": "Jogo do Tigrinho", "provider": "ORIGINALS", "type": "SLOT", "API": "ORIGINALS" }]
}

Use exatamente o campo provider retornado como provider_code. Jogos Beterraba podem usar o sufixo -BT e trazer available_levels.

Conceder Free Spins

POST

Suporte atual pelo método freespin: Originals, Ryan, Aviatrix, SP e 1GAMEHUB. Beterraba/MGator usa freespin_grant. BGaming ainda não aceita concessão.

{
    "method": "freespin",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "user_code": "usuario123",
    "provider_code": "ORIGINALS",
    "game_code": "jogodotigrinho",
    "amount": 20,
    "bet_amount": 1.00,
    "expires_in_days": 7,
    "request_id": "bonus-2026-000001"
}
CampoTipoObrigatórioLimite / regraDescrição
user_codestringSim1 a 191Deve pertencer ao agente autenticado.
provider_code / game_codestringSim128 / 191Use os valores retornados por freespin_games.
amountinteiroSim1 a 1000Quantidade de giros grátis.
expires_in_daysinteiroNão> 0; padrão 7Validade em dias.
request_idstringNão8 a 128 — [A-Za-z0-9._:-]Idempotência da concessão.
bet_amountdecimalDepende> 0; padrão 1.00Originals, Aviatrix e SP.
bet_levelinteiroDepende0 a 6Ryan; também enviado ao 1GAMEHUB.
max_promo_windecimalNão> 0; padrão 1000.00Aviatrix.
emailstring1GAMEHUBaté 254; formato válidoSobrescreve o e-mail cadastrado.
rtpnúmero/stringNão—Encaminhado ao 1GAMEHUB.
Exemplos por integração

Ryan

{ "method":"freespin", "provider_code":"PROVEDOR-RYAN", "game_code":"CODIGO_DO_JOGO", "user_code":"usuario123", "amount":10, "bet_level":2, "expires_in_days":7 }

Aviatrix

{ "method":"freespin", "provider_code":"AVIATRIX", "game_code":"nft-aviatrix", "user_code":"usuario123", "amount":5, "bet_amount":1.00, "max_promo_win":1000.00, "request_id":"avia-2026-000001" }

SP

{ "method":"freespin", "provider_code":"SP", "game_code":"CODIGO_DO_JOGO", "user_code":"usuario123", "amount":10, "bet_amount":1.00, "request_id":"sp-2026-000001" }

1GAMEHUB

{ "method":"freespin", "provider_code":"PROVEDOR_1GAMEHUB", "game_code":"CODIGO_PUBLICO", "user_code":"usuario123", "amount":20, "email":"[email protected]", "request_id":"hub-2026-000001" }

Inclua também agent_code e agent_token em todos os exemplos.

No Aviatrix, amount é a quantidade de apostas promocionais; bet_amount é o valor de cada uma. No 1GAMEHUB a concessão vira saldo e exige e-mail válido.

Beterraba e Consultas de Free Spins

A integração Beterraba/MGator possui contrato próprio e usa bonus_id como chave de idempotência.

1. Consultar níveis

{
  "method": "freespin_available",
  "agent_code": "DEMO",
  "agent_token": "SEU_AGENT_TOKEN",
  "game_code": "3250379"
}

2. Conceder no Beterraba

{
  "method": "freespin_grant",
  "agent_code": "DEMO",
  "agent_token": "SEU_AGENT_TOKEN",
  "user_code": "usuario123",
  "game_code": "3250379",
  "spins": 10,
  "level": 1,
  "currency": "BRL",
  "bonus_id": "campanha-2026-000001"
}
CampoTipoObrigatórioLimite / regraDescrição
game_codestringfreespin_available / grantaté 191Jogo do Beterraba retornado pelo catálogo.
spinsinteiroSim1 a 10000Quantidade de giros.
levelinteiroNão≥ 1; presente em available_levelsNível do bônus. Padrão 1.
currencystringNão3Padrão BRL.
bonus_idstringSim8 a 64 — [A-Za-z0-9._:-]Chave de idempotência criada pelo painel.
  • Mesma chave e parâmetros retorna duplicate: true; parâmetros diferentes retornam HTTP 409.
  • Jogadores do modo Seamless são criados sob demanda no grant.

Status Beterraba

{ "method":"freespin_status", "bonus_id":"campanha-2026-000001" }

Cancelar Beterraba

{ "method":"freespin_cancel", "bonus_id":"campanha-2026-000001" }

Restantes Aviatrix

{ "method":"freespin_remaining", "user_code":"usuario123", "bonus_id":"ID_OPCIONAL" }

Inclua agent_code e agent_token em todas as chamadas. Erros: INVALID_BONUS_ID, spins deve ser um inteiro entre 1 e 10000, level deve ser um inteiro maior que zero, INVALID_USER (400); REQUEST_ALREADY_PROCESSED (409); FREESPIN_GAME_NOT_ELIGIBLE, INVALID_FREESPIN_LEVEL (422).

Considere sucesso somente com HTTP 2xx e "status": 1. Gere e persista request_id ou bonus_id antes do envio e reutilize a mesma chave ao repetir uma tentativa após timeout.

Consultar Giros Restantes (Aviatrix)

POST

Retorna quantos giros promocionais restam para o jogador. Sem bonus_id, consulta a concessão mais recente; se não houver, retorna sucesso com contadores zerados.

{
    "method": "freespin_remaining",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "user_code": "usuario123",
    "bonus_id": "ID_OPCIONAL"
}
{
    "status": 1,
    "msg": "SUCCESS",
    "provider": "AVIATRIX",
    "remaining": 5,
    "bet_count_limit": 5,
    "bet_count_placed": 0
}

Erro: INVALID_USER (400).

Bônus PGSoft

DisponívelPOST

Métodos de bônus em carteira da PGSoft. Todos exigem agent_code, agent_token e provider_code: "PGSOFT". Outro provedor retorna BONUS_NOT_SUPPORTED_FOR_PROVIDER (422).

{
    "method": "bonus_create",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "provider_code": "PGSOFT",
    "request_id": "bonus-2026-000001",
    "user_code": "usuario123",
    "game_code": "fortune-tiger",
    "amount": 10.00,
    "currency": "BRL",
    "rollover_multiplier": 5,
    "expires_in_days": 7,
    "bonus_type": 0,
    "non_discardable": true
}
CampoTipoObrigatórioLimite / regraDescrição
request_idstringSim8 a 128 — máx. 128 no provedorVira transaction_id/transfer_reference; garante idempotência.
user_codestringSim (create/assign/status)1 a 191Jogador do bônus.
game_codestring/arraySim (create)até 191 cadaAceita lista; os jogos devem ter a mesma aposta-base.
amountdecimalSim (create)> 0Valor do bônus.
rollover_multiplierdecimalNão≥ 0; padrão 1Multiplicador de rollover.
expires_in_daysinteiroNão≥ 1; padrão 7Validade em dias.
bonus_namestringNãoaté 100Nome da campanha.
bonus_typeinteiroNãopadrão 0Tipo de bônus da PGSoft.
non_discardablebooleanNãotrue / falseImpede descarte do bônus.
minimum_conversion_amountdecimalNão≥ 0Conversão mínima.
maximum_conversion_amountdecimalNão≥ 0Conversão máxima.
bonus_idinteiroSim (assign/cancel)—ID de campanha retornado pela PGSoft.
balance_idinteiroNão (cancel)—Cancela apenas o bônus do jogador.
flexiblebooleanNão (assign)true / falseAtiva o modo flexível por jogador.
statusinteiro/arrayNão (status)—Filtra por status.

Listar campanhas — bonus_games

{ "method":"bonus_games", "provider_code":"PGSOFT", "page_number":1, "row_count":500, "from_time":1700000000000, "to_time":1800000000000 }

Atribuir — bonus_assign

{ "method":"bonus_assign", "provider_code":"PGSOFT", "request_id":"bonus-2026-000002", "user_code":"usuario123", "bonus_id":10915 }

Consultar — bonus_status

{ "method":"bonus_status", "provider_code":"PGSOFT", "user_code":"usuario123" }

Cancelar — bonus_cancel

{ "method":"bonus_cancel", "provider_code":"PGSOFT", "bonus_id":10915, "user_code":"usuario123", "balance_id":134243099 }

Erros: BONUS_NOT_SUPPORTED_FOR_PROVIDER, INVALID_BONUS_RULES, INVALID_OR_INACTIVE_GAME, INVALID_AMOUNT (422); INVALID_USER (400). O bônus fica na carteira PGSoft até a conversão BonusToCash.

Abrir Jogo em Modo Demo

DisponívelPOST

Abre uma sessão demonstrativa sem movimentar o saldo real do jogador ou do agente. O agente precisa ter a permissão demo habilitada.

{
    "method": "game_launch_demo",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "user_code": "user123",
    "provider_code": "BGAMING",
    "game_code": "acceptance:test",
    "lang": "pt",
    "currency": "BRL"
}
{
    "status": 1,
    "msg": "SUCCESS",
    "launch_url": "https://provedor.exemplo/jogo-demo",
    "request_id": "req_..."
}

Erros: DEMO_NOT_ENABLED_FOR_AGENT (422), GAME_NOT_FOUND (404), GAME_LAUNCH_FAILED/PROVIDER_UNAVAILABLE (502).

Histórico de Jogo

POST

Consulta o histórico de transações do jogador em um intervalo de datas.

{
    "method": "get_game_log",
    "agent_code": "DEMO",
    "agent_token": "SEU_AGENT_TOKEN",
    "user_code": "usuario123",
    "start": "2026-10-01 00:00:00",
    "end": "2026-10-31 23:59:59",
    "perPage": 100
}
CampoTipoObrigatórioLimite / regraDescrição
user_codestringSim1 a 191Jogador consultado.
startstringSim—Data inicial (Y-m-d H:i:s).
endstringSim—Data final (Y-m-d H:i:s).
perPageinteiroSim≥ 1Máximo de registros retornados.

Resposta: {"status":1,"slot":[...]}. Retorna 404 quando o jogador não existe ou não há registros no período.

Sub-agentes

POST

Movimenta o saldo entre o agente autenticado e um sub-agente. Os três métodos usam subagent_code (até 191 caracteres).

Depositar

{ "method":"subagent_deposit", "subagent_code":"SUB01", "amount":500.00 }

Retirar

{ "method":"subagent_withdraw", "subagent_code":"SUB01", "amount":200.00 }

Resetar

{ "method":"subagent_reset", "subagent_code":"SUB01" }

Resposta: agent_balance e subagent_balance. Erros: INVALID_SUBAGENT, INSUFFICIENT_FUNDS (400). Inclua agent_code e agent_token em todas as chamadas.

Segurança das Notificações (Callbacks)

Para garantir a integridade das notificações enviadas pela Games2API (Seamless), valide o campo agent_secret em cada requisição recebida, usando comparação em tempo constante (hash_equals).

  • Responda somente com JSON e HTTP 200 quando a operação for aplicada.
  • Use txn_id como chave de idempotência; o mesmo txn_id pode chegar mais de uma vez.
  • Não devolva o saldo antes de persistir a transação.
  • O endpoint precisa ser HTTPS público; URLs privadas, com IP privado ou credenciais na URL são recusadas.
  • Timeouts: conexão de 10s e resposta de 30s. Falhas transitórias (502/503/504, DNS e TCP) são repetidas automaticamente apenas em leitura de saldo.

Importante: Nunca processe transações sem a validação da Secret Key em seu back-end.

Tabela de Códigos de Retorno

Código Significado Ação Recomendada
1 Sucesso absoluto Prosseguir com a operação
0 Erro (ver msg e error) Tratar conforme o HTTP e error.code
-1 Autenticação falhou (legado) Validar token e código do agente

Códigos HTTP e erros canônicos

HTTP Código Categoria Repetir? Significado
400INVALID_REQUESTclientNãoCampos obrigatórios, tipo ou limite inválido.
400INVALID_USERclientNãoJogador não pertence ao agente.
400INVALID_AGENT_TYPEclientNãoMétodo não disponível para o tipo de agente.
404GAME_NOT_FOUNDconfigurationNãoJogo/provedor inativo ou inexistente.
405METHOD_NOT_ALLOWEDclientNãoUse POST na raiz da API.
409INSUFFICIENT_USER_FUNDSbusinessNãoSaldo insuficiente — recusa normal de negócio.
409IDEMPOTENCY_CONFLICTintegrityNãoChave reutilizada com parâmetros diferentes.
409REQUEST_ALREADY_PROCESSEDintegrityNãobonus_id reutilizado com outros parâmetros.
422CURRENCY_NOT_SUPPORTEDconfigurationNãoMoeda não suportada pelo jogo.
422FREESPIN_NOT_SUPPORTED_FOR_PROVIDERconfigurationNãoIntegração sem suporte a concessão.
422FREESPIN_GAME_NOT_ELIGIBLEconfigurationNãoJogo não consome free spins.
422INVALID_FREESPIN_LEVELconfigurationNãoNível fora de available_levels.
422BONUS_NOT_SUPPORTED_FOR_PROVIDERconfigurationNãoBônus PGSoft com provedor diferente de PGSOFT.
429FREESPIN_RATE_LIMITEDtemporarySimLimite do provedor atingido.
500TRANSACTION_FAILEDintegrityNãoFalha ao registrar a transação.
502PROVIDER_UNAVAILABLE / UPSTREAM_ERRORtemporarySimProvedor indisponível ou resposta inválida.
503WALLET_UNAVAILABLE / ACCOUNT_UNAVAILABLEtemporarySimCarteira/conta temporariamente indisponível.
504UPSTREAM_TIMEOUTtemporarySimTempo limite ao consultar o provedor.

Em falhas repetíveis, aguarde error.retry_after_ms (3s a 15s). Para concessões, reenvie com o mesmo request_id/bonus_id; para transações, o mesmo txn_id.