Plaid logo
Docs
ALL DOCS

API

  • Overview
  • Libraries
  • API versioning
  • Postman Collection
  • Webhooks
Product API reference
  • Transactions
  • Auth
  • Balance
  • Identity
  • Assets
  • Investments
  • Liabilities
  • Payment Initiation
  • Virtual Accounts
  • Transfer
  • Income
  • Identity Verification
  • Monitor
  • Beacon
  • Signal
  • Enrich
  • Statements (beta)
Other API reference
  • Item endpoints and webhooks
  • Account endpoints and schemas
  • Institution endpoints
  • Token flow and endpoints
  • Processor token endpoints
  • Sandbox endpoints
  • Processor partner endpoints
  • Reseller partner endpoints
Plaid logo
Docs
Close search modal
Ask Bill!
Ask Bill!
Hi! I'm Bill! You can ask me all about the Plaid API. Try asking questions like:
    Note: Bill isn't perfect. He's just a robot platypus that reads our docs for fun. You should treat his answers with the same healthy skepticism you might treat any other answer on the internet. This chat may be logged for quality and training purposes. Please don't send Bill any PII -- he's scared of intimacy. All chats with Bill are subject to Plaid's Privacy Policy.
    Plaid.com
    Log in
    Get API Keys
    Open nav

    Token endpoints

    API reference for obtaining and managing tokens from Link

    Token exchange flow

    Most API calls to Plaid endpoints require an access_token. An access_token provides access to a specific Item, which is a Plaid term for a login at a financial institution.

    The primary flow for obtaining a Plaid access_token works as follows:

    1. Obtain a link_token by calling /link/token/create.
    2. Initialize Link by passing in the link_token. When your user completes the Link flow, Link will pass back a public_token via the onSuccess callback. For more information on initializing and receiving data back from Link, see the Link documentation.
    3. Exchange the public_token for an access_token by calling /item/public_token/exchange.

    The access_token can then be used to call Plaid endpoints and obtain information about an Item.

    In addition to the primary flow, several other token flows exist. The Link update mode flow allows you to update an access_token that has stopped working. The Sandbox testing environment also offers the /sandbox/public_token/create endpoint, which allows you to create a public_token without using Link.

    Token endpoints

    In this section
    /link/token/createCreate a token for initializing a Link session
    /link/token/getGet details about a previously created Link token
    /item/public_token/exchangeExchange a public token from Link for an access token
    /item/access_token/invalidateRotate an access token without deleting the Item
    /item/public_token/create(Deprecated) Create a public token for legacy flows

    /link/token/create

    Create Link Token

    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, which can then be exchanged for an access_token via /item/public_token/exchange as part of the main Link flow.
    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 Payment Initiation (Europe) flow.

    link/token/create

    Request fields and example

    client_id
    string
    Your Plaid API 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
    string
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    client_name
    requiredstring
    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.

    Min length: 1
    language
    requiredstring
    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:
    • Danish ('da')
    • Dutch ('nl')
    • English ('en')
    • Estonian ('et')
    • French ('fr')
    • German ('de')
    • Italian ('it')
    • Latvian ('lv')
    • Lithuanian ('lt')
    • Norwegian ('no')
    • Polish ('pl')
    • Portuguese ('pt')
    • Romanian ('ro')
    • Spanish ('es')
    • Swedish ('sv')

    When using a Link customization, the language configured here must match the setting in the customization, or the customization will not be applied.


    Min length: 1
    country_codes
    required[string]
    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/.
    If using Identity Verification, country_codes should be set to the country where your company is based, not the country where your user is located. For all other products, country_codes represents the location of your user's financial institution.
    If Link is launched with multiple country codes, only products that you are enabled for in all countries will be used by Link. Note that while all countries are enabled by default in Sandbox and Development, in Production only US and Canada are enabled by default. Access to European institutions requires additional compliance steps. To request access to European institutions in the Production environment, file a product access Support ticket via the Plaid dashboard. If you initialize with a European country code, your users will see the European consent panel during the Link flow.
    If using a Link customization, make sure the country codes in the customization match those specified in country_codes, or the customization may not be applied.
    If using the Auth features Instant Match, Same-day Micro-deposits, or Automated Micro-deposits, country_codes must be set to ['US'].


    Min items: 1
    Possible values: US, GB, ES, NL, FR, IE, CA, DE, IT, PL, DK, NO, SE, EE, LT, LV, PT, BE
    user
    requiredobject
    An object specifying information about the end user who will be linking their account.
    client_user_id
    requiredstring
    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 client_user_id. It is currently used as a means of searching logs for the given user in the Plaid Dashboard.

    Min length: 1
    legal_name
    string
    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.
    name
    object
    The user's full name. Optional if using the Identity Verification product; if not using Identity Verification, this field is not allowed. Users will not be asked for their name when this field is provided.
    given_name
    requiredstring
    A string with at least one non-whitespace character, with a max length of 100 characters.
    family_name
    requiredstring
    A string with at least one non-whitespace character, with a max length of 100 characters.
    phone_number
    string
    The user's phone number in E.164 format. This field is optional, but required to enable the returning user experience. Can also be used to prefill Link fields when used with Identity Verification.
    phone_number_verified_time
    deprecatedstring
    The date and time the phone number was verified in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ). This was previously an optional field used in the returning user experience. This field is no longer required to enable the returning user experience.
    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: 2020-01-01T00:00:00Z


    Format: date-time
    email_address
    string
    The user's email address. This field is optional, but required to enable the pre-authenticated returning user flow. Can also be used to prefill Link fields when used with Identity Verification.
    email_address_verified_time
    deprecatedstring
    The date and time the email address was verified in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ). This was previously an optional field used in the returning user experience. This field is no longer required to enable the returning user experience.
    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: 2020-01-01T00:00:00Z


    Format: date-time
    ssn
    deprecatedstring
    Deprecated and not currently used, use the id_number field instead.
    date_of_birth
    string
    To be provided in the format "yyyy-mm-dd". Can be used to prefill Link fields when used with Identity Verification.

    Format: date
    address
    object
    The user's address. Used only for Identity Verification. If provided, the user will not be shown fields to enter their address in the Identity Verification flow. May be omitted, but if not omitted, all fields marked as required must be provided.
    street
    string
    The primary street portion of an address. If an address is provided, this field will always be filled.
    street2
    string
    Extra street information, like an apartment or suite number.
    city
    string
    City from the end user's address
    region
    string
    An ISO 3166-2 subdivision code. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc.
    postal_code
    string
    The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits.
    country
    requiredstring
    Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form.

    Min length: 2
    id_number
    object
    The user's ID number. Used only for Identity Verification. If provided, the user will not be shown fields to enter their ID number in the Identity Verification flow. May be omitted, but if not omitted, all fields marked as required must be provided.
    value
    requiredstring
    Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped.
    type
    requiredstring
    A globally unique and human readable ID type, specific to the country and document category. For more context on this field, see Hybrid Input Validation.

    Possible values: ar_dni, au_drivers_license, au_passport, br_cpf, ca_sin, cl_run, cn_resident_card, co_nit, dk_cpr, eg_national_id, es_dni, es_nie, hk_hkid, in_pan, it_cf, jo_civil_id, jp_my_number, ke_huduma_namba, kw_civil_id, mx_curp, mx_rfc, my_nric, ng_nin, nz_drivers_license, om_civil_id, ph_psn, pl_pesel, ro_cnp, sa_national_id, se_pin, sg_nric, tr_tc_kimlik, us_ssn, us_ssn_last_4, za_smart_id
    products
    [string]
    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.
    balance is not a valid value, the Balance product does not require explicit initialization and will automatically be initialized when any other product is initialized.
    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 optional_products or required_if_supported_products fields, or can be initialized by calling the endpoint after obtaining an access token. For details and exceptions, see Choosing when to initialize products.
    Note that, unless you have opted to disable Instant Match support, institutions that support Instant Match will also be shown in Link if auth is specified as a product, even though these institutions do not contain auth in their product array.
    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 /item/remove.


    Possible values: assets, auth, employment, identity, income_verification, identity_verification, investments, liabilities, payment_initiation, standing_orders, transactions, transfer, signal
    required_if_supported_products
    [string]
    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 products, optional_products, or additional_consented_products arrays. The products array must have at least one product.
    For more details on using this feature, see Required if Supported Products.


    Possible values: auth, identity, investments, liabilities, transactions, statements
    optional_products
    [string]
    List of Plaid product(s) that you may wish to use but that are not required for your use case. 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 products, required_if_supported_products, or additional_consented_products arrays. The products array must have at least one product.
    For more details on using this feature, see Optional Products.


    Possible values: auth, identity, investments, liabilities, statements, transactions
    additional_consented_products
    [string]
    (Beta) This field has no effect unless you are participating in the Data Transparency beta program. List of additional Plaid product(s) you wish to collect consent for. These products will not be billed until you start using them by calling the relevant endpoints.
    balance is not a valid value, the Balance product does not require explicit initialization and will automatically have consent collected.
    Institutions that do not support these products will still be shown in Link.
    There should be no overlap between this array and the products or required_if_supported_products arrays.


    Possible values: auth, identity, investments, liabilities, transactions, signal
    webhook
    string
    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) and Identity Verification are configured via the Dashboard instead.
    access_token
    string
    The access_token associated with the Item to update or reference, used when updating, modifying, or accessing an existing access_token. Used when launching Link in update mode, when completing the Same-day (manual) Micro-deposit flow, or (optionally) when initializing Link for a returning user as part of the Transfer UI flow.

    Min length: 1
    link_customization_name
    string
    The name of the Link customization from the Plaid Dashboard to be applied to Link. If not specified, the default customization will be used. When using a Link customization, the language in the customization must match the language selected via the language parameter, and the countries in the customization should match the country codes selected via country_codes.
    redirect_uri
    string
    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 via a webview. The redirect_uri should not contain any query parameters. When used in Production or Development, must be an https URI. To specify any subdomain, use * as a wildcard character, e.g. https://*.example.com/oauth.html. Note that any redirect URI must also be added to the Allowed redirect URIs list in the developer dashboard. If initializing on Android, android_package_name must be specified instead and redirect_uri should be left blank. If using Hosted Link (beta) the redirect_uri must be set to https://hosted.plaid.com/oauth/redirect.
    android_package_name
    string
    The name of your app's Android package. Required if using the link_token to initialize Link on Android. Any package name specified here must also be added to the Allowed Android package names setting on the developer dashboard. When creating a link_token for initializing Link on other platforms, android_package_name must be left blank and redirect_uri should be used instead.
    institution_data
    object
    A map containing data used to highlight institutions in Link.
    routing_number
    string
    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.
    account_filters
    object
    By default, Link will provide limited account filtering: it will only display Institutions that are compatible with all products supplied in the products parameter of /link/token/create, and, if auth is specified in the products array, will also filter out accounts other than checking and savings accounts on the Account Select pane. You can further limit the accounts shown in Link by using account_filters to specify the account subtypes to be shown in Link. Only the specified subtypes will be shown. This filtering applies to both the Account Select view (if enabled) and the Institution Select view. Institutions that do not support the selected subtypes will be omitted from Link. To indicate that all subtypes should be shown, use the value "all". If the account_filters filter is used, any account type for which a filter is not specified will be entirely omitted from Link. For a full list of valid types and subtypes, see the Account schema.
    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.
    depository
    object
    A filter to apply to depository-type accounts
    account_subtypes
    required[string]
    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.

    Possible values: checking, savings, hsa, cd, money market, paypal, prepaid, cash management, ebt, all
    credit
    object
    A filter to apply to credit-type accounts
    account_subtypes
    required[string]
    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.

    Possible values: credit card, paypal, all
    loan
    object
    A filter to apply to loan-type accounts
    account_subtypes
    required[string]
    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.

    Possible values: auto, business, commercial, construction, consumer, home equity, loan, mortgage, line of credit, student, other, all
    investment
    object
    A filter to apply to investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier).
    account_subtypes
    required[string]
    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.

    Possible values: 529, 401a, 401k, 403B, 457b, brokerage, cash isa, crypto exchange, education savings account, fixed annuity, gic, health reimbursement arrangement, hsa, ira, isa, keogh, lif, life insurance, lira, lrif, lrsp, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other annuity, other insurance, pension, prif, profit sharing plan, qshr, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, sep ira, simple ira, sipp, stock plan, tfsa, trust, ugma, utma, variable annuity, all
    other
    object
    A filter to apply to other-type accounts
    account_subtypes
    required[string]
    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.

    Possible values: other, all
    eu_config
    object
    Configuration parameters for EU flows
    headless
    boolean
    If true, open Link without an initial UI. Defaults to false.
    institution_id
    string
    Used for certain Europe-only configurations, as well as certain legacy use cases in other regions.
    payment_initiation
    object
    Specifies options for initializing Link for use with the Payment Initiation (Europe) product. This field is required if payment_initiation is included in the products array. Either payment_id or consent_id must be provided.
    payment_id
    string
    The payment_id provided by the /payment_initiation/payment/create endpoint.
    consent_id
    string
    The consent_id provided by the /payment_initiation/consent/create endpoint.
    income_verification
    object
    Specifies options for initializing Link for use with the Income product. This field is required if income_verification is included in the products array.
    income_verification_id
    deprecatedstring
    The income_verification_id of the verification instance, as provided by /income/verification/create.
    asset_report_id
    string
    The asset_report_id of an asset report associated with the user, as provided by /asset_report/create. Providing an asset_report_id is optional and can be used to verify the user through a streamlined flow. If provided, the bank linking flow will be skipped.
    access_tokens
    [string]
    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 transactions product was not initialized for these Items during link, it will be initialized after this Link session.
    This field should only be used with the payroll income source type.
    income_source_types
    [string]
    The types of source income data that users will be permitted to share. Options include bank and payroll. Currently you can only specify one of these options.

    Possible values: bank, payroll
    bank_income
    object
    Specifies options for initializing Link for use with Bank Income. This field is required if income_verification is included in the products array and bank is specified in income_source_types.
    days_requested
    requiredinteger
    The number of days of data to request for the Bank Income product

    Minimum: 1
    Maximum: 731
    enable_multiple_items
    boolean
    Whether to enable multiple Items to be added in the Link session

    Default: false
    payroll_income
    object
    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.)
    flow_types
    [string]
    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.

    Possible values: payroll_digital_income, payroll_document_income
    is_update_mode
    boolean
    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: false
    item_id_to_update
    string
    Uniquely identify a payroll income Item to update with. This field is only relevant for participants in the Payroll Income Refresh beta.
    parsing_config
    [string]
    The types of analysis to enable for document uploads. If this field is not provided, then docs will undergo OCR parsing only.

    Possible values: ocr, risk_signals
    stated_income_sources
    [object]
    A list of user stated income sources
    employer
    string
    The employer corresponding to an income source specified by the user
    category
    string
    The income category for a specified income source

    Possible values: OTHER, SALARY, UNEMPLOYMENT, CASH, GIG_ECONOMY, RENTAL, CHILD_SUPPORT, MILITARY, RETIREMENT, LONG_TERM_DISABILITY, BANK_INTEREST
    pay_per_cycle
    number
    The income amount paid per cycle for a specified income source

    Format: double
    pay_annual
    number
    The income amount paid annually for a specified income source

    Format: double
    pay_type
    string
    The pay type - GROSS, NET, or UNKNOWN for a specified income source

    Possible values: UNKNOWN, GROSS, NET
    pay_frequency
    string
    The pay frequency of a specified income source

    Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI_MONTHLY, MONTHLY
    auth
    object
    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.
    auth_type_select_enabled
    boolean
    Specifies whether Auth Type Select is enabled for the Link session, allowing the end user to choose between linking instantly or manually prior to selecting their financial institution. Note that this can only be true if same_day_microdeposits_enabled is set to true.

    Default: false
    automated_microdeposits_enabled
    boolean
    Specifies whether the Link session is enabled for the Automated Micro-deposits flow.
    instant_match_enabled
    boolean
    Specifies whether the Link session is enabled for the Instant Match flow. As of November 2022, Instant Match will be enabled by default. Instant Match can be disabled by setting this field to false.
    same_day_microdeposits_enabled
    boolean
    Specifies whether the Link session is enabled for the Same Day Micro-deposits flow.
    instant_microdeposits_enabled
    boolean
    Specifies whether the Link session is enabled for the Instant Micro-deposits flow.
    reroute_to_credentials
    string
    Specifies what type of Reroute to Credentials pane should be used in the Link session for the Same Day Micro-deposits flow. As of October 15 2023, the default setting is OPTIONAL.

    Possible values: OFF, OPTIONAL, FORCED
    flow_type
    deprecatedstring
    This field has been deprecated in favor of auth_type_select_enabled.

    Possible values: FLEXIBLE_AUTH
    transfer
    object
    Specifies options for initializing Link for use with the Transfer product.
    intent_id
    string
    The id returned by the /transfer/intent/create endpoint.
    update
    object
    Specifies options for initializing Link for update mode.
    account_selection_enabled
    boolean
    If true, enables update mode with Account Select for institutions that do not use OAuth, or that use OAuth but do not have their own account selection flow. For institutions that have an OAuth account selection flow (i.e. most OAuth-enabled institutions), update mode with Account Select will always be enabled, regardless of the value of this field.

    Default: false
    identity_verification
    object
    Specifies option for initializing Link for use with the Identity Verification product.
    template_id
    requiredstring
    ID of the associated Identity Verification template.
    gave_consent
    boolean
    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 gave_consent is set to true, the accept_tos step will be marked as skipped and the end user's session will start at the next step requirement.


    Default: false
    statements
    object
    Specifies options for initializing Link for use with the Statements product.
    start_date
    string
    The start date for statements, in ISO 8601 “YYYY-MM-DD” format, e.g. "2020-10-30". If no value is provided, this will default to 3 months prior to the current date.

    Format: date
    end_date
    string
    The end date for statements, in ISO 8601 “YYYY-MM-DD” format, e.g. "2020-10-30". If no value is provided, this will default to the current date. You can request up to two years of data.

    Format: date
    user_token
    string
    A user token generated using /user/create. Any Item created during the Link session will be associated with the user.
    investments
    object
    Configuration parameters for the Investments product
    allow_unverified_crypto_wallets
    boolean
    If true, allow self-custody crypto wallets to be added without requiring signature verification. Defaults to false.
    allow_manual_entry
    boolean
    If true, allow users to manually enter Investments account and holdings information. Defaults to false.
    hosted_link
    object
    Configuration parameters for Hosted Link (beta). Only available for participants in the Hosted Link beta program.
    delivery_method
    string
    How Plaid should deliver the Plaid Link session to the customer. 'sms' will deliver via SMS. Must pass user.phone_number. 'email' will deliver via email. Must pass user.email_address. In the Sandbox environment, this field will be ignored; use the Production or Development environment to test Hosted Link session delivery instead.

    Possible values: sms, email
    url_lifetime_seconds
    integer
    How many seconds the link will be valid for. Must be positive. Cannot be longer than 21 days. The default lifetime is 4 hours.
    is_mobile_app
    boolean
    This indicates whether the client is opening hosted Link in a mobile app in an out of process web view (OOPWV).

    Default: false
    transactions
    object
    Configuration parameters for the Transactions product
    days_requested
    integer
    The maximum number of days of transaction history to request for the Transactions product. For developer accounts created after December 3, 2023, if no value is specified, this will default to 90 days. For developer accounts created on December 3, 2023 or earlier, if no value is specified, this will default to 730 days until June 24, 2024, at which point it will default to 90 days.
    We strongly recommend that customers utilizing Recurring Transactions request at least 180 days of history for optimal results.


    Minimum: 1
    Maximum: 730
    Default: 90
    identity
    object
    Identity object used to specify document upload
    is_document_upload
    boolean
    Used to specify whether the Link session is Identity Document Upload
    account_ids
    [string]
    An array of account_ids

    Select Language
    1const request: LinkTokenCreateRequest = {
    2 loading_sample: true
    3};
    4try {
    5 const response = await plaidClient.linkTokenCreate(request);
    6 const linkToken = response.data.link_token;
    7} catch (error) {
    8 // handle error
    9}
    link/token/create

    Response fields and example

    link_token
    string
    A link_token, which can be supplied to Link in order to initialize it and receive a public_token, which can be exchanged for an access_token.
    expiration
    string
    The expiration date for the link_token, in ISO 8601 format. A link_token created to generate a public_token that will be exchanged for a new access_token expires after 4 hours. A link_token created for an existing Item (such as when updating an existing access_token by launching Link in update mode) expires after 30 minutes.

    Format: date-time
    request_id
    string
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    hosted_link_url
    string
    A URL of a Plaid-hosted Link flow that will use the Link token returned by this request. Only present if the client is enabled for Hosted Link (beta).
    1{
    2 "link_token": "link-sandbox-af1a0311-da53-4636-b754-dd15cc058176",
    3 "expiration": "2020-03-27T12:56:34Z",
    4 "request_id": "XQVgFigpGHXkb0b"
    5}
    Was this helpful?

    /link/token/get

    Get Link Token

    The /link/token/get endpoint gets information about a previously-created link_token using the /link/token/create endpoint. It can be useful for debugging purposes.

    link/token/get

    Request fields and example

    client_id
    string
    Your Plaid API 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
    string
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    link_token
    requiredstring
    A link_token from a previous invocation of /link/token/create
    Select group for content switcher
    Select Language
    1const request: LinkTokenGetRequest = {
    2 link_token: linkToken,
    3};
    4try {
    5 const response = await plaidClient.linkTokenGet(request);
    6} catch (error) {
    7 // handle error
    8}
    link/token/get

    Response fields and example

    link_token
    string
    A link_token, which can be supplied to Link in order to initialize it and receive a public_token, which can be exchanged for an access_token.
    created_at
    nullablestring
    The creation timestamp for the link_token, in ISO 8601 format.

    Format: date-time
    expiration
    nullablestring
    The expiration timestamp for the link_token, in ISO 8601 format.

    Format: date-time
    link_sessions
    [object]
    Information about Link sessions created using this link_token. This field will only be present if your client is enabled for Hosted Link (beta). Session data will be provided for up to six hours after the session has ended.
    link_session_id
    string
    The unique ID for the link session.
    started_at
    string
    The timestamp at which the link session was first started, in ISO 8601 format.

    Format: date-time
    finished_at
    nullablestring
    The timestamp at which the link session was finished, if available, in ISO 8601 format.

    Format: date-time
    on_success
    nullableobject
    An object representing an onSuccess callback from Link.
    public_token
    string
    Displayed once a user has successfully linked their Item.
    metadata
    nullableobject
    Displayed once a user has successfully linked their Item.
    institution
    nullableobject
    An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null.
    name
    string
    The full institution name, such as 'Wells Fargo'
    institution_id
    string
    The Plaid institution identifier
    accounts
    [object]
    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
    string
    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
    string
    The account type. See the Account schema for a full list of possible values
    subtype
    string
    The account subtype. See the Account schema for a full list of possible values
    verification_status
    nullablestring
    Indicates an Item's micro-deposit-based verification status. Possible values are:
    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 code.
    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.
    database_matched: The Item has successfully been verified using Plaid's data sources. Note: Database Match is currently a beta feature, please contact your account manager for more information.
    database_insights_pass: The Item's ACH numbers have been verified using Plaid's data sources and have strong signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information.
    database_insights_pass_with_caution: The Item's ACH numbers have been verified using Plaid's data sources and have some signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information.
    database_insights_fail: The Item's ACH numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Note: Database Insights is currently a beta feature, please contact your account manager for more information.
    null: micro-deposit-based verification is not being used for the Item.
    class_type
    nullablestring
    If micro-deposit verification is being used, indicates whether the account being verified is a business or personal account.
    link_session_id
    string
    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.
    transfer_status
    nullablestring
    The status of a transfer. Returned only when Transfer UI is implemented.
    • COMPLETE – The transfer was completed.
    • INCOMPLETE – The transfer could not be completed. For help, see Troubleshooting transfers.


    Possible values: COMPLETE, INCOMPLETE
    on_exit
    nullableobject
    An object representing an onExit callback from Link.
    error
    nullableobject
    We use standard HTTP response codes for success and failure notifications, and our errors are further classified by error_type. In general, 200 HTTP codes correspond to success, 40X codes are for developer- or user-related failures, and 50X codes are for Plaid-related issues. An Item with a non-null error object will only be part of an API response when calling /item/get to view Item status. Otherwise, error fields will be null if no error has occurred; if an error has occurred, an error code will be returned instead.
    error_type
    string
    A broad categorization of the error. Safe for programmatic use.

    Possible values: INVALID_REQUEST, INVALID_RESULT, INVALID_INPUT, INSTITUTION_ERROR, RATE_LIMIT_EXCEEDED, API_ERROR, ITEM_ERROR, ASSET_REPORT_ERROR, RECAPTCHA_ERROR, OAUTH_ERROR, PAYMENT_ERROR, BANK_TRANSFER_ERROR, INCOME_VERIFICATION_ERROR, MICRODEPOSITS_ERROR
    error_code
    string
    The particular error code. Safe for programmatic use.
    error_message
    string
    A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use.
    display_message
    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.
    request_id
    string
    A unique ID identifying the request, to be used for troubleshooting purposes. This field will be omitted in errors provided by webhooks.
    causes
    array
    In the Assets product, a request can pertain to more than one Item. If an error is returned for such a request, causes will return an array of errors containing a breakdown of these errors on the individual Item level, if any can be identified.
    causes will only be provided for the error_type ASSET_REPORT_ERROR. causes will also not be populated inside an error nested within a warning object.
    status
    nullableinteger
    The HTTP status code associated with the error. This will only be returned in the response body when the error information is provided via a webhook.
    documentation_url
    string
    The URL of a Plaid documentation page with more information about the error
    suggested_action
    nullablestring
    Suggested steps for resolving the error
    metadata
    nullableobject
    Displayed if a user exits Link without successfully linking an Item.
    institution
    nullableobject
    An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null.
    name
    string
    The full institution name, such as Wells Fargo
    institution_id
    string
    The Plaid institution identifier
    status
    string
    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_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
    institution_not_supported
    User exited the Link flow after discovering their selected institution is no longer supported by Plaid
    link_session_id
    string
    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.
    request_id
    string
    The request ID for the last request made by Link. This can be shared with Plaid Support to expedite investigation.
    events
    [object]
    List of customer-related Link events
    event_name
    string
    Event name
    timestamp
    string
    Timestamp in ISO 8601 format.
    event_id
    string
    UUID that can be used to deduplicate events
    metadata
    object
    An object specifying the arguments originally provided to the /link/token/create call.
    initial_products
    [string]
    The products specified in the /link/token/create call.

    Possible values: assets, auth, employment, identity, income_verification, identity_verification, investments, liabilities, payment_initiation, standing_orders, transactions, transfer
    webhook
    nullablestring
    The webhook specified in the /link/token/create call.
    country_codes
    [string]
    The country_codes specified in the /link/token/create call.

    Possible values: US, GB, ES, NL, FR, IE, CA, DE, IT, PL, DK, NO, SE, EE, LT, LV, PT, BE
    language
    nullablestring
    The language specified in the /link/token/create call.
    institution_data
    object
    A map containing data used to highlight institutions in Link.
    routing_number
    string
    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.
    account_filters
    object
    The account_filters specified in the original call to /link/token/create.
    depository
    object
    A filter to apply to depository-type accounts
    account_subtypes
    [string]
    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.

    Possible values: checking, savings, hsa, cd, money market, paypal, prepaid, cash management, ebt, all
    credit
    object
    A filter to apply to credit-type accounts
    account_subtypes
    [string]
    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.

    Possible values: credit card, paypal, all
    loan
    object
    A filter to apply to loan-type accounts
    account_subtypes
    [string]
    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.

    Possible values: auto, business, commercial, construction, consumer, home equity, loan, mortgage, line of credit, student, other, all
    investment
    object
    A filter to apply to investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier).
    account_subtypes
    [string]
    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.

    Possible values: 529, 401a, 401k, 403B, 457b, brokerage, cash isa, crypto exchange, education savings account, fixed annuity, gic, health reimbursement arrangement, hsa, ira, isa, keogh, lif, life insurance, lira, lrif, lrsp, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other annuity, other insurance, pension, prif, profit sharing plan, qshr, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, sep ira, simple ira, sipp, stock plan, tfsa, trust, ugma, utma, variable annuity, all
    redirect_uri
    nullablestring
    The redirect_uri specified in the /link/token/create call.
    client_name
    nullablestring
    The client_name specified in the /link/token/create call.
    request_id
    string
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "created_at": "2020-12-02T21:14:54Z",
    3 "expiration": "2020-12-03T01:14:54Z",
    4 "link_token": "link-sandbox-33792986-2b9c-4b80-b1f2-518caaac6183",
    5 "metadata": {
    6 "account_filters": {
    7 "depository": {
    8 "account_subtypes": [
    9 "checking",
    10 "savings"
    11 ]
    12 }
    13 },
    14 "client_name": "Insert Client name here",
    15 "country_codes": [
    16 "US"
    17 ],
    18 "initial_products": [
    19 "auth"
    20 ],
    21 "language": "en",
    22 "redirect_uri": null,
    23 "webhook": "https://www.example.com/webhook"
    24 },
    25 "request_id": "u0ydFs493XjyTYn"
    26}
    Was this helpful?

    /item/public_token/exchange

    Exchange public token for an access token

    Exchange a Link public_token for an API access_token. Link hands off the public_token client-side via the onSuccess callback once a user has successfully created an Item. The public_token is ephemeral and expires after 30 minutes. An access_token does not expire, but can be revoked by calling /item/remove.
    The response also includes an item_id that should be stored with the access_token. The item_id is used to identify an Item in a webhook. The item_id can also be retrieved by making an /item/get request.

    item/public_token/exchange

    Request fields and example

    client_id
    string
    Your Plaid API 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
    string
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    public_token
    requiredstring
    Your public_token, obtained from the Link onSuccess callback or /sandbox/item/public_token/create.
    Select group for content switcher
    Select Language
    1const request: ItemPublicTokenExchangeRequest = {
    2 public_token: publicToken,
    3};
    4try {
    5 const response = await plaidClient.itemPublicTokenExchange(request);
    6 const accessToken = response.data.access_token;
    7 const itemId = response.data.item_id;
    8} catch (err) {
    9 // handle error
    10}
    item/public_token/exchange

    Response fields and example

    access_token
    string
    The access token associated with the Item data is being requested for.
    item_id
    string
    The item_id value of the Item associated with the returned access_token
    request_id
    string
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "access_token": "access-sandbox-de3ce8ef-33f8-452c-a685-8671031fc0f6",
    3 "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op",
    4 "request_id": "Aim3b"
    5}
    Was this helpful?

    /item/access_token/invalidate

    Invalidate access_token

    By default, the access_token associated with an Item does not expire and should be stored in a persistent, secure manner.
    You can use the /item/access_token/invalidate endpoint to rotate the access_token associated with an Item. The endpoint returns a new access_token and immediately invalidates the previous access_token.

    item/access_token/invalidate

    Request fields and example

    client_id
    string
    Your Plaid API 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
    string
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    access_token
    requiredstring
    The access token associated with the Item data is being requested for.
    Select group for content switcher
    Select Language
    1// Generate a new access_token for an Item, invalidating the old one
    2const request: ItemAccessTokenInvalidateRequest = {
    3 access_token: accessToken,
    4};
    5try {
    6 const response = await plaidClient.itemAccessTokenInvalidate(request);
    7 // Store the new access_token in a persistent, secure datastore
    8 const accessToken = response.data.new_access_token;
    9} catch (error) {
    10 // handle error
    11}
    item/access_token/invalidate

    Response fields and example

    new_access_token
    string
    The access token associated with the Item data is being requested for.
    request_id
    string
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "new_access_token": "access-sandbox-8ab976e6-64bc-4b38-98f7-731e7a349970",
    3 "request_id": "m8MDnv9okwxFNBV"
    4}
    Was this helpful?

    /item/public_token/create

    Create public token

    Note: As of July 2020, the /item/public_token/create endpoint is deprecated. Instead, use /link/token/create with an access_token to create a Link token for use with update mode.
    If you need your user to take action to restore or resolve an error associated with an Item, generate a public token with the /item/public_token/create endpoint and then initialize Link with that public_token.
    A public_token is one-time use and expires after 30 minutes. You use a public_token to initialize Link in update mode for a particular Item. You can generate a public_token for an Item even if you did not use Link to create the Item originally.
    The /item/public_token/create endpoint is not used to create your initial public_token. If you have not already received an access_token for a specific Item, use Link to obtain your public_token instead. See the Quickstart for more information.

    item/public_token/create

    Request fields and example

    client_id
    string
    Your Plaid API 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
    string
    Your Plaid API secret. The secret is required and may be provided either in the PLAID-SECRET header or as part of a request body.
    access_token
    requiredstring
    The access token associated with the Item data is being requested for.
    Select group for content switcher
    Select Language
    1// This endpoint is deprecated and not
    2// supported in the Beta libraries
    item/public_token/create

    Response fields and example

    public_token
    string
    A public_token for the particular Item corresponding to the specified access_token
    expiration
    string
    request_id
    string
    A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.
    1{
    2 "public_token": "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d",
    3 "request_id": "Aim3b"
    4}
    Was this helpful?
    Developer community
    GitHub
    GitHub
    Stack Overflow
    Stack Overflow
    YouTube
    YouTube
    Discord
    Discord