# Push to card

Provide faster access to funds for your customers by pushing funds to cards.

Moov supports push to card payments - instant payments from a Moov wallet to supported Visa and Mastercard debit and prepaid cards. With push to card, you can access funds near real time, 24/7/365.

To push funds to a recipient's card via [Apple Pay](/guides/sources/apple-pay) or [Google Pay](/guides/sources/google-pay), use the `push-to-apple-pay` or `push-to-google-pay` payment methods.

![Push to card funds flow diagram](../images/push-to-card-funds-flow-light.png)

## [Use cases](#use-cases)

Moov supports push transfers for two use cases: merchant settlement and funds disbursement. Moov will configure the source account depending on your use case:

**Merchant settlement** is commonly used by businesses that are looking to access their funds faster through a self-to-self transfer from their wallet to a card. If you're using push to card for merchant settlement, the source account must have the `wallet` [capability](/guides/accounts/capabilities/enablement/) enabled.

**Funds disbursement** enables real-time transfers to another account. Some funds disbursement examples include gig economy payouts, insurance disbursements, corporate rebates, payroll, government, or reimbursements. If you're using push to card for funds disbursement, the source account must have the `send-funds.push-to-card` [capability](/guides/accounts/capabilities/enablement/) enabled.

## [Determine support for push to card](#determine-support-for-push-to-card)

Ensure you have linked a card on the account. The simplest way to securely link a card is by using the [card link Drop](/moovjs/drops/card-link/), a prebuilt UI component for embedding card-based payments. If you have provided an attestation of PCI compliance, you also have the option to link a card using the `POST` [link a card](/api/sources/cards/create/) endpoint.

Once you've linked a card, you can determine if that card is eligible to receive pushed funds with the `domesticPushtoCard` field. You can use the cards `GET` [endpoint](/api/#tag/Cards/operation/getCard) as shown below.

[curl](#tab-794263158-3-0) [Go SDK](#tab-794263158-3-1)

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

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

var accountID string
var cardID string

mc.GetCard(ctx, accountID, cardID)
```

The `domesticPushtoCard` field describes the push to card timing that is available for the card, if supported:

| Timing          | Description                                                                                                                                                       |
|-----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `fast-funds`    | Funds will be available to the destination within 30 minutes or less of the authorization.                                                                        |
| `standard`      | Fast funds is not supported on this card. Transfer will follow standard card settlement [timing](/guides/money-movement/accept-payments/card-acceptance/timing/). |
| `not-supported` | This card is ineligible for push-to-card payments. Contact your issuer for more details.                                                                          |
| `unknown`       | Eligibility has not been checked or is unknown.                                                                                                                   |

## [Implement push to card](#implement-push-to-card)

You can simulate push to card transfers in test mode using [specific test cards](/guides/developer-tools/test-data/#push-pull-from-card).

The `push-to-card` payment method becomes available when the following criteria are met:

- The account has the `transfers` capability
- The linked card supports `fast-funds` or `standard` timing
- Moov has approved the account for push to card transfers

Moov has a transfer limit of $50,000 per push to card transaction. Moov may impose lower transfer limits based on the approved use case.

### [Initiate the transfer](#initiate-the-transfer)

A push transfer can be created when the source is a pre-funded Moov wallet and the destination is a recipient with a linked card and the `transfers` capability.

[curl](#tab-189374256-0-0) [Go SDK](#tab-189374256-0-1)

```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": 100,
      "currency": "USD"
    },
    "destination": {
      "paymentMethodID": "string"
    },
    "source": {
      "paymentMethodID": "string"
    },
    "description": "Optional transaction description."
  }'\
```

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

var accountID string // Partner account

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

### [Track transfer status](#track-transfer-status)

To track the transfer status, view `cardDetails` under the `destination` object from the transfers `GET` [endpoint](/api/money-movement/transfers/get/):

1. `initiated` - Transaction is created and awaiting authorization
2. `failed` - Issuer declined or there was error with processing
3. `completed` - Authorization request was successful and Issuer approved the transaction

If the card is `fast-funds` eligible, the destination’s card will be credited the amount specified within 30 minutes. Otherwise, the funds will be credited according to the standard network settlement [timing](/guides/money-movement/accept-payments/card-acceptance/timing/).

[curl](#tab-294567318-0-0) [Go SDK](#tab-294567318-0-1)

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

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

var accountID string
var transferID string

mc.GetTransfer(ctx, accountID, transferID)
```

## [Transfer &amp; velocity limits](#transfer--velocity-limits)

There are limits on the amount a card `fingerprint` can send within a specified time. Depending on the card brand, you will need to follow these limits specifying the maximum amount and count that the destination account can receive. The following limits are for Visa and Mastercard.

| Limit type      | Maximum limit                |
|-----------------|------------------------------|
| Amount          | $50,000                      |
| 1-day velocity  | 150 transactions or $100,000 |
| 7-day velocity  | 250 transactions or $250,000 |
| 30-day velocity | 750 transactions or 500,000  |

Moov may impose lower transfer limits based on the approved use case.

### [Error responses](#error-responses)

**Amount limit:** If you have exceeded the amount limit, you'll receive a `400` error response. You can retry the transfer with a lower amount.

**Velocity limits:** If you have exceeded the velocity limits, push to card transfers will fail. The transfer status will be `failed` and the failure reason will be `rejected-high-risk`.

**Issuer limits:** If you have exceeded issuer limits, the transfer status will be `failed` and the failure reason will be `destination-payment-error`. Contact the issuer if you require guidance on specific issuer limits.

The specific transaction decline code can be found in `cardDetails.failureCode` using the retrieve a transfer [endpoint](/api/money-movement/transfers/) or the list transfers [endpoint](/api/money-movement/transfers/get/).

You'll also receive a `400` error response if your account is not enabled for disbursement. If you need to enable disbursement, please [contact Moov](https://support.moov.io/) so we can configure your account accordingly.
