Wallets


The Wallet API allows you to create and manage stablecoin wallets on the Solana network (USDC).
Each wallet is a secure account managed by Tsara and synchronized with on-chain data.

You can:

  • Create new wallets for users or purposes
  • Retrieve wallet details and balances
  • Check balance history
  • Transfer funds between wallets or to on-chain addresses
  • View all transaction history
  • Generate multiple deposit addresses per wallet

Overview

FeatureDescription
Supported NetworksSolana (mainnet & devnet)
Supported AssetsUSDC
Address TypeSolana public keys (base58 encoded)
Balance UpdatesReal-time synchronization with blockchain
Transaction Finality30-60 seconds (blockchain confirmations)
Internal TransfersFree & instant between Tsara wallets
External TransfersStandard Solana network fees apply

Wallet Types

TypePurposeUse Case
User WalletIndividual customer walletE-commerce, remittance
Business WalletMerchant collection walletPayment aggregation
Hot WalletHigh-frequency transaction walletTrading, automated payments
Cold StorageLong-term holding walletTreasury management

Create a Wallet

Generate a new stablecoin wallet with optional metadata for tracking.

Endpoint

POST /wallets

Headers

HeaderValueRequired
AuthorizationBearer YOUR_SECRET_KEYYes
Content-Typeapplication/jsonYes

Request Parameters

ParameterTypeRequiredDescriptionExample
typestringYesWallet type. Must be "stablecoin""stablecoin"
networkstringYesBlockchain network. Must be "solana""solana"
assetstringYesDigital asset. Must be "USDC""USDC"
referencestringNoYour unique reference for this wallet (max 100 chars, alphanumeric, hyphen, underscore)"user_123_wallet"
labelstringNoHuman-readable wallet name (max 100 chars)"John Doe - Main Wallet"
metadataobjectNoCustom key-value data for tracking (max 10 keys, 500 chars per value){"user_id": "usr_123"}

Important: Reference Field

The reference field is your unique identifier for the wallet:

  • Use it to associate wallets with your users/orders
  • Must be unique across all your wallets
  • Once set, cannot be changed
  • Use for retrieving wallet details via API
  • Recommended format: user_USER_ID_wallet or order_{order_id}_escrow

Request Example

{
  "type": "stablecoin",
  "network": "solana",
  "asset": "USDC",
  "reference": "user_123_main_wallet",
  "label": "John Doe - Main Wallet",
  "metadata": {
    "user_id": "usr_123",
    "user_email": "[email protected]",
    "wallet_purpose": "trading"
  }
}
curl -X POST "https://sandbox.tsara.ng/v1/wallets" \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "stablecoin",
    "network": "solana",
    "asset": "USDC",
    "reference": "user_123_main_wallet",
    "label": "John Doe - Main Wallet",
    "metadata": {
      "user_id": "usr_123"
    }
  }'

Response

{
  "success": true,
  "status": "success",
  "status_code": 200,
  "message": "Wallet created successfully",
  "data": {
    "id": "wal_695fc9b9d4e992",
    "uid": "uid_8189120642",
    "reference": "user_123_main_wallet",
    "label": "John Doe - Main Wallet",
    "type": "stablecoin",
    "network": "solana",
    "asset": "USDC",
    "primary_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
    "status": "active",
    "balance": 0,
    "metadata": {
      "user_id": "usr_123",
      "user_email": "[email protected]",
      "wallet_purpose": "trading"
    },
    "created_at": "2025-01-31T12:00:00Z",
    "updated_at": "2025-01-31T12:00:00Z"
  }
}

Response Fields

FieldTypeDescription
successbooleanRequest success status
statusstringRequest status text
status_codenumberHTTP status code
messagestringHuman-readable message
data.idstringWallet ID (format: wal_*)
data.uidstringWallet UID (legacy format, use id instead)
data.referencestringYour custom reference
data.labelstringWallet label/name
data.typestringWallet type
data.networkstringBlockchain network
data.assetstringAsset held in wallet
data.primary_addressstringMain Solana address for this wallet
data.statusstringWallet status: active, suspended, closed
data.balancenumberCurrent USDC balance (full units, not decimals)
data.metadataobjectCustom metadata attached to wallet
data.created_atstringCreation timestamp (ISO 8601)
data.updated_atstringLast update timestamp

Wallet Status Values

StatusDescription
activeWallet is operational, can send and receive
suspendedWallet temporarily disabled (contact support)
closedWallet permanently closed, cannot be reactivated

Error Responses

{
  "success": false,
  "status_code": 400,
  "error": {
    "code": "validation_error",
    "message": "Invalid request parameters",
    "details": [
      {
        "field": "reference",
        "message": "Reference already exists"
      }
    ]
  }
}

