Transfer
API reference for Transfer account linking endpoints
Account Linking
Account Linking | |
---|---|
/transfer/capabilities/get | Determine RTP eligibility for a Plaid Item |
/transfer/intent/create | Create a transfer intent and invoke Transfer UI (Transfer UI only) |
/transfer/intent/get | Retrieve information about a transfer intent (Transfer UI only) |
/transfer/migrate_account | Create an Item to use with Transfer from known account and routing numbers |
/transfer/capabilities/get
Get RTP eligibility information of a transfer
Use the /transfer/capabilities/get
endpoint to determine the RTP eligibility information of an account to be used with Transfer. This endpoint works on all Transfer-capable Items, including those created by /transfer/migrate_account
. To simulate RTP eligibility in Sandbox, log in using the username user_good
and password pass_good
and use the first two checking and savings accounts in the "First Platypus Bank" institution (ending in 0000 or 1111), which will return true
. Any other account will return false
.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.access_token
access_token
for the account that will be debited or credited.account_id
account_id
corresponding to the end-user account that will be debited or credited.1const request: TransferCapabilitiesGetRequest = {2 access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175',3 account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr',4};5
6try {7 const response = await client.transferCapabilitiesGet(request);8} catch (error) {9 // handle error10}
Response fields and example
institution_supported _networks
request_id
1{2 "institution_supported_networks": {3 "rtp": {4 "credit": true5 }6 },7 "request_id": "saKrIBuEB9qJZno"8}
Was this helpful?
/transfer/intent/create
Create a transfer intent object to invoke the Transfer UI
Use the /transfer/intent/create
endpoint to generate a transfer intent object and invoke the Transfer UI.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.account_id
account_id
corresponding to the end-user account that will be debited or credited.mode
PAYMENT
: Transfers funds from an end user's account to your business account.DISBURSEMENT
: Transfers funds from your business account to an end user's account.PAYMENT
, DISBURSEMENT
network
same-day-ach
.For transfers submitted using
ach
, the next-day cutoff is 8:30 PM Eastern Time.For transfers submitted using
same-day-ach
, the same-day cutoff is 3:30 PM Eastern Time. If the transfer is submitted after this cutoff but before the next-day cutoff, it will be sent over next-day rails and will not incur same-day charges.For transfers submitted using
rtp
, in the case that the account being credited does not support RTP, the transfer will be sent over ACH as long as an ach_class
is provided in the request. If RTP isn't supported by the account and no ach_class
is provided, the transfer will fail to be submitted.ach
, same-day-ach
, rtp
same-day-ach
amount
/transfer/authorization/create
, specify the maximum amount to authorize. When calling /transfer/create
, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create
, the maximum amount authorized in the authorization_id
will be sent.description
1
15
ach_class
Codes supported for credits:
ccd
, ppd
Codes supported for debits: ccd
, tel
, web
"ccd"
- Corporate Credit or Debit - fund transfer between two corporate bank accounts"ppd"
- Prearranged Payment or Deposit - the transfer is part of a pre-existing relationship with a consumer, e.g. bill payment"tel"
- Telephone-Initiated Entry"web"
- Internet-Initiated Entry - debits from a consumer’s account where their authorization is obtained over the Internetccd
, ppd
, tel
, web
user
legal_name
phone_number
email_address
address
street
city
region
postal_code
country
metadata
iso_currency_code
1const request: TransferIntentCreateRequest = {2 account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr',3 mode: 'PAYMENT'4 amount: '12.34',5 description: 'Desc',6 ach_class: 'ppd',7 origination_account_id: '9853defc-e703-463d-86b1-dc0607a45359',8 user: {9 legal_name: 'Anne Charleston',10 },11};12
13try {14 const response = await client.transferIntentCreate(request);15} catch (error) {16 // handle error17}
Response fields and example
transfer_intent
id
created
2006-01-02T15:04:05Z
.date-time
status
PENDING
: The transfer intent is pending.
SUCCEEDED
: The transfer intent was successfully created.
FAILED
: The transfer intent was unable to be created.PENDING
, SUCCEEDED
, FAILED
account_id
account_id
corresponding to the end-user account that will be debited or credited. Returned only if account_id
was set on intent creation.funding_account_id
amount
/transfer/authorization/create
, specify the maximum amount to authorize. When calling /transfer/create
, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create
, the maximum amount authorized in the authorization_id
will be sent.mode
PAYMENT
: Transfers funds from an end user's account to your business account.DISBURSEMENT
: Transfers funds from your business account to an end user's account.PAYMENT
, DISBURSEMENT
network
same-day-ach
.For transfers submitted using
ach
, the next-day cutoff is 8:30 PM Eastern Time.For transfers submitted using
same-day-ach
, the same-day cutoff is 3:30 PM Eastern Time. If the transfer is submitted after this cutoff but before the next-day cutoff, it will be sent over next-day rails and will not incur same-day charges.For transfers submitted using
rtp
, in the case that the account being credited does not support RTP, the transfer will be sent over ACH as long as an ach_class
is provided in the request. If RTP isn't supported by the account and no ach_class
is provided, the transfer will fail to be submitted.ach
, same-day-ach
, rtp
same-day-ach
ach_class
Codes supported for credits:
ccd
, ppd
Codes supported for debits: ccd
, tel
, web
"ccd"
- Corporate Credit or Debit - fund transfer between two corporate bank accounts"ppd"
- Prearranged Payment or Deposit - the transfer is part of a pre-existing relationship with a consumer, e.g. bill payment"tel"
- Telephone-Initiated Entry"web"
- Internet-Initiated Entry - debits from a consumer’s account where their authorization is obtained over the Internetccd
, ppd
, tel
, web
user
legal_name
phone_number
email_address
address
street
city
region
postal_code
country
description
metadata
iso_currency_code
request_id
1{2 "transfer_intent": {3 "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr",4 "funding_account_id": "9853defc-e703-463d-86b1-dc0607a45359",5 "ach_class": "ppd",6 "amount": "12.34",7 "iso_currency_code": "USD",8 "created": "2020-08-06T17:27:15Z",9 "description": "Desc",10 "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9",11 "metadata": {12 "key1": "value1",13 "key2": "value2"14 },15 "mode": "PAYMENT",16 "origination_account_id": "9853defc-e703-463d-86b1-dc0607a45359",17 "status": "PENDING",18 "user": {19 "address": {20 "street": "100 Market Street",21 "city": "San Francisco",22 "region": "CA",23 "postal_code": "94103",24 "country": "US"25 },26 "email_address": "acharleston@email.com",27 "legal_name": "Anne Charleston",28 "phone_number": "123-456-7890"29 }30 },31 "request_id": "saKrIBuEB9qJZno"32}
Was this helpful?
/transfer/intent/get
Retrieve more information about a transfer intent
Use the /transfer/intent/get
endpoint to retrieve more information about a transfer intent.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.transfer_intent_id
1const request: TransferIntentGetRequest = {2 transfer_intent_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9',3};4
5try {6 const response = await client.transferIntentGet(request);7} catch (error) {8 // handle error9}
Response fields and example
transfer_intent
id
created
2006-01-02T15:04:05Z
.date-time
status
PENDING
: The transfer intent is pending.
SUCCEEDED
: The transfer intent was successfully created.
FAILED
: The transfer intent was unable to be created.PENDING
, SUCCEEDED
, FAILED
transfer_id
failure_reason
failed
. Null otherwise.error_type
error_code
error_message
authorization_decision
APPROVED
– The proposed transfer has received the end user's consent and has been approved for processing by Plaid. The decision_rationale
field is set if Plaid was unable to fetch the account information. You may proceed with the transfer, but further review is recommended (i.e., use Link in update mode to re-authenticate your user when decision_rationale.code
is ITEM_LOGIN_REQUIRED
). Refer to the code
field in the decision_rationale
object for details.DECLINED
– Plaid reviewed the proposed transfer and declined processing. Refer to the code
field in the decision_rationale
object for details.APPROVED
, DECLINED
authorization _decision_rationale
declined
decisions, and may or may not be null for approved
decisions.code
If the
rationale_code
is null
, the transfer passed the authorization check.Any non-
null
value for an approved
transfer indicates that the the authorization check could not be run and that you should perform your own risk assessment on the transfer. The code will indicate why the check could not be run. Possible values for an approved
transfer are:MANUALLY_VERIFIED_ITEM
– Item created via a manual entry flow (i.e. Same Day Micro-deposit, Instant Micro-deposit, Database Insights, or Database Match), limited information available.ITEM_LOGIN_REQUIRED
– Unable to collect the account information due to Item staleness. Can be resolved by using Link and setting transfer.authorization_id
in the request to /link/token/create
.MIGRATED_ACCOUNT_ITEM
- Item created via /transfer/migrate_account
endpoint, limited information available.ERROR
– Unable to collect the account information due to an unspecified error.The following codes indicate that the authorization decision was
declined
:NSF
– Transaction likely to result in a return due to insufficient funds.RISK
- Transaction is high-risk.TRANSFER_LIMIT_REACHED
- One or several transfer limits are reached, e.g. monthly transfer limit. Check the accompanying description
field to understand which limit has been reached.NSF
, RISK
, TRANSFER_LIMIT_REACHED
, MANUALLY_VERIFIED_ITEM
, ITEM_LOGIN_REQUIRED
, PAYMENT_PROFILE_LOGIN_REQUIRED
, ERROR
, MIGRATED_ACCOUNT_ITEM
, null
description
account_id
account_id
for the account that will be debited or credited. Returned only if account_id
was set on intent creation.funding_account_id
amount
/transfer/authorization/create
, specify the maximum amount to authorize. When calling /transfer/create
, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create
, the maximum amount authorized in the authorization_id
will be sent.mode
PAYMENT
: Transfers funds from an end user's account to your business account.DISBURSEMENT
: Transfers funds from your business account to an end user's account.PAYMENT
, DISBURSEMENT
network
same-day-ach
.For transfers submitted using
ach
, the next-day cutoff is 8:30 PM Eastern Time.For transfers submitted using
same-day-ach
, the same-day cutoff is 3:30 PM Eastern Time. If the transfer is submitted after this cutoff but before the next-day cutoff, it will be sent over next-day rails and will not incur same-day charges.For transfers submitted using
rtp
, in the case that the account being credited does not support RTP, the transfer will be sent over ACH as long as an ach_class
is provided in the request. If RTP isn't supported by the account and no ach_class
is provided, the transfer will fail to be submitted.ach
, same-day-ach
, rtp
same-day-ach
ach_class
Codes supported for credits:
ccd
, ppd
Codes supported for debits: ccd
, tel
, web
"ccd"
- Corporate Credit or Debit - fund transfer between two corporate bank accounts"ppd"
- Prearranged Payment or Deposit - the transfer is part of a pre-existing relationship with a consumer, e.g. bill payment"tel"
- Telephone-Initiated Entry"web"
- Internet-Initiated Entry - debits from a consumer’s account where their authorization is obtained over the Internetccd
, ppd
, tel
, web
user
legal_name
phone_number
email_address
address
street
city
region
postal_code
country
description
metadata
iso_currency_code
request_id
1{2 "transfer_intent": {3 "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr",4 "funding_account_id": "9853defc-e703-463d-86b1-dc0607a45359",5 "ach_class": "ppd",6 "amount": "12.34",7 "iso_currency_code": "USD",8 "authorization_decision": "APPROVED",9 "authorization_decision_rationale": null,10 "created": "2019-12-09T17:27:15Z",11 "description": "Desc",12 "failure_reason": null,13 "guarantee_decision": null,14 "guarantee_decision_rationale": null,15 "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9",16 "metadata": {17 "key1": "value1",18 "key2": "value2"19 },20 "mode": "DISBURSEMENT",21 "origination_account_id": "9853defc-e703-463d-86b1-dc0607a45359",22 "status": "SUCCEEDED",23 "transfer_id": "590ecd12-1dcc-7eae-4ad6-c28d1ec90df2",24 "user": {25 "address": {26 "street": "123 Main St.",27 "city": "San Francisco",28 "region": "California",29 "postal_code": "94053",30 "country": "US"31 },32 "email_address": "acharleston@email.com",33 "legal_name": "Anne Charleston",34 "phone_number": "510-555-0128"35 }36 },37 "request_id": "saKrIBuEB9qJZno"38}
Was this helpful?
/transfer/migrate_account
Migrate account into Transfers
As an alternative to adding Items via Link, you can also use the /transfer/migrate_account
endpoint to migrate known account and routing numbers to Plaid Items. This endpoint is also required when adding an Item for use with wire transfers; if you intend to create wire transfers on this account, you must provide wire_routing_number
. Note that Items created in this way are not compatible with endpoints for other products, such as /accounts/balance/get
, and can only be used with Transfer endpoints. If you require access to other endpoints, create the Item through Link instead. Access to /transfer/migrate_account
is not enabled by default; to obtain access, contact your Plaid Account Manager.
client_id
client_id
. The client_id
is required and may be provided either in the PLAID-CLIENT-ID
header or as part of a request body.secret
secret
. The secret
is required and may be provided either in the PLAID-SECRET
header or as part of a request body.account_number
routing_number
wire_routing_number
routing_number
. This field must be set for the created item to be eligible for wire transfers.account_type
checking
or savings
).1const request: TransferMigrateAccountRequest = {2 account_number: '100000000',3 routing_number: '121122676',4 account_type: 'checking',5};6try {7 const response = await plaidClient.transferMigrateAccount(request);8 const access_token = response.data.access_token;9} catch (error) {10 // handle error11}
Response fields and example
access_token
access_token
for the newly created Item.account_id
account_id
for the newly created Item.request_id
1{2 "access_token": "access-sandbox-435beced-94e8-4df3-a181-1dde1cfa19f0",3 "account_id": "zvyDgbeeDluZ43AJP6m5fAxDlgoZXDuoy5gjN",4 "request_id": "mdqfuVxeoza6mhu"5}