Skip to content

Crypto Wallets

Todos los endpoints requieren Authorization: Bearer <token> y están acotados al tenant (clientId) resuelto desde OAuth.

Visión general

La API de Crypto Wallets permite generar billeteras blockchain custodiadas, recibir depósitos, transferir y consultar saldo e historial onchain.

La creación de billetera es por familia de chain: EVM, BTC, TRON, SOLANA, XRPL — una billetera EVM (una sola dirección) sirve para ETHEREUM, POLYGON y BSC. Para saldo, historial y transferencia se indica la red específica (ETHEREUM, POLYGON, BSC, BITCOIN, TRON, SOLANA, XRPL), ya que los tokens viven por red.

Flujos principales:

  1. Crear billetera (POST /v1/crypto/wallets) o una dirección de checkout (POST /v1/crypto/checkout/address, forward wallet con barrido automático).
  2. Recibir un depósito — el proveedor notifica vía webhook; el evento crypto-cash-in se reenvía a tu webhook registrado.
  3. Consultar saldo (/balance) e historial (/history).
  4. Transferir / cash-out (POST /v1/crypto/transfer).

POST /v1/crypto/wallets

Crea una billetera custodiada para la familia de chain indicada y la registra bajo el tenant.

Headers:

HeaderValue
AuthorizationBearer <token>
Content-Typeapplication/json

Request Body:

json
{
  "network": "EVM",
  "userId": "user-123",
  "isForwardPayment": 0
}
FieldTypeRequiredDescription
networkstringYesFamilia de chain: EVM | BTC | TRON | SOLANA | XRPL
userIdstringNoReferencia de tu usuario (aísla la billetera dentro del tenant)
isForwardPaymentintegerNo1 crea una forward wallet (checkout) que barre los fondos recibidos

Response 200 OK:

json
{
  "message": "Wallet created",
  "data": {
    "walletId": "a1b2c3d4-0000-0000-0000-000000000000",
    "address": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
    "network": "EVM",
    "coin": "EVM",
    "isForwardPayment": 0
  }
}

POST /v1/crypto/checkout/address

Crea una dirección de depósito de checkout (forward wallet). Los fondos recibidos se barren automáticamente a la billetera maestra y disparan el webhook crypto-cash-in.

Request Body:

json
{
  "network": "EVM",
  "reference": "order-9911"
}
FieldTypeRequiredDescription
networkstringYesFamilia de chain: EVM | BTC | TRON | SOLANA | XRPL
referencestringNoTu referencia (ej.: id del pedido)

Response 200 OK:

json
{
  "message": "Checkout address created",
  "data": {
    "address": "0x1122334455667788990011223344556677889900",
    "network": "EVM",
    "reference": "order-9911"
  }
}

GET /v1/crypto/wallets

Lista las billeteras del tenant.

Query Parameters:

ParameterTypeRequiredDescription
networkstringNoFiltra por familia de chain
statusstringNoFiltra por estado
limitintegerNoTamaño de página
offsetintegerNoDesplazamiento

Response 200 OK:

json
{
  "message": "Success",
  "data": [
    {
      "id": "a1b2c3d4-0000-0000-0000-000000000000",
      "clientId": "tenant-1",
      "network": "EVM",
      "address": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
      "coin": "EVM",
      "status": "ACTIVE",
      "isForwardPayment": 0,
      "createdAt": "2026-06-06T12:00:00.000Z"
    }
  ]
}

GET /v1/crypto/wallets/{address}/balance

Saldo nativo y de tokens de una billetera.

Query Parameters:

ParameterTypeRequiredDescription
networkstringYesRed específica: ETHEREUM | POLYGON | BSC | BITCOIN | TRON | SOLANA | XRPL
tokenAddressstringNoDirección del contrato del token (filtra el saldo)

Response 200 OK:

json
{
  "message": "Success",
  "data": [
    {
      "address": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
      "asset": "MATIC",
      "decimals": 18,
      "balance": "12.5",
      "type": "native"
    },
    {
      "address": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
      "asset": "USDT",
      "decimals": 6,
      "balance": "1000.00",
      "tokenAddress": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f"
    }
  ]
}

GET /v1/crypto/wallets/{address}/history

Historial de transacciones onchain de una billetera.

Query Parameters:

ParameterTypeRequiredDescription
networkstringYesRed específica: ETHEREUM | POLYGON | BSC | BITCOIN | TRON | SOLANA | XRPL
pageintegerNoPágina (0-based)
pageSizeintegerNoTamaño de página (default 50)
tokenAddressstringNoFiltra por contrato de token

Response 200 OK:

json
{
  "message": "Success",
  "data": [
    {
      "chain": "polygon-mainnet",
      "hash": "0xabc123...",
      "address": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
      "blockNumber": 58123456,
      "amount": "1000.00",
      "transactionSubtype": "incoming",
      "counterAddress": "0x4444...",
      "timestamp": 1749200000000
    }
  ]
}

POST /v1/crypto/transfer

Envía una transferencia onchain desde una billetera (cash-out).

Request Body:

json
{
  "network": "POLYGON",
  "fromAddress": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
  "to": "0x4444555566667777888899990000aaaabbbbcccc",
  "amount": "10.5",
  "tokenAddress": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
  "decimals": 6
}
FieldTypeRequiredDescription
networkstringYesRed específica: ETHEREUM | POLYGON | BSC | BITCOIN | TRON | SOLANA | XRPL
fromAddressstringYesDirección de origen
tostringYesDirección de destino
amountstringYesMonto (decimal en string)
tokenAddressstringNoContrato del token (transferencia de token)
decimalsintegerNoDecimales del token

Response 200 OK:

json
{
  "message": "Success",
  "data": {
    "txHash": "0xabc123..."
  }
}

Depósitos (webhook)

Los depósitos recibidos en las billeteras se entregan a tu webhook como el evento crypto-cash-in. Registra tu webhook y consulta el modelo de datos en la sección Webhooks.