Transfers

A transfer moves money from a source payment method to a destination payment method, and every one follows the same arc: you create it, a payment rail moves it, the funds land, and for some time after that it can still be undone or come back. Plan your product around the whole arc, not just the API call.

Webhooks

    Start a transfer

    The source and destination payment methods you choose set the rail, and with it the cost, speed, and risk. See choose a payment method to compare them.

    A 2xx response to a create transfer request means Moov accepted the transfer, not that money moved. To create transfers, retry them safely, list them, or manage them in the Dashboard, see create & manage transfers.

    Track a transfer as it moves

    Each rail moves money on its own schedule:

    • Cards authorize in seconds, then settle overnight at the card brand's cutoff.
    • ACH moves in batches. A transfer waits for the next cutoff, and banking days are Monday through Friday.
    • Instant payments (RTP or FedNow) and push to card run in seconds or minutes, 24/7/365.

    A transfer has an overall status, and each leg has its own rail status, such as cardDetails.status or achDetails.status. Both change over time, and the transfer.updated webhook tells you when. The statuses & webhooks guide lists all statuses and associated webhooks.

    Bank holidays

    Transfers created on a bank holiday process on the next banking day, and card settlement due on a holiday shifts to the next banking day. Instant payments (RTP or FedNow) and push to card run every day. The Dashboard shows a notice before an upcoming holiday, and the Federal Reserve publishes the full schedule.

    Federal Reserve holidays are New Year's Day, Martin Luther King Jr. Day, Presidents' Day, Memorial Day, Juneteenth, Independence Day, Labor Day, Columbus Day, Veterans Day, Thanksgiving Day, and Christmas Day.

    Where the money lands

    Money you collect lands in the receiving account's Moov wallet, not directly in a bank account. Card payments, pulls from cards, and ACH debits all credit a wallet. To get money to a bank account or card, you pay it out from the wallet, either one transfer at a time or automatically with a daily sweep.

    A wallet's availableBalance only counts incoming funds once their transfer completes, and money you send out leaves it right away. See wallet balance.

    The exception is a bank-to-bank ACH transfer: an ACH debit into Moov and an ACH credit out of Moov, in a single transfer. The funds pass through Moov without landing in a wallet you can spend from. See ACH.

    Moov may temporarily hold incoming funds for review, for example on a new account or on unusually high volume. See fund a wallet.

    Undo a payment

    A completed payment isn't always final. A payment is cancelable until it moves. After that, the options depend on the rail:

    Rail Before it moves After it moves
    Card A reversal cancels the authorization until settlement The same reversal becomes a refund, debited from the wallet right away
    ACH Cancel until the debit or credit originates No refunds; send a new transfer in the opposite direction
    Instant payments, push to card — Final once sent
    Wallet to wallet — Send a new transfer back

    When something goes wrong

    Some payments fail on the way, and some come back after they've completed. A cardholder can dispute a card payment, and a bank can return an ACH debit or credit weeks later. Moov takes that money back from the wallet that received it, even if it's already been paid out, so the wallet can go negative. Keep listening for webhooks after a payment completes.

    Statuses & webhooks lists each case, the webhook that signals it, and what to do.

    Timing by rail

    The modeler uses this timing. Each rail's guide has the details.

    Rail Cutoff When funds arrive How to undo Can still come back
    Card payment Card brand settlement cutoff, early the next morning Next banking day by 1:00 PM ET Reversal cancels before settlement, refunds after Disputes, debited from the wallet when the chargeback arrives
    Pull from card None, 24/7/365 On authorization, for supported cards Refund Disputes
    ACH debit Same-day windows at 10:00 AM, 2:15 PM, and 4:15 PM ET Morning of the second banking day; same day with faster ACH Cancel until the debit originates Returns, usually within 2 banking days; unauthorized returns up to 60 days after the effective date
    Daily sweep Sweep closes at 4:00 PM ET on banking days Same day by 6:00 PM ET (same-day ACH), next banking day (standard ACH), or seconds (instant) Not applicable; each payout is a transfer you can follow A failed payout pauses the sweep until a new bank account is verified
    Same-day ACH Same-day windows at 10:00 AM, 2:15 PM, and 4:15 PM ET Same banking day if created before the 4:15 PM ET cutoff Cancel until the credit originates The receiving bank can return it, usually within 2 banking days
    Standard ACH 5:30 PM ET Next banking day Cancel until the credit originates The receiving bank can return it, usually within 2 banking days
    Instant (RTP or FedNow) None, 24/7/365 Seconds Final once sent None after completion
    Push to card None, 24/7/365 Within 30 minutes for fast funds cards Final once the issuer approves it None after completion
    Wallet transfer None Immediately Send a new transfer back None after completion

    FAQ

    Why did a transfer fail?
    Transfers can fail for a number of reasons related to the source or destination, or due to insufficient funds. Read our transfer failures guide to learn more.
    Can I re-start a transfer that never completed?
    Depending on the status of the transfer, you may be able to replay that transfer. Transfers in a "non-terminal" state (such as a child transfer stuck in queued) can be replayed by Moov, but transfers with the failed status are in a "terminal state," meaning they cannot be replayed in our system. For reinitiating transfers that were in a terminal state, you will need to create a brand new transfer with the same details.
    How do I retrieve a large number of transfers?
    The list transfers endpoint returns up to 200 transfers per page (set the page size with count). For large result sets, use cursor pagination: when more transfers are available, the response includes an X-Next-Cursor header. Pass its value as the cursor query parameter, with the same filters and count, to get the next page. Filters such as startDateTime and endDateTime, status, and accountIDs keep each page to the transfers you need.
    In this section