Skip to content

Crypto Wallets ​

All endpoints require Authorization: Bearer <token> and the x-client-id: <Client_ID> header — your tenant id is the same value as your OAuth Client_ID (details); without it requests fail with 400 MISSING_CLIENT_ID. Wallets are scoped to your tenant.

Overview ​

The Crypto Wallets API lets you generate custodial blockchain wallets, receive deposits, transfer, and query onchain balance and history.

Wallet creation is by chain family: EVM, BTC, TRON, SOLANA, XRPL — a single EVM wallet (one address) serves ETHEREUM, POLYGON and BSC. For balance, history and transfer you pass the specific network (ETHEREUM, POLYGON, BSC, BITCOIN, TRON, SOLANA, XRPL), since tokens live per network.

Main flows:

  1. Create a wallet (POST /v1/crypto/wallets) or a checkout address (POST /v1/crypto/checkout/address, a forward wallet that auto-sweeps).
  2. Receive a deposit — the provider notifies via webhook; the crypto-cash-in event is re-delivered to your registered webhook.
  3. Query balance (/balance) and history (/history).
  4. Transfer / cash-out (POST /v1/crypto/transfer).

POST /v1/crypto/wallets ​

Creates a custodial wallet for the given chain family and registers it under the tenant.

Headers:

HeaderValue
AuthorizationBearer <token>
Content-Typeapplication/json

Request Body:

json
{
  "network": "EVM",
  "userId": "user-123",
  "isForwardPayment": 0
}
FieldTypeRequiredDescription
networkstringYesChain family: EVM | BTC | TRON | SOLANA | XRPL
userIdstringNoYour user reference (isolates the wallet within the tenant)
isForwardPaymentintegerNo1 creates a forward (checkout) wallet that sweeps received funds

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 ​

Creates a checkout deposit address (forward wallet). Received funds are auto-swept to the master wallet and trigger the crypto-cash-in webhook.

Request Body:

json
{
  "network": "EVM",
  "reference": "order-9911"
}
FieldTypeRequiredDescription
networkstringYesChain family: EVM | BTC | TRON | SOLANA | XRPL
referencestringNoYour reference (e.g. order id)

Response 200 OK:

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

GET /v1/crypto/wallets ​

Lists the tenant's wallets.

Query Parameters:

ParameterTypeRequiredDescription
networkstringNoFilter by chain family
statusstringNoFilter by status
limitintegerNoPage size
offsetintegerNoOffset

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 ​

Native and token balances of a wallet.

Query Parameters:

ParameterTypeRequiredDescription
networkstringYesSpecific network: ETHEREUM | POLYGON | BSC | BITCOIN | TRON | SOLANA | XRPL
tokenAddressstringNoToken contract address (filters the balance)

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 ​

Onchain transaction history of a wallet.

Query Parameters:

ParameterTypeRequiredDescription
networkstringYesSpecific network: ETHEREUM | POLYGON | BSC | BITCOIN | TRON | SOLANA | XRPL
pageintegerNoPage (0-based)
pageSizeintegerNoPage size (default 50)
tokenAddressstringNoFilter by token contract

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 ​

Submits an onchain transfer from a wallet (cash-out).

Request Body:

json
{
  "network": "POLYGON",
  "fromAddress": "0x9f8e7d6c5b4a39281706f5e4d3c2b1a098765432",
  "to": "0x4444555566667777888899990000aaaabbbbcccc",
  "amount": "10.5",
  "tokenAddress": "0xc2132d05d31c914a87c6611c10748aeb04b58e8f",
  "decimals": 6
}
FieldTypeRequiredDescription
networkstringYesSpecific network: ETHEREUM | POLYGON | BSC | BITCOIN | TRON | SOLANA | XRPL
fromAddressstringYesSource address
tostringYesDestination address
amountstringYesAmount (decimal string)
tokenAddressstringNoToken contract (token transfer)
decimalsintegerNoToken decimals

Response 200 OK:

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

Deposits (webhook) ​

Deposits received on the wallets are delivered to your webhook as the crypto-cash-in event. Register your webhook and see the data model in the Webhooks section.