Virtual account fees: every cost between the payer's bank and the stablecoin wallet

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.

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). 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.

FeeWho paysTypical range or how it's setWhere you see it
Account issuancePlatform or account holderOften free; some providers charge a setup feePricing page, first invoice
Monthly maintenancePlatform (absorbed or passed on)Flat amount per account per monthMonthly invoice
Payer's outgoing bank feePayerACH often free to a few dollars; domestic wires commonly $25 to $35; international wires commonly $35 to $50Payer's bank statement
Intermediary (correspondent) deductionsDepends on the SWIFT charge codeCommonly $10 to $30 per bank in the chainDeposit arrives short
Deposit feeAccount holderFlat, percentage, or both, set by the provider per payment methodDeposit record
Conversion fee or spreadAccount holderSeparate fee or built into the rateDeposit record or rate
Network feeVaries by providerFractions of a cent on low-cost chains, more on Ethereum during congestionIncluded in the deposit fee or listed separately
Platform markup (partner fee)Account holder, set by the platformPercentage, flat, or bothDeposit record
Off-ramp or payoutWhoever moves the money outPriced per payout quotePayout 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 codeSender pays on topDeducted in transitArrives in the virtual account
OUROutgoing fee plus intermediary charges$010,000.00 USD
SHAOutgoing fee only$20 (intermediary)9,980.00 USD
BENNothing$40 outgoing fee plus $20 intermediary9,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. 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 covers the tradeoffs. For how rates, expiry, and fee direction appear on a stablecoin quote, see 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.

StepAmountNote
Invoice10,000.00 USD
Payer's outgoing wire fee25.00 USDPaid by the payer on top, not deducted
Arrives in the virtual account10,000.00 USDDomestic wire, no intermediary banks
Deposit fee (placeholder: 0.50%)minus 50.00Deducted at transaction time
Partner fee (placeholder: 0.25%)minus 25.00Your platform's markup
Network fee0.00Assumed included in the deposit fee for this example
Delivered to the wallet9,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 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 amountWhere the BlindPay fee goesField
Below $100.00Accrued to the platform's invoice at the end of the billing cyclebilling_fee_amount
$100.00 or moreDeducted from the stablecoin deliveredtransaction_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.

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 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.

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 and billing. For the account lifecycle from request to wallet balance, see 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.

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.

FAQ