---
title: "Virtual account fees: every cost between the payer's bank and the stablecoin wallet"
seoTitle: "Virtual account fees: what you pay from bank to USDC"
description: "Monthly, deposit, wire, SWIFT, conversion, and partner fees on a virtual account: who pays each one, and a worked 10,000 USD wire to USDC example."
date: "2026-08-22"
category: "stablecoins"
author: "BlindPay Team"
faq:
  - q: "How much does a virtual account cost?"
    a: "Most providers charge a monthly fee per account plus a fee on each deposit. Some also charge to open the account. At BlindPay, a US virtual account costs $1.50 per month per active account, billed at the end of the cycle, with no setup fee and no monthly minimum. Deposit fees vary by payment method, and each one is a field on the deposit record."
  - q: "Is there a fee to convert USD to USDC?"
    a: "Usually, yes, but it can be small. USDC is redeemable 1:1 for US dollars at the issuer, so there is no exchange rate risk between USD and USDC. The cost is whatever the provider charges to collect the bank transfer and mint or deliver the stablecoin, shown either as a separate fee or inside the rate. Ask which one you're looking at."
  - q: "Who pays the wire fee when someone sends money to a virtual account?"
    a: "The payer pays their own bank's outgoing fee, the same as for any wire. On a domestic US wire that's usually the end of it. On a SWIFT payment, the charge code decides who pays the banks in the middle: OUR puts it on the sender, SHA splits it, and BEN takes everything out of the amount in transit."
  - q: "Is there a withdrawal fee on a virtual account?"
    a: "Not in the usual sense, because a stablecoin virtual account doesn't hold a balance. Each deposit converts and lands in the linked wallet. Moving the stablecoins after that is either an on-chain transfer, which costs a network fee, or a payout to a bank account, which is priced on its own quote. Both are separate from the virtual account."
  - q: "Why did a virtual account deposit arrive for less than the invoice?"
    a: "The most common reason is a SWIFT payment sent with the SHA or BEN charge code, where an intermediary bank deducted its fee from the principal on the way. Less often, the payer's bank took its own fee from the amount, or the payer simply sent less. Check the deposit's sender amount against the invoice before you mark it paid."
---

A virtual account usually costs a monthly fee per account plus a fee on each deposit. Around that, the payer's bank may charge to send, banks in the middle of a SWIFT payment may deduct their own fees, and turning USD into stablecoins can carry a fee or spread. At BlindPay, each US account costs $1.50 per month.

The monthly fee is the number on the pricing page. The deposit is where the real money goes.

## Key takeaways

- Three parties pay fees on a virtual account deposit: the payer, the account holder, and the platform that issued the account.
- SWIFT charge codes (OUR, SHA, BEN) decide whether an international payment arrives whole or short.
- USD to USDC has no exchange rate risk, so the conversion cost is the provider's fee, not FX.
- A stablecoin virtual account holds no balance, so "withdrawal fee" really means the cost of moving stablecoins out of the wallet.
- Monthly fees are small per account and large per thousand accounts. Close the ones nobody uses.

## Which fees can apply to a virtual account deposit?

Up to nine fees can touch one deposit, from the payer's bank to the stablecoin landing in a wallet. Most deposits only hit three or four of them. The table below lists each one, who pays it, and where it shows up.

A quick note on terms. A **virtual account** is a unique set of bank details that routes incoming payments to one customer (the [full definition is here](/resources/more/what-is-a-virtual-account)). A **stablecoin** is a token pegged to a currency, like USDC or USDT to the US dollar. An **on-ramp** turns bank money into stablecoins; an **off-ramp** does the reverse.

| Fee | Who pays | Typical range or how it's set | Where you see it |
| --- | --- | --- | --- |
| Account issuance | Platform or account holder | Often free; some providers charge a setup fee | Pricing page, first invoice |
| Monthly maintenance | Platform (absorbed or passed on) | Flat amount per account per month | Monthly invoice |
| Payer's outgoing bank fee | Payer | ACH often free to a few dollars; domestic wires commonly $25 to $35; international wires commonly $35 to $50 | Payer's bank statement |
| Intermediary (correspondent) deductions | Depends on the SWIFT charge code | Commonly $10 to $30 per bank in the chain | Deposit arrives short |
| Deposit fee | Account holder | Flat, percentage, or both, set by the provider per payment method | Deposit record |
| Conversion fee or spread | Account holder | Separate fee or built into the rate | Deposit record or rate |
| Network fee | Varies by provider | Fractions of a cent on low-cost chains, more on Ethereum during congestion | Included in the deposit fee or listed separately |
| Platform markup (partner fee) | Account holder, set by the platform | Percentage, flat, or both | Deposit record |
| Off-ramp or payout | Whoever moves the money out | Priced per payout quote | Payout quote |

Bank fee ranges are typical figures for US banks and vary by bank and account tier. Treat them as a sense of scale, not a quote.

## Who pays each fee, the payer or the account holder?

