Decisão, limites e regras

Para: Dev · Fin — Conferido em 2026-10-18.

Toda criação de depósito e de saque passa pelo motor de regras da sua operação. O resultado é um de três: automático (segue), revisão (uma pessoa decide) ou bloqueio (recusa na hora, com 422). Esta página explica a ordem da decisão, o catálogo de motivos (decision.reasons) e cada família de limite. Os valores dos limites são da sua operação: leia-os em GET /v1/rules.

O que é

Resultado Quando O que você recebe
Automático Nenhuma regra de bloqueio nem de revisão disparou, e o horário permite Saque approved (segue para o envio) ou depósito criado normalmente
Revisão Alguma regra de revisão disparou Saque under_review com decision.reasons; depósito pago under_review com review_reasons
Bloqueio Alguma regra de bloqueio disparou 422 sem criar objeto. Devolva a reserva ao jogador

Um quarto resultado existe só no saque: aguardar. O saque é aprovado, mas está fora do horário do automático (outside_policy igual a defer). Ele fica approved e espera a abertura (veja Dia, fuso e horários).

Quando usar

Use esta página para:

  • traduzir decision.reasons em mensagem de suporte (nunca ao jogador);
  • decidir o que pedir ao Dracma quando os limites da operação ficarem apertados ou frouxos;
  • montar a pré-checagem do seu conector, que só pode endurecer a decisão.

Nunca revele ao jogador o motivo de uma revisão ou bloqueio: o suporte vê, o jogador não. Mostre uma mensagem genérica.

Como funciona

Ordem da decisão

flowchart TD A["Pedido de saque"] --> B{"Regra de bloqueio?<br/>valor, documento, listas,<br/>titular, janela dura, caixa"} B -->|"sim, a primeira que bater"| C["422, sem objeto"] B -->|"não"| D["Avalia TODAS as regras de revisão"] D --> E{"Algum motivo?"} E -->|"sim"| F["under_review<br/>com todos os motivos"] E -->|"não"| G{"Dentro do horário<br/>do automático?"} G -->|"sim"| H["approved, envia"] G -->|"não, defer"| I["approved, espera abrir"]
  • As regras de bloqueio rodam em ordem fixa e param na primeira: o 422 traz um único code.
  • As regras de revisão rodam todas: decision.reasons traz todos os motivos que se aplicam, sem repetir, na ordem do catálogo.
  • Se um valor igual ou acima do limite de dupla aprovação (ou um motivo que exija duas pessoas) aparecer, entra DUAL_APPROVAL_REQUIRED e a revisão precisa de dois revisores. Caso contrário, basta um.
  • O depósito segue um caminho mais curto: valor mínimo e máximo, documento, lista de bloqueio, janela de depósitos e depósitos não pagos. As revisões do depósito acontecem quando o pagamento chega (veja Ciclo do depósito).

Recusas síncronas (422)

code do 422 Motivo interno Quando
amount_below_minimum AMOUNT_BELOW_MINIMUM Abaixo do mínimo da operação
amount_above_maximum AMOUNT_ABOVE_MAXIMUM Acima do máximo da operação
document_invalid DOCUMENT_INVALID CPF ou CNPJ com dígito errado
document_mismatch PLAYER_DOCUMENT_CHANGED, DOCUMENT_MISMATCH Documento diferente do já fixado para o jogador, ou chave PIX de outro titular
player_blocked PLAYER_BLOCKED Jogador (documento, referência, IP ou device) em lista de bloqueio
destination_blocked DESTINATION_BLOCKED Chave PIX em lista de bloqueio
velocity_exceeded VELOCITY_HARD_LIMIT, WINDOW_HARD_LIMIT, DEPOSIT_WINDOW_EXCEEDED, DEPOSIT_VELOCITY_UNPAID Limite duro de janela ou de velocidade, no saque ou no depósito
insufficient_operation_balance INSUFFICIENT_OPERATION_BALANCE O caixa livre da operação não cobre o saque

Nunca revele ao jogador que ele está em uma lista. A mesma Idempotency-Key repete o mesmo 422; para tentar de novo, use external_id e chave novos (veja Idempotência).

Catálogo de decision.reasons

