This documentation is now deprecated. Please see https://stripe.com/docs/connect/migrating for the latest documentation.
Thanks!
To use debit card transfers, you will need to disable automatic transfers in your dashboard: https://manage.stripe.com/account/transfers
This will allow you to accumulate balance on your Stripe account so you can pay out to third party recipients.
Fees are the same as they are for bank account transfers. ($0.25 per transfer, $1 per failed transfer.)
We currently support transferring to Visa and MasterCard debit cards only. This does not include prepaid cards.
These endpoints mirror the customer card endpoints in terms of parameters. They will not change for full launch, but we will be adding a few convenience endpoints as well.
POST /v1/recipients/rp_xxx/cards to create a new card (same parameters/behavior as https://stripe.com/docs/api#create_card).
POST /v1/recipients/rp_xxx/cards/card_xxx to update card_xxx
(same parameters/behavior as https://stripe.com/docs/api#update_card).
DELETE /v1/recipients/rp_xxx/cards/card_xxx to delete card_xxx
(same behavior as https://stripe.com/docs/api#delete_card).
GET /v1/recipients/rp_xxx/cards to list all cards for the recipient (same parameters/behavior as https://stripe.com/docs/api#list_cards).
GET /v1/recipients/rp_xxx/cards/card_xxx to retrieve card_xxx
(same behavior as https://stripe.com/docs/api#retrieve_card).
POST /v1/recipients with card information
POST /v1/recipients/rp_xxx with card information to update the default card.
There are three new webhooks: recipient.card.created
, recipient.card.updated
, and recipient.card.deleted
.
POST /v1/transfers
with a card
parameter:
curl https://api.stripe.com/v1/transfers \
-u sk_test_012345: \
-d amount=400 \
-d currency=usd \
-d recipient=rp_XYZ \
-d card=card_ABC
-d "description=Transfer to test@example.com"
You can use the test debit cards listed here: https://stripe.com/docs/testing
Response:
{
"id": "tr_333",
"object": "transfer",
"created": 1395692698,
"date": 1395692698,
"livemode": false,
"amount": 400,
"currency": "usd",
"status": "paid",
"balance_transaction": "txn_000",
"account": null,
"card": {
"object": "card",
"id": "card_ABC",
"last4": "4242",
"type": "Visa",
"exp_month": 8,
"exp_year": 2015,
"fingerprint": "v0ZoM5S1UOUEZTdW",
"customer": "cus_3pvgeq9KUzCpjC",
"country": "US",
"name": null,
"address_line1": null,
"address_line2": null,
"address_city": null,
"address_state": null,
"address_zip": null,
"address_country": null,
"cvc_check": null,
"address_line1_check": null,
"address_zip_check": null
},
"description": "Transfer to test@example.com",
"metadata": {
},
"statement_description": null,
"recipient": "rp_XYZ"
}
If your recipient only has one card, you may omit the card
parameter. However, if your recipient has both a card and a bank account, you will need to either pass in the card
or bank_account
parameter:
POST /v1/transfers
with a bank_account
parameter:
curl https://api.stripe.com/v1/transfers \
-u sk_test_012345: \
-d amount=400 \
-d currency=usd \
-d recipient=rp_XYZ \
-d bank_account=ba_ABC
-d "description=Transfer to test@example.com"
Response:
{
"id": "tr_444",
"object": "transfer",
"created": 1395692698,
"date": 1395692698,
"livemode": false,
"amount": 400,
"currency": "usd",
"status": "paid",
"balance_transaction": "txn_000",
"account": {
"object": "bank_account",
"id": "ba_ABC",
"bank_name": "STRIPE TEST BANK",
"last4": "6789",
"country": "US",
"currency": "usd",
"validated": false,
"verified": false,
"fingerprint": "iRcUf75inH2iHjYo",
"disabled": false
},
"description": "Transfer to test@example.com",
"metadata": {
},
"statement_description": null,
"recipient": "rp_XYZ"
}
You can see more information about the rest of the transfer API here: https://stripe.com/docs/api#transfers