/stripe-guides

How to resolve Stripe “payouts not enabled” error?

Learn how to fix the Stripe "payouts not enabled" error with step-by-step instructions for account verification, bank setup, API checks, and contacting Stripe support.

Matt Graham, CEO of Rapid Developers

Book a call with an Expert

Starting a new venture? Need to upgrade your web app? RapidDev builds application with your growth in mind.

Book a free consultation

How to resolve Stripe “payouts not enabled” error?

How to Resolve Stripe "Payouts Not Enabled" Error: A Comprehensive Tutorial

 

Step 1: Understanding the "Payouts Not Enabled" Error

 

The "Payouts Not Enabled" error in Stripe typically occurs when your account hasn't completed the necessary verification steps to receive funds. This can happen for several reasons:

  • Your Stripe account setup is incomplete
  • You haven't provided all required business or personal information
  • Bank account details are missing or invalid
  • Your account is still under review by Stripe
  • There are restrictions based on your location or business type

 

Step 2: Log in to Your Stripe Dashboard

 

First, access your Stripe account dashboard:

  • Go to https://dashboard.stripe.com
  • Enter your login credentials
  • If you're using two-factor authentication, complete the verification

 

Step 3: Check Your Account Activation Status

 

Once logged in, check if there are any pending tasks for your account activation:

  • Look for a notification banner at the top of your dashboard
  • Navigate to Settings → Account Settings
  • Check for any incomplete sections marked with warning icons

 

Step 4: Complete Your Business Profile

 

Ensure your business profile is complete:

  • Go to Settings → Business Settings → Business Profile
  • Fill in all required business information including business name, type, and registration details
  • Provide accurate contact information
  • Upload any required business documentation

 

Step 5: Verify Your Identity

 

Complete personal identity verification:

  • Go to Settings → Account Settings → Persons
  • Ensure all required fields are completed for each person listed
  • Upload identification documents as requested (passport, driver's license, etc.)
  • Verify your email address and phone number if prompted

 

Step 6: Set Up Your Bank Account Properly

 

Ensure your bank account is properly configured:

  • Navigate to Settings → Payment Settings → Bank Accounts and Scheduling
  • Add a bank account if you haven't done so already
  • Verify that the account details are correct (account number, routing number, etc.)
  • Complete any additional verification steps Stripe requires for your bank account

 

Step 7: Check for Verification Micro-deposits

 

If Stripe uses micro-deposits for verification:

  • Wait for Stripe to send small deposits to your bank account (usually takes 1-2 business days)
  • Once you see these deposits in your bank statement, return to Stripe dashboard
  • Go to Settings → Payment Settings → Bank Accounts
  • Click on the bank account that needs verification
  • Enter the exact amounts of the micro-deposits to confirm your account

 

Step 8: Check Your Account via the Stripe API

 

For developers, you can check your account status programmatically:


const stripe = require('stripe')('sk_test_YOUR_SECRET_KEY');

async function checkAccountStatus() {
  try {
    const account = await stripe.accounts.retrieve();
    console.log('Account Status:', account.payouts\_enabled);
    console.log('Charges Enabled:', account.charges\_enabled);
    console.log('Requirements:', account.requirements);
    return account;
  } catch (error) {
    console.error('Error retrieving account:', error);
    throw error;
  }
}

checkAccountStatus();

 

Step 9: Address Specific Requirements

 

If the API or dashboard shows specific requirements that need addressing:

  • Look for the "requirements" section in your account details
  • Address each requirement individually
  • For connected accounts, ensure the platform is providing all required information

Example of checking specific requirements via API:


const stripe = require('stripe')('sk_test_YOUR_SECRET_KEY');

async function checkAccountRequirements() {
  try {
    const account = await stripe.accounts.retrieve();
    
    if (account.requirements) {
      console.log('Currently Due:', account.requirements.currently\_due);
      console.log('Eventually Due:', account.requirements.eventually\_due);
      console.log('Past Due:', account.requirements.past\_due);
    }
    
    return account.requirements;
  } catch (error) {
    console.error('Error checking requirements:', error);
    throw error;
  }
}

checkAccountRequirements();

 

Step 10: Update Account Information via API (If Needed)

 

If you need to update specific account information programmatically:


const stripe = require('stripe')('sk_test_YOUR_SECRET_KEY');

async function updateAccountInformation() {
  try {
    const account = await stripe.accounts.update({
      business\_profile: {
        mcc: '5734', // Merchant Category Code
        url: 'https://example.com',
        support\_email: '[email protected]',
        support\_phone: '+15555555555'
      },
      company: {
        name: 'Example Business LLC',
        tax\_id: '123456789',
        address: {
          line1: '123 Main St',
          city: 'San Francisco',
          state: 'CA',
          postal\_code: '94111',
          country: 'US'
        }
      },
      tos\_acceptance: {
        date: Math.floor(Date.now() / 1000),
        ip: '192.168.0.1' // User's IP address
      }
    });
    
    console.log('Account updated successfully:', account.id);
    return account;
  } catch (error) {
    console.error('Error updating account:', error);
    throw error;
  }
}

updateAccountInformation();

 

Step 11: Check for Restrictions in Your Region

 

Some countries or regions have specific restrictions:

  • Verify that Stripe supports payouts in your country
  • Check if there are additional regional requirements
  • Ensure your business type is eligible for Stripe payouts in your region

 

Step 12: Contact Stripe Support

 

If you've completed all the steps and still face issues:

  • Go to https://support.stripe.com
  • Click on "Contact Support"
  • Provide detailed information about your issue
  • Include your account ID and any error messages you're receiving
  • Ask specifically about the status of your payout capability

 

Step 13: Handle the Error Gracefully in Your Application

 

While resolving the issue, update your application to handle the error gracefully:


const stripe = require('stripe')('sk_test_YOUR_SECRET_KEY');

async function createPayout(amount, currency = 'usd') {
  try {
    // First check if payouts are enabled
    const account = await stripe.accounts.retrieve();
    
    if (!account.payouts\_enabled) {
      console.error('Payouts are not enabled for this account');
      
      // Get specific details about why payouts are disabled
      const requirements = account.requirements || {};
      const currentlyDue = requirements.currently\_due || [];
      
      if (currentlyDue.length > 0) {
        console.error('Requirements needed for payouts:', currentlyDue);
      }
      
      // You might want to notify the user or admin here
      return {
        success: false,
        error: 'payouts_not_enabled',
        requirements: currentlyDue
      };
    }
    
    // If payouts are enabled, proceed with payout
    const payout = await stripe.payouts.create({
      amount: amount,
      currency: currency,
    });
    
    return {
      success: true,
      payout: payout
    };
  } catch (error) {
    console.error('Error creating payout:', error);
    return {
      success: false,
      error: error.message
    };
  }
}

// Example usage
createPayout(1000).then(result => {
  if (result.success) {
    console.log('Payout created successfully:', result.payout.id);
  } else {
    console.log('Failed to create payout:', result.error);
    
    if (result.requirements) {
      console.log('Please complete these requirements:', result.requirements);
    }
  }
});

 

Step 14: Implement Webhook Monitoring for Account Updates

 

Set up webhooks to monitor account status changes:


const express = require('express');
const stripe = require('stripe')('sk_test_YOUR_SECRET_KEY');
const app = express();

// Use JSON parser for webhook requests
app.use('/webhook', express.raw({type: 'application/json'}));

app.post('/webhook', async (req, res) => {
  const sig = req.headers['stripe-signature'];
  let event;

  try {
    event = stripe.webhooks.constructEvent(
      req.body,
      sig,
      'whsec_YOUR_WEBHOOK\_SECRET'
    );
  } catch (err) {
    console.error(`Webhook Error: ${err.message}`);
    return res.status(400).send(`Webhook Error: ${err.message}`);
  }

  // Handle specific account update events
  if (event.type === 'account.updated') {
    const account = event.data.object;
    
    console.log('Account updated:', account.id);
    console.log('Payouts enabled:', account.payouts\_enabled);
    
    // If payouts just became enabled, you might want to:
    // 1. Update your database
    // 2. Notify administrators
    // 3. Process any pending payouts
    if (account.payouts\_enabled) {
      // Handle newly enabled payouts
      console.log('Payouts have been enabled!');
      // notifyAdmin('Payouts are now enabled for your Stripe account');
      // processAnyPendingPayouts();
    }
  }

  res.json({received: true});
});

app.listen(3000, () => {
  console.log('Webhook server running on port 3000');
});

 

Step 15: Regular Account Monitoring

 

Implement a regular check of your account status:


const stripe = require('stripe')('sk_test_YOUR_SECRET_KEY');
const cron = require('node-cron');

// Schedule a job to run daily at midnight
cron.schedule('0 0 _ _ \*', async () => {
  try {
    console.log('Running scheduled Stripe account check...');
    
    const account = await stripe.accounts.retrieve();
    
    // Log current account status
    console.log('Account ID:', account.id);
    console.log('Payouts Enabled:', account.payouts\_enabled);
    console.log('Charges Enabled:', account.charges\_enabled);
    
    // Check for any pending requirements
    if (account.requirements) {
      const currentlyDue = account.requirements.currently\_due || [];
      const eventuallyDue = account.requirements.eventually\_due || [];
      const pastDue = account.requirements.past\_due || [];
      
      if (currentlyDue.length > 0) {
        console.warn('Requirements currently due:', currentlyDue);
        // Send notification to administrators
        // notifyAdmin('Action required: Stripe account has pending requirements', currentlyDue);
      }
      
      if (pastDue.length > 0) {
        console.error('Requirements past due:', pastDue);
        // Send urgent notification
        // notifyAdmin('URGENT: Stripe account has past due requirements', pastDue);
      }
    }
    
    console.log('Stripe account check completed.');
  } catch (error) {
    console.error('Error checking Stripe account status:', error);
    // notifyAdmin('Error monitoring Stripe account', error.message);
  }
});

console.log('Stripe account monitoring scheduled.');

 

Step 16: Follow Up and Maintain Compliance

 

After resolving the immediate issue:

  • Regularly check your Stripe Dashboard for any new requirements
  • Keep your business and personal information up-to-date
  • Respond promptly to any requests for additional information from Stripe
  • Stay informed about Stripe's terms of service and policy changes
  • Maintain proper documentation of your verification process for reference

Want to explore opportunities to work with us?

Connect with our team to unlock the full potential of no-code solutions with a no-commitment consultation!

Book a Free Consultation

Client trust and success are our top priorities

When it comes to serving you, we sweat the little things. That’s why our work makes a big impact.

Rapid Dev was an exceptional project management organization and the best development collaborators I've had the pleasure of working with. They do complex work on extremely fast timelines and effectively manage the testing and pre-launch process to deliver the best possible product. I'm extremely impressed with their execution ability.

CPO, Praction - Arkady Sokolov

May 2, 2023

Working with Matt was comparable to having another co-founder on the team, but without the commitment or cost. He has a strategic mindset and willing to change the scope of the project in real time based on the needs of the client. A true strategic thought partner!

Co-Founder, Arc - Donald Muir

Dec 27, 2022

Rapid Dev are 10/10, excellent communicators - the best I've ever encountered in the tech dev space. They always go the extra mile, they genuinely care, they respond quickly, they're flexible, adaptable and their enthusiasm is amazing.

Co-CEO, Grantify - Mat Westergreen-Thorne

Oct 15, 2022

Rapid Dev is an excellent developer for no-code and low-code solutions.
We’ve had great success since launching the platform in November 2023. In a few months, we’ve gained over 1,000 new active users. We’ve also secured several dozen bookings on the platform and seen about 70% new user month-over-month growth since the launch.

Co-Founder, Church Real Estate Marketplace - Emmanuel Brown

May 1, 2024 

Matt’s dedication to executing our vision and his commitment to the project deadline were impressive. 
This was such a specific project, and Matt really delivered. We worked with a really fast turnaround, and he always delivered. The site was a perfect prop for us!

Production Manager, Media Production Company - Samantha Fekete

Sep 23, 2022