# Scheduled transfers

Automate money movement on a recurring basis. Define a recurring schedule with a transfer amount, source, and destination.

With scheduled transfers, you can create a schedule for a variety of purposes, such as sending payments, setting up a subscription or financing. You can create a schedule specific to your needs, or set [RRULE](https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10) and let Moov create the schedule.

[Schedules API  
\
Set up future transfers through scheduling.](/api/money-movement/schedules/)

## [Set up a schedule](#set-up-a-schedule)

You can set up a schedule of future-dated transfers in a combination of ways - by generating a schedule through Moov, or by providing your own specific future dates.

![Creating a schedule](images/schedule.png)

Set up recurring transfers in the Dashboard

[Generate a schedule](#tab-613795248-3-0) [Provide your own future dates](#tab-613795248-3-1)

Provide transfer details and a recurrence rule for Moov to generate each occurrence of a transfer dated for the future. The `recurrenceRule` accepts a string that conforms to the [RRULE](https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10). This option is useful for creating a schedule that continues indefinitely or until a date or count where all transfer details are the same.

For the account being charged, use the create a schedule `POST` [endpoint](/api/money-movement/schedules/create/).

```json
 1{
 2  "description": "Monthly subscription",
 3  "recur": {
 4    "recurrenceRule": "FREQ=MONTHLY;COUNT=36",
 5    "runTransfer": {
 6      "amount": {
 7        "currency": "USD",
 8        "amount": 1000
 9      },
10      "accountID": "your-account-ID",
11      "source": {
12        "paymentMethodID": "payment-method-ID"
13      },
14      "destination": {
15        "paymentMethodID": "payment-method-ID"
16      }
17    }
18  }
19}
```

A recurrence rule is typically made up of the following:

- `FREQ` - frequency (daily, weekly, monthly) (required)
- `INTERVAL` - interval (1, 2, etc)
- `DTSTART` - The recurrence start date
- `UNTIL` - The recurrence end date. Not present if indefinite
- `COUNT` - The number of occurrences that will be generated. Not present if indefinite

Once `DTSTART` is set it should not be changed as it can cause unintended changes to occurrence timing. We suggest you set it to a static value you can continuously use when creating schedules, or leave it empty, which will allow Moov to use our own static value.

Create the occurrences of each transfer with a specific date for Moov to initiate them. This option is recommended if the transfer details differ between any occurrences, or if the recurring dates don't follow a pattern supported by [RRULE](https://datatracker.ietf.org/doc/html/rfc5545#section-3.3.10).

For the account being charged, create a schedule using `POST` `/accounts/{accountID}/schedules`

```json
 1{
 2  "description": "Repayment",
 3  "occurrences": [
 4    {
 5      "runOn": "datetime",
 6      "runTransfer": {
 7        "amount": {
 8          "currency": "USD",
 9          "amount": 1000
10        },
11        "source": {
12          "paymentMethodID": "payment-method-ID"
13        },
14        "destination": {
15          "paymentMethodID": "payment-method-ID"
16        }
17      }
18    },
19    // remaining occurrences
20  ]
21}
```

It's possible to combine `recur` and `occurrences` into a single schedule, such as for a one-time charge along with scheduled transfers.

For projects written in Go, we recommend [rrule-go](https://github.com/teambition/rrule-go) if you need to support complex recurring rules. For JavaScript projects, we recommend [rrule.js](https://github.com/jkbrzt/rrule).

## [Manage schedules](#manage-schedules)

Once created, a schedule can be updated to:

- Modify or cancel a future individual occurrences.
- Change the recurrence rule. Future occurrences will shift according to the new rule.
- Add a new one time occurrence. For example, a fine, or to retry a failed occurrence.
- Update the transfer or `runOn` time of an individual occurrence.
- Update one transfer in a set of recurring transfers and have the updates apply to all future recurring occurrences.

Once created, a schedule can be updated to modify or remove individual occurrences, as well as stop any future transfers from being created. However, transfers that have already been created from a schedule will not be canceled by updating a schedule. Occurrences past the `runOn` time cannot be changed.

Only the account that creates the schedule can modify it. An `ownerAccountID` is returned in the [create response](#set-up-a-schedule) for reference. This ID will correspond to the `partnerAccountID` or `merchantAccountID` of the account that created the schedule.

You can [list all schedules](/api/money-movement/schedules/list/) for an account with the `GET` `/accounts/{accountID}/schedules` endpoint. This is useful for displaying any scheduled payments to a user, such as the next payment date and amount.

## [Send receipts](#send-receipts)

Use the transfers API to [send a receipt](/api/money-movement/transfers/create-receipts/) to the payer after each transfer in the schedule has been initiated. By passing `forScheduleID` in the receipt creation endpoint, you can link the receipt to the schedule and Moov will send receipts automatically for each future occurrence.

[Receipts guide  
\
Send a receipt to the payer after a transfer has been initiated.](/guides/money-movement/receipts/)

[Receipts API  
\
API reference for sending receipts.](/api/money-movement/receipts/)

## [Automatic updates to payment methods](#automatic-updates-to-payment-methods)

For debit and credit card payments that have [card-on-file](/guides/sources/cards/card-account-updater/#set-cardonfile) enabled, any issuer updates to the card will allow future-dated transfers to process.

Card-based transfers in a schedule are also automatically set with the correct `transactionSource` specifying `first-recurring` or `recurring`.

Likewise, for bank accounts, if Moov receives a notice of change from the receiving financial institution, the bank account will be automatically updated to prevent interruption.