Os códigos são estáveis e só crescem. Um código desconhecido deve ser tratado como "revisão", sem efeito de dinheiro. Tipo R é revisão (under_review); B é bloqueio (rejected ou 422).

Código Tipo Significado para o operador
AUTO_MULTIPLIER_EXCEEDED R O saque, somado aos anteriores (inclusive pendentes), passa de X vezes o que o jogador depositou e o Dracma liquidou
NO_SETTLED_DEPOSIT R O jogador não tem depósito liquidado pelo Dracma nesta moeda
AUTO_DISABLED R Automático desligado na moeda (multiplicador zero)
OPERATION_AUTO_SUSPENDED R Automático suspenso na operação inteira (interruptor de emergência)
AUTO_MAX_PER_WITHDRAWAL_EXCEEDED R Acima do teto do automático por saque
FIRST_WITHDRAWAL R Primeiro saque pago do jogador na operação: sempre humano, se a operação assim configurou
OPERATOR_REVIEW_REQUESTED R Você enviou review_requested: true ou review_reasons
OWNERSHIP_UNVERIFIED R Titularidade da chave não confirmada. Inclui saque sem player.ip
DICT_UNAVAILABLE R Consulta da chave PIX indisponível por mais de cerca de 5 minutos
BALANCE_UNAVAILABLE R O caixa da operação não pôde ser lido (livro fora do ar): na dúvida, revisão
RULES_UNAVAILABLE, RULES_INVALID_RESPONSE R O motor de regras estava fora ou devolveu resposta incoerente: na dúvida, revisão
WINDOW_DAY_AMOUNT_EXCEEDED, WINDOW_DAY_COUNT_EXCEEDED R Soma ou quantidade de saques do jogador no dia civil passou do limiar de revisão
WINDOW_7D_AMOUNT_EXCEEDED, WINDOW_7D_COUNT_EXCEEDED R Idem, na janela móvel de 7 dias
WINDOW_30D_AMOUNT_EXCEEDED, WINDOW_30D_COUNT_EXCEEDED R Idem, na janela móvel de 30 dias
VELOCITY_WITHDRAWALS R Muitos pedidos em pouco tempo
PIX_KEY_CHANGED R Chave PIX nova para o jogador, ou ainda em carência
DESTINATION_CHANGED R Idem para destinos que não são PIX
NEW_CONTEXT R Acompanha PIX_KEY_CHANGED: IP ou device nunca vistos para o jogador
DESTINATION_CHURN R Destinos distintos demais em 30 dias
SHARED_DESTINATION R A mesma chave PIX aparece em saques de jogadores diferentes
SHARED_DOCUMENT R O mesmo documento aparece em mais de uma referência de jogador
IP_LISTED, DEVICE_LISTED R IP ou device do jogador em lista de revisão
VIP_LIMIT_EXCEEDED R Jogador VIP passou do limite próprio
OPERATION_AUTO_CAP_EXCEEDED R Teto agregado de saques automáticos da operação atingido
OUTSIDE_AUTO_HOURS R Fora do horário do automático, com política review
DUAL_APPROVAL_REQUIRED R Valor ou motivo que exige duas pessoas
AML_STRUCTURING R Fracionamento de valores que lembra evasão de limite de reporte
AML_RAPID_TURNAROUND R Saque logo depois de um depósito, de forma repetida
AML_NO_PLAY_REPORTED R Você informou resultado de jogo igual a zero com depósitos
AML_SHARED_PAYER, AML_MANY_PAYERS R Pagador compartilhado entre jogadores, ou muitos pagadores para um jogador
DOCUMENT_MISMATCH B Chave PIX de outro titular descoberta depois do 201: o saque vai a rejected
PLAYER_BLOCKED, DESTINATION_BLOCKED B Lista atualizada antes do envio: o saque vai a rejected
BLOCKLIST_HIT_AT_DISPATCH B Lista bateu no momento do envio de um saque approved: vai a cancelled
OP:<texto> Nenhum Só exibição: os seus review_reasons, com prefixo

Códigos fora do catálogo de regras

BALANCE_UNAVAILABLE, RULES_UNAVAILABLE e RULES_INVALID_RESPONSE são extensões: aparecem em decision.reasons quando o Dracma não consegue avaliar uma regra, e nunca liberam o saque. Os critérios que levam aos códigos de AML não são publicados.

