Sweeps Beta

Automate payouts to your customers verified bank accounts by setting up sweeps.

A sweep automatically initiates daily transfers to external bank accounts on a set schedule. Enabling sweeps will either payout funds from a wallet or pull funds to cover fees and chargebacks.

As a platform partner, you can configure sweeps to automatically get paid for fees you’ve collected, or other payments your account has received.

Configure sweeps

To set up a sweep, a verified bank account is required. It may take a few days for bank accounts to become verified during onboarding depending on the verification method. We recommend using instant micro-deposit verification.

In the Dashboard, navigate to an account’s settings page to configure a sweep:

sweeps5.png

sweeps2.png

Configure sweeps with the API from the accounts POST endpoint:

1
2
3
4
5
6
7
8
9
curl -X POST "https://api.moov.io/accounts/{accountID}/sweep-configs" \
  -H 'Authorization: Bearer {token}' \
  --data-raw '{
    "walletID": "UUID",
    "status": "enabled",
    "pushPaymentMethodID": "UUID",
    "pullPaymentMethodID":"UUID",
    "minimumBalance": "150.00"
  }'\
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
mc, _ := moov.NewClient()

minBalance := "150.00"
mc.CreateSweepConfig(ctx, moov.CreateSweepConfig{
  AccountID:           "UUID",
  WalletID:            "UUID",
  Status:              moov.SweepConfigStatus_Enabled,
  PushPaymentMethodID: "UUID",
  PullPaymentMethodID: "UUID",
  MinimumBalance:      &minBalance,
})

Choose your preferred payment methods for payouts — ach-credit-same-day or ach-credit-standard. If using same-day ACH, Moov will attempt to send funds the same day, but will default to standard ACH if the sweep exceeds the $500k limit.

For negative balances, an ach-debit-fund payment method is required. The bank accounts can be different for push and pull operations.

If a payment method becomes disabled due to an issue with the bank account, payouts will not be initiated until a new bank account has been verified.

If you need to update a sweep config, you can use the PATCH endpoint.

Maintain a daily balance

You can choose to maintain a specific balance in your wallet to cover day-to-day operations, or to prevent a negative balance from refunds, disputes, and fees. If set, Moov will ensure the specified balance is maintained on a daily basis when calculating the sweep amount. If no minimum balance is provided, the default maintained daily wallet balance is $0.

Default statement descriptor

Moov uses the companyName specified in the account’s ACH settings for sweep transfers and allows customization on the ACH statement descriptor. If no statement descriptor is provided in the sweep settings, it will default to AUTO SWEEP.

Payout timing

As you process payments, the funds from transactions get bucketed into sweeps and a subsequent transfer gets created with your payout.

Once enabled, the sweep.created webhook event will be sent indicating a sweep has been created. The first payout will be initiated when a sweep closes. A sweep’s accrual period runs on a daily basis and by default, closes at 4pm ET. Sweeps are not processed on weekends or banking holidays and funds will be paid out the next business day.

For card payments, transfers created throughout the day are typically credited to the merchant’s Moov wallet the next banking day. See the card brand timetable for more details.

ACH processing speeds can vary, but funds are generally made available in the morning of the second banking day after the transfer was created.

Moov currently supports the following speeds for daily sweeps:

Push payment method Receive funds by
ach-credit-same-day 6pm ET
ach-credit-standard 10am ET (next day)
rtp-credit Instant (coming soon)

Sweep transfers will assess a fee based on your pricing schedule.

Reconciliation

A sweep’s daily accruedAmount is what typically can be expected to transfer to the associated bank account. However, there are some cases where the amount accrued in the sweep won’t be the amount transferred. For example, when a sweep is first enabled, or a minimum balance is first set, Moov will calculate the transferAmount based on the wallet’s availableBalance in order to maintain the balance in the configuration.

In those one-off cases, Moov calculates the amount to transfer accordingly:

transferAmount = availableBalance at sweep close - minimumBalance

A sweepID is assigned to all debit or credit sweep transactions and can be used to access related sweep activity. For detailed reporting and reconciliation of sweeps, we recommend supplying the sweepID as a query parameter with the list wallet transactions GET endpoint. Using the returned list, you can match the amount received in the bank account with the corresponding transactions.

In the Dashboard, sweep details and transactions can be viewed through a wallet’s details:

To view details about a specific sweep, you can filter the list by the Auto sweep transaction type and click on the transaction:

Negative sweeps

In some cases, you can accrue a negative balance. For example, if you receive $100, but also receive a refund request for a previous payment of $200, the wallet balance would be -$100. When this occurs and the account doesn’t receive more payments or balance out the negative amount, Moov creates a sweep transfer that debits the bank account specified.

Moov will hold the sweep for one business day to account for any incoming payments and initiate the debit the following day if the negative balance rolls over. There is a two-day hold on standard ACH debit transactions, so payouts will only resume once the debit transfer completes.

Failures

When a payout can’t be completed, a sweep.updated webhook event will be sent:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
{
  "eventID": "14980a04-2e32-4921-a771-4959a36534a6",
  "type": "sweep.updated", 
  "data": {
    "sweepID": "51015d0d-8dca-49a0-ba70-abfed073f785",
    "walletID": "50f31cfa-6e41-412b-9935-655e58127583", 
    "status": "failed",
    "transferID" : "0a958eb7-4384-41d6-8bd9-ba1cf9e2f5d2"
  },
  "createdOn": "2021-09-02T13:57:50Z"
}

The transfer’s failureReason indicates the reason for the failure and might also disable the bank account involved. A bank account becoming disabled will trigger a bankaccount.Updated webhook event.

Failed sweeps aren’t retried and no payouts will be made until a new bank account is added and verified.

The current sweep will continue accruing with a status of action-required until a new payment method is designated in the sweep configuration. Once updated, payouts will resume on the default sweep schedule.

Summary Beta