Follow this step by step guide to send funds using our API or SDKs.

This guide covers how to send funds. This covers multiple use cases, including:

- Payouts to employees, gig workers, and contractors
- Facilitating transfers between accounts on a platform

The examples below provide step by step instructions on setting up a single transfer, as well as instructions for payouts in a transfer group.

For more detailed information, see the [payment methods](https://docs.moov.io/guides/money-movement/payment-methods/) and [transfer groups](https://docs.moov.io/guides/money-movement/transfer-groups/) guides.

## [Get accountID](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#get-accountid)

Retrieve the `accountID` for the Moov account you want to use as a source. Repeat the step for the destination(s). You'll use the `accountID` to retrieve the payment methods in the next step.

Ask

List account [reference](https://docs.moov.io/api/moov-accounts/accounts/list/)

```zsh
curl -X GET "https://api.moov.io/accounts" \
  -H "Authorization: Bearer {token}"
```

Ask

List account [reference](https://docs.moov.io/api/moov-accounts/accounts/list/)

```go
mc, _ := moov.NewClient()

mc.ListAccounts(ctx)
```

## [Get payment methods](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#get-payment-methods)

Get the `paymentMethodID` for both the source and destination accounts.

Ask

List payment methods [reference](https://docs.moov.io/api/sources/payment-methods/list/)

```zsh
curl -X GET "https://api.moov.io/accounts/{accountID}/payment-methods" \
  -H "Authorization: Bearer {token}" \
  -H "x-moov-version: v2024.01.00" \
```

Ask

List payment methods [reference](https://docs.moov.io/api/sources/payment-methods/list/)

```go
mc, _ := moov.NewClient()

var accountID string

mc.ListPaymentMethods(ctx, accountID)
```

Ask

List payment methods [reference](https://docs.moov.io/api/sources/payment-methods/list/)

```javascript
const moov = Moov(token);

moov.paymentMethods.list(accountID);
```

A successful response will return an array of payment method types. A source can be one of the following types:

- `ach-debit-fund`
- `moov-wallet`

A destination can be one of the following types:

- `ach-debit-collect`
- `ach-credit-standard`
- `ach-credit-same-day`
- `moov-wallet`
- `instant-bank-credit`
- `rtp-credit`

While `instant-bank-credit` and `rtp-credit` both provide instant payments on the RTP rail, Moov strongly suggests using `instant-bank-credit`, which supports both the RTP and FedNow rail.

See the [payment methods](https://docs.moov.io/guides/money-movement/payment-methods/#payment-methods) guide for information on what source and destination types are compatible.

## [Create the transfer](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#create-the-transfer)

To send a payout, create a transfer from a sender (source) to a recipient (destination).

Ask

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/transfers" \
  -H "Authorization: Bearer {token}" \
  -H "X-Idempotency-Key: UUID" \
  -H "X-Wait-For: rail-response" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "source": {
      "paymentMethodID": "string"
    },
    "destination": {
      "paymentMethodID": "string"
    },
    "amount": {
      "value": 315, // $3.15
      "currency": "USD"
    },
    "description": "Optional description of transaction"
  }'
```

Ask

```go
mc, _ := moov.NewClient()

var accountID string

mc.CreateTransfer(ctx, accountID, moov.CreateTransfer{
  Source: moov.CreateTransfer_Source{
    PaymentMethodID: "string",
  },
  Destination: moov.CreateTransfer_Destination{
    PaymentMethodID: "string",
  },
  Amount: moov.Amount{
    Value: 315, // $3.15
    Currency: "USD",
  },
  Description: "Optional description of transaction",
})
```

### [Line items](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#line-items)

When you create a transfer you have the option of creating a line item. Line items allow you to list items within the transaction, each with their own distinct name, description, image, options, and price modifier. For tracking purposes, you can give each item a unique identifier using the `productID` field.

The total amount of the transfer must account for any and all costs associated with a line item's base price and price modifiers as well as sales tax:

`amount` = `lineItems` + `salesTaxAmount`

Ask

```zsh
curl -X POST "https://api.moov.io/accounts/{accountID}/transfers" \
  -H "Authorization: Bearer {token}" \
  -H "X-Idempotency-Key: UUID" \
  -H "X-Wait-For: rail-response" \
  -H "x-moov-version: v2024.01.00" \
  --data-raw '{
    "amount": {
      "value": 1595,
      "currency": "USD"
    },
    "destination": {
      "paymentMethodID": "string"
    },
    "source": {
      "paymentMethodID": "string"
    },
    "description": "Optional transaction description.",
    "lineItems": {
      "item": {
        "basePrice": {
          "currency": "USD",
          "valueDecimal": "14.95"
        },
        "name": "Lunch combo 1",
        "productID": "5afv22245-7095-24ba-b21a-5c4dc993737",
        "quantity": 1
      }
    },
    "salesTaxAmount": {
      "currency": "USD",
      "value": 100
    }
  }'
```

### [Send funds using a transfer group](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#send-funds-using-a-transfer-group)

You have the option to use transfer groups when sending payouts. To create a transfer group, provide the `transferID` (of the immediate preceding transfer) as the `source`. Transfers that belong to a group must have an amount less than or equal to the amount of the source transfer. See the [transfer groups](https://docs.moov.io/guides/money-movement/transfer-groups/) guide for more detailed information.

Ask

```json
{
  "source": {
    "transferID": "transferID"
  },
  "destination": {
    "paymentMethodID": "string"
  },
  "amount": {
    "value": 315, // $3.15
    "currency": "USD"
  },
  "description": "Optional description of transaction"
}
```

## [Track the transfer](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#track-the-transfer)

You have the option of subscribing to the `transfer.updated` [webhook event](https://docs.moov.io/guides/webhooks/webhook-events/#transfers). This will notify you of transfer stage updates (rail specific granular updates will also trigger the event).

See the diagram below for examples of **ACH same-day transfer timing**. The payment is processed the same day, then funds will be made available later to account for possible returns or processing issues.

## [Next steps](https://docs.moov.io/guides/money-movement/send-payments/send-funds/#next-steps)

[Events and statuses](https://docs.moov.io/guides/money-movement/events-and-statuses/) [Fees](https://docs.moov.io/guides/money-movement/fees/)
