Plaid logo
Docs
ALL DOCS

Link

  • Overview
Libraries
  • Web
  • iOS
  • Android
  • React Native
  • Webview
Core Link flows
  • OAuth guide
  • Update mode
  • Preventing duplicate Items
  • Data Transparency Messaging migration
  • Link Token migration guide
  • Legacy public key integrations
  • Account Select v2 migration guide
Optimizing Link
  • Optimizing Link conversion
  • Measuring Link conversion
  • Pre-Link messaging
  • Customizing Link
  • Choosing when to initialize products
  • Returning user experience
  • Modular Link (UK/EU only)
Errors and troubleshooting
  • Troubleshooting
  • Handling an invalid Link Token
  • Institution status in Link
Plaid logo
Docs
Plaid.com
Get API keys
Open nav

Link React Native SDK

Reference for integrating with the Link React Native SDK

This guide covers the latest major version of the Link React Native SDK, which is version 9.x. Beginning June 30, 2023, all integrations must use version 9.0.1 or later in order to maintain support for Chase OAuth flows on iOS. If you are using an older version of the SDK, consult the consult the 5.x to 7.x or 6.x to 7.x migration guides. If you are using the 7.x or 8.x version of the SDK, the only migration requirement for version 9.x is to make sure you are using a compatible version of the iOS SDK (4.1.0 or later) and Xcode 14.

Overview

Prefer to learn with code examples? A GitHub repo showing a working example Link implementation is available for this topic.

To get started with Plaid Link for React Native youʼll want to sign up for free API keys through the Plaid Developer Dashboard.

Examples of Plaid Link for React Native

Requirements

  • React Native Version 0.61.3 or higher
  • See the Android setup guide and iOS setup guide for platform-specific requirements

New versions of the React Native SDK are released frequently, at least once every few months. You should keep your version up-to-date to provide the best Plaid Link experience in your application.

Version Compatibility
React Native SDKAndroid SDKiOS SDKStatus
9.x.x3.10.1+>=4.1.0Active, supports Xcode 14
8.x.x3.10.1+>=3.1.0Deprecated, supports Xcode 14
7.x.x3.2.0+>=2.0.7Deprecated, supports Xcode <=13
6.x.x3.0.0-3.1.0>=2.0.1Deprecated
5.x.x2.1.0-2.2.0>=1.1.34Deprecated
4.x.x2.0.0<=1.1.33Deprecated
3.x.x1.x.x<=1.1.33Deprecated
2.x.x0.3.x<=1.1.27Deprecated
1.x.x< 0.3.x<=1.1.24Deprecated

Getting Started

Installing the SDK

In your react-native project directory, run:

Copy
1npm install --save react-native-plaid-link-sdk

Next Steps

  • To set up the SDK for use in your Android application, see the Android Set Up guide.
  • To set up the SDK for use in your iOS application see the iOS Set Up guide.
  • For a sample app that demonstrates a minimal integration with the React Native Plaid Link SDK, see the Tiny Quickstart (React Native).

Opening Link

Before you can open Link, you need to first create a link_token. A link_token can be configured for different Link flows and is used to control much of Link's behavior. To see how to create a new link_token, see the API Reference entry for /link/token/create. If your React Native application will be used on Android, the link/token/create call should include the android_package_name parameter. Each time you open Link, you will need to get a new link_token from your server.

PlaidLink

PlaidLink is the the React component used to open Link from a React Native application. PlaidLink renders a Pressable component, which wraps the component you provide and intercepts onPress events to open Link.

plaidLink
onSuccess
LinkSuccessListener
A function that is called when a user successfully links an Item. The function should expect one argument. See onSuccess.
tokenConfig
LinkTokenConfiguration
A configuration used to open Link with a Link Token.
token
string
The link_token to be used to authenticate your app with Link. The link_token is created by calling /link/token/create and is a short lived, one-time use token that should be unique for each Link session. In addition to the primary flow, a link_token can be configured to launch Link in update mode for Items with expired credentials, or the Payment Initiation (UK and Europe) flow. See the /link/token/create endpoint for a full list of configurations.
logLevel
LinkLogLevel
Set the level at which to log statements

