Wallgent
Guides

Transfers & Settlement

Move money in and out of wallets via ACH, wire, FedNow, and USDC rails.

Overview

Transfers move money between Wallgent wallets and external bank accounts or crypto addresses. There are three types:

TypeDescriptionFees
DepositFund a wallet from an external source0.5% (min $0.25)
WithdrawalSend funds from a wallet to an external destination0.5% (min $0.25)
InternalMove funds between wallets in the same organizationFree

Minimum deposit amount: $25.00.


Supported Rails

RailDirectionSpeedCurrency
ACHDeposit / Withdrawal1-3 business daysUSD
WireDeposit / WithdrawalSame dayUSD
FedNowDeposit / WithdrawalInstantUSD
USDCDeposit / WithdrawalMinutesUSDC

Deposits

Initiate a Deposit

POST /v1/transfers/deposit

Request Body

FieldTypeRequiredDescription
walletIdstringYesDestination wallet
amountstringYesAmount to deposit
currencystringYesUSD or USDC
sourceobjectNoSource details (see below)
bankAccountIdstringNoLinked bank account ID

Provide either source or bankAccountId. If using bankAccountId, the bank account must be VERIFIED.

Fiat Source (ACH/Wire/FedNow)

FieldTypeRequiredDescription
typestringYesACH, WIRE, or FEDNOW
bankAccountIdstringNoColumn counterparty ID
routingNumberstringNoBank routing number
accountNumberstringNoBank account number

USDC Source

FieldTypeRequiredDescription
typestringYesUSDC
addressstringYesSource wallet address
chainstringNoBlockchain (default: Ethereum)
const deposit = await wg.transfers.deposit({
  walletId: 'wal_01J...',
  amount: '1000.00',
  currency: 'USD',
  bankAccountId: 'ba_01J...',
});

Response 202 (Accepted — settlement is asynchronous)


Withdrawals

Initiate a Withdrawal

POST /v1/transfers/withdraw

Request Body

FieldTypeRequiredDescription
walletIdstringYesSource wallet
amountstringYesAmount to withdraw
currencystringYesUSD or USDC
destinationobjectNoDestination details
bankAccountIdstringNoLinked bank account ID

Same structure as deposit source. Provide either destination or bankAccountId.

const withdrawal = await wg.transfers.withdraw({
  walletId: 'wal_01J...',
  amount: '500.00',
  currency: 'USD',
  bankAccountId: 'ba_01J...',
});

Internal Transfers

Move funds between wallets in the same organization with no fees.

POST /v1/transfers/internal

Request Body

FieldTypeRequiredDescription
fromWalletIdstringYesSource wallet
toWalletIdstringYesDestination wallet
amountstringYesAmount to transfer
descriptionstringNoTransfer description
const transfer = await wg.transfers.internal({
  fromWalletId: 'wal_01J_ops',
  toWalletId: 'wal_01J_savings',
  amount: '250.00',
  description: 'Move to savings',
});

Both wallets must be ACTIVE and belong to the same organization.


List and Get Transfers

List Transfers

GET /v1/transfers?walletId=...&direction=DEPOSIT&status=...&limit=20&cursor=...
ParameterTypeDescription
walletIdstringFilter by wallet
directionstringDEPOSIT or WITHDRAWAL
statusstringFilter by status
limitnumberResults per page (default: 20)
cursorstringPagination cursor

Get Transfer

GET /v1/transfers/:id

Cancel Transfer

POST /v1/transfers/:id/cancel

Cancel a pending transfer before it settles.


Settlement Flow

External transfers follow a 3-phase settlement process:

INITIATED → PENDING → COMPLETED
                    → FAILED
  1. Initiated: Transfer request accepted, validation passed
  2. Pending: Submitted to the settlement rail, awaiting confirmation
  3. Completed: Funds settled, wallet balance updated
  4. Failed: Settlement failed, funds returned (if applicable)

Settlement holds protect against ACH returns and chargebacks. Deposited funds may be held for a clearing period before becoming fully available.


Webhook Events

EventDescription
deposit.initiatedDeposit submitted to rail
deposit.completedDeposit settled, funds available
deposit.failedDeposit failed
withdrawal.initiatedWithdrawal submitted to rail
withdrawal.completedWithdrawal settled
withdrawal.failedWithdrawal failed
wallet.funds_pendingFunds deposited but held for clearing
wallet.funds_availableHeld funds released and available

MCP Tools

ToolDescription
wallgent_deposit_walletDeposit funds via external rail
wallgent_withdraw_walletWithdraw funds to external destination
wallgent_get_transferCheck transfer status

Permissions

PermissionRequired For
payments:writeInitiate deposits, withdrawals, internal transfers
payments:readList and get transfers

Errors

CodeHTTP StatusDescription
BANK_ACCOUNT_NOT_FOUND404Bank account ID not found
BANK_ACCOUNT_NOT_VERIFIED400Bank account not verified
INSUFFICIENT_FUNDS402Not enough balance for withdrawal
WALLET_FROZEN403Source or destination wallet is frozen
TRANSFER_NOT_FOUND404Transfer ID not found
SELF_PAYMENT400Cannot transfer to same wallet

On this page