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 a transfer. 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.
Request fields and example
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.access_tokenaccess_token for the account that will be debited or credited.account_idaccount_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};56try {7 const response = await client.transferAuthorizationCreate(request);8 const authorizationId = response.data.authorization.id;9} catch (error) {10 // handle error11}Response fields and example
institution_supported _networksrequest_id1{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.
Request fields and example
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.account_idaccount_id corresponding to the end-user account that will be debited or credited.funding_account_idfunding_account_ids in the Accounts page of your Plaid Dashboard, under the "Account ID" column. If this field is left blank and you are using legacy funding methods, this will default to the default funding_account_id specified during onboarding. Otherwise, Plaid Ledger will be used.modePAYMENT: 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, DISBURSEMENTnetworksame-day-ach.For transfers submitted as
ach, the next-day cutoff is 5:30 PM Eastern Time.For transfers submitted as
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; this will apply to both legs of the transfer if applicable.ach, same-day-achsame-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.description1 15 ach_classCodes 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, webuserlegal_namephone_numberemail_addressaddressstreetcityregionpostal_codecountrymetadataiso_currency_code1const 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};1213try {14 const response = await client.transferIntentCreate(request);15} catch (error) {16 // handle error17}Response fields and example
transfer_intentidcreated2006-01-02T15:04:05Z.date-time statusPENDING: The transfer intent is pending.
SUCCEEDED: The transfer intent was successfully created.
FAILED: The transfer intent was unable to be created.PENDING, SUCCEEDED, FAILEDaccount_idaccount_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_idamount/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.modePAYMENT: 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, DISBURSEMENTnetworksame-day-ach.For transfers submitted as
ach, the next-day cutoff is 5:30 PM Eastern Time.For transfers submitted as
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; this will apply to both legs of the transfer if applicable.ach, same-day-achsame-day-ach ach_classCodes 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, webuserlegal_namephone_numberemail_addressaddressstreetcityregionpostal_codecountrydescriptionmetadataiso_currency_coderequest_id1{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.
Request fields and example
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.transfer_intent_id1const request: TransferIntentGetRequest = {2 transfer_intent_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9',3};45try {6 const response = await client.transferIntentGet(request);7} catch (error) {8 // handle error9}Response fields and example
transfer_intentidcreated2006-01-02T15:04:05Z.date-time statusPENDING: The transfer intent is pending.
SUCCEEDED: The transfer intent was successfully created.
FAILED: The transfer intent was unable to be created.PENDING, SUCCEEDED, FAILEDtransfer_idfailure_reasonfailed. Null otherwise.error_typeerror_codeerror_messageauthorization_decisionAPPROVED – 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 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, DECLINEDauthorization _decision_rationaledeclined decisions, and may or may not be null for approved decisions.codeIf 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 same-day micro deposits, limited information available.ITEM_LOGIN_REQUIRED – Unable to collect the account information due to Item staleness. Can be resolved by using Link in update mode.MIGRATED_ACCOUNT_ITEM - Item created via /transfer/account_migration 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.NSF, RISK, TRANSFER_LIMIT_REACHED, MANUALLY_VERIFIED_ITEM, ITEM_LOGIN_REQUIRED, PAYMENT_PROFILE_LOGIN_REQUIRED, ERROR, MIGRATED_ACCOUNT_ITEM, nulldescriptionaccount_idaccount_id for the account that will be debited or credited. Returned only if account_id was set on intent creation.funding_account_idamount/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.modePAYMENT: 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, DISBURSEMENTnetworksame-day-ach.For transfers submitted as
ach, the next-day cutoff is 5:30 PM Eastern Time.For transfers submitted as
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; this will apply to both legs of the transfer if applicable.ach, same-day-achsame-day-ach ach_classCodes 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, webuserlegal_namephone_numberemail_addressaddressstreetcityregionpostal_codecountrydescriptionmetadataiso_currency_coderequest_id1{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. 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.
Request fields and example
client_idclient_id. The client_id is required and may be provided either in the PLAID-CLIENT-ID header or as part of a request body.secretsecret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.account_numberrouting_numberwire_routing_numberrouting_number. This field must be set for the created item to be eligible for wire transfers.account_typechecking 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_tokenaccess_token for the newly created Item.account_idaccount_id for the newly created Item.request_id1{2 "access_token": "access-sandbox-435beced-94e8-4df3-a181-1dde1cfa19f0",3 "account_id": "zvyDgbeeDluZ43AJP6m5fAxDlgoZXDuoy5gjN",4 "request_id": "mdqfuVxeoza6mhu"5}