The payer pays to send. The account holder pays to receive and convert. The platform pays the provider and decides what to pass on. Keeping those three roles straight is most of the work in pricing a virtual account product.

**The payer** is whoever sends the money: your customer's client, employer, or marketplace. They pay their own bank's outgoing fee, and on SWIFT they may also pay the intermediary banks, depending on the charge code. None of this touches your invoice from the provider.

**The account holder** is your customer, the person or business the account is issued to. Deposit fees, conversion costs, and your platform markup usually come out of what they receive. In most stablecoin setups, the fee is deducted from the stablecoin amount delivered, not added on top of what the payer sends.

**The platform** is you, if you issue accounts to your own customers through a provider's API. You pay the monthly account fees and any fees the provider bills to your invoice instead of deducting them. Whether you pass those costs on, absorb them, or add a margin is a pricing decision, and a partner fee is the usual way to do it.

## How do SWIFT charge codes change what arrives?

Every SWIFT payment carries a charge code that decides who pays the banks along the way. OUR means the sender pays everything. SHA means the sender pays their own bank and the recipient absorbs the rest. BEN means every fee comes out of the amount in transit.

Here's a 10,000 USD SWIFT payment from a German client to a US virtual account, with one intermediary bank charging $20. The numbers are illustrative.

| Charge code | Sender pays on top | Deducted in transit | Arrives in the virtual account |
| --- | --- | --- | --- |
| OUR | Outgoing fee plus intermediary charges | $0 | 10,000.00 USD |
| SHA | Outgoing fee only | $20 (intermediary) | 9,980.00 USD |
| BEN | Nothing | $40 outgoing fee plus $20 intermediary | 9,940.00 USD |

SHA is the default at many banks, which is why international invoices so often land a little short. A $20 gap turns a paid invoice into a partial payment, and someone has to decide whether to chase it. OUR also isn't a guarantee: some intermediaries deduct anyway.

The practical fix is on the invoice. Ask for OUR, or state that bank charges are the sender's responsibility, and tell your customer to expect the occasional short deposit regardless. Domestic US wires and ACH rarely pick up deductions in transit, so this problem is mostly a SWIFT one.

## Does converting USD to USDC cost anything?

There's no exchange rate between USD and USDC in the usual sense, because USDC is designed to be [redeemable 1:1 for US dollars](https://www.circle.com/usdc). What you pay is the provider's fee for collecting the bank transfer and delivering the stablecoin. It can appear as a separate line or as a rate slightly below 1.

Both formats are fine. The one to avoid is the one you can't see. If a provider shows only "you'll receive 9,925 USDC" with no breakdown, ask how much of the gap is their fee, how much is a network fee, and how much is a markup someone else added.

The same logic applies to USDT, with one difference worth checking: which networks the provider can deliver it on. If you're picking between the two, [USDC vs USDT for payments](/resources/more/usdc-vs-usdt-for-payments) covers the tradeoffs. For how rates, expiry, and fee direction appear on a stablecoin quote, see [stablecoin API quotes explained](/resources/more/stablecoin-api-quotes-explained).

## What does a 10,000 USD wire look like after fees?

A domestic wire for 10,000 USD usually arrives whole, then the deposit fee and any platform markup come out before the stablecoin lands. In the illustrative example below, 9,925 USDC reaches the wallet. The percentages are placeholders, not BlindPay rates.

A US customer pays a 10,000 USD invoice by domestic wire into a virtual account that settles to USDC. Your platform has a 0.25% markup on deposits.

| Step | Amount | Note |
| --- | --- | --- |
| Invoice | 10,000.00 USD | |
| Payer's outgoing wire fee | 25.00 USD | Paid by the payer on top, not deducted |
| Arrives in the virtual account | 10,000.00 USD | Domestic wire, no intermediary banks |
| Deposit fee (placeholder: 0.50%) | minus 50.00 | Deducted at transaction time |
| Partner fee (placeholder: 0.25%) | minus 25.00 | Your platform's markup |
| Network fee | 0.00 | Assumed included in the deposit fee for this example |
| **Delivered to the wallet** | **9,925.00 USDC** | |

The account holder's all-in cost on this deposit is $75, or 0.75%. Add the monthly account fee ($1.50 at BlindPay) and it's $76.50 for the month if this is the only deposit. The payer spent $25 on top, which they'd pay to wire any bank account.

Now run the same invoice as a SWIFT payment from abroad with SHA. If an intermediary deducts $20, 9,980 USD arrives, the fees apply to that amount, and your customer has a $20 shortfall to resolve with their client. Same rails, different invoice outcome.

## How do monthly account fees add up at scale?

Linearly, which is the problem. One account at $1.50 a month is noise. A platform that issues one account per customer and has 1,000 customers pays $1,500 a month, or $18,000 a year, before a single deposit.

That's fine when every account earns its keep. It hurts when most accounts sit idle. A payroll platform where 30% of contractors never receive a payment through their account is paying for 300 empty mailboxes.

