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
Activeandfiat_deposit.usd.achreadsActiveinGET /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.
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.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
AnApproved 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-01or 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.
rtpnever readsActivein production, though sandbox reports it asActive.
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 aninbound_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)
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}/microdepositslists the amount, currency, counterparty name, and date of each one. - Webhook:
microdeposit_receivedfires once for each incoming test credit. See Webhooks. - Dashboard: Customers, select the customer, then Microdeposits.
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 asbanking_fee on the transaction. See Fees on a deposit.
What can go wrong
Sandbox
Approve the Autoramp withPUT /api/sandbox/autoramp/{id} and simulate a deposit with POST /api/sandbox/transaction. See Test the full flow in Sandbox.