The 'Payouts not enabled' error in Stripe means your account is missing required verification information — typically business details, bank account, or identity documents. This guide walks through every verification requirement, shows how to check your account status via the API, and provides the exact steps to resolve the error and start receiving payouts.
Understanding the Payouts Not Enabled Error
Stripe requires identity verification, business details, and a valid bank account before enabling payouts. If any of these are missing or outdated, Stripe sets payouts_enabled to false on your account. This commonly happens with new accounts, after regulatory changes, or when Stripe requests additional documentation. The fix is straightforward: identify the missing requirements and submit them.
Prerequisites
- A Stripe account (test or live mode)
- Node.js 18 or later installed
- Stripe Node.js SDK installed: npm install stripe
- Access to your Stripe Dashboard
Step-by-step guide
Check your account's payouts_enabled status
Check your account's payouts_enabled status
Use the API to confirm that payouts are disabled and see what requirements are outstanding.
1const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);23async function checkPayoutStatus() {4 const account = await stripe.accounts.retrieve();5 console.log('Payouts enabled:', account.payouts_enabled);6 console.log('Currently due:', account.requirements.currently_due);7 console.log('Past due:', account.requirements.past_due);8 console.log('Errors:', account.requirements.errors);9}1011checkPayoutStatus();Expected result: Console shows payouts_enabled: false along with arrays listing the missing requirements like 'individual.verification.document' or 'external_account'.
Submit missing verification information
Submit missing verification information
Based on the requirements listed in currently_due or past_due, update your account. Common requirements include business type, external bank account, and identity verification.
1async function submitRequirements() {2 // Example: update business profile and individual details3 const account = await stripe.accounts.update('acct_self', {4 business_profile: {5 mcc: '5734',6 url: 'https://yoursite.com',7 },8 individual: {9 first_name: 'Jane',10 last_name: 'Doe',11 dob: { day: 15, month: 6, year: 1990 },12 address: {13 line1: '123 Main St',14 city: 'San Francisco',15 state: 'CA',16 postal_code: '94111',17 country: 'US',18 },19 ssn_last_4: '1234',20 },21 });22 console.log('Updated. Payouts enabled:', account.payouts_enabled);23 console.log('Remaining requirements:', account.requirements.currently_due);24}2526submitRequirements();Expected result: The requirements list shrinks. If all requirements are met, payouts_enabled flips to true.
Add an external bank account if missing
Add an external bank account if missing
Payouts require a linked bank account or debit card. If 'external_account' is in your requirements, add one.
1async function addBankAccount() {2 const account = await stripe.accounts.createExternalAccount('acct_self', {3 external_account: {4 object: 'bank_account',5 country: 'US',6 currency: 'usd',7 routing_number: '110000000', // Test routing number8 account_number: '000123456789', // Test account number9 },10 });11 console.log('Bank account added:', account.id);12}1314addBankAccount();Expected result: A bank account object is created and linked to your Stripe account.
Set up a webhook to monitor verification changes
Set up a webhook to monitor verification changes
Listen for account.updated events so you know immediately when payouts become enabled or if new requirements appear.
1const express = require('express');2const app = express();34app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {5 const sig = req.headers['stripe-signature'];6 let event;7 try {8 event = stripe.webhooks.constructEvent(9 req.body,10 sig,11 process.env.STRIPE_WEBHOOK_SECRET12 );13 } catch (err) {14 console.error('Webhook signature failed:', err.message);15 return res.status(400).send(`Webhook Error: ${err.message}`);16 }1718 if (event.type === 'account.updated') {19 const account = event.data.object;20 console.log('Payouts enabled:', account.payouts_enabled);21 console.log('Requirements:', account.requirements.currently_due);22 }2324 res.json({ received: true });25});2627app.listen(3000, () => console.log('Webhook listener on port 3000'));Expected result: Your server receives account.updated events and logs the current payout status whenever Stripe updates your account.
Complete working example
1const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);2const express = require('express');3const app = express();45async function diagnosePayoutIssue() {6 const account = await stripe.accounts.retrieve();7 console.log('Payouts enabled:', account.payouts_enabled);89 if (!account.payouts_enabled) {10 const reqs = account.requirements;11 console.log('\nCurrently due:', reqs.currently_due);12 console.log('Past due:', reqs.past_due);13 console.log('Pending verification:', reqs.pending_verification);1415 if (reqs.errors && reqs.errors.length > 0) {16 console.log('\nErrors:');17 reqs.errors.forEach((e) => {18 console.log(` - ${e.requirement}: ${e.reason}`);19 });20 }2122 if (reqs.currently_due.includes('external_account')) {23 console.log('\nAction needed: Add a bank account or debit card.');24 }25 if (reqs.currently_due.some((r) => r.includes('verification'))) {26 console.log('Action needed: Submit identity verification documents.');27 }28 } else {29 console.log('Payouts are enabled. No action needed.');30 }31}3233// Webhook to monitor payout status changes34app.post('/webhook', express.raw({ type: 'application/json' }), (req, res) => {35 const sig = req.headers['stripe-signature'];36 let event;37 try {38 event = stripe.webhooks.constructEvent(39 req.body,40 sig,41 process.env.STRIPE_WEBHOOK_SECRET42 );43 } catch (err) {44 return res.status(400).send(`Webhook Error: ${err.message}`);45 }4647 if (event.type === 'account.updated') {48 const acct = event.data.object;49 if (acct.payouts_enabled) {50 console.log('Payouts are now enabled!');51 } else {52 console.log('Payouts still disabled. Due:', acct.requirements.currently_due);53 }54 }5556 res.json({ received: true });57});5859app.listen(3000, () => {60 console.log('Server running on port 3000');61 diagnosePayoutIssue();62});Common mistakes when resolving Stripe 'payouts not enabled' error
Why it's a problem: Ignoring the requirements.errors array
How to avoid: The errors array contains specific rejection reasons (e.g., blurry document). Always check it for actionable feedback.
Why it's a problem: Only checking currently_due and missing past_due
How to avoid: Requirements in past_due have already passed their deadline and may be causing payouts to be disabled. Address these first.
Why it's a problem: Submitting test documents in live mode
How to avoid: Stripe's test tokens only work in test mode. In live mode, submit real documents through the Dashboard or API.
Why it's a problem: Not setting up webhooks to track verification progress
How to avoid: Verification can take hours to days. Use account.updated webhooks instead of polling the API.
Best practices
- Complete all verification requirements during initial account setup to avoid payout interruptions
- Monitor account.updated webhook events for early warning of new requirements
- Keep business information current — address changes or legal name changes can trigger re-verification
- Use the Stripe Dashboard verification checklist for a visual overview of what is missing
- In test mode, use Stripe's test SSN and document tokens to simulate the full verification flow
- Set up alerts when payouts_enabled changes to false so your team can respond quickly
- For platforms using Connect, check each connected account's requirements separately
Still stuck?
Copy one of these prompts to get a personalized, step-by-step explanation.
My Stripe account shows 'Payouts not enabled' error. How do I use the Stripe Node.js API to check what verification requirements are missing and fix the issue?
I'm getting a 'payouts not enabled' error in Stripe. Help me write a Node.js script that checks my account requirements, identifies what's missing, and sets up a webhook to monitor when payouts become enabled.
Frequently asked questions
How long does Stripe verification take?
Automated checks complete in minutes. Manual document review can take 1-3 business days. You will receive an account.updated webhook when verification completes.
Can I still accept payments if payouts are not enabled?
Yes. Stripe can still process charges. The funds accumulate in your Stripe balance and are paid out once payouts are enabled.
What documents does Stripe require for verification?
Typically a government-issued ID (passport, driver's license) for the individual, and business registration documents for companies. The exact requirements depend on your country and business type.
Why did my payouts get disabled after being enabled?
Stripe may request additional information due to regulatory changes, increased transaction volume, or periodic re-verification. Check requirements.currently_due for what is newly required.
Can RapidDev help if my Stripe verification keeps failing?
Yes. RapidDev's engineering team can help troubleshoot complex Stripe account verification issues, especially for platforms using Connect with multiple account types.
Talk to an Expert
Our team has built 600+ apps. Get personalized help with your project.
Book a free consultation