# Push to card

> Send near real-time payouts to eligible debit cards with push to card, including card eligibility checks, required capabilities, limits, and timing.

> AI agents: search and read all Moov docs with the docs MCP server at https://docs.moov.io/mcp (no API key). Setup: https://docs.moov.io/guides/developer-tools/mcp-ai/docs-mcp/index.md

Push to card sends funds from a Moov wallet to a Visa or Mastercard debit or prepaid card. Most eligible cards receive funds within 30 minutes, 24/7/365.

**Before you start**

- Moov has approved your account for push to card. The source account needs `send-funds.push-to-card` for disbursements to others, or `wallet.balance` for transfers to its own card (see [use cases](#use-cases)).
- The source wallet has enough `availableBalance` to cover the payout and any [payout fee](/guides/send-payments/payout-fees/index.md)
- The recipient has the `transfers` capability and a [linked card](/guides/accept-payments/cards/online/index.md) that is [eligible](#check-card-eligibility)

> **Tip:** To push funds to a recipient's card via [Apple Pay](/guides/accept-payments/cards/apple-pay/index.md) or [Google Pay](/guides/accept-payments/cards/google-pay/index.md), 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

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.balance` [capability](/guides/accounts/capabilities/enablement/index.md) 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/index.md) enabled.

> **Tip:** With a PCI attestation of compliance on file with Moov, use the card metadata [endpoint](/api/sources/cards/metadata/index.md) to check whether a card is **debit** or **prepaid**.

## Check card eligibility

Link the recipient's card with the [card link Drop](/moovjs/drops/card-link/index.md), or with the [link a card](/api/sources/cards/create/index.md) endpoint if you have a PCI attestation on file with Moov. Then check the card's `domesticPushToCard` field with the retrieve a card [endpoint](/api/sources/cards/get/index.md).

**curl**

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

**Go SDK**

```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/accept-payments/cards/timing/index.md). |
| `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.                                                                                          |

## Send a push-to-card payout

> **Tip:** You can simulate push to card transfers in test mode using [specific test cards](/guides/get-started/api-authentication/test-mode/index.md#push--pull-from-card).

The recipient's card gets a `push-to-card` payment method when the account has the `transfers` capability, the card's `domesticPushToCard` is `fast-funds` or `standard`, and Moov has approved your account for push to card. The per-transfer maximum is in [transfer limits](/guides/money-movement/payment-methods/index.md#transfer-limits).

### Initiate the transfer

Create a transfer with the sender's `moov-wallet` payment method as the source and the recipient's `push-to-card` payment method as the destination.

**curl**

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

**Go SDK**

```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.",
})
```

### Choose payout fees (optional)

For `push-to-card` payouts, you can pass the [payout fee](/guides/send-payments/payout-fees/index.md#set-who-pays-the-fee) to the recipient with `feePaidBy`. If you don't, the funding wallet (source) pays it.

### Track transfer status

Subscribe to the `transfer.updated` [webhook event](/guides/webhooks/webhook-events/index.md#transfers), or retrieve the transfer with the `GET` [endpoint](/api/money-movement/transfers/get/index.md), and read `destination.cardDetails.status`:

| `destination.cardDetails.status` | Meaning                                                                                                                                                                     |
|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `initiated`                      | Transfer created, awaiting authorization                                                                                                                                    |
| `completed`                      | The issuer approved the credit. `fast-funds` cards are credited within 30 minutes; `standard` cards follow [card settlement timing](/guides/accept-payments/cards/timing/index.md). |
| `failed`                         | The issuer declined or processing failed. See `cardDetails.failureCode` and [error responses](#error-responses).                                                            |

**curl**

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

**Go SDK**

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

var accountID string
var transferID string

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

## Defer delivery

To deliver a push-to-card payout later, set `destination.cardDetails.scheduledDeliveryOn` on the [create transfer](/api/money-movement/transfers/create/index.md) request to a time 24 to 48 hours in the future. In test mode, any future time up to 48 hours works. Deferred payouts can have a different [payout fee](/guides/send-payments/payout-fees/index.md#fee-keys-by-rail) than instant ones.

```json
{
  "destination": {
    "paymentMethodID": "{pushToCardPaymentMethodID}",
    "cardDetails": {
      "scheduledDeliveryOn": "2026-11-04T15:00:00Z"
    }
  }
}
```

## Velocity limits

Moov has a transfer limit of $50,000 per push to card transaction. Each card `fingerprint` can also receive a limited number and amount of push to card payouts over time, set by Visa and Mastercard. Moov may set lower limits for your approved use case.

| Window  | Maximum per card          |
|---------|---------------------------|
| 1 day   | 150 transfers or $100,000 |
| 7 days  | 250 transfers or $250,000 |
| 30 days | 750 transfers or $500,000 |

## 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 decline code is in `destination.cardDetails.failureCode` on the [retrieve a transfer](/api/money-movement/transfers/get/index.md) and [list transfers](/api/money-movement/transfers/list/index.md) responses.

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.

## When a payout fails or is reversed

If a push-to-card payout fails, is canceled, or is reversed, the full transfer amount and payout fee return to the source wallet. See [payout fees](/guides/send-payments/payout-fees/index.md#returns-reversals-and-failed-payouts).

## Next steps

- [Payout fees](/guides/send-payments/payout-fees/index.md): pass the fee to the recipient
- [Test push to card](/guides/get-started/api-authentication/test-mode/index.md#push--pull-from-card) with test cards
- [Pull from card](/guides/accept-payments/cards/pull-from-card/index.md): move funds from a card into a wallet