Para o depósito, os motivos de revisão são PAYER_MISMATCH, PAYER_UNKNOWN, PAYER_BLOCKED, AMOUNT_MISMATCH, PAID_AFTER_EXPIRY, RULES_UNAVAILABLE e RULES_INVALID_RESPONSE. Veja Ciclo do depósito.

Quais limites existem

Cada operação tem um conjunto de regras versionado, lido em GET /v1/rules (com ETag). Os limites abaixo existem por moeda.

Os valores são da sua operação

Os valores de partida de uma operação nova não são publicados neste guia. Eles são ajustáveis e mudam por operação. A fonte da verdade é GET /v1/rules. Use GET /v1/players/{ref}/limits para ver a posição de um jogador.

Campo O que limita
deposit_min, deposit_max Valor mínimo e máximo de um depósito
withdrawal_min, withdrawal_max Valor mínimo e máximo de um saque
auto_max_per_withdrawal Maior saque que sai no automático
auto_max_per_day Soma diária que o automático libera por jogador
max_withdrawals_per_day Quantos saques por dia o jogador faz no automático
dual_approval_above Valor a partir do qual a revisão exige duas pessoas
auto_multiplier O X do automático (veja abaixo)
windows.day, windows.d7, windows.d30 Janelas de revisão e duras de saque
deposit_windows.day, deposit_windows.d30 Janelas duras de depósito
velocity Quantidade de saques e de depósitos não pagos por intervalo de minutos
operation_auto_cap Teto agregado do automático da operação, por hora e por dia
first_withdrawal_manual Se o primeiro saque pago de cada jogador vai sempre para revisão
pix_key_change_cooldown_hours Carência de uma chave PIX nova
destination.max_distinct_30d Destinos distintos permitidos por jogador em 30 dias

Janelas: revisão e duras

Cada janela de saque (dia, 7 dias, 30 dias) tem dois níveis:

Nível Efeito Códigos
Revisão O saque vai a under_review WINDOW_*_AMOUNT_EXCEEDED, WINDOW_*_COUNT_EXCEEDED
Duro 422 velocity_exceeded WINDOW_HARD_LIMIT
  • O "dia" é o dia civil no fuso da operação. As janelas de 7 e 30 dias são móveis (168 e 720 horas). Veja Dia, fuso e horários.
  • No dia, se auto_max_per_day e windows.day.review_amount estiverem ambos definidos, vale o menor; o mesmo vale para a contagem (max_withdrawals_per_day e windows.day.review_count).
  • A velocidade (velocity) conta pedidos num intervalo de minutos: VELOCITY_WITHDRAWALS leva à revisão e VELOCITY_HARD_LIMIT, ao 422. Para depósito, DEPOSIT_VELOCITY_UNPAID limita depósitos criados e não pagos num intervalo. Os valores são da operação.
  • Para depósitos, DEPOSIT_WINDOW_EXCEEDED aplica o limite duro das janelas deposit_windows. Elas vêm desligadas por padrão.

O X do automático

O automático libera um saque só se, depois dele, o total sacado não passa de X vezes o total depositado e liquidado:

(S + W) <= D * X
Letra Significa
D Soma dos depósitos paid do jogador nesta moeda, liquidados pelo Dracma. Se a operação define auto_multiplier_window_days, só os pagos nessa janela contam
S Soma dos saques anteriores do jogador que não terminaram em rejected, failed ou cancelled: inclui os pendentes, os pagos e os returned
W O saque atual
X O auto_multiplier da moeda ("0" desliga o automático)

Exemplo com X = 1: o jogador depositou R$ 100,00. Um saque de R$ 80,00 passa. O seguinte, de R$ 30,00, soma R$ 110,00 e vai a revisão com AUTO_MULTIPLIER_EXCEEDED.

Consequências para quem migra jogadores de outro sistema:

  • Só conta depósito liquidado pelo Dracma. Depósitos antigos feitos fora do Dracma não entram em D.
  • Um jogador sem depósito paid no Dracma recebe NO_SETTLED_DEPOSIT no primeiro saque: ele vai para revisão, mesmo que tenha saldo no seu sistema.
  • Nenhum ajuste de D é feito pela API. Planeje que o primeiro saque de cada jogador migrado passe por revisão, ou combine uma regra com o Dracma no onboarding.

