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.
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.
| 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.
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.
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.
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.
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.
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.
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.
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:
If you're comparing these costs against card acceptance, stablecoin payment fees vs credit card processing fees runs the numbers for merchants.
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.
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.
Stablecoin payments are as safe as the issuer, the network, the provider, and your own controls. The seven risks to check, with real incidents and fixes.
Five stablecoin APIs compared for cross-border payments: primary use case, pre-funding requirement, payout regions, and developer experience, plus how to choose by buyer scenario.
Ten stablecoin APIs compared for 2026: BlindPay, Circle, Bridge, BVNK, Fireblocks, Crossmint, Zero Hash, Conduit, Sphere, and Borderless, across rails, custody, pricing, and compliance.