Carteiras estáticas
Endereços de depósito permanentes vinculados a um pedido ou usuário específico, ideais para pagamentos recorrentes e de longo prazo.
Carteiras estáticas são endereços permanentes para receber pagamentos em criptomoedas. Elas são vinculadas a um order_id específico e são únicas pela combinação de project_id + order_id + currency + network.
Use carteiras estáticas para:
- Depósitos recorrentes do mesmo usuário
- Endereços de pagamento de longo prazo exibidos no perfil de um usuário
- Fluxos de depósito de alto volume em que se deseja um endereço estável por usuário
Criar carteira estática
/v1/static-walletParâmetros da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
currency | string | sim | Criptomoeda (USDT, BTC, ETH, etc.) |
network | string | sim | Código da rede |
order_id | string | sim | Seu ID de pedido/usuário (até 255 caracteres) |
label | string | não | Rótulo da carteira (até 255 caracteres) |
url_callback | string | sim | URL para notificações de webhook |
invite_code | string | não | Código do indicador |
Exemplo de requisição
{
"currency": "USDT",
"network": "TRX-TRC20",
"order_id": "USER-123",
"label": "User deposit #123",
"url_callback": "https://your-site.com/webhook/static"
}Exemplo de resposta
{
"state": 0,
"result": {
"uuid": "019b2265-34d8-7001-a230-8f97de90d481",
"address": "TXYZabc123...",
"currency": "USDT",
"network": "TRX-TRC20",
"label": "User deposit #123",
"order_id": "USER-123",
"status": "active",
"url": "https://go.2328.io/static/019b2265-34d8-7001-a230-8f97de90d481",
"created_at": "2026-01-20T12:00:00Z",
"qr": "data:image/png;base64,iVBORw0..."
}
}Informações da carteira
Obtenha informações da carteira estática por uuid ou address.
/v1/static-wallet/infoParâmetros da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
uuid | string | sim* | UUID da carteira estática |
address | string | sim* | Endereço blockchain da carteira |
Pelo menos um entre uuid e address é obrigatório.
Exemplo de resposta
{
"state": 0,
"result": {
"uuid": "019b2265-34d8-7001-a230-8f97de90d481",
"address": "TXYZabc123...",
"currency": "USDT",
"network": "TRX-TRC20",
"status": "active",
"total_received": "1250.50",
"transactions_count": 3,
"created_at": "2026-01-20T12:00:00Z",
"qr": "data:image/png;base64,iVBORw0..."
}
}total_received— soma de todos os depósitos recebidos por esta carteira, emcurrency.transactions_count— número de depósitos recebidos até o momento.qr— data URI em base64 do QR code do endereço de depósito (sempre presente em carteiras estáticas, pois o endereço é atribuído na criação).
Lista de carteiras
/v1/static-wallet/listParâmetros da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
status | string | não | Filtrar por status (active, inactive) |
currency | string | não | Filtrar por moeda |
network | string | não | Filtrar por rede |
order_id | string | não | Filtrar por order_id |
page | int | não | Número da página (padrão: 1) |
per_page | int | não | Itens por página (padrão: 20, máx.: 100) |
Exemplo de resposta
{
"state": 0,
"result": {
"items": [
{
"uuid": "019b2265-...",
"address": "TXYZabc123...",
"currency": "USDT",
"network": "TRX-TRC20",
"status": "active",
"total_received": "1250.50",
"transactions_count": 3
}
],
"paginate": {
"count": 1,
"current_page": 1,
"per_page": 20,
"total": 1,
"total_pages": 1,
"has_more": false
}
}
}Habilitar / desabilitar carteira
Alterne se uma carteira estática aceita novos pagamentos.
/v1/static-wallet/disable/v1/static-wallet/enableRequisição
Ambos os endpoints recebem um único parâmetro:
{
"uuid": "019b2265-34d8-7001-a230-8f97de90d481"
}Exemplo de resposta
{
"state": 0,
"result": {
"uuid": "019b2265-34d8-7001-a230-8f97de90d481",
"status": "inactive",
"message": "Static wallet disabled successfully"
}
}Para enable, status é "active" e message é "Static wallet enabled successfully".
Transações da carteira
Obtenha a lista de todos os depósitos recebidos por uma carteira estática.
/v1/static-wallet/transactionsParâmetros da requisição
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
uuid | string | sim | UUID da carteira estática |
date_from | date | não | Data inicial (YYYY-MM-DD) |
date_to | date | não | Data final (YYYY-MM-DD) |
page | int | não | Número da página (padrão: 1) |
per_page | int | não | Itens por página (padrão: 15, máx.: 5000) |
Exemplo de resposta
{
"state": 0,
"result": {
"items": [
{
"uuid": "abc123-def456-...",
"order_id": "USER-123",
"amount": "100.00",
"currency": "USDT",
"payment_status": "paid",
"txid": "0xabc123def456...",
"fee_amount": "3.00",
"net_amount": "97.00",
"created_at": "2026-01-20T15:30:00Z"
}
],
"paginate": {
"count": 1,
"hasPages": true,
"perPage": 15,
"page": 1
}
}
}fee_amount— taxa da plataforma deduzida deste depósito, emcurrency.net_amount— valor creditado no saldo do comerciante após a taxa.
Webhooks de carteiras estáticas
Quando um pagamento é recebido em uma carteira estática, o sistema envia um webhook para url_callback.
O formato do webhook das carteiras estáticas difere dos webhooks de pagamento comuns. Notavelmente, os webhooks de carteira estática incluem um campo merchant_amount que você deve usar para o crédito.
Payload do webhook
{
"uuid": "a28b293f-5c76-4053-8062-ae9ca4ab784b",
"order_id": "USER-7666308594",
"amount": "10.00000000",
"currency": "USDT",
"amount_usd": "10.00000000",
"exchange_rate": "1.00000000",
"payer_currency": "USDT",
"payer_amount": "10.00000000",
"network": "TRX-TRC20",
"address": "TMU9Tgpchvgbywkbj5SdC8KJS73t5m3M7G",
"payment_status": "paid",
"txid": "8369ede26a0da05b1bae154b4bb4072eb2453db30ba86b21831902670929454f",
"tx_explorer_url": "https://tronscan.org/#/transaction/8369ede26a0da05b1bae154b4bb4072eb2453db30ba86b21831902670929454f",
"payment_amount": "10.00000000",
"merchant_amount": "9.920000000000000000",
"created_at": "2026-05-09T16:13:04+03:00",
"sign": "dd958d1405febce670a9a196e9141784b9f2a5f39cd6d1832d6f3f68d0de1e10"
}Webhooks de carteira estática não incluem url ou expires_at (já que o endereço é permanente, não uma sessão). Eles incluem exchange_rate e created_at.
Referência de campos
| Campo | Tipo | Descrição |
|---|---|---|
uuid | string | UUID da transação (fatura) deste depósito |
order_id | string | O order_id da sua carteira estática |
amount | decimal (8 dp) | Valor em cripto recebido |
currency | string | Cripto recebida (corresponde ao currency da carteira) |
amount_usd | decimal (8 dp) | Valor em USD no momento do recebimento |
exchange_rate | decimal | Taxa cripto / USD utilizada |
payer_currency | string | Igual a currency para carteiras estáticas |
payer_amount | decimal (8 dp) | Igual a amount para carteiras estáticas |
network | string | Rede blockchain |
address | string | Endereço da carteira estática |
payment_status | string | Status atual do dep?sito; normalmente paid, mas AML pode produzir aml_lock, que n?o deve ser creditado automaticamente |
txid | string | Hash da transação na blockchain |
tx_explorer_url | string | null | URL da transação no explorador de blockchain. É null quando não há txid ou a transferência é P2P interna. |
payment_amount | decimal (8 dp) | Igual a amount |
merchant_amount | decimal (18 dp) | Valor após dedução da taxa — use este para creditar |
created_at | string (ISO 8601) | Quando o depósito foi recebido |
sign | string (hex) | Assinatura HMAC-SHA256 do payload |
Boas práticas
order_idúnico — Use umorder_idúnico para cada usuário ou pedido- Idempotência — Verifique
txidantes de processar para evitar créditos duplicados - Verifique assinaturas — SEMPRE verifique a assinatura
signantes de creditar fundos - Use
merchant_amount— Credite usuários com base emmerchant_amount, não empayment_amount
Ciclo de vida e idempotência
Uma carteira estática é uma identidade de depósito reutilizável, não uma fatura. Ela não tem valor esperado e não possui expiração. Um endereço pode gerar qualquer número de transações de depósito ao longo de sua vida útil.
A criação é idempotente para o mesmo projeto do comerciante, order_id, currency e network: a carteira existente é retornada. Mantenha essa tupla estável e persista a carteira retornada uuid; não use um novo order_id cada vez que o mesmo cliente abrir a tela de depósito.
A idempotência do depósito é diferente da idempotência da carteira:
order_ididentifica o mapeamento reutilizável carteira/cliente;- carteira
uuididentifica o registro permanente da carteira; - webhook
uuididentifica uma transação de depósito detectada; txididentifica a transferência on-chain e é a chave principal de deduplicação para crédito.
Use uma restrição de unicidade no banco de dados para a identidade processada chain/network/txid e reivindique-a na mesma transação que credita o saldo interno do cliente.
Habilitar e desabilitar semânticas
Desabilitar uma carteira impede que a aplicação a processe como um destino de depósito ativo; isso não apaga o endereço ou seu histórico e não pode impedir uma transferência blockchain já enviada por um usuário.
Nunca diga aos usuários que fundos enviados para um endereço inativo são automaticamente devolvidos. As transferências em blockchain são irreversíveis. Desative apenas após remover o endereço da sua interface e mantenha um procedimento operacional de recuperação para depósitos tardios.
Reativar preserva a mesma identidade e endereço da carteira. Não crie uma substituição apenas para alterar o rótulo; rótulos não são identificadores de liquidação.
Casos de borda de carteira estática
| Situação | Tratamento correto |
|---|---|
| Solicitação de criação duplicada | Aceite a carteira existente retornada e verifique seu tuplo persistido em vez de esperar um novo endereço. |
| Múltiplos depósitos em um endereço | Crie uma linha de depósito local separada para cada transação uuid/txid; nunca marque a própria carteira como “paga.” |
| Webhook duplicado | Retorne HTTP 200 após encontrar o txid já confirmado; nunca credite novamente. |
| Atraso na confirmação ou reobservação da cadeia | Mantenha o processamento idempotente e reconcilie a partir de /v1/static-wallet/transactions. |
| Depósito abaixo de um mínimo de auto-conversão | Espere crédito da moeda de origem sem bloco convert concluído. |
| Auto-conversão bem-sucedida | Armazene os valores de pagamento de origem e o resultado de destino convert separadamente. |
| Token errado ou rede errada | Não fabrique um crédito. Registre evidências e encaminhe para suporte/recuperação, pois a recuperabilidade é específica da cadeia. |
| Cadeia baseada em memo/tag | Exiba e valide todos os campos de destino retornados pela plataforma; apenas um endereço pode ser insuficiente quando um memo é necessário. |
| Bloqueio AML | Não credite o usuário final até que o status autorizado seja liberado pelo processo de conformidade. |
| Carteira desativada após exibição do endereço | Remova-a da interface do usuário imediatamente, mas continue monitorando alertas operacionais para transferências tardias. |
Modelo de reconciliação
Execute um trabalho periódico que percorra /v1/static-wallet/transactions, atualize depósitos por txid e compare seus merchant_amount, status e resultado de conversão opcional com seu livro razão interno. A entrega via webhook deve tornar a reconciliação rápida, mas a reconciliação deve torná-la completa.