GuidesAPI ReferenceChangelog
API Reference

Migrate to Virtual Accounts

Update an integration that uses the deprecated Fiat Deposit Accounts endpoint.

GET /v1/customers/{customer_id}/fiat_deposit_accounts is deprecated. Use GET /v1/accounts/{account_id}/virtual-accounts to retrieve a customer's receiving accounts and bank details.

The old endpoint remains available for existing integrations while you migrate. Switching APIs does not require you to create another account: start by listing the virtual accounts your customer already has.

What you can do with Virtual Accounts

List Fiat Deposit Accounts lets you read the bank details already available to a customer. The Virtual Accounts API also lets you create and manage additional receiving accounts, for example to give subscriptions and wholesale orders separate bank details.

CapabilityList Fiat Deposit AccountsVirtual Accounts
Create another receiving accountLists existing accounts only.Create additional USD accounts for eligible customers.
Name accounts for their purposeReturns a display name that you cannot change through this endpoint.Set and update the nickname of an additional account.
Track a creation requestDoes not accept a creation reference.Supply an external_id and use it to find the account or retry the request.
Retrieve one accountReturns accounts grouped by asset.Retrieve an account directly by virtual_account_id.
Find the accounts you needNo filters or pagination.Filter by asset, status, is_default, or external_id, and page through the results.
Pause or retire an accountNo account-management operations.Deactivate, reactivate, or permanently delete an additional account.
Follow account changesNo VA lifecycle notifications.Receive webhooks when an additional account becomes active, fails, is deactivated, or is deleted.

Default accounts remain managed by 1Money. Creation and management operations apply to additional accounts, which have a monthly fee.

Virtual Accounts also supports matching deposits to a receiving account through the transaction's receiving_virtual_account field. This is available only when the receiving account can be identified; otherwise, the field is null. Migrating does not guarantee that every deposit will have a VA association.

Update your integration

  1. List the customer's virtual accounts. Use their public account ID (BZ-... or IN-...) in the new route. The route also accepts the legacy customer UUID. Set is_default=true if you only need the default accounts provided by 1Money.
  2. Read the paginated response. Accounts are in list, with total, page, and size for pagination. Each account contains its own asset.
  3. Save the new account IDs. Use virtual_account_id for future VA requests. The old fiat_deposit_account_id identifies a different resource and cannot be used in its place.
  4. Read bank details from networks. When the account is ACTIVE, choose the payer's network and use that entry's bank, beneficiary, account identifier, institution identifier, and memo.
  5. Keep following deposit webhooks. Use the event's transaction_id to retrieve the transaction. When the receiving virtual account can be identified, receiving_virtual_account contains its details; otherwise, the field is null.

To match a newly listed account to one you already use, compare the currency, network, account identifier, institution identifier, and memo. If the match is unclear, contact 1Money before replacing any saved bank details.

Field mapping

Fiat Deposit AccountsVirtual Accounts
Array grouped by assetPaginated object with list, total, page, and size.
deposit_accounts[]list[]; each account includes its own asset.
fiat_deposit_account_idvirtual_account_id. Store the new ID.
payment_methods[].typenetworks[].network.
payment_methods[].account_numbernetworks[].account_identifier. Keep it as a string.
routing_number / swift_bicnetworks[].institution_identifier, omitted when not applicable.
Account-level bank and recipient detailsnetworks[].bank and networks[].account_holder.
payment_methods[].memonetworks[].memo, omitted when unset.
Three-letter bank_countryTwo-letter bank.country and account_holder.country, or null when unknown.
Recipient address stringaccount_holder.address object, including full_address.
Legacy account statusPENDING, ACTIVE, DEACTIVE, or FAILED. Only active accounts return networks.

A virtual account can have several instructions for the same network. Keep each distinct instruction rather than assuming the network name is unique.

Add more receiving accounts when needed

Once your integration reads virtual accounts, you can create additional USD accounts for customers who need to separate payments by purpose. Subscribe to Virtual Account Webhooks to track their creation and later status changes.

The separate deposit_instructions API is not deprecated. It continues to provide both fiat and crypto deposit instructions.