Common Errors

Status CodeError CodeDescription
400validation_errorInvalid request parameters
400duplicate_referenceReference already in use
400invalid_networkNetwork not supported (use solana)
400invalid_assetAsset not supported (use USDC)
401unauthorizedInvalid or missing API key
429rate_limit_exceededToo many requests

Retrieve a Wallet

Get wallet details by reference or wallet ID.

Endpoint

GET /wallets?reference={reference}

or

GET /wallets?id={wallet_id}

Query Parameters

ParameterTypeRequiredDescription
referencestringNo*Your wallet reference
idstringNo*Wallet ID (format: wal_* or uid_*)

*At least one parameter required

Example Request

curl -X GET "https://sandbox.tsara.ng/v1/wallets?reference=user_123_main_wallet" \
  -H "Authorization: Bearer YOUR_SECRET_KEY"

Response

{
  "success": true,
  "status": "success",
  "status_code": 200,
  "message": "Wallet retrieved",
  "data": {
    "id": "wal_695fc9b9d4e992",
    "uid": "uid_8189120642",
    "reference": "user_123_main_wallet",
    "label": "John Doe - Main Wallet",
    "type": "stablecoin",
    "network": "solana",
    "asset": "USDC",
    "primary_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
    "status": "active",
    "balance": 150.50,
    "addresses": [
      {
        "address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
        "label": "Primary",
        "is_primary": true
      },
      {
        "address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
        "label": "Deposit Address 1",
        "is_primary": false
      }
    ],
    "metadata": {
      "user_id": "usr_123"
    },
    "created_at": "2025-01-31T12:00:00Z",
    "updated_at": "2025-01-31T14:30:00Z"
  }
}

Get Wallet Balance

Retrieve current balance and balance breakdown for all addresses in a wallet.

Endpoint

GET /wallets/balance?reference={reference}

Query Parameters

ParameterTypeRequiredDescription
referencestringYesYour wallet reference

Example Request

curl -X GET "https://sandbox.tsara.ng/v1/wallets/balance?reference=user_123_main_wallet" \
  -H "Authorization: Bearer YOUR_SECRET_KEY"

Response

{
  "success": true,
  "status": "success",
  "status_code": 200,
  "message": "Wallet Balance",
  "data": [
    {
      "uid": "uid_8189120642",
      "address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
      "balance": 100.50,
      "updated_at": "2025-01-31T14:30:00Z",
      "wallet_reference": "user_123_main_wallet",
      "type": "stablecoin",
      "network": "solana",
      "asset": "USDC"
    },
    {
      "uid": "uid_6368244658",
      "address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
      "balance": 50.00,
      "updated_at": "2025-01-31T13:00:00Z",
      "wallet_reference": "user_123_main_wallet",
      "type": "stablecoin",
      "network": "solana",
      "asset": "USDC"
    }
  ],
  "counter": {
    "total_addresses": 2,
    "total_balance": 150.50
  }
}

Balance Response Fields

FieldTypeDescription
data[].addressstringSolana address
data[].balancenumberUSDC balance for this address (full units)
data[].updated_atstringLast balance update timestamp
counter.total_addressesnumberNumber of addresses in wallet
counter.total_balancenumberCombined balance across all addresses

Balance Updates

  • Balances update automatically when transactions are confirmed on-chain
  • Typical update time: 30-60 seconds after transaction
  • Use webhooks for real-time balance change notifications
  • Balance query is free and can be called frequently

Transfer Funds

Send USDC from one wallet to another Tsara wallet or to any external Solana address.

Endpoint

POST /wallets/transfer

Headers

HeaderValueRequired
AuthorizationBearer YOUR_SECRET_KEYYes
Content-Typeapplication/jsonYes

Request Parameters

ParameterTypeRequiredDescriptionExample
from_addressstringYesSource Solana address (must be owned by your wallet)"7Dg225b..."
to_addressstringYesDestination Solana address (Tsara wallet or external)"BqECHoJ..."
amountnumberYesAmount to transfer in USDC (full units, min: 0.01)25.50
networkstringYesBlockchain network. Must be "Solana""Solana"
assetstringYesAsset to transfer. Must be "USDC""USDC"
referencestringNoYour unique transfer reference (max 100 chars)"payment_123"
memostringNoTransfer description/note (max 200 chars)"Invoice #1012"
metadataobjectNoCustom tracking data (max 10 keys){"order_id": "ORD-123"}

Transfer Types

TypeDescriptionFeesSpeed
InternalBetween Tsara walletsFreeInstant
ExternalTo non-Tsara Solana address~0.005 USDC network fee30-60 seconds