Three ways to manage it: issue accounts when a customer actually needs to receive money, not at signup; delete accounts that go dormant; and price your plans so the monthly cost per account is covered by your partner fee on a realistic deposit volume. Some teams also pass the monthly fee through directly. If you're still deciding between one account per customer and shared payment instructions, [how to accept bank transfers and settle in stablecoins](/resources/more/accept-bank-transfers-settle-in-stablecoins) compares the two.

## Where does each fee show up on the deposit record?

On a well-designed API, every deposit creates its own record with the amounts and fees as fields. You should be able to see what the payer sent, what each party took, and what the wallet received, without opening an invoice. At BlindPay, each deposit creates a payin, and the BlindPay fee lands in one of two fields depending on size.

| Deposit amount | Where the BlindPay fee goes | Field |
| --- | --- | --- |
| Below $100.00 | Accrued to the platform's invoice at the end of the billing cycle | `billing_fee_amount` |
| $100.00 or more | Deducted from the stablecoin delivered | `transaction_fee_amount` |

That split has a consequence people miss. On small deposits, your platform carries the BlindPay fee on its invoice, and the account holder receives the deposit minus only your markup. If your customers receive many small payments, budget for that line on your invoice. Instances set to end-of-month billing accrue every deposit's fee to `billing_fee_amount`, whatever the amount.

Partner fees follow their own rule. You can set one default fee for all virtual account deposits on your instance, or pin a different fee to a specific account, which overrides the default. The partner fee comes out of what remains after any transaction-time BlindPay fee, and every deposit delivers at least $0.01 of stablecoin. So a $5.00 flat fee on a $5.00 deposit collects $4.99, and a $0.01 micro-deposit (the penny tests payroll providers and marketplaces send to verify an account) collects nothing.

Collected partner fees accumulate over the month and are released on the first day of the next month, with your BlindPay invoice netted out first. You get a `payin.partnerFee` webhook as each one is collected. Configuration details are in [partner fees](/docs/learn/partner-fees).

## How can you lower virtual account costs?

Most of the savings come from payment method choice, invoice wording, and account hygiene, not from negotiating the deposit fee. Here's the order to work through:

1. **Steer domestic payers to ACH.** It's the cheapest rail for the payer and avoids intermediaries entirely. Use wires when speed or amount requires it.
2. **Put OUR on international invoices.** Or add a line saying bank charges are the sender's responsibility. It won't stop every deduction, but it stops most.
3. **Issue accounts on demand.** Create the account when a customer needs to receive money, not at signup.
4. **Delete dormant accounts.** Monthly fees bill per active account, so an account nobody pays into is pure cost.
5. **Encourage fewer, larger deposits.** Flat fees and invoice-billed fees hit small deposits hardest. Monthly invoicing beats weekly for the same client.
6. **Pick the settlement token and network on purpose.** Network fees vary widely by chain, and some tokens are only available on some networks.
7. **Set your markup with the fee mechanics in mind.** A percentage fee scales with large deposits; a flat fee eats small ones and collects little on micro-deposits.
8. **Ask for fees as separate fields.** A fee hidden in the rate is a fee you can't reconcile or explain to a customer.

If you're comparing these costs against card acceptance, [stablecoin payment fees vs credit card processing fees](/resources/more/stablecoin-payment-fees-vs-card-processing-fees) runs the numbers for merchants.

## Where does BlindPay fit?

BlindPay issues US virtual accounts in your customer's name that receive ACH, wire, and SWIFT, depending on account type, and convert each deposit to USDC or USDT in a linked wallet. USDT settlement needs a wallet on Polygon, Ethereum, or Solana. Accounts receive USD and hold no balance; the stablecoins land in the wallet.

On cost, the published facts are short. Each active US virtual account costs $1.50 per month, charged on your invoice at the end of the billing cycle rather than at creation. There's no setup fee and no monthly minimum, and development instances are free, accounts included. Deposit fees vary by payment method, so BlindPay doesn't publish a flat rate card; each deposit's fee is a field on its payin, and plans are on [pricing](/pricing).

You can add your own markup as a partner fee, in basis points (up to 10%), as a flat amount, or both, per instance or per account. The fee rules are in the [virtual accounts docs](/docs/virtual-accounts) and [billing](/docs/learn/billing). For the account lifecycle from request to wallet balance, see [stablecoin virtual accounts explained](/resources/more/stablecoin-virtual-accounts-explained), and if you're deciding whether a virtual account can stand in for a bank account, see [can a virtual account replace a bank account](/resources/more/can-a-virtual-account-replace-a-bank-account).

## What to do next

Take one real invoice your customers receive, write down the payment method and charge code, and run it through the fee table above with each provider's actual numbers. Then create a free development instance and check that every fee appears as its own field on the deposit record before you sign.

*This article is for general information only and is not legal, tax, or financial advice. Fee ranges are typical and vary by bank and provider.*
