Skip to main content
A USD virtual account gives your customer a US account number and routing number in their own name. ACH, wire, and international SWIFT deposits convert to the Autoramp’s stablecoin, and FedNow deposits do too where it’s enabled.

Who can get one

MoonPay Enterprise opens the account at Lead Bank or Erebor Bank, depending on your account’s configuration and which bank the customer is eligible for. bank_name in deposit_rails shows which one holds it.

Requirements

  • The customer is Active and fiat_deposit.usd.ach reads Active in GET /api/customers/{customer_id}/abilities. See Before you create a virtual account.
  • Customers who live in the US provide an SSN or ITIN during KYC. See KYC.
  • US sole proprietorships provide a tax ID and a phone number for the proprietor during KYB. See KYB.
If KYC is approved but USD still reads Pending, the bank is still opening the customer’s account. Subscribe to the customer_fiat_abilities webhook to hear when it turns Active.

Create a USD virtual account

In the dashboard, click New Virtual Account on the Onramp card under Routes and pick USD. Through the API:
POST /api/autoramps requires an Idempotency-Key header. A missing key returns 400. Only successful responses are cached, so a retry after an error runs again. See Idempotency.
A Lead Bank account opens in the first provisioning run after you create the Autoramp, and the Autoramp moves straight to Approved. An Erebor Bank account is ready once Erebor assigns the account number. Either way, share the details only once the Autoramp is Approved.

What your customer sees

An Approved USD Autoramp returns one entry per rail in deposit_rails. All of them carry the same account number.

Which rails appear

  • ACH, Wire, and SWIFT: on every USD account.
  • FedNow: on Lead Bank accounts only, when FedNow deposits are enabled for your account and you send X-API-Version: 2026-07-01 or later. FedNow deposits are accepted only from customers in the US and Canada. A FedNow deposit for any other customer is returned.
  • RTP: not available. rtp never reads Active in production, though sandbox reports it as Active.

Third-party deposits

Every USD rail accepts payments from third parties, on first-party and third-party Autoramps alike. A customer who can’t hold a Lead Bank account gets a third-party Autoramp whatever the flag says. On USD transactions, third_party_classification is evaluated only on Lead Bank accounts for Autoramps created with source_is_third_party. Erebor Bank deposits never carry it. See Third-party deposits.

Pay by reference

USD Autoramps support pay by reference. Each Autoramp on the shared account gets an inbound_payment_reference such as IR-K7M2QX. MoonPay Enterprise matches it case-insensitively, and finds it inside longer text such as Invoice 1234 IR-K7M2QX, but only in one field per rail:
  • ACH at Lead Bank: the entry’s statement descriptor
  • Wire at Lead Bank: the message to the beneficiary (message_to_creditor)
A reference anywhere else doesn’t match, and the deposit is returned.
FedNow and pay by reference don’t mix. FedNow deposits arrive without a reference, so on an account that has any pay-by-reference Autoramp they’re returned. Don’t share FedNow details for a pay-by-reference account.
An ACH deposit to an Erebor Bank account that matches no Autoramp isn’t returned automatically. See Cancel an Autoramp.

ACH microdeposits

When your customer links their USD account at another bank or a payroll provider, that institution often verifies it by sending two small ACH test credits. These microdeposits aren’t a setup step for the virtual account and don’t create transactions. Your customer reads the amounts and confirms them with the institution that sent them.
  • API: GET /api/customers/{customer_id}/microdeposits lists the amount, currency, counterparty name, and date of each one.
  • Webhook: microdeposit_received fires once for each incoming test credit. See Webhooks.
  • Dashboard: Customers, select the customer, then Microdeposits.
Some banks pull the test amounts back with a single ACH debit. That debit doesn’t create a transaction or a microdeposit_received event. See Micro-Deposits (Penny Tests).

Timing

ACH, wire, FedNow, and SWIFT each settle on their own schedule. See Settlement Times by Payment Method.

Fees

A fee for the incoming bank payment comes from the Autoramp’s fee profile, per rail. When it’s deducted, it appears as banking_fee on the transaction. See Fees on a deposit.

What can go wrong

Sandbox

Approve the Autoramp with PUT /api/sandbox/autoramp/{id} and simulate a deposit with POST /api/sandbox/transaction. See Test the full flow in Sandbox.