Tsara automatically detects transfer type based on destination address.

Request Example

{
  "from_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
  "to_address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
  "amount": 25.50,
  "network": "Solana",
  "asset": "USDC",
  "reference": "payment_invoice_1012",
  "memo": "Payment for Invoice #1012",
  "metadata": {
    "order_id": "ORD-123",
    "customer_id": "cus_456"
  }
}
curl -X POST "https://sandbox.tsara.ng/v1/wallets/transfer" \
  -H "Authorization: Bearer YOUR_SECRET_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "from_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
    "to_address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
    "amount": 25.50,
    "network": "Solana",
    "asset": "USDC",
    "reference": "payment_invoice_1012"
  }'

Response

{
  "success": true,
  "status": "success",
  "status_code": 200,
  "message": "25.5 USDC Sent Successfully",
  "data": {
    "id": "trx_3365345301",
    "uid": "trx_3365345301",
    "reference": "payment_invoice_1012",
    "source_wallet_id": "uid_8189120642",
    "source_wallet_reference": "user_123_main_wallet",
    "from_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
    "to_address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
    "amount": 25.50,
    "asset": "USDC",
    "network": "Solana",
    "status": "success",
    "transfer_type": "external",
    "fees": {
      "network_fee": 0.005,
      "total_fees": 0.005
    },
    "onchain_tx": "K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
    "url": "https://explorer.solana.com/tx/K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
    "metadata": {
      "order_id": "ORD-123"
    },
    "created_at": "2025-01-31T15:00:00Z",
    "confirmed_at": "2025-01-31T15:00:45Z"
  },
  "url": "https://explorer.solana.com/tx/K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
  "transaction_hash": "K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS"
}

Transfer Response Fields

FieldTypeDescription
data.idstringTransfer transaction ID
data.referencestringYour transfer reference
data.transfer_typestringinternal or external
data.statusstringTransfer status: pending, success, failed
data.feesobjectFee breakdown
data.fees.network_feenumberSolana network fee (0 for internal transfers)
data.onchain_txstringSolana transaction hash
data.urlstringSolana Explorer link
data.confirmed_atstringBlockchain confirmation timestamp

Transfer Status Values

StatusDescriptionNext Action
pendingTransaction submitted to blockchainWait for confirmation (30-60s)
successTransaction confirmed on-chainTransfer complete
failedTransaction failed (insufficient balance, invalid address)Check error and retry

Fee Calculation

Internal Transfer (Tsara to Tsara):
- Amount sent: 25.50 USDC
- Network fee: 0 USDC
- Recipient receives: 25.50 USDC

External Transfer (to non-Tsara address):
- Amount sent: 25.50 USDC
- Network fee: ~0.005 USDC (paid by sender)
- Recipient receives: 25.50 USDC
- Total deducted from sender: 25.505 USDC

Error Responses

{
  "success": false,
  "status_code": 400,
  "error": {
    "code": "insufficient_balance",
    "message": "Insufficient balance in wallet",
    "details": {
      "available": 10.00,
      "required": 25.50
    }
  }
}

Common Transfer Errors

Error CodeDescriptionSolution
insufficient_balanceNot enough USDC in source addressAdd funds or reduce amount
invalid_addressDestination address is invalidVerify Solana address format
duplicate_referenceTransfer reference already usedUse unique reference per transfer
address_not_ownedSource address not owned by your accountUse correct wallet address
amount_too_lowAmount below minimum (0.01 USDC)Increase transfer amount

List Wallet Transactions

Retrieve transaction history for all wallets or a specific wallet.

Endpoint

GET /wallets/transfers?page={page}&limit={limit}

Query Parameters

ParameterTypeRequiredDefaultDescription
pagenumberNo1Page number (starts at 1)
limitnumberNo25Items per page (max: 100)
referencestringNo-Filter by wallet reference
statusstringNo-Filter by status: pending, success, failed
typestringNo-Filter by type: IN (incoming), OUT (outgoing)
from_datestringNo-Start date (ISO 8601: 2025-01-01T00:00:00Z)
to_datestringNo-End date (ISO 8601: 2025-01-31T23:59:59Z)

Example Request

curl -X GET "https://sandbox.tsara.ng/v1/wallets/transfers?page=1&limit=20&status=success" \
  -H "Authorization: Bearer YOUR_SECRET_KEY"

Response

{
  "success": true,
  "status": "success",
  "status_code": 200,
  "message": "Transactions",
  "data": [
    {
      "uid": "trx_3365345301",
      "reference": "payment_invoice_1012",
      "trx_type": "OUT",
      "from_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
      "to_address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
      "amount": 25.50,
      "balance_before": 150.50,
      "balance_after": 124.995,
      "network_fee": 0.005,
      "status": "success",
      "transactionHash": "K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
      "url": "https://explorer.solana.com/tx/K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
      "created_at": "2025-01-31T15:00:00Z",
      "confirmed_at": "2025-01-31T15:00:45Z",
      "network": "solana",
      "asset": "USDC"
    },
    {
      "uid": "trx_1624070676",
      "reference": "deposit_external",
      "trx_type": "IN",
      "from_address": "CfuQhBTFXtHDVDyWpAjhQXmuN1PRLtAne5sppz9D19d",
      "to_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
      "amount": 100.00,
      "balance_before": 50.50,
      "balance_after": 150.50,
      "status": "success",
      "transactionHash": "4o8oKyLwg9uWzzEnWgRynRcKM9qDeokmNAKsnSgP39gx7WMApWfeTCUbmQsEpjDUR7BUK14nKtawCqkLmxgQ6e38",
      "url": "https://explorer.solana.com/tx/4o8oKyLwg9uWzzEnWgRynRcKM9qDeokmNAKsnSgP39gx7WMApWfeTCUbmQsEpjDUR7BUK14nKtawCqkLmxgQ6e38",
      "created_at": "2025-01-31T14:00:00Z",
      "confirmed_at": "2025-01-31T14:00:35Z",
      "network": "solana",
      "asset": "USDC"
    }
  ],
  "pagination": {
    "page": 1,
    "limit": 20,
    "total": 45,
    "total_pages": 3,
    "has_more": true
  }
}

Transaction Fields

FieldTypeDescription
trx_typestringIN (incoming) or OUT (outgoing)
balance_beforenumberWallet balance before transaction
balance_afternumberWallet balance after transaction
network_feenumberNetwork fee paid (only for outgoing transactions)
confirmed_atstringBlockchain confirmation timestamp

Get Specific Transaction

Retrieve details of a single transaction by reference.

Endpoint

GET /wallets/transfers?reference={transfer_reference}

Query Parameters

ParameterTypeRequiredDescription
referencestringYesTransfer reference

Example Request

curl -X GET "https://sandbox.tsara.ng/v1/wallets/transfers?reference=payment_invoice_1012" \
  -H "Authorization: Bearer YOUR_SECRET_KEY"

Response

{
  "success": true,
  "status": "success",
  "status_code": 200,
  "message": "Transaction",
  "data": {
    "uid": "trx_3365345301",
    "reference": "payment_invoice_1012",
    "trx_type": "OUT",
    "from_address": "7Dg225beKzTqwMrRYnScksD9K5Zgu9ciPqqynL1pWk24",
    "to_address": "BqECHoJQFppNELkPpsviEpuFjCZmKGBkhaZtzV1rA2uw",
    "amount": 25.50,
    "balance_before": 150.50,
    "balance_after": 124.995,
    "network_fee": 0.005,
    "status": "success",
    "transactionHash": "K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
    "url": "https://explorer.solana.com/tx/K4uAzbsksSWS7pq9PNU99vz4xZyeeAKp35F4kDYouayQbWsF86Zd37L9rxQf1EE69QLyo2Yqc62wLvmthC5LEjS",
    "created_at": "2025-01-31T15:00:00Z",
    "confirmed_at": "2025-01-31T15:00:45Z",
    "network": "solana",
    "asset": "USDC"
  }
}

Use Cases & Examples

User Wallet System

async function createUserWallet(userId, userEmail) {
  const response = await fetch('https://sandbox.tsara.ng/v1/wallets', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${SECRET_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      type: 'stablecoin',
      network: 'solana',
      asset: 'USDC',
      reference: `user_$USERID_wallet`,
      label: `$USEREMAIL - Main Wallet`,
      metadata: {
        user_id: userId,
        user_email: userEmail,
        created_via: 'api'
      }
    })
  });

  const data = await response.json();

  await db.users.update(userId, {
    wallet_id: data.data.id,
    wallet_reference: data.data.reference,
    wallet_address: data.data.primary_address
  });

  return data.data;
}

Withdrawal Processing

async function processWithdrawal(userId, amount, destinationAddress) {
  const user = await db.users.findById(userId);

  const balance = await getWalletBalance(user.wallet_reference);

  if (balance.counter.total_balance < amount) {
    throw new Error('Insufficient balance');
  }

  const transfer = await fetch('https://sandbox.tsara.ng/v1/wallets/transfer', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${SECRET_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      from_address: user.wallet_address,
      to_address: destinationAddress,
      amount: amount,
      network: 'Solana',
      asset: 'USDC',
      reference: `withdrawal_$USERID_${Date.now()}`,
      metadata: {
        user_id: userId,
        type: 'withdrawal'
      }
    })
  });

  const data = await transfer.json();

  await db.withdrawals.create({
    user_id: userId,
    amount: amount,
    transaction_hash: data.transaction_hash,
    status: data.data.status,
    reference: data.data.reference
  });

  return data.data;
}

Payment Collection

async function collectPayment(fromWalletRef, toBusinessWallet, amount, orderId) {
  const transfer = await fetch('https://sandbox.tsara.ng/v1/wallets/transfer', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${SECRET_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      from_address: fromWalletRef,
      to_address: toBusinessWallet,
      amount: amount,
      network: 'Solana',
      asset: 'USDC',
      reference: `order_payment_${orderId}`,
      memo: `Payment for Order #${orderId}`,
      metadata: {
        order_id: orderId,
        payment_type: 'order_payment'
      }
    })
  });

  const data = await transfer.json();

  if (data.success) {
    await fulfillOrder(orderId);
  }

  return data.data;
}

Balance Monitoring

async function monitorWalletBalance(walletReference, threshold) {
  const balance = await fetch(
    `https://sandbox.tsara.ng/v1/wallets/balance?reference=${walletReference}`,
    {
      headers: {
        'Authorization': `Bearer ${SECRET_KEY}`
      }
    }
  );

  const data = await balance.json();
  const totalBalance = data.counter.total_balance;

  if (totalBalance < threshold) {
    await notifyLowBalance(walletReference, totalBalance, threshold);
  }

  return totalBalance;
}

Tips & Best Practices

  1. Use meaningful references

    const reference = `user_$USERID_${walletPurpose}`;

    Makes wallet management and debugging easier.

  2. Store wallet data

    await db.wallets.create({
      wallet_id: wallet.id,
      reference: wallet.reference,
      primary_address: wallet.primary_address,
      user_id: userId,
      created_at: wallet.created_at
    });
  3. Check balance before transfers

    const balance = await getWalletBalance(reference);
    if (balance.counter.total_balance < amount + estimatedFee) {
      throw new Error('Insufficient balance including fees');
    }
  4. Use unique transfer references

    const transferRef = `${type}_$USERID_${Date.now()}_${randomString()}`;
  5. Monitor for incoming transfers

    app.post('/webhooks/tsara', (req, res) => {
      if (req.body.type === 'stablecoin.received') {
        const transfer = req.body.data;
        await creditUserAccount(transfer.to_address, transfer.amount);
      }
      res.sendStatus(200);
    });
  6. Implement retry logic for failed transfers

    async function transferWithRetry(params, maxRetries = 3) {
      for (let i = 0; i < maxRetries; i++) {
        try {
          return await createTransfer(params);
        } catch (error) {
          if (i === maxRetries - 1) throw error;
          await sleep(2000 * (i + 1));
        }
      }
    }
  7. Cache wallet addresses

    const addressCache = new Map();
    
    async function getWalletAddress(reference) {
      if (addressCache.has(reference)) {
        return addressCache.get(reference);
      }
    
      const wallet = await fetchWallet(reference);
      addressCache.set(reference, wallet.primary_address);
      return wallet.primary_address;
    }

Troubleshooting

Transfer shows pending for too long

Cause: Solana network congestion or confirmation delays.

Solution:

  1. Check Solana network status
  2. Wait up to 2 minutes for confirmation
  3. Verify transaction on Solana Explorer using transaction hash
  4. Contact support if pending > 5 minutes

Insufficient balance error despite having funds

Cause: Balance spread across multiple addresses or network fees not accounted for.

Solution:

const balance = await getWalletBalance(reference);
const available = balance.counter.total_balance;
const networkFee = 0.005;
const maxTransfer = available - networkFee;

Wallet not receiving deposits

Cause: Wrong address shared or address not generated yet.

Solution:

  1. Verify address belongs to wallet
  2. Generate deposit address if needed (see Addresses API)
  3. Check address on Solana Explorer
  4. Ensure USDC (not SOL) is being sent

Duplicate reference error

Cause: Reference already used for another wallet/transfer.

Solution:

const reference = `${baseRef}_${timestamp}_${randomId}`;

Balance showing 0 after deposit

Cause: Blockchain confirmation pending or wrong asset sent.

Solution:

  1. Wait 30-60 seconds for confirmation
  2. Verify USDC (not SOL) was sent
  3. Check transaction on Solana Explorer
  4. Ensure sent to correct address

Related Pages