Skip to main content
RapidDev - Software Development Agency
stripe-guide

How to resolve Stripe 'payouts not enabled' error

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.

What you'll learn

  • Why Stripe disables payouts and what triggers the error
  • How to check your account's verification status via the API
  • How to identify and submit missing requirements
  • How to listen for account.updated webhooks to know when payouts are re-enabled
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Beginner5 min read15 minutesStripe API v2024-12+, Node.js 18+March 2026RapidDev Engineering Team
TL;DR

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

1

Check your account's payouts_enabled status

Use the API to confirm that payouts are disabled and see what requirements are outstanding.

typescript
1const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
2
3async 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}
10
11checkPayoutStatus();

Expected result: Console shows payouts_enabled: false along with arrays listing the missing requirements like 'individual.verification.document' or 'external_account'.

2

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.

typescript
1async function submitRequirements() {
2 // Example: update business profile and individual details
3 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}
25
26submitRequirements();

Expected result: The requirements list shrinks. If all requirements are met, payouts_enabled flips to true.

3

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.

typescript
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 number
8 account_number: '000123456789', // Test account number
9 },
10 });
11 console.log('Bank account added:', account.id);
12}
13
14addBankAccount();

Expected result: A bank account object is created and linked to your Stripe account.

4

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.

typescript
1const express = require('express');
2const app = express();
3
4app.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_SECRET
12 );
13 } catch (err) {
14 console.error('Webhook signature failed:', err.message);
15 return res.status(400).send(`Webhook Error: ${err.message}`);
16 }
17
18 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 }
23
24 res.json({ received: true });
25});
26
27app.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

fix-payouts-not-enabled.js
1const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
2const express = require('express');
3const app = express();
4
5async function diagnosePayoutIssue() {
6 const account = await stripe.accounts.retrieve();
7 console.log('Payouts enabled:', account.payouts_enabled);
8
9 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);
14
15 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 }
21
22 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}
32
33// Webhook to monitor payout status changes
34app.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_SECRET
42 );
43 } catch (err) {
44 return res.status(400).send(`Webhook Error: ${err.message}`);
45 }
46
47 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 }
55
56 res.json({ received: true });
57});
58
59app.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.

ChatGPT Prompt

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?

Stripe Prompt

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.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.