Skip to main content

What is a virtual account?

A virtual account gives a customer bank details for receiving payments. Daya supports these funding currencies: Payments into both account types settle in USD. After applicable fees, Daya credits the merchant collection balance. Daya does not currently maintain a separate EUR balance. Virtual accounts are separate from funding accounts. Use Funding Accounts when customers need to send NGN or crypto into Daya.

Prerequisites

The customer must complete Tier 2 verification before you create a virtual account. For businesses, Tier 2 business KYB satisfies this requirement.EUR virtual accounts are available to eligible Tier 2 customers and require additional approval for SEPA access. If a verified customer cannot create a EUR virtual account, contact Daya to confirm eligibility.
See Submit Tier 2 Verification for individual KYC and business KYB.

Individual verification flow

  1. Create a customer with POST /v1/customers.
  2. Complete Tier 1 verification with POST /v1/customers/{id}/tier1-verification. A phone number is required only when the Tier 1 request also includes bank details for Paystack.
  3. Complete Tier 2 verification with POST /v1/customers/{id}/tier2-verification.
  4. Wait until the Tier 2 status is VERIFIED.
  5. Create the USD or EUR virtual account.

Business verification flow

  1. Create a customer with POST /v1/customers.
  2. Submit business KYB with POST /v1/customers/{id}/tier2-verification and customer_type: "business".
  3. Wait until tier_2_kyc_complete is true.
  4. Create the USD or EUR virtual account for that customer_id.

Create an account

Use POST /v1/virtual-accounts. Set currency to usd or eur. If you omit currency, Daya uses usd.
EUR account request
Use only the bank details and payment rails returned for that account. Each customer can have one active EUR virtual account. If you repeat the same EUR request with the same developer fee, Daya returns the existing account.

Virtual account properties

Deposit instruction fields

The available fields depend on the account currency.

How deposits settle

USD deposit

  1. The sender pays USD to the returned bank account.
  2. Daya processes the payment.
  3. After applicable fees, Daya credits the merchant USD collection balance.
  4. Daya sends deposit.received and deposit.completed webhooks.

EUR deposit

  1. The sender pays EUR to the returned IBAN through a supported SEPA rail.
  2. Daya converts the incoming payment and settles it in USD.
  3. After applicable fees, Daya credits the merchant USD collection balance.
  4. The deposit response and webhooks include the original EUR amount and applied exchange rate.
For a EUR-funded deposit:
Use /v1/virtual-account-deposits for payments into USD and EUR virtual accounts. Use /v1/deposits for NGN and crypto funding-account deposits.
A EUR virtual account is a EUR receiving account with USD settlement. Do not present it as a separately maintained EUR wallet or EUR balance.

Webhook handling

Virtual account deposits send deposit.received and deposit.completed. Credit your customer only once, using deposit.completed as the terminal signal. Deduplicate on data.id because separate webhook events for the same deposit have different envelope IDs. See Webhook Events for the complete delivery and idempotency guidance.

Developer fees

Developer fees let you keep a percentage of each settled virtual account deposit. Add developer_fee.percentage when you create the account. Use a decimal string from 0 to 50. Omit developer_fee to use 0%. The value is a percentage, not basis points. For example, 0.5 means 0.5%, 2 means 2%, and 50 means 50%. For EUR-funded deposits, Daya calculates the developer fee from the converted USD amount after Daya deposit fees. Deposit responses and webhooks include developer_fee and customer_amount for reconciliation.

Relationship to Tier 2 verification

For individual customers, submit Tier 2 KYC. For business customers, submit Tier 2 KYB with customer_type: "business". Both use Submit Tier 2 Verification.

API routes


Next steps

Create Virtual Account

Provision USD or EUR receiving details

Tier 2 Verification

Complete the required customer verification

Virtual Account Deposits

Reconcile USD- and EUR-funded deposits