Possible values: DEBUG, INFO, WARN, ERROR
extraParams
Record<string, any>
You do not need to use this field unless specifically instructed to by Plaid.
onExit
LinkExitListener
A function that is called when a user exits Link without successfully linking an Item, or when an error occurs during Link initialization. The function should expect one argument. See onExit.
children
React.ReactNode
The underlying component to render
Copy
1<PlaidLink
2 tokenConfig={{
3 token: '#GENERATED_LINK_TOKEN#',
4 }}
5 onSuccess={(success: LinkSuccess) => {
6 console.log(success);
7 }}
8 onExit={(exit: LinkExit) => {
9 console.log(exit);
10 }}
11>
12 <Text>Add Account</Text>
13</PlaidLink>

onSuccess

The method is called when a user successfully links an Item. The onSuccess handler returns a LinkConnection class that includes the public_token, and additional Link metadata in the form of a LinkConnectionMetadata class.

onSuccess
publicToken
String
Displayed once a user has successfully linked their Item.
metadata
LinkSuccessMetadata
Displayed once a user has successfully linked their Item.
accounts
Array<LinkAccount>
A list of accounts attached to the connected Item. If Account Select is enabled via the developer dashboard, accounts will only include selected accounts.
id
string
The Plaid account_id
name
nullablestring
The official account name
mask
nullablestring
The last 2-4 alphanumeric characters of an account's official account number. Note that the mask may be non-unique between an Item's accounts, it may also not match the mask that the bank displays to the user.
type
LinkAccountType
The account type. See the Account schema for a full list of possible values
subtype
LinkAccountSubtype
The account subtype. See the Account schema for a full list of possible values
verification_status
nullableLinkAccountVerificationStatus
Indicates an Item's micro-deposit-based verification status.
pending_automatic_verification
The Item is pending automatic verification
pending_manual_verification
The Item is pending manual micro-deposit verification. Items remain in this state until the user successfully verifies the two amounts.
automatically_verified
The Item has successfully been automatically verified
manually_verified
The Item has successfully been manually verified
verification_expired
Plaid was unable to automatically verify the deposit within 7 calendar days and will no longer attempt to validate the Item. Users may retry by submitting their information again through Link.
verification_failed
The Item failed manual micro-deposit verification because the user exhausted all 3 verification attempts. Users may retry by submitting their information again through Link.
null
The Item is not using micro-deposit verification.
institution
nullableobject
An institution object. If the Item was created via Same-Day micro-deposit verification, will be null.
name
string
The full institution name, such as 'Wells Fargo'
id
string
The Plaid institution identifier
linkSessionId
nullableString
A unique identifier associated with a user's actions and events through the Link flow. Include this identifier when opening a support ticket for faster turnaround.
metadataJson
nullableMap
The data directly returned from the server with no client side changes.
Copy
1const onSuccess = (success: LinkSuccess) => {
2 fetch('https://yourserver.com/exchange_public_token', {
3 method: 'POST',
4 body: {
5 publicToken: linkSuccess.publicToken,
6 accounts: linkSuccess.metadata.accounts,
7 institution: linkSuccess.metadata.institution,
8 linkSessionId: linkSuccess.metadata.linkSessionId,
9 },
10 });
11};

onExit

The onExit handler is called when a user exits Link without successfully linking an Item, or when an error occurs during Link initialization. The PlaidError returned from the onExit handler is meant to help you guide your users after they have exited Link. We recommend storing the error and metadata information server-side in a way that can be associated with the user. You’ll also need to include this and any other relevant info in Plaid Support requests for the user.

onExit
error
LinkError
An object that contains the error type, error code, and error message of the error that was last encountered by the user. If no error was encountered, error will be null.
displayMessage
nullableString
A user-friendly representation of the error code. null if the error is not related to user action. This may change over time and is not safe for programmatic use.
errorCode
LinkErrorCode
The particular error code. Each errorType has a specific set of errorCodes. A code of 499 indicates a client-side exception.
errorType
LinkErrorType
A broad categorization of the error.
errorMessage
String
A developer-friendly representation of the error code.
errorJson
nullableString
The data directly returned from the server with no client side changes.
metadata
Map<String, Object>
An object containing information about the exit event
linkSessionId
nullableString
A unique identifier associated with a user's actions and events through the Link flow. Include this identifier when opening a support ticket for faster turnaround.
institution
nullableLinkInstitution
An institution object. If the Item was created via Same-Day micro-deposit verification, will be null.
name
string
The full institution name, such as 'Wells Fargo'
id
string
The Plaid institution identifier
status
nullableLinkExitMetadataStatus
The point at which the user exited the Link flow. One of the following values
requires_questions
User prompted to answer security questions
requires_selections
User prompted to answer multiple choice question(s)
requires_recaptcha
User prompted to solve a reCAPTCHA challenge
requires_code
User prompted to provide a one-time passcode
choose_device
User prompted to select a device on which to receive a one-time passcode
requires_credentials
User prompted to provide credentials for the selected financial institution or has not yet selected a financial institution
requires_account_selection
User prompted to select one or more financial accounts to share
requires_oauth
User prompted to enter an OAuth flow
institution_not_found
User exited the Link flow after unsuccessfully (no results returned) searching for a financial institution
unknown
An exit status that is not handled by the current version of the SDK
requestId
nullableString
The request ID for the last request made by Link. This can be shared with Plaid Support to expedite investigation
metadataJson
nullableMap
The data directly returned from the server with no client side changes.
Copy
1const onExit = (linkExit: LinkExit) => {
2 supportHandler.report({
3 error: linkExit.error,
4 institution: linkExit.metadata.institution,
5 linkSessionId: linkExit.metadata.linkSessionId,
6 requestId: linkExitlinkExit.metadata.requestId,
7 status: linkExit.metadata.status,
8 });
9};

onEvent

The React Native Plaid module emits onEvent events throughout the account linking process. To receive these events use the usePlaidEmitter hook.

The onEvent callback is called at certain points in the Link flow. Unlike the handlers for onSuccess and onExit, the onEvent handler is initialized as a global lambda passed to the Plaid class. OPEN events will be sent immediately upon Link’s opening, and remaining events will be sent by the time onSuccess or onExit is called. If you need the exact time when an event happened, use the timestamp property.
The following onEvent callbacks are stable, which means that they will not be deprecated or changed: OPEN, EXIT, HANDOFF, SELECT_INSTITUTION, ERROR, BANK_INCOME_INSIGHTS_COMPLETED, IDENTITY_VERIFICATION_PASS_SESSION, IDENTITY_VERIFICATION_FAIL_SESSION. The remaining callback events are informational and subject to change.

onEvent
eventName
LinkEventName
A string representing the event that has just occurred in the Link flow.
BANK_INCOME_INSIGHTS_COMPLETED
The user has completed the Assets and Bank Income Insights flow.
CLOSE_OAUTH
The user closed the third-party website or mobile app without completing the OAuth flow.
ERROR
A recoverable error occurred in the Link flow, see the error_code metadata.
EXIT
The user has exited without completing the Link flow and the onExit callback is fired.
FAIL_OAUTH
The user encountered an error while completing the third-party's OAuth login flow.
HANDOFF
The user has exited Link after successfully linking an Item.
IDENTITY_VERIFICATION_START_STEP
The user has started a step of the Identity Verification flow. The step is indicated by view_name.
IDENTITY_VERIFICATION_PASS_STEP
The user has passed a step of the Identity Verification flow. The step is indicated by view_name.
IDENTITY_VERIFICATION_FAIL_STEP
The user has failed a step of the Identity Verification flow. The step is indicated by view_name.
IDENTITY_VERIFICATION_PENDING_REVIEW_STEP
The user has reached the pending review state.
IDENTITY_VERIFICATION_CREATE_SESSION
The user has started a new Identity Verification session.
IDENTITY_VERIFICATION_RESUME_SESSION
The user has resumed an existing Identity Verification session.
IDENTITY_VERIFICATION_PASS_SESSION
The user has successfully completed their Identity Verification session.
IDENTITY_VERIFICATION_FAIL_SESSION
The user has failed their Identity Verification session.
IDENTITY_VERIFICATION_OPEN_UI
The user has opened the UI of their Identity Verification session.
IDENTITY_VERIFICATION_RESUME_UI
The user has resumed the UI of their Identity Verification session.
IDENTITY_VERIFICATION_CLOSE_UI
The user has closed the UI of their Identity Verification session.
MATCHED_SELECT_INSTITUTION
The user selected an institution that was presented as a matched institution. This event can be emitted either during the Returning User Experience flow or if the institution's routing_number was provided when calling /link/token/create. To distinguish between the two scenarios, see metadata.matchReason.
MATCHED_SELECT_VERIFY_METHOD
The user selected a verification method for a matched institution. This event is emitted only during the Returning User Experience flow.
OPEN
The user has opened Link.
OPEN_MY_PLAID
The user has opened my.plaid.com. This event is only sent when Link is initialized with Assets as a product.
OPEN_OAUTH
The user has navigated to a third-party website or mobile app in order to complete the OAuth login flow.
SEARCH_INSTITUTION
The user has searched for an institution.
SELECT_BRAND
The user selected a brand, e.g. Bank of America. The SELECT_BRAND event is only emitted for large financial institutions with multiple online banking portals.
SELECT_DEGRADED_INSTITUTION
The user selected an institution with a DEGRADED health status and was shown a corresponding message.
SELECT_DOWN_INSTITUTION
The user selected an institution with a DOWN health status and was shown a corresponding message.
SELECT_INSTITUTION
The user selected an institution.
SUBMIT_ACCOUNT_NUMBER
The user has submitted an account number. This event emits the account_number_mask metadata to indicate the mask of the account number the user provided.
SUBMIT_CREDENTIALS
The user has submitted credentials.
SUBMIT_MFA
The user has submitted MFA.
SUBMIT_ROUTING_NUMBER
The user has submitted routing number. This event emits the routing_number metadata to indicate user's routing number.
TRANSITION_VIEW
The TRANSITION_VIEW event indicates that the user has moved from one view to the next.
VIEW_DATA_TYPES
The user has viewed data types on the data transparency consent pane.
UNKNOWN
The UNKNOWN event indicates that the event is not handled by the current version of the SDK.
metadata
LinkEventMetadata
An object containing information about the event.
submitAccountNumber
String
The account number mask extracted from the user-provided account number. If the user-inputted account number is four digits long, account_number_mask is empty. Emitted by SUBMIT_ACCOUNT_NUMBER.
errorCode
String
The error code that the user encountered. Emitted by: ERROR, EXIT.
errorMessage
String
The error message that the user encountered. Emitted by: ERROR, EXIT.
errorType
String
The error type that the user encountered. Emitted by: ERROR, EXIT.
exitStatus
String
The status key indicates the point at which the user exited the Link flow. Emitted by: EXIT.
institutionId
String
The ID of the selected institution. Emitted by: all events.
institutionName
String
The name of the selected institution. Emitted by: all events.
institutionSearchQuery
String
The query used to search for institutions. Emitted by: SEARCH_INSTITUTION.
matchReason
nullablestring
The reason this institution was matched, which will be either returning_user or routing_number. Emitted by: MATCHED_SELECT_INSTITUTION.
routingNumber
Optional<String>
The routing number submitted by user at the micro-deposits routing number pane. Emitted by SUBMIT_ROUTING_NUMBER.
linkSessionId
String
The linkSessionId is a unique identifier for a single session of Link. It's always available and will stay constant throughout the flow. Emitted by: all events.
mfaType
String
If set, the user has encountered one of the following MFA types: code device questions selections. Emitted by: SUBMIT_MFA and TRANSITION_VIEW when view_name is MFA.
requestId
String
The request ID for the last request made by Link. This can be shared with Plaid Support to expedite investigation. Emitted by: all events.
selection
String
Either the verification method for a matched institution selected by the user or the Auth Type Select flow type selected by the user. If selection is used to describe selected verification method, then possible values are phoneotp or password; if selection is used to describe the selected Auth Type Select flow, then possible values are flow_type_manual or flow_type_instant. Emitted by: MATCHED_SELECT_VERIFY_METHOD and SELECT_AUTH_TYPE.
timestamp
String
An ISO 8601 representation of when the event occurred. For example, 2017-09-14T14:42:19.350Z. Emitted by: all events.
viewName
LinkEventViewName
The name of the view that is being transitioned to. Emitted by: TRANSITION_VIEW.
ACCEPT_TOS
The view showing Terms of Service in the identity verification flow.
CONNECTED
The user has connected their account.
CONSENT
We ask the user to consent to the privacy policy.
CREDENTIAL
Asking the user for their account credentials.
DATA_TRANSPARENCY
We disclose the data types being shared.
DATA_TRANSPARENCY_CONSENT
We ask the user to consent to the privacy policy and disclose data types being shared.
DOCUMENTARY_VERIFICATION
The view requesting document verification in the identity verification flow (configured via "Fallback Settings" in the "Rulesets" section of the template editor).
ERROR
An error has occurred.
EXIT
Confirming if the user wishes to close Link.
KYC_CHECK
The view representing the "know your customer" step in the identity verification flow.
LOADING
Link is making a request to our servers.
MATCHED_CONSENT
We ask the matched user to consent to the privacy policy and SMS terms.
MATCHED_CREDENTIAL
We ask the matched user for their account credentials to a matched institution.
MATCHED_MFA
We ask the matched user for MFA authentication to verify their identity.
MFA
The user is asked by the institution for additional MFA authentication.
NUMBERS
The user is asked to insert their account and routing numbers.
OAUTH
The user is informed they will authenticate with the financial institution via OAuth.
RECAPTCHA
The user was presented with a Google reCAPTCHA to verify they are human.
RISK_CHECK
The risk check step in the identity verification flow (configured via "Risk Rules" in the "Rulesets" section of the template editor).
SCREENING
The watchlist screening step in the identity verification flow.
SELECT_ACCOUNT
We ask the user to choose an account.
SELECT_AUTH_TYPE
The user is asked to choose whether to Link instantly or manually (i.e., with micro-deposits).
SELECT_BRAND
The user is asked to select a brand, e.g. Bank of America. The brand selection interface occurs before the institution select pane and is only provided for large financial institutions with multiple online banking portals.
SELECT_INSTITUTION
We ask the user to choose their institution.
SELFIE_CHECK
The view in the identity verification flow which uses the camera to confirm there is real user that matches their ID documents.
UPLOAD_DOCUMENTS
The user is asked to upload documents (for Income verification).
VERIFY_SMS
The SMS verification step in the identity verification flow.
Copy
1usePlaidEmitter((event) => {
2 console.log(event);
3});

OAuth

Using Plaid Link with an OAuth flow requires some additional setup instructions. For details, see the OAuth guide.

Upgrading

  • To upgrade from version 6.x to 7.x or 8.x, see the 6.x to 7.x migration guide.
  • To upgrade from version 5.x to 7.x or 8.x, see the 5.x to 7.x migration guide.
  • The only difference between version 7.x and 8.x is that 8.x adds support for Xcode 14. No code changes are required to upgrade from 7.x to 8.x, although you must convert to an Xcode 14 toolchain.
  • No code changes are required to upgrade from 8.x to 9.x, although you must make sure you are using a compatible version of the Plaid iOS SDK (4.1.0 or higher).

Was this helpful?
Developer community
GitHub
GitHub
Stack Overflow
Stack Overflow
YouTube
YouTube
Twitter
Twitter
Discord
Discord