Push to card

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

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

Push to card is currently in a closed beta – contact us for more information.
Push to card funds flow diagram

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 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 capability enabled.

Determining 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, 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 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 as shown below.

1
2
curl -X GET "https://api.moov.io/accounts/{accountID}/cards" \
  -H 'Authorization: Bearer {token}' \
1
2
3
4
5
6
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.
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.

Implementing push to card

You can simulate push to card transfers in test mode using specific test cards.

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

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.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
curl -X POST "https://api.moov.io/transfers" \
  -H "Authorization: Bearer {token}" \
  -H "X-Idempotency-Key: UUID" \
  -H "X-Wait-For: rail-response" \
  --data-raw '{
    "amount": {
      "value": 100,
      "currency": "USD"
    },
    "destination": {
      "paymentMethodID": "UUID"
    },
    "source": {
      "paymentMethodID": "UUID"
    },
    "description": "Optional transaction description."
  }'\
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
mc, _ := moov.NewClient()

mc.CreateTransfer(ctx, moov.CreateTransfer{
  Amount: moov.Amount{
    Currency: "usd",
    Value:    100, // $1.00
  },
  Destination: moov.CreateTransfer_Destination{
    PaymentMethodID: "UUID",
  },
  Source: moov.CreateTransfer_Source{
    PaymentMethodID: "UUID",
  },
  Description: "Optional transaction description.",
})
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
const moov = new Moov(credentialsObject);

const transfer = await moov.transfers.create({
  amount: {
    value: 100,
    currency: "USD"
  },
  destination: {
    paymentMethodID: "UUID"
  },
  source: {
    paymentMethodID: "UUID"
  },
  description: "Optional transaction description."
});

Track transfer status

To track the transfer status, view cardDetails under the destination object from the transfers GET endpoint:

  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.

1
2
curl -X GET "https://api.moov.io/transfers/{transferID}" \
  -H "Authorization: Bearer {token}" \
1
2
3
4
5
mc, _ := moov.NewClient()

var transferID string

mc.GetTransfer(ctx, transferID)
1
2
3
const moov = new Moov(credentialsObject);

const transfer = await moov.transfers.get(transferID);

Transfer guidelines

When implementing push to card transfers, be sure to follow the transfer limits defined below.

Transfer limits

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 $25,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

If you have exceeded these limits, push to card transfers will fail. The failureReason from the retrieve a transfer GET endpoint response will indicate that the velocity limited has been exceeded.

Error responses

You will receive an 400 error response if

  • the transfer exceeds the amount or velocity limits
  • the account is not enabled for the use case

If the transfer has exceeded the limit, you should retry the transfer with a lower amount. If you need to enable your disbursement use case, please contact Moov so we can configure your account accordingly.

Summary Beta