Dedicated virtual account (DVA) creation fails when your Paystack business is not activated for DVA, your KYC documents are incomplete, you are using a starter business, or the bank provider is not available for your country. Check your business activation status in Dashboard > Settings > Preferences, verify your KYC is fully approved, and confirm your business type supports DVA before making the API call.
When you call the Paystack Create Dedicated Virtual Account endpoint and it fails, the response varies depending on the root cause. Here are the common shapes:
// Missing DVA activation
{
"status": false,
"message": "Dedicated NUBAN is not available for this business"
}
// Incomplete customer data
{
"status": false,
"message": "Customer first name, last name, and phone are required"
}
// Provider not available
{
"status": false,
"message": "The selected provider is not available"
}
// Business not verified
{
"status": false,
"message": "Your business has not been fully activated"
}
Each of these points to a different prerequisite you have not satisfied. Let us go through every one.
Dedicated virtual accounts on Paystack have more prerequisites than standard payment acceptance. Here is every requirement, in order:
Your Paystack account must be a registered business, not a starter business. Starter accounts are limited to basic payment acceptance. DVA requires a registered LLC, enterprise, sole proprietorship with CAC registration (Nigeria), or the equivalent registered entity in your country. You can check your account type in Dashboard > Settings > Business Settings.
Every required KYC document must be submitted and approved. Partial submission is not enough. Common required documents include:
Check approval status in Dashboard > Settings > Compliance. Each document should show a green "Approved" badge. "Pending" or "Rejected" blocks DVA creation.
Even with full KYC, DVA is a separate feature that Paystack must enable on your account. Go to Dashboard > Settings > Preferences and look for the "Dedicated Accounts" section. If it is not there or shows as disabled, contact Paystack support to request activation.
DVA relies on partner banks (like Wema Bank and Titan Trust Bank in Nigeria). The available providers depend on your business country. Requesting a provider that does not serve your region produces an error.
The customer you are assigning the DVA to must have a complete profile: email, first_name, last_name, and phone. A customer created with only an email will fail DVA assignment.
Get weekly developer tips
Join 25,000+ developers. Practical guides, job tips, and new content — straight to your inbox.
No spam. Unsubscribe anytime.
This is the most common cause. Your Paystack account can accept payments just fine, but DVA is a separate capability that requires explicit activation.
Log into your Paystack Dashboard. Navigate to Settings > Preferences. Look for the Dedicated Accounts section. If you do not see it, DVA is not enabled for your business.
Contact Paystack support through Dashboard > Support or email support@paystack.com. Request DVA activation. Include your business ID and explain your use case (marketplace deposits, wallet funding, recurring collections, etc.). Paystack reviews these requests and typically responds within 1 to 3 business days.
While waiting, you can still build and test your DVA integration using Paystack test mode. Test mode DVA creation works without full activation, so you can verify your code is correct before going live.
If any required compliance document is still pending review or was rejected, DVA creation will fail. The error message does not always specify which document is the problem.
Go to Dashboard > Settings > Compliance. Review each required document:
Blurry or low-resolution document scans. Expired government ID. Business name on documents does not match the name on your Paystack account. Address proof older than 3 months. Missing signatures on authorization letters.
Resubmit the rejected documents with corrections. Make sure scans are clear, IDs are current, and business names match exactly. After resubmission, allow 1 to 3 business days for review. Do not attempt DVA creation until all documents show "Approved."
Paystack starter accounts (personal or unregistered business accounts) cannot create DVAs. This is a regulatory requirement, not just a Paystack policy. Banks that issue virtual account numbers require registered business entities as account holders.
Dashboard > Settings > Business Settings shows your account type. If it says "Starter" or "Individual," you need to upgrade.
Upgrade your Paystack account to a registered business. This requires:
The upgrade process typically takes 3 to 7 business days including document review. Once approved, your account type changes and you can request DVA activation.
DVA assignment requires a fully populated customer record. Unlike standard transactions where an email is enough, DVA needs the customer's full name and phone number for the bank's KYC process.
{
"status": false,
"message": "Customer first name, last name, and phone are required"
}
Update the customer object before attempting DVA creation:
// Step 1: Create or update customer with full details
const customerResponse = await fetch('https://api.paystack.co/customer', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_your_secret_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
email: 'customer@example.com',
first_name: 'Amina',
last_name: 'Okafor',
phone: '+2348012345678',
}),
});
const customer = await customerResponse.json();
// Step 2: Now create the dedicated account
const dvaResponse = await fetch('https://api.paystack.co/dedicated_account', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_your_secret_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
customer: customer.data.id, // or customer.data.customer_code
preferred_bank: 'wema-bank',
}),
});
const dva = await dvaResponse.json();
console.log(dva);
// { status: true, data: { bank: { name: "Wema Bank" }, account_number: "..." } }
If the customer already exists but has incomplete fields, use the Update Customer endpoint (PUT /customer/:code) to add the missing first_name, last_name, and phone before retrying.
Paystack DVA relies on partner banks to issue virtual account numbers. Not every bank partner operates in every Paystack-supported country.
Call the Fetch Bank Providers endpoint before attempting DVA creation:
const response = await fetch('https://api.paystack.co/dedicated_account/available_providers', {
headers: {
Authorization: 'Bearer sk_live_your_secret_key',
},
});
const providers = await response.json();
console.log(providers.data);
// Returns list of available providers for your business country
If this returns an empty array, DVA is not yet available in your country. If it returns providers but you are requesting a different one, switch your preferred_bank parameter to one that is listed.
When DVA creation fails, run through this sequence:
message field tells you which prerequisite failed. Read it carefully before searching for solutions./dedicated_account/available_providers and confirm the provider you are requesting is listed.If you have checked everything above and it still fails, open a support ticket with Paystack. Include: your business ID, the customer code you are trying to assign a DVA to, the full API response you received, and the timestamp of the request. This helps support locate your request in their logs quickly.
After resolving the prerequisite issue, confirm DVA creation works end to end:
// 1. Verify customer has all required fields
const customer = await fetch('https://api.paystack.co/customer/CUS_xxxxx', {
headers: { Authorization: 'Bearer sk_live_your_secret_key' },
}).then(r => r.json());
console.log('Customer:', {
email: customer.data.email,
first_name: customer.data.first_name,
last_name: customer.data.last_name,
phone: customer.data.phone,
});
// All four should be populated
// 2. Verify providers are available
const providers = await fetch(
'https://api.paystack.co/dedicated_account/available_providers',
{ headers: { Authorization: 'Bearer sk_live_your_secret_key' } }
).then(r => r.json());
console.log('Available providers:', providers.data.map(p => p.provider_slug));
// 3. Create the dedicated account
const dva = await fetch('https://api.paystack.co/dedicated_account', {
method: 'POST',
headers: {
Authorization: 'Bearer sk_live_your_secret_key',
'Content-Type': 'application/json',
},
body: JSON.stringify({
customer: customer.data.customer_code,
preferred_bank: providers.data[0].provider_slug,
}),
}).then(r => r.json());
if (dva.status) {
console.log('DVA created:', dva.data.account_number, dva.data.bank.name);
} else {
console.error('DVA still failing:', dva.message);
}
A successful response returns status: true with the assigned bank name and virtual account number. The customer can now receive bank transfers to this account number, and Paystack will credit the funds to your balance and fire a dedicatedaccount.assign.success webhook event.
KES 2,999
The definitive guide to building payment systems with Paystack — from your first transaction to production-grade payment infrastructure across Africa. 9 modules, 47 lessons. Free preview available.
Start Paystack Course