Teto agregado da operação

operation_auto_cap limita quanto o automático libera na operação inteira, por hora e por dia (moeda a moeda). Quando um saque faria a soma passar do teto, ele vai a revisão com OPERATION_AUTO_CAP_EXCEEDED. O efeito é coletivo: enquanto o teto estiver estourado, todos os jogadores recebem revisão nos saques seguintes, até a hora ou o dia virar. Os valores estão em GET /v1/rules.

Interruptor de emergência

A operação pode suspender o automático inteiro. Com ele suspenso, todo saque vai a under_review com OPERATION_AUTO_SUSPENDED. O interruptor é acionado no painel ("Suspender automático") e é uma mudança que endurece a regra, então vale na hora. Reativar é uma mudança que afrouxa a regra e segue o fluxo de aprovação. Veja Painel: regras e listas.

Pré-checagem do seu conector

O seu conector pode endurecer a decisão, nunca afrouxá-la. Dois campos do POST /v1/withdrawals fazem isso:

Campo Efeito
review_requested Com true, o saque vai sempre a revisão (OPERATOR_REVIEW_REQUESTED).
review_reasons Texto livre dos seus motivos. Aparecem no painel com o prefixo OP: e não viram código do Dracma.
player_context total_deposited, total_withdrawn, account_created_at, net_gaming_result. É informativo e nunca libera o automático.

Exemplo de uso: o seu sistema marca review_requested quando o jogador tem bônus ativo, quando há suspeita de fraude ou quando a conta é muito nova. O Dracma não conhece essas regras do seu negócio.

Bônus e regras comerciais ficam fora da API

Regras de bônus do operador não vão ao Dracma. Só o valor e os dados do jogador entram no pedido. Marque review_requested se quiser que uma pessoa olhe.

{
  "id": "wdr_0192a3b40c6d7e8f9a0b1c2d3e4f5a6d",
  "external_id": "wdr_0192a3b4-5c6d-7e8f-9a0b-1c2d3e4f5a6d",
  "status": "under_review",
  "version": 1,
  "amount": { "amount": "5000", "currency": "BRL" },
  "fee": null,
  "method": "pix",
  "player_ref": "0192a3b4-0000-7000-8000-000000000001",
  "decision": {
    "mode": "manual",
    "reasons": ["FIRST_WITHDRAWAL", "PIX_KEY_CHANGED", "NEW_CONTEXT"],
    "ruleset_version": 7,
    "decided_by": [],
    "decided_at": null
  },
  "psp_reference": null,
  "failure_code": null,
  "created_at": "2026-10-18T15:00:00Z",
  "updated_at": "2026-10-18T15:00:00Z",
  "paid_at": null
}

Exemplos

GET /v1/players/{ref}/limits?currency=BRL mostra a posição de um jogador: total_deposited, total_withdrawn, auto_multiplier, auto_withdrawal_remaining e blocked. auto_withdrawal_remaining é o quanto ainda cabe no X; outras regras (primeiro saque, chave nova, janelas, IP ausente) ainda podem mandar o saque para revisão. A forma da resposta está em Referência: limites do jogador e saldos.

Erros e casos de borda

  • Motor de regras fora do ar na criação do saque. Não é 503: o saque é criado em under_review com RULES_UNAVAILABLE. Mantenha a reserva. No depósito, o motor fora devolve 503.
  • player.ip e player.device_id entram no risco. O IP é por saque (o IP do jogador no momento do pedido, nunca o do seu servidor); o PSP de saque exige o IP do titular, e sem ele o saque vai a under_review com OWNERSHIP_UNVERIFIED. No depósito o IP é opcional. O device_id entra nas listas de device e no NEW_CONTEXT. Mande os dois sempre que souber.
  • Limites de taxa por jogador. Além das regras, a API limita pedidos por jogador (depósitos e saques por hora). Veja Limites e quotas.
  • Mudar um limite. A API do operador não altera regra diretamente. POST /v1/rules/change-requests (escopo rules:propose) cria um pedido que responde 202 pending_approval e só vale depois de aprovado no painel. Mudanças que apertam a regra valem na hora; as que afrouxam esperam aprovação e um tempo de espera. Veja Referência: regras e Painel: regras e listas.

Veja também