Link Embedded Institution Search
Enhance conversion by embedding institution search directly into your app
With Embedded Institution Search (also known as Embedded Link), you can provide a more seamless transition to the account connectivity experience. For payment experiences in particular, embedding institution search can help guide users to choosing their bank account as a payment method.
Embedded Institution Search and the Auth Database Insights flow (beta) are both designed to increase adoption of ACH payment methods and are frequently used together. Embedded Institution Search is also fully compatible with other Auth flows, including micro-deposit based flows and Database Match.
Embedded Institution Search can be used with the following products: Auth, Identity, Balance, Balance Plus, Signal, Transfer, Transactions, Assets, and Liabilities.
Institution Search user experience
The user will be able to select from a set of institution logos. You can customize which logos will be displayed via the Plaid Dashboard. If a user selects an institution, they will be taken to Link to connect their account.
If the user's institution is not one of the featured institutions, they can search for their institution using the search bar.
Integration steps
Embedded institution search is available for all supported integration modes except webviews and Hosted Link.
Before integrating, make sure you are using a version of the SDK that supports Embedded Institution Search.
Platform | Minimum SDK version required |
---|---|
Android | 3.14.0 |
iOS | 4.5.0 |
React Native | 10.6.0 |
React web | 3.5.1 |
JavaScript web | N/A (all customers are on the latest version) |
- Create a Link token as normal, using
/link/token/create
; no special parameters are required when making this call to enable Embedded Institution Search. The 'Connect Manually' button rendering is configured with theauth_type_select_enabled
boolean in theauth
object. - Create an embedded view
If you are using iOS, call
createEmbeddedView
, which will return a Result containing aUIView
. Once you have theUIView
, add it to yourViewController
's view. If you are using the web SDK, callPlaid.createEmbedded
instead ofPlaid.create
to open Link. For other platforms, you will create the view as normal. - Lay out the view Plaid returns from the configuration. If you are migrating to Embedded Institution Search from traditional Link, delete your old Link presentation in favor of this new one.
1private func setupEmbeddedSearchView(token: String) {2
3 // Create a configuration like normal.4 var configuration = LinkTokenConfiguration(5 token: token,6 onSuccess: { success in7 print("success: \(success)")8 }9 )10
11 configuration.onEvent = { event in12 print("Event: \(event)")13 }14
15 configuration.onExit = { exit in16 print("Exit: \(exit)")17 }18
19 // Create a handler with your configuration like normal.20 let handlerResult = Plaid.create(configuration)21 switch handlerResult {22 case .success(let handler):23
24 // Save a reference to your handler.25 self.handler = handler26
27 // Create an embedded view.28 let embeddedSearchView = handler.createEmbeddedView(presentUsing: .viewController(self))29
30 // Layout this view31 embeddedSearchView.translatesAutoresizingMaskIntoConstraints = false32 view.addSubview(embeddedSearchView)33
34 NSLayoutConstraint.activate([35 embeddedSearchView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8),36 embeddedSearchView.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 25),37 embeddedSearchView.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: -25),38 embeddedSearchView.heightAnchor.constraint(equalToConstant: 360),39 ])40
41
42 case .failure(let error):43 // Error creating handler. Handle like normal.44 fatalError("\(error)")45 }46 }
1// Register a callback for an Activity Result like normal (must be done from an Activity)2 private val linkAccountToPlaid =3 registerForActivityResult(OpenPlaidLink()) { result ->4 when (result) {5 is LinkSuccess -> /* handle LinkSuccess */6 is LinkExit -> /* handle LinkExit (from LinkActivity) */7 }8 }9
10// Create a linkTokenConfiguration like normal11val linkTokenConfiguration = LinkTokenConfiguration.Builder().token(token).build()12
13// Create the view with a trailing lambda for handling LinkExits from the Embedded View14val embeddedView = Plaid.createLinkEmbeddedView(15this /*Activity context*/,16linkTokenConfiguration,17linkAccountToPlaid) {18exit: LinkExit -> /* handle LinkExit (from Embedded View) */19 }20)21
22// Add this embeddedView to a view in your layout23binding.embeddedViewContainer.addView(embeddedView)
1<div id="plaid-embedded-link-container"></div>
1// The container at `#plaid-embedded-link-container` will need to be sized in order to2// control the size of the embedded Plaid module3const embeddedLinkOpenTarget = document.querySelector('#plaid-embedded-link-container');4
5Plaid.createEmbedded(6 {7 token: 'GENERATED_LINK_TOKEN',8 onSuccess: (public_token, metadata) => {},9 onLoad: () => {},10 onExit: (err, metadata) => {},11 onEvent: (eventName, metadata) => {},12 },13 embeddedLinkOpenTarget,14);
1import React, { useCallback } from 'react';2import { PlaidEmbeddedLink } from 'react-plaid-link';3
4const App = props => {5 const onSuccess = useCallback(6 (token, metadata) => console.log('onSuccess', token, metadata),7 []8 );9
10 const onEvent = useCallback(11 (eventName, metadata) => console.log('onEvent', eventName, metadata),12 []13 );14
15 const onExit = useCallback(16 (err, metadata) => console.log('onExit', err, metadata),17 []18 );19
20 const config = {21 token: "plaid-token-123",22 onSuccess,23 onEvent,24 onExit,25 };26
27 return (28 <PlaidEmbeddedLink29 {...config}30 style={{31 height: '350px',32 width: '350px',33 }}34 />35 );36};37
38export default App;
Update mode
Embedded Institution Search cannot be used in update mode; to update a user's Item, launch a regular update mode session instead.
Customization Options
You can customize the Embedded Institution Search user experience to match your application's needs.
Module responsiveness and tile count
The embedded Link module will responsively scale to display between four and fifteen institutions, depending on the height and width of the module.
Width | Columns |
---|---|
> 572px | 5 |
464-571px | 4 |
356-463px | 3 |
< 355px | 2 |
Height | Rows |
---|---|
> 348px | 3 |
282-347px | 2 |
< 281px | 1 |
Success state
You can optionally display a success state in the embedded Link module after the user has successfully connected their account. This success state will replace the Embedded Institution Search view with a visualization of the linked account. To enable this feature, talk to your Plaid account manager.
Customizing institutions displayed
The institutions displayed in Link Embedded Search are based on your Institution Select settings, which you can optionally customize in the Dashboard. For most customers, it is recommended to use the default settings.
Embedded Institution Search is compatible with the Institution Select Shortcut: If you already know which institution the user wants to connect to before initializing Link, you can pass routing_number
into the institution_data
request field in the /link/token/create
endpoint. The matched institution will be listed first (top left position) in the embedded institution grid.
Returning user experience
The Embedded Institution Search experience can be further optimized for users who have already connected a financial account with Plaid.
When a user's phone number is provided via /link/token/create
, Plaid will check to see if they are a returning user. If they are detected as a returning user with the same phone number and device, they will be shown a list of previously connected accounts in the embedded module.
The user can then verify the phone number using a one-time password and complete the account linking if the previously linked institutions do not require re-authentication. For more details on the returning user flow, see Returning user experience.
Testing in Sandbox
In order to test the returning user experience in Embedded Institution Search, use the phone numbers listed in Testing returning user experience in Sandbox.
UI recommendations for Embedded Institution Search
In order to get pay-by-bank uptake benefits from Embedded Institution Search, it should be visible by default, without requiring any user input. If your UI requires the user to proactively select "pay by bank" before showing Embedded Institution Search, consider changing the UI to show Embedded Institution Search by default. If this is not feasible for you, you should use the traditional Link presentation rather than Embedded Institution Search.
Initialize Link when you load the pane that Link is embedded in, where you typically place the "Link your bank" button to initialize Link, and remove this button. Create your embedded search view before it will be displayed in your app. This will reduce the latency for the embedded search view loading. You’ll create a view and place it on the screen instead of calling Open; Plaid will track when this view is requested and activate the Embedded Search UI.
On the web, the embedded Plaid module will attempt to use 100% of the height and width of its container. To modify the size of the Plaid module, or to render the Plaid module responsively, you should set the size of the container. We recommend 350 height and width 420 (min width 240).
Event callbacks emitted by Embedded Institution Search
User chooses an institution directly from embedded search
onEvent: OPEN
–view_name: "CONSENT"
onEvent: SELECT_INSTITUTION
onEvent: TRANSITION_VIEW
–view_name: "CONSENT"
onEvent: TRANSITION_VIEW
–view_name: "CREDENTIAL" or "OAUTH"
- user selects Continue on the ConsentPane