Skip to main content
Pull money from a linked bank account (eac_*) into a wallet (wal_*) as a transfer (trf_*), or push it back out. For the transfer lifecycle, read the Transfers overview.
Link a bank account in the dashboard first. Natural returns an eac_* id you pass on every deposit and withdrawal. The account must be verified and its connection active; otherwise the call returns 409 external_account_not_verified or external_account_connection_login_required.

Deposit into a wallet

Pull money from the bank into a wallet with POST /transfers/deposit. Funds land in your default wallet unless you name another. The minimum deposit is 100 ($1.00), and deposits are capped per day by your tier (deposit_tier_daily_pull_limit_exceeded).
The response carries the transfer (trf_*) in PROCESSING: A transfer moves CREATED to PROCESSING to COMPLETED. It can pause at IN_REVIEW during an approval hold. It ends at FAILED, RETURNED, CANCELED, or APPROVAL_DENIED.

Withdraw to a bank account

Push money from a wallet to the bank with POST /transfers/withdraw. Natural pulls from your default wallet unless you name another, and the wallet needs enough available balance to cover it (otherwise 409 insufficient_funds). Withdrawals go out over ACH by default; pass method: "instant" for a realtime withdrawal where your account has access, otherwise the call returns 403 instant_withdrawals_not_enabled.
The response carries the transfer (trf_*) in PROCESSING:

Confirm the balance

Deposits and withdrawals settle asynchronously, so the balance change is not immediate. Read the transfer with GET /transfers/{transferId}: status moves PROCESSING to COMPLETED, and expectedAvailableAt tells you when the funds are usable. Then read the wallet to confirm a deposit landed before you spend against it, or that a withdrawal left. See Create and manage wallets for how balance.available differs from balance.total.