POST /link/token/create
The /link/token/create
endpoint creates a link_token
, which is required as a parameter when initializing Link. Once Link has been initialized, it returns a public_token
. For most Plaid products, the public_token
is saved and exchanged for an access_token
via /item/public_token/exchange
as part of the main Link flow. For more details, see the Link flow overview.
A link_token
generated by /link/token/create
is also used to initialize other Link flows, such as the update mode flow for tokens with expired credentials, or the Identity Verification flow.
Servers
- https://production.plaid.com
- https://sandbox.plaid.com
Request headers
Name | Type | Required | Description |
---|---|---|---|
Content-Type |
String | Yes |
The media type of the request body.
Default value: "application/json" |
Request body fields
Name | Type | Required | Description |
---|---|---|---|
link_customization_name |
String | No |
The name of the Link customization from the Plaid Dashboard to be applied to Link. If not specified, the |
client_id |
String | No |
Your Plaid API |
third_party_user_token |
String | No |
A third party user token associated with the current user. |
investments_auth |
Object | No |
Configuration parameters for the Investments Move product |
investments_auth.manual_entry_enabled |
Boolean | No |
If Default value: false |
investments_auth.rollover_401k_enabled |
Boolean | No |
If Default value: false |
investments_auth.stated_account_number_enabled |
Boolean | No |
If Default value: false |
investments_auth.masked_number_match_enabled |
Boolean | No |
If Default value: false |
hosted_link |
Object | No |
Configuration parameters for Hosted Link. To enable the session for Hosted Link, send this object in the request. It can be empty. |
hosted_link.completion_redirect_uri |
String | No |
URI that Hosted Link will redirect to upon completion of the Link flow. This will only occur in Hosted Link sessions, not in other implementation methods. |
hosted_link.delivery_method |
String | No |
How Plaid should deliver the Plaid Link session to the customer. Only available to customers enabled for Link Delivery (beta). To request Link Delivery access, contact your account manager.
'sms' will deliver via SMS. Must pass Possible values:
|
hosted_link.is_mobile_app |
Boolean | No |
This indicates whether the client is opening hosted Link in a mobile app in an out of process web view (OOPWV) (i.e., an Default value: false |
hosted_link.url_lifetime_seconds |
Integer | No |
How many seconds the link will be valid for. Must be positive. Cannot be longer than 21 days. The default lifetime is 7 days for links delivered by email, 1 day for links delivered via SMS, and 30 minutes for links not sent via Plaid Link delivery. This parameter will override the value of all three link types. |
redirect_uri |
String | No |
A URI indicating the destination where a user should be forwarded after completing the Link flow; used to support OAuth authentication flows when launching Link in the browser or another app. The |
account_filters |
Object | No |
By default, Link will provide limited account filtering: it will only display Institutions that are compatible with all products supplied in the The filter may or may not impact the list of accounts shown by the institution in the OAuth account selection flow, depending on the specific institution. If the user selects excluded account subtypes in the OAuth flow, these accounts will not be added to the Item. If the user selects only excluded account subtypes, the link attempt will fail and the user will be prompted to try again. |
account_filters.investment |
Object | No |
A filter to apply to |
account_filters.investment.account_subtypes[] |
Array | Yes |
An array of account subtypes to display in Link. If not specified, all account subtypes will be shown. For a full list of valid types and subtypes, see the Account schema. |
account_filters.loan |
Object | No |
A filter to apply to |
account_filters.loan.account_subtypes[] |
Array | Yes |
An array of account subtypes to display in Link. If not specified, all account subtypes will be shown. For a full list of valid types and subtypes, see the Account schema. |
account_filters.other |
Object | No |
A filter to apply to |
account_filters.other.account_subtypes[] |
Array | Yes |
An array of account subtypes to display in Link. If not specified, all account subtypes will be shown. For a full list of valid types and subtypes, see the Account schema. |
account_filters.credit |
Object | No |
A filter to apply to |
account_filters.credit.account_subtypes[] |
Array | Yes |
An array of account subtypes to display in Link. If not specified, all account subtypes will be shown. For a full list of valid types and subtypes, see the Account schema. |
account_filters.depository |
Object | No |
A filter to apply to |
account_filters.depository.account_subtypes[] |
Array | Yes |
An array of account subtypes to display in Link. If not specified, all account subtypes will be shown. For a full list of valid types and subtypes, see the Account schema. |
cra_options |
Object | No |
Specifies options for initializing Link for use with Plaid Check products |
cra_options.days_requested |
Integer | Yes |
The number of days of history to include in Plaid Check products. Maximum is 730; minimum is 180. If a value lower than 180 is provided, a minimum of 180 days of history will be requested. |
cra_options.days_required |
Integer | No |
The minimum number of days of data required for the report to be successfully generated. |
cra_options.base_report |
Object | No |
Specifies options for initializing Link for use with the Base Report product. |
cra_options.base_report.client_report_id |
String | No |
Client-generated identifier, which can be used by lenders to track loan applications. |
cra_options.partner_insights |
Object | No |
Specifies options for initializing Link for use with the Credit Partner Insights product. |
cra_options.partner_insights.prism_products[] |
Array | No |
The specific Prism products to return. If none are passed in, then all products will be returned. |
cra_options.partner_insights.prism_versions |
Object | No |
The versions of Prism products to evaluate |
cra_options.partner_insights.prism_versions.firstdetect |
String | No |
The version of Prism FirstDetect. If not specified, will default to v3. Possible values:
|
cra_options.partner_insights.prism_versions.cashscore |
String | No |
The version of Prism CashScore. If not specified, will default to v3. Possible values:
|
cra_options.partner_insights.prism_versions.insights |
String | No |
The version of Prism Insights. If not specified, will default to v3. Possible values:
|
cra_options.cashflow_insights |
Object | No |
Specifies options for initializing Link for use with the Cashflow Insights product. |
cra_options.cashflow_insights.plaid_check_score_version |
String | No |
The version of the Plaid Check Score Possible values:
|
cra_options.cashflow_insights.attributes_version |
String | No |
The version of cashflow attributes Possible values:
|
cra_options.client_report_id |
String | No |
Client-generated identifier, which can be used by lenders to track loan applications. |
access_tokens[] |
Array | No |
A list of access tokens associated with the items to update in Link update mode for the Assets product. Using this instead of the |
deposit_switch |
Object | No |
(Deprecated) Specifies options for initializing Link for use with the Deposit Switch (beta) product. This field is required if |
deposit_switch.deposit_switch_id |
String | Yes |
The |
client_name |
String | Yes |
The name of your application, as it should be displayed in Link. Maximum length of 30 characters. If a value longer than 30 characters is provided, Link will display "This Application" instead. |
country_codes[] |
Array | Yes |
Specify an array of Plaid-supported country codes using the ISO-3166-1 alpha-2 country code standard. Institutions from all listed countries will be shown. For a complete mapping of supported products by country, see https://plaid.com/global/. By default, access is granted to US and CA. For Production or Limited Production access to other countries, contact Sales or your account manager. If using Identity Verification, If Link is launched with multiple country codes, only products that you are enabled for in all countries will be used by Link. While all countries are enabled by default in Sandbox, in Production only the countries you have requested access for are shown. To request access to additional countries, file a product access Support ticket via the Plaid dashboard. If using a Link customization, make sure the country codes in the customization match those specified in If using the Auth features Instant Match, Instant Micro-deposits, Same-day Micro-deposits, Automated Micro-deposits, or Database Auth, |
webhook |
String | No |
The destination URL to which any webhooks should be sent. Note that webhooks for Payment Initiation (e-wallet transactions only), Transfer, Bank Transfer (including Auth micro-deposit notification webhooks), Monitor, and Identity Verification are configured via the Dashboard instead. In update mode, this field will not have an effect; to update the webhook receiver endpoint for an existing Item, use |
identity |
Object | No |
Identity object used to specify document upload |
identity.parsing_configs[] |
Array | No |
An array of parsing configurations. Valid parsing configurations are |
identity.is_document_upload |
Boolean | No |
Used to specify whether the Link session is Identity Document Upload |
identity.account_ids[] |
Array | No |
An array of |
secret |
String | No |
Your Plaid API |
cashflow_report |
Object | No |
Configuration parameters for the Cashflow Report product. Currently in closed beta. |
cashflow_report.days_requested |
Integer | No |
Number of days of transaction history to request in the Cashflow Report product. Default value: 365 |
language |
String | Yes |
The language that Link should be displayed in. When initializing with Identity Verification, this field is not used; for more details, see Identity Verification supported languages. Supported languages are:
When using a Link customization, the language configured here must match the setting in the customization, or the customization will not be applied. |
payment_initiation |
Object | No |
Specifies options for initializing Link for use with the Payment Initiation (Europe) product. This field is required if |
payment_initiation.payment_id |
String | No |
The |
payment_initiation.consent_id |
String | No |
The |
appearance_mode |
String | No |
Enum representing the desired appearance mode for Link, used to force light or dark modes or set Link to change depending on user system settings. Currently in closed beta. Possible values:
|
required_if_supported_products[] |
Array | No |
List of Plaid product(s) you wish to use only if the institution and account(s) selected by the user support the product. Institutions that do not support these products will still be shown in Link. The products will only be extracted and billed if the user selects an institution and account type that supports them. There should be no overlap between this array and the For more details on using this feature, see Required if Supported Products. |
user_token |
String | No |
A user token generated using |
employment |
Object | No |
Specifies options for initializing Link for use with the Employment product. This field is required if |
employment.employment_source_types[] |
Array | No |
The types of source employment data that users will be permitted to share. Options include |
employment.bank_employment |
Object | No |
Specifies options for initializing Link for use with Bank Employment. This field is required if |
employment.bank_employment.days_requested |
Integer | Yes |
The number of days of data to request for the Bank Employment product. |
base_report |
Object | No |
Specifies options for initializing Link for use with the Base Report product. This field is required if |
base_report.days_requested |
Integer | Yes |
The maximum integer number of days of history to include in the Base Report. |
base_report.client_report_id |
String | No |
Client-generated identifier, which can be used by lenders to track loan applications. |
financekit_supported |
Boolean | No |
If |
card_switch |
Object | No |
A map containing data to pass in for the Card Switch flow. |
card_switch.card_bin |
String | Yes |
The BIN (Bank Identification Number) of the card to switch. |
enable_multi_item_link |
Boolean | No |
If |
optional_products[] |
Array | No |
List of Plaid product(s) that will enhance the consumer's use case, but that your app can function without. Plaid will attempt to fetch data for these products on a best-effort basis, and failure to support these products will not affect Item creation. There should be no overlap between this array and the For more details on using this feature, see Optional Products. |
android_package_name |
String | No |
The name of your app's Android package. Required if using the |
payment_configuration |
Object | No |
Specifies options for initializing Link for use with the Pay By Bank flow. This is an optional field to configure the user experience, and currently requires the amount field to be set. |
payment_configuration.description |
String | No |
The description of the transfer that provides the payment context. The max length is 256. |
payment_configuration.amount |
String | Yes |
The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). |
auth |
Object | No |
Specifies options for initializing Link for use with the Auth product. This field can be used to enable or disable extended Auth flows for the resulting Link session. Omitting any field will result in a default that can be configured by your account manager. The default behavior described in the documentation is the default behavior that will apply if you have not requested your account manager to apply a different default. If you have enabled the Dashboard Account Verification pane, the settings enabled there will override any settings in this object. |
auth.same_day_microdeposits_enabled |
Boolean | No |
Specifies whether the Link session is enabled for the Same Day Micro-deposits flow. Default behavior is |
auth.instant_microdeposits_enabled |
Boolean | No |
Specifies whether the Link session is enabled for the Instant Micro-deposits flow. Default behavior for Plaid teams created after November 2023 is |
auth.instant_match_enabled |
Boolean | No |
Specifies whether the Link session is enabled for the Instant Match flow. Instant Match is enabled by default. Instant Match can be disabled by setting this field to |
auth.database_match_enabled |
Boolean | No |
Database Match has been deprecated and replaced with Database Auth. Use the Account Verification Dashboard to enable Database Auth. |
auth.auth_type_select_enabled |
Boolean | No |
Specifies whether Auth Type Select is enabled for the Link session, allowing the end user to choose between linking via a credentials-based flow (i.e. Instant Auth, Instant Match, Automated Micro-deposits) or a manual flow that does not require login (all other Auth flows) prior to selecting their financial institution. Default behavior is |
auth.automated_microdeposits_enabled |
Boolean | No |
Specifies whether the Link session is enabled for the Automated Micro-deposits flow. Default behavior is |
auth.flow_type |
String | No |
This field has been deprecated in favor of Possible values:
|
auth.database_insights_enabled |
Boolean | No |
Database Insights has been deprecated and replaced with Database Auth. Use the Account Verification Dashboard to enable Database Auth. |
auth.sms_microdeposits_verification_enabled |
Boolean | No |
Specifies whether the Link session is enabled for SMS micro-deposits verification. Default behavior is |
auth.reroute_to_credentials |
String | No |
Specifies what type of Reroute to Credentials pane should be used in the Link session for the Same Day Micro-deposits flow. Default behavior is Possible values:
|
products[] |
Array | No |
List of Plaid product(s) you wish to use. If launching Link in update mode, should be omitted (unless you are using update mode to add Income or Assets to an Item); required otherwise.
If launching Link with CRA products, The products specified here will determine which institutions will be available to your users in Link. Only institutions that support all requested products can be selected; a if a user attempts to select an institution that does not support a listed product, a "Connectivity not supported" error message will appear in Link. To maximize the number of institutions available, initialize Link with the minimal product set required for your use case. Additional products can be included via the Note that, unless you have opted to disable Instant Match support, institutions that support Instant Match will also be shown in Link if In Production, you will be billed for each product that you specify when initializing Link. Note that a product cannot be removed from an Item once the Item has been initialized with that product. To stop billing on an Item for subscription-based products, such as Liabilities, Investments, and Transactions, remove the Item via |
additional_consented_products[] |
Array | No |
List of additional Plaid product(s) you wish to collect consent for to support your use case. These products will not be billed until you start using them by calling the relevant endpoints.
Institutions that do not support these products will still be shown in Link. There should be no overlap between this array and the If you include |
transactions |
Object | No |
Configuration parameters for the Transactions product |
transactions.days_requested |
Integer | No |
The maximum number of days of transaction history to request for the Transactions product. The more transaction history is requested, the longer the historical update poll will take. The default value is 90 days. If a value under 30 is provided, a minimum of 30 days of history will be requested. Once Transactions has been added to an Item, this value cannot be updated. Customers using Recurring Transactions should request at least 180 days of history for optimal results. Default value: 90 |
income_verification |
Object | No |
Specifies options for initializing Link for use with the Income product. This field is required if |
income_verification.stated_income_sources[] |
Array | No |
A list of user stated income sources |
income_verification.stated_income_sources[].category |
String | No |
The income category for a specified income source Possible values:
|
income_verification.stated_income_sources[].employer |
String | No |
The employer corresponding to an income source specified by the user |
income_verification.stated_income_sources[].pay_per_cycle |
Number | No |
The income amount paid per cycle for a specified income source |
income_verification.stated_income_sources[].pay_frequency |
String | No |
The pay frequency of a specified income source Possible values:
|
income_verification.stated_income_sources[].pay_type |
String | No |
The pay type - Possible values:
|
income_verification.stated_income_sources[].pay_annual |
Number | No |
The income amount paid annually for a specified income source |
income_verification.income_verification_id |
String | No |
The |
income_verification.access_tokens[] |
Array | No |
An array of access tokens corresponding to Items that a user has previously connected with. Data from these institutions will be cross-referenced with document data received during the Document Income flow to help verify that the uploaded documents are accurate. If the This field should only be used with the |
income_verification.payroll_income |
Object | No |
Specifies options for initializing Link for use with Payroll Income (including Document Income). Further customization options for Document Income, such as customizing which document types may be uploaded, are also available via the Link Customization pane in the Dashboard. (Requires Production enablement.) |
income_verification.payroll_income.parsing_config[] |
Array | No |
The types of analysis to enable for document uploads. If this field is not provided, then docs will undergo OCR parsing only. |
income_verification.payroll_income.item_id_to_update |
String | No |
Uniquely identify a payroll income Item to update with. This field is only relevant for participants in the Payroll Income Refresh beta. |
income_verification.payroll_income.is_update_mode |
Boolean | No |
An identifier to indicate whether the income verification Link token will be used for update mode. This field is only relevant for participants in the Payroll Income Refresh beta. Default value: false |
income_verification.payroll_income.flow_types[] |
Array | No |
The types of payroll income verification to enable for the Link session. If none are specified, then users will see both document and digital payroll income. |
income_verification.asset_report_id |
String | No |
The |
income_verification.bank_income |
Object | No |
Specifies options for initializing Link for use with Bank Income. This field is required if |
income_verification.bank_income.days_requested |
Integer | Yes |
The number of days of data to request for the Bank Income product |
income_verification.bank_income.enable_multiple_items |
Boolean | No |
Whether to enable multiple Items to be added in the Link session. This setting is deprecated and has been replaced by the more general Default value: false |
income_verification.income_source_types[] |
Array | No |
The types of source income data that users will be permitted to share. Options include |
user |
Object | Yes |
An object specifying information about the end user who will be linking their account. |
user.email_address_verified_time |
String | No |
The date and time the email address was verified in ISO 8601 format ( Only pass a verification time for an email address that you have verified. If you have performed verification but don’t have the time, you may supply a signal value of the start of the UNIX epoch. Example: |
user.ssn |
String | No |
Deprecated and not currently used, use the |
user.date_of_birth |
String | No |
To be provided in the format "yyyy-mm-dd". Can be used to prefill Link fields when used with Identity Verification. |
user.email_address |
String | No |
The user's email address. Can be used to prefill Link fields when used with Identity Verification. |
user.phone_number_verified_time |
String | No |
The date and time the phone number was verified in ISO 8601 format ( Only pass a verification time for a phone number that you have verified. If you have performed verification but don’t have the time, you may supply a signal value of the start of the UNIX epoch. Example: |
user.legal_name |
String | No |
The user's full legal name, used for micro-deposit based verification flows. For a small number of customers on legacy flows, providing this field is required to enable micro-deposit-based flows. For all other customers, this field is optional. Providing the user's name in this field when using micro-deposit-based verification will streamline the end user experience, as the user will not be prompted to enter their name during the Link flow; Plaid will use the provided legal name instead. |
user.client_user_id |
String | Yes |
A unique ID representing the end user. Typically this will be a user ID number from your application. Personally identifiable information, such as an email address or phone number, should not be used in the |
user.phone_number |
String | No |
The user's phone number in E.164 format. If supplied, will be used when applicable to prefill phone number fields in Link for the returning user flow and the Identity Verification flow. |
statements |
Object | No |
Specifies options for initializing Link for use with the Statements product. This field is required for the statements product. |
statements.start_date |
String | Yes |
The start date for statements, in ISO 8601 "YYYY-MM-DD" format, e.g. "2020-10-30". |
statements.end_date |
String | Yes |
The end date for statements, in ISO 8601 "YYYY-MM-DD" format, e.g. "2020-10-30". You can request up to two years of data. |
consumer_report_permissible_purpose |
String | No |
Describes the reason you are generating a Consumer Report for this user. This parameter is required if you want to generate a Consumer Report for the user automatically after the Link session. If you omit this parameter during Link token creation, you can later call the
Possible values:
|
transfer |
Object | No |
Specifies options for initializing Link for use with the Transfer product. |
transfer.intent_id |
String | No |
The |
transfer.authorization_id |
String | No |
The |
transfer.payment_profile_token |
String | No |
The |
investments |
Object | No |
Configuration parameters for the Investments product |
investments.allow_unverified_crypto_wallets |
Boolean | No |
If |
investments.allow_manual_entry |
Boolean | No |
If |
institution_id |
String | No |
Used for certain Europe-only configurations, as well as certain legacy use cases in other regions. |
cra_enabled |
Boolean | No |
If |
institution_data |
Object | No |
A map containing data used to highlight institutions in Link. |
institution_data.routing_number |
String | No |
The routing number of the bank to highlight in Link. Note: in rare cases, a single routing number can be associated with multiple institutions, e.g. due to a brokerage using another institution to manage ACH on its sweep accounts. If this happens, the bank will not be highlighted in Link even if the routing number is provided. |
access_token |
String | No |
The |
credit_partner_insights |
Object | No |
Specifies options for initializing Link for use with the Credit Partner Insights product. |
credit_partner_insights.days_requested |
Integer | No |
The maximum integer number of days of history to compute Credit Partner Insights. Defaults to 180 if not specified |
credit_partner_insights.prism_products[] |
Array | No |
The specific Prism products to return. If none are passed in, then all products will be returned. |
eu_config |
Object | No |
Configuration parameters for EU flows |
eu_config.headless |
Boolean | No |
If |
update |
Object | No |
Specifies options for initializing Link for update mode. |
update.item_ids[] |
Array | No |
An array of |
update.user |
Boolean | No |
If Default value: false |
update.reauthorization_enabled |
Boolean | No |
By default, Plaid will enable the reauthorization flow during update mode for an Item enabled for Data Transparency Messaging if the Item expires within six months. During a reauthorization flow, an end user will review Plaid's end user privacy policy, use case and data scope consents, and account access consents; they may also be required to log in to their financial institution's OAuth flow. After the end user successfully completes the reauthorization flow, the Item's expiration date will be extended to 12 months from the time that the reauthorization took place. This field allows you to optionally override the default reauthorization scheduling logic to either forcibly enable or disable the reauthorization flow for a given update mode session. This field does not impact the flow for Items at institutions in the EU or UK. |
update.account_selection_enabled |
Boolean | No |
If Default value: false |
identity_verification |
Object | No |
Specifies option for initializing Link for use with the Identity Verification product. |
identity_verification.gave_consent |
Boolean | No |
A flag specifying whether the end user has already agreed to a privacy policy specifying that their data will be shared with Plaid for verification purposes. If Default value: false |
identity_verification.consent |
Boolean | No |
A flag specifying whether the end user has already agreed to a privacy policy specifying that their data will be shared with Plaid for verification purposes. If Default value: false |
identity_verification.template_id |
String | Yes |
ID of the associated Identity Verification template. |
How to start integrating
- Add HTTP Task to your workflow definition.
- Search for the API you want to integrate with and click on the name.
- This loads the API reference documentation and prepares the Http request settings.
- Click Test request to test run your request to the API and see the API's response.