Skip to main content

Overview

Send EVM transactions across multiple networks using Monei’s custodial wallet. Monei handles signing, gas, and broadcasting on your behalf, you get back a transaction hash you can use to verify and track the transaction on any block explorer. What you’ll learn:
  • Send native tokens and ERC-20 tokens
  • Track transaction status via block explorers
  • Understand transaction states
  • Handle transaction failures

How It Works

Monei is a custodial wallet. This means:
  • You don’t manage private keys or providers
  • Monei signs and broadcasts the transaction on your behalf
  • Gas fees are handled internally, you don’t estimate or set them
  • After a transaction is sent, Monei returns a txHash you can use to verify it on a block explorer

Transaction Types

Native Token Transfer

Send ETH, BNB, MATIC, etc. to any address

ERC-20 Transfer

Send USDT, USDC, or any ERC-20 token

Send Native Token

Transfer native tokens (ETH, BNB, MATIC, etc.) across supported networks.
import MoneiSDK from 'monei-sdk';

const monei = new MoneiSDK({
  apiKey: process.env.MONEI_API_KEY,
});

// Send 0.1 BNB on BSC
const tx = await monei.evm.sendNativeToken({
  to: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e',
  amount: '0.1',
  chainId: 56, // BSC
});

console.log('Transaction Hash:', tx.txHash);
console.log('View on Explorer:', `https://bscscan.com/tx/${tx.txHash}`);
Request Parameters:
ParameterTypeRequiredDescription
tostringYesRecipient wallet address
amountstringYesAmount in native token (e.g., "0.1" for 0.1 BNB)
chainIdnumberYesNetwork chain ID (56 for BSC, 137 for Polygon, etc.)
Response:
{
  "statusCode": 200,
  "message": "Transaction sent successfully",
  "data": {
    "txHash": "0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef"
  }
}
Note: Save the txHash from the response, this is your reference for tracking the transaction on-chain.

Send ERC-20 Token

Transfer ERC-20 tokens like USDT, USDC, or any custom token.
// Send 100 USDT on BSC
const tx = await monei.evm.sendToken({
  to: '0x742d35Cc6634C0532925a3b844Bc454e4438f44e',
  tokenAddress: '0x55d398326f99059fF775485246999027B3197955', // USDT on BSC
  amount: '100',
  chainId: 56,
});

console.log('Transaction Hash:', tx.txHash);
console.log('View on BscScan:', `https://bscscan.com/tx/${tx.txHash}`);
Request Parameters:
ParameterTypeRequiredDescription
tostringYesRecipient wallet address
tokenAddressstringYesERC-20 token contract address
amountstringYesAmount in token units (e.g., "100" for 100 USDT)
chainIdnumberYesNetwork chain ID
Response:
{
  "statusCode": 200,
  "message": "Token transfer successful",
  "data": {
    "txHash": "0xabcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"
  }
}

Transaction Lifecycle

Transaction States:
StateDescription
InitiatedTransaction created and submitted by Monei
PendingBroadcast to the network, awaiting mining
ConfirmedMined in a block, awaiting sufficient confirmations
CompletedRequired confirmations reached, transaction is final
FailedTransaction reverted or rejected by the network

Tracking Transactions

Since Monei does not store blockchain transactions on its backend, use the txHash returned from the send response to track your transaction directly on the relevant block explorer. Block Explorers by Network:
NetworkChain IDExplorer
Ethereum1Etherscan
BSC56BscScan
Polygon137PolygonScan
Base8453BaseScan
Arbitrum42161Arbiscan
Optimism10Optimism Explorer
Confirmation Requirements: Different networks require different confirmation counts before a transaction is considered final:
NetworkConfirmationsApproximate Time
Ethereum12 blocks~3 minutes
BSC15 blocks~45 seconds
Polygon128 blocks~4 minutes
Base1 block~2 seconds
Arbitrum1 block~0.25 seconds
Optimism1 block~2 seconds

Troubleshooting

Cause: The sending wallet did not have enough balance to cover the transfer amount.Solution: Check your Monei wallet balance before initiating a transfer and ensure it covers the full amount. Gas fees are handled by Monei, but the transfer amount itself must be available.
Common causes:
  • Insufficient token balance in the custodial wallet
  • Invalid recipient address format
  • Token contract rejected the transfer (e.g. blocklisted address)
Solution: Verify the recipient address is valid and that the wallet holds sufficient token balance. If the issue persists, contact support with your txHash.
Problem: Transaction has been pending longer than expected.Expected pending times by network:
  • Ethereum: up to 10 minutes
  • BSC: up to 5 minutes
  • Polygon: up to 10 minutes
  • Base / Arbitrum / Optimism: up to 2 minutes
Actions:
  1. Check the transaction on the relevant block explorer using your txHash
  2. If it is past the above thresholds and still unconfirmed, contact Monei support with your txHash
Problem: Transaction was sent on the wrong network (e.g. USDT on Ethereum instead of BSC).Recovery:
  • If the recipient controls the same address on both networks, the funds are accessible, ask them to check the correct network
  • Contact Monei support for assistance
Prevention: Always verify the chainId in your request matches the intended network before sending.

Best Practices

Always Verify the Address

Double-check the recipient address and network before sending, blockchain transactions are irreversible

Test First

Send a small test amount before large transfers

Save the txHash

Always store the txHash from the response, it’s your only reference for tracking the transaction on-chain

Verify on Explorer

Use the appropriate block explorer to confirm finality before treating a transaction as complete

Next Steps

Wallet Operations

Learn about EVM wallet management

Token Swaps

Swap tokens on decentralized exchanges

Transaction Management

Advanced transaction filtering

Networks

Learn about supported networks