# How to remove payout delays in Stripe

- Tool: Stripe
- Difficulty: Beginner
- Time required: 10 minutes
- Compatibility: Stripe API v2024-12+, Node.js 18+
- Last updated: March 2026

## TL;DR

Stripe holds funds for 2-7 days by default to mitigate fraud risk. You can reduce payout delays by enabling Instant Payouts (requires eligible bank/debit card) or by adjusting your payout schedule in the Dashboard. This guide walks through both approaches with code examples for triggering instant payouts via the API.

## Why Stripe Holds Your Funds and How to Speed Things Up

Stripe applies a default payout delay (typically 2 business days in the US, up to 7 days in other regions) to protect against chargebacks and fraud. Instant Payouts let you receive funds in minutes for a 1% fee (minimum $0.50). You can also switch from the default rolling schedule to manual or weekly payouts depending on your cash-flow needs.

## Before you start

- A verified Stripe account with payouts enabled
- Node.js 18 or later installed
- Stripe Node.js SDK installed: npm install stripe
- An eligible debit card or bank account linked for Instant Payouts

## Step-by-step guide

### 1. Check your current payout schedule

Use the Stripe API to retrieve your account's current payout settings. This tells you the delay_days and interval currently configured.

```
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

async function checkPayoutSchedule() {
  const account = await stripe.accounts.retrieve();
  console.log('Payout schedule:', account.settings.payouts.schedule);
  // { delay_days: 2, interval: 'daily' }
}

checkPayoutSchedule();
```

**Expected result:** Console logs your current payout schedule object showing delay_days and interval.

### 2. Check Instant Payout eligibility

Not all accounts or bank instruments qualify for Instant Payouts. Query your balance to see if instant payouts are available.

```
async function checkInstantEligibility() {
  const balance = await stripe.balance.retrieve();
  const available = balance.instant_available;
  if (available && available.length > 0) {
    console.log('Instant Payout available:', available[0].amount, 'cents');
  } else {
    console.log('Instant Payouts not available for this account.');
  }
}

checkInstantEligibility();
```

**Expected result:** Console shows either the available instant payout amount or a message that instant payouts are not available.

### 3. Trigger an Instant Payout

Create a payout with method set to 'instant'. The amount is in cents. Stripe charges a 1% fee (min $0.50) for instant payouts.

```
async function createInstantPayout() {
  const payout = await stripe.payouts.create({
    amount: 5000, // $50.00 in cents
    currency: 'usd',
    method: 'instant',
  });
  console.log('Instant payout created:', payout.id, 'Status:', payout.status);
}

createInstantPayout();
```

**Expected result:** A payout object is returned with status 'paid' (or 'pending' for standard) and an arrival_date within minutes.

### 4. Adjust your automatic payout schedule

If Instant Payouts are not available, you can minimize delays by setting delay_days to the minimum your account supports. Go to Dashboard → Settings → Payouts, or use the API.

```
async function updatePayoutSchedule() {
  const account = await stripe.accounts.update('acct_self', {
    settings: {
      payouts: {
        schedule: {
          delay_days: 'minimum',
          interval: 'daily',
        },
      },
    },
  });
  console.log('Updated schedule:', account.settings.payouts.schedule);
}

updatePayoutSchedule();
```

**Expected result:** The payout schedule is updated to the minimum delay your account qualifies for (often 2 days in the US).

## Complete code example

File: `payout-management.js`

```javascript
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

async function checkPayoutSchedule() {
  const account = await stripe.accounts.retrieve();
  console.log('Current payout schedule:', account.settings.payouts.schedule);
  return account.settings.payouts.schedule;
}

async function checkInstantEligibility() {
  const balance = await stripe.balance.retrieve();
  const available = balance.instant_available;
  if (available && available.length > 0) {
    console.log('Instant Payout available:', available[0].amount, 'cents');
    return true;
  }
  console.log('Instant Payouts not available.');
  return false;
}

async function createInstantPayout(amountInCents) {
  try {
    const payout = await stripe.payouts.create({
      amount: amountInCents,
      currency: 'usd',
      method: 'instant',
    });
    console.log('Instant payout created:', payout.id);
    console.log('Status:', payout.status);
    console.log('Arrival:', new Date(payout.arrival_date * 1000));
    return payout;
  } catch (err) {
    console.error('Instant payout failed:', err.message);
    throw err;
  }
}

async function setMinimumDelay() {
  const account = await stripe.accounts.update('acct_self', {
    settings: {
      payouts: {
        schedule: {
          delay_days: 'minimum',
          interval: 'daily',
        },
      },
    },
  });
  console.log('Updated schedule:', account.settings.payouts.schedule);
  return account.settings.payouts.schedule;
}

async function main() {
  await checkPayoutSchedule();
  const eligible = await checkInstantEligibility();
  if (eligible) {
    await createInstantPayout(5000); // $50.00
  } else {
    await setMinimumDelay();
  }
}

main().catch(console.error);
```

## Common mistakes

- **Trying Instant Payouts without an eligible debit card linked** — undefined Fix: Add an eligible Visa or Mastercard debit card as an external account in Dashboard → Settings → Bank accounts and scheduling.
- **Expecting zero-day delays on a new account** — undefined Fix: New accounts have higher delay requirements. Build transaction history and maintain low dispute rates to qualify for shorter delays.
- **Passing amount in dollars instead of cents** — undefined Fix: Stripe amounts are always in the smallest currency unit. Use 5000 for $50.00, not 50.
- **Using Instant Payouts in live mode without testing first** — undefined Fix: Always test in test mode first. Instant Payouts in test mode simulate success without real bank transfers.

## Best practices

- Always check instant_available balance before attempting an Instant Payout
- Handle payout failures gracefully — bank rejections can happen even with valid cards
- Monitor payout.failed webhook events to alert your team of issues
- Use the minimum delay_days setting rather than hardcoding a number, as eligibility can change
- Keep dispute rates below 0.75% to maintain favorable payout terms
- Set up payout reconciliation to match Stripe payouts with your bank deposits
- Use metadata on payouts to tag them for internal tracking

## Frequently asked questions

### How much does Stripe Instant Payouts cost?

Instant Payouts cost 1% of the payout amount with a minimum fee of $0.50. For example, a $100 instant payout costs $1.00.

### Can I get same-day payouts without using Instant Payouts?

No. Standard payouts take at least 1-2 business days in the US and up to 7 days in other regions. Instant Payouts are the only way to receive funds within minutes.

### Why is my Stripe payout delay 7 days instead of 2?

New accounts or accounts in certain countries start with longer delays. As you build transaction history and maintain low dispute rates, Stripe may automatically reduce your delay.

### Can I trigger Instant Payouts from the Stripe Dashboard?

Yes. Go to Balance → Pay out funds → select Instant as the speed. The API method shown in this guide is useful for automating the process.

### What happens if an Instant Payout fails?

The funds return to your Stripe balance and you are not charged the instant payout fee. Check the payout.failed webhook event for the failure reason.

---

Source: https://www.rapidevelopers.com/stripe-guide/how-to-remove-payout-delays-in-stripe
© RapidDev — https://www.rapidevelopers.com/stripe-guide/how-to-remove-payout-delays-in-stripe
