---
title: "Get Link Token"
method: POST
path: "/link/token/get"
tags: ["plaid"]
---

# Get Link Token

`POST /link/token/get`

The `/link/token/get` endpoint gets information about a Link session, including all callbacks fired during the session along with their metadata, including the public token. This endpoint is used with Link flows that don't provide a public token via frontend callbacks, such as the [Hosted Link flow](https://plaid.com/docs/link/hosted-link/) and the [Multi-Item Link flow](https://plaid.com/docs/link/multi-item-link/). It also can be useful for debugging purposes.

By default, this endpoint will only return complete event data for Hosted Link sessions. To use `/link/token/get` to retrieve event data for non-Hosted-Link sessions, contact your account manager to request that your account be enabled for Link events. If you do not have an account manager, you can submit this request via a support ticket. Enablement for Link events will also cause you to receive additional webhooks related to Link events, such as the `SESSION_FINISHED` and `EVENTS` webhook.

## Request body

- LinkTokenGetRequest — LinkTokenGetRequest defines the request schema for `/link/token/get`
  - `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` string, required — A `link_token` from a previous invocation of `/link/token/create`

## Response `200`

OK

- LinkTokenGetResponse — LinkTokenGetResponse defines the response schema for `/link/token/get`
  - `link_token` string, required — 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` string, date-time, nullable, required — The creation timestamp for the `link_token`, in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format.
  - `expiration` string, date-time, nullable, required — The expiration timestamp for the `link_token`, in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format.
  - `link_sessions` LinkTokenGetSessionsResponse[] — Information about Link sessions created using this `link_token`. Session data will be provided for up to six hours after the session has ended.
    - `link_session_id` string, required — The unique ID for the link session.
    - `started_at` string, date-time — The timestamp at which the link session was first started, in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format.
    - `finished_at` string, date-time, nullable — The timestamp at which the link session was finished, if available, in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format.
    - `on_success` LinkSessionSuccess, nullable — An object representing an [onSuccess](https://plaid.com/docs/link/web/#onsuccess) callback from Link. This field is returned only for legacy integrations and is deprecated in favor of [`results.item_add_results`](https://plaid.com/docs/api/link/#link-token-get-response-link-sessions-results-item-add-results) which can support multiple public tokens in a single Link session, for flows such as multi-Item Link. If you are receiving `on_success`, contact your account manager to migrate to `results.item_add_results` instead.
      - `public_token` string, required — Displayed once a user has successfully linked their Item.
      - `metadata` LinkSessionSuccessMetadata, nullable, required — Displayed once a user has successfully linked their Item.
        - `institution` LinkSessionSuccessMetadataInstitution, nullable — 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` LinkSessionSuccessMetadataAccount[] — 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` string, nullable — 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](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `subtype` string — The account subtype. See the [Account schema](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `verification_status` string, nullable — Indicates an Item's micro-deposit-based verification or database verification status. This field is only populated when using Auth and falling back to micro-deposit or database verification. 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. `unsent`: The Item is pending micro-deposit verification, but Plaid has not yet sent the micro-deposit. `database_insights_pending`: The Database Auth result is pending and will be available upon Auth request. `database_insights_fail`: The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Typically this indicates that the routing number is invalid, the account number does not match the account number format associated with the routing number, or the account has been reported as closed or frozen. Only returned for Auth Items created via Database Auth. `database_insights_pass`: The Item's numbers have been verified using Plaid's data sources: the routing and account number match a routing and account number of an account recognized on the Plaid network, and the account is not known by Plaid to be frozen or closed. Only returned for Auth Items created via Database Auth. `database_insights_pass_with_caution`: The Item's numbers have been verified using Plaid's data sources and have some signal for being valid: the routing and account number were not recognized on the Plaid network, but the routing number is valid and the account number is a potential valid account number for that routing number. Only returned for Auth Items created via Database Auth. `database_matched`: (deprecated) The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. `null` or empty string: Neither micro-deposit-based verification nor database verification are being used for the Item.
          - `class_type` string, nullable — If micro-deposit verification was being used, indicates the user's selection when asked if the account being verified is a `business` or `personal` account. This field is deprecated as Plaid no longer collects this information during the micro-deposit flow. To see whether an account is business or personal, use the `holder_category` field instead.
        - `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` 'COMPLETE' | 'INCOMPLETE' | 'null', nullable — The status of a transfer. Returned only when [Transfer UI](https://plaid.com/docs/transfer/using-transfer-ui) is implemented. - `COMPLETE` - The transfer was completed. - `INCOMPLETE` - The transfer could not be completed. For help, see [Troubleshooting transfers](https://plaid.com/docs/transfer/using-transfer-ui/#troubleshooting-transfer-ui).
    - `on_exit` LinkSessionExitDeprecated, nullable — An object representing an [onExit](https://plaid.com/docs/link/web/#onexit) callback from Link. This field is returned only for legacy implementations and has been deprecated in favor of [`exit`](https://plaid.com/docs/api/link/#link-token-get-response-link-sessions-exit), for improved naming consistency. If you are receiving this field, contact your account manager to migrate to the newer `exit` field.
      - `error` PlaidError, nullable, required — Errors are identified by `error_code` and categorized by `error_type`. Use these in preference to HTTP status codes to identify and handle specific errors. HTTP status codes are set and provide the broadest categorization of errors: 4xx codes are for developer- or user-related errors, and 5xx codes are for Plaid-related errors, and the status will be 2xx in non-error cases. 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` 'INVALID_REQUEST' | 'INVALID_RESULT' | 'INVALID_INPUT' | 'INSTITUTION_ERROR' | 'RATE_LIMIT_EXCEEDED' | 'API_ERROR' | 'ITEM_ERROR' | 'ASSET_REPORT_ERROR' | 'BASE_REPORT_ERROR' | 'RECAPTCHA_ERROR' | 'OAUTH_ERROR' | 'PAYMENT_ERROR' | 'BANK_TRANSFER_ERROR' | 'INCOME_VERIFICATION_ERROR' | 'MICRODEPOSITS_ERROR' | 'SANDBOX_ERROR' | 'PARTNER_ERROR' | 'SIGNAL_ERROR' | 'TRANSACTIONS_ERROR' | 'TRANSACTION_ERROR' | 'TRANSFER_ERROR' | 'CHECK_REPORT_ERROR' | 'CONSUMER_REPORT_ERROR' | 'USER_ERROR' | 'IDEMPOTENCY_ERROR' | 'ASSETS_ERROR' | 'CRA_MONITORING_ERROR' | 'CREDIT_PROFILE_REPORT_ERROR' | 'ENCOMPASS_ERROR' | 'ENRICH_ERROR' | 'FRAUD_INSIGHTS_ERROR' | 'FREDDIE_MAC_ERROR' | 'LINK_DELIVERY_ERROR' | 'PROFILE_ERROR' | 'RECURRING_TRANSACTIONS_ERROR' | 'STATEMENTS_ERROR' | 'TRANSFER_RECURRING_ERROR' | 'TRANSFER_REFUND_ERROR', required — A broad categorization of the error. Safe for programmatic use.
        - `error_code` string, required — The particular error code. Safe for programmatic use.
        - `error_code_reason` string, nullable — The specific reason for the error code. Currently, reasons are only supported for OAuth-based item errors; `null` will be returned otherwise. Safe for programmatic use. Possible values: `OAUTH_INVALID_TOKEN`: The user's OAuth connection to this institution has been invalidated. `OAUTH_CONSENT_EXPIRED`: The user's access consent for this OAuth connection to this institution has expired. `OAUTH_USER_REVOKED`: The user's OAuth connection to this institution is invalid because the user revoked their connection.
        - `error_message` string, required — A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use.
        - `display_message` string, nullable, required — 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` unknown[] — In this 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 be provided for the `error_type` `ASSET_REPORT_ERROR` or `CHECK_REPORT_ERROR`. `causes` will also not be populated inside an error nested within a `warning` object.
          - unknown
        - `status` integer, nullable — 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` string, nullable — Suggested steps for resolving the error
        - `required_account_subtypes` string[] — A list of the account subtypes that were requested via the `account_filters` parameter in `/link/token/create`. Currently only populated for `NO_ACCOUNTS` errors from Items with `investments_auth` as an enabled product.
        - `provided_account_subtypes` string[] — A list of the account subtypes that were extracted but did not match the requested subtypes via the `account_filters` parameter in `/link/token/create`. Currently only populated for `NO_ACCOUNTS` errors from Items with `investments_auth` as an enabled product.
      - `metadata` LinkSessionExitMetadata, nullable, required — Displayed if a user exits Link without successfully linking an Item.
        - `institution` LinkSessionExitMetadataInstitution, nullable — 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.
        - `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.
    - `exit` LinkSessionExit, nullable — An object representing an [onExit](https://plaid.com/docs/link/web/#onexit) callback from Link. If you are not receiving this field and are instead receiving the deprecated `on_exit` field, contact your account manager to update your integration.
      - `error` PlaidError, nullable, required — Errors are identified by `error_code` and categorized by `error_type`. Use these in preference to HTTP status codes to identify and handle specific errors. HTTP status codes are set and provide the broadest categorization of errors: 4xx codes are for developer- or user-related errors, and 5xx codes are for Plaid-related errors, and the status will be 2xx in non-error cases. 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` 'INVALID_REQUEST' | 'INVALID_RESULT' | 'INVALID_INPUT' | 'INSTITUTION_ERROR' | 'RATE_LIMIT_EXCEEDED' | 'API_ERROR' | 'ITEM_ERROR' | 'ASSET_REPORT_ERROR' | 'BASE_REPORT_ERROR' | 'RECAPTCHA_ERROR' | 'OAUTH_ERROR' | 'PAYMENT_ERROR' | 'BANK_TRANSFER_ERROR' | 'INCOME_VERIFICATION_ERROR' | 'MICRODEPOSITS_ERROR' | 'SANDBOX_ERROR' | 'PARTNER_ERROR' | 'SIGNAL_ERROR' | 'TRANSACTIONS_ERROR' | 'TRANSACTION_ERROR' | 'TRANSFER_ERROR' | 'CHECK_REPORT_ERROR' | 'CONSUMER_REPORT_ERROR' | 'USER_ERROR' | 'IDEMPOTENCY_ERROR' | 'ASSETS_ERROR' | 'CRA_MONITORING_ERROR' | 'CREDIT_PROFILE_REPORT_ERROR' | 'ENCOMPASS_ERROR' | 'ENRICH_ERROR' | 'FRAUD_INSIGHTS_ERROR' | 'FREDDIE_MAC_ERROR' | 'LINK_DELIVERY_ERROR' | 'PROFILE_ERROR' | 'RECURRING_TRANSACTIONS_ERROR' | 'STATEMENTS_ERROR' | 'TRANSFER_RECURRING_ERROR' | 'TRANSFER_REFUND_ERROR', required — A broad categorization of the error. Safe for programmatic use.
        - `error_code` string, required — The particular error code. Safe for programmatic use.
        - `error_code_reason` string, nullable — The specific reason for the error code. Currently, reasons are only supported for OAuth-based item errors; `null` will be returned otherwise. Safe for programmatic use. Possible values: `OAUTH_INVALID_TOKEN`: The user's OAuth connection to this institution has been invalidated. `OAUTH_CONSENT_EXPIRED`: The user's access consent for this OAuth connection to this institution has expired. `OAUTH_USER_REVOKED`: The user's OAuth connection to this institution is invalid because the user revoked their connection.
        - `error_message` string, required — A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use.
        - `display_message` string, nullable, required — 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` unknown[] — In this 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 be provided for the `error_type` `ASSET_REPORT_ERROR` or `CHECK_REPORT_ERROR`. `causes` will also not be populated inside an error nested within a `warning` object.
          - unknown
        - `status` integer, nullable — 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` string, nullable — Suggested steps for resolving the error
        - `required_account_subtypes` string[] — A list of the account subtypes that were requested via the `account_filters` parameter in `/link/token/create`. Currently only populated for `NO_ACCOUNTS` errors from Items with `investments_auth` as an enabled product.
        - `provided_account_subtypes` string[] — A list of the account subtypes that were extracted but did not match the requested subtypes via the `account_filters` parameter in `/link/token/create`. Currently only populated for `NO_ACCOUNTS` errors from Items with `investments_auth` as an enabled product.
      - `metadata` LinkSessionExitMetadata, nullable, required — Displayed if a user exits Link without successfully linking an Item.
        - `institution` LinkSessionExitMetadataInstitution, nullable — 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.
        - `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` LinkEvent[] — List of customer-related Link events
      - `event_name` string, required — Event name
      - `timestamp` string, required — Timestamp in [ISO 8601](https://wikipedia.org/wiki/ISO_8601) format.
      - `event_id` string, required — UUID that can be used to deduplicate events
      - `event_metadata` LinkEventMetadata, required — Metadata about an event that occurred while the user was going through Link
        - `error_code` string — The error code that the user encountered. Emitted by `ERROR`, `EXIT`.
        - `error_message` string — The error message that the user encountered. Emitted by: `ERROR`, `EXIT`.
        - `error_type` string — The error type that the user encountered. Emitted by: `ERROR`, `EXIT`.
        - `exit_status` string — The status key indicates the point at which the user exited the Link flow. Emitted by: `EXIT`.
        - `institution_id` string — The ID of the selected institution. Emitted by: all events.
        - `institution_name` string — The name of the selected institution. Emitted by: all events.
        - `institution_search_query` string — The query used to search for institutions. Emitted by: `SEARCH_INSTITUTION`.
        - `request_id` string — The request ID for the last request made by Link. This can be shared with Plaid support to expedite investigation. Emitted by: all events.
        - `mfa_type` string — If set, the user has encountered one of the following MFA types: code, device, questions, selections. Emitted by: `SUBMIT_MFA` and `TRANSITION_VIEW` when `view_name` is `MFA`.
        - `view_name` string — The name of the view that is being transitioned to. Emitted by: `TRANSITION_VIEW`.
        - `selection` string — Either the verification method for a matched institution selected by the user or the Auth Type Select flow type selected by the user. If selection is used to describe selected verification method, then possible values are `phoneotp` or `password`; if selection is used to describe the selected Auth Type Select flow, then possible values are `flow_type_manual` or `flow_type_instant`. Emitted by: `MATCHED_SELECT_VERIFY_METHOD` and `SELECT_AUTH_TYPE`.
        - `brand_name` string — The name of the selected brand.
        - `match_reason` string — The reason this institution was matched. This will be either `returning_user` or `routing_number` if emitted by `MATCHED_SELECT_INSTITUTION`. Otherwise, this will be `SAVED_INSTITUTION` or `AUTO_SELECT_SAVED_INSTITUTION` if emitted by `SELECT_INSTITUTION`.
        - `routing_number` string — The routing number submitted by the user at the micro-deposits routing number pane. Emitted by `SUBMIT_ROUTING_NUMBER`.
        - `account_number_mask` string — The account number mask extracted from the user-provided account number. If the user-inputted account number is four digits long, `account_number_mask` is empty. Emitted by `SUBMIT_ACCOUNT_NUMBER`.
    - `results` LinkSessionResults, nullable — The set of results for a Link session.
      - `item_add_results` LinkSessionItemAddResult[], required — The set of Item adds for the Link session. If you are not receiving this field and are instead receiving the deprecated `on_success` field, contact your account manager to update your integration.
        - `public_token` string, required — Returned once a user has successfully linked their Item.
        - `accounts` LinkSessionSuccessMetadataAccount[], required — 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` string, nullable — 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](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `subtype` string — The account subtype. See the [Account schema](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `verification_status` string, nullable — Indicates an Item's micro-deposit-based verification or database verification status. This field is only populated when using Auth and falling back to micro-deposit or database verification. 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. `unsent`: The Item is pending micro-deposit verification, but Plaid has not yet sent the micro-deposit. `database_insights_pending`: The Database Auth result is pending and will be available upon Auth request. `database_insights_fail`: The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Typically this indicates that the routing number is invalid, the account number does not match the account number format associated with the routing number, or the account has been reported as closed or frozen. Only returned for Auth Items created via Database Auth. `database_insights_pass`: The Item's numbers have been verified using Plaid's data sources: the routing and account number match a routing and account number of an account recognized on the Plaid network, and the account is not known by Plaid to be frozen or closed. Only returned for Auth Items created via Database Auth. `database_insights_pass_with_caution`: The Item's numbers have been verified using Plaid's data sources and have some signal for being valid: the routing and account number were not recognized on the Plaid network, but the routing number is valid and the account number is a potential valid account number for that routing number. Only returned for Auth Items created via Database Auth. `database_matched`: (deprecated) The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. `null` or empty string: Neither micro-deposit-based verification nor database verification are being used for the Item.
          - `class_type` string, nullable — If micro-deposit verification was being used, indicates the user's selection when asked if the account being verified is a `business` or `personal` account. This field is deprecated as Plaid no longer collects this information during the micro-deposit flow. To see whether an account is business or personal, use the `holder_category` field instead.
        - `institution` LinkSessionSuccessMetadataInstitution, nullable, required — 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
      - `cra_item_add_results` LinkSessionCraItemAddResult[], required — The set of Plaid Check Item adds for the Link session.
        - `item_id` string, required — The Plaid Check Item ID. The `item_id` is always unique; linking the same account at the same institution twice will result in two Items with different `item_id` values. The `item_id` is case-sensitive.
        - `accounts` LinkSessionSuccessMetadataAccount[], required — 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` string, nullable — 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](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `subtype` string — The account subtype. See the [Account schema](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `verification_status` string, nullable — Indicates an Item's micro-deposit-based verification or database verification status. This field is only populated when using Auth and falling back to micro-deposit or database verification. 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. `unsent`: The Item is pending micro-deposit verification, but Plaid has not yet sent the micro-deposit. `database_insights_pending`: The Database Auth result is pending and will be available upon Auth request. `database_insights_fail`: The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Typically this indicates that the routing number is invalid, the account number does not match the account number format associated with the routing number, or the account has been reported as closed or frozen. Only returned for Auth Items created via Database Auth. `database_insights_pass`: The Item's numbers have been verified using Plaid's data sources: the routing and account number match a routing and account number of an account recognized on the Plaid network, and the account is not known by Plaid to be frozen or closed. Only returned for Auth Items created via Database Auth. `database_insights_pass_with_caution`: The Item's numbers have been verified using Plaid's data sources and have some signal for being valid: the routing and account number were not recognized on the Plaid network, but the routing number is valid and the account number is a potential valid account number for that routing number. Only returned for Auth Items created via Database Auth. `database_matched`: (deprecated) The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. `null` or empty string: Neither micro-deposit-based verification nor database verification are being used for the Item.
          - `class_type` string, nullable — If micro-deposit verification was being used, indicates the user's selection when asked if the account being verified is a `business` or `personal` account. This field is deprecated as Plaid no longer collects this information during the micro-deposit flow. To see whether an account is business or personal, use the `holder_category` field instead.
        - `institution` LinkSessionSuccessMetadataInstitution, nullable, required — 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
      - `cra_update_results` LinkSessionCraUpdateResult[], required — The set of Plaid Check Item updates for the Link session.
        - `item_id` string, required — The Plaid Check Item ID. The `item_id` is always unique; linking the same account at the same institution twice will result in two Items with different `item_id` values. The `item_id` is case-sensitive.
        - `accounts` LinkSessionSuccessMetadataAccount[], required — 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` string, nullable — 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](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `subtype` string — The account subtype. See the [Account schema](https://plaid.com/docs/api/accounts#account-type-schema) for a full list of possible values
          - `verification_status` string, nullable — Indicates an Item's micro-deposit-based verification or database verification status. This field is only populated when using Auth and falling back to micro-deposit or database verification. 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. `unsent`: The Item is pending micro-deposit verification, but Plaid has not yet sent the micro-deposit. `database_insights_pending`: The Database Auth result is pending and will be available upon Auth request. `database_insights_fail`: The Item's numbers have been verified using Plaid's data sources and have signal for being invalid and/or have no signal for being valid. Typically this indicates that the routing number is invalid, the account number does not match the account number format associated with the routing number, or the account has been reported as closed or frozen. Only returned for Auth Items created via Database Auth. `database_insights_pass`: The Item's numbers have been verified using Plaid's data sources: the routing and account number match a routing and account number of an account recognized on the Plaid network, and the account is not known by Plaid to be frozen or closed. Only returned for Auth Items created via Database Auth. `database_insights_pass_with_caution`: The Item's numbers have been verified using Plaid's data sources and have some signal for being valid: the routing and account number were not recognized on the Plaid network, but the routing number is valid and the account number is a potential valid account number for that routing number. Only returned for Auth Items created via Database Auth. `database_matched`: (deprecated) The Item has successfully been verified using Plaid's data sources. Only returned for Auth Items created via Database Match. `null` or empty string: Neither micro-deposit-based verification nor database verification are being used for the Item.
          - `class_type` string, nullable — If micro-deposit verification was being used, indicates the user's selection when asked if the account being verified is a `business` or `personal` account. This field is deprecated as Plaid no longer collects this information during the micro-deposit flow. To see whether an account is business or personal, use the `holder_category` field instead.
        - `institution` LinkSessionSuccessMetadataInstitution, nullable, required — 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
      - `bank_income_results` LinkSessionBankIncomeResult[], required — The set of bank income verifications for the Link session.
        - `status` 'APPROVED' | 'NO_DEPOSITS_FOUND' | 'USER_REPORTED_NO_INCOME' | 'STARTED' | 'INTERNAL_ERROR', required — Status of the Bank Income Link session. `APPROVED`: User has approved and verified their income `NO_DEPOSITS_FOUND`: We attempted, but were unable to find any income in the connected account. `USER_REPORTED_NO_INCOME`: The user explicitly indicated that they don't receive income in the connected account. `STARTED`: The user began the bank income portion of the link flow. `INTERNAL_ERROR`: The user encountered an internal error.
        - `item_id` string, required — The Plaid Item ID. The `item_id` is always unique; linking the same account at the same institution twice will result in two Items with different `item_id` values. Like all Plaid identifiers, the `item_id` is case-sensitive.
        - `institution` LinkSessionSuccessMetadataInstitution, nullable, required — 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
      - `payroll_income_results` LinkSessionPayrollIncomeResult[], required — The set of payroll income verifications for the Link session.
        - `num_paystubs_retrieved` integer, required — The number of paystubs retrieved from a payroll provider.
        - `num_w2s_retrieved` integer, required — The number of W-2s retrieved from a payroll provider.
        - `institution` LinkSessionSuccessMetadataInstitution, nullable, required — 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
      - `document_income_results` CreditSessionDocumentIncomeResult, nullable, required — The details of a document income verification in Link
        - `num_paystubs_uploaded` integer, required — The number of paystubs uploaded by the user.
        - `num_w2s_uploaded` integer, required — The number of w2s uploaded by the user.
        - `num_bank_statements_uploaded` integer, required — The number of bank statements uploaded by the user.
        - `num_1099s_uploaded` integer, required — The number of 1099s uploaded by the user
        - `num_i20s_uploaded` integer, required — The number of I-20s uploaded by the user
      - `cra_document_upload_results` LinkSessionCraDocumentUploadResult, nullable — The details of a document upload CRA session in Link
        - `num_bank_statements_uploaded` integer, required — The number of bank statements uploaded by the user.
  - `metadata` LinkTokenGetMetadataResponse, required — An object specifying the arguments originally provided to the `/link/token/create` call.
    - `initial_products` Products[], required — The `products` specified in the `/link/token/create` call.
    - `webhook` string, url, nullable, required — The `webhook` specified in the `/link/token/create` call.
    - `country_codes` CountryCode[], required — The `country_codes` specified in the `/link/token/create` call.
    - `language` string, nullable, required — The `language` specified in the `/link/token/create` call.
    - `institution_data` LinkTokenCreateInstitutionData — 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` AccountFiltersResponse — The `account_filters` specified in the original call to `/link/token/create`.
      - `depository` DepositoryFilter — A filter to apply to `depository`-type accounts
        - `account_subtypes` DepositoryAccountSubtype[], required — 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](https://plaid.com/docs/api/accounts#account-type-schema).
        - `limited_purpose_types` LimitedPurposeType[] — An array of limited purpose types. Restricts which kinds of limited purpose checking accounts may be connected in Link to prevent users from connecting them for unsupported use cases. Required when 'limited purpose checking' is in the subtypes filter.
      - `credit` CreditFilter — A filter to apply to `credit`-type accounts
        - `account_subtypes` CreditAccountSubtype[], required — 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](https://plaid.com/docs/api/accounts#account-type-schema).
      - `loan` LoanFilter — A filter to apply to `loan`-type accounts
        - `account_subtypes` LoanAccountSubtype[], required — 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](https://plaid.com/docs/api/accounts#account-type-schema).
      - `investment` InvestmentFilter — A filter to apply to `investment`-type accounts (or `brokerage`-type accounts for API versions 2018-05-22 and earlier).
        - `account_subtypes` InvestmentAccountSubtype[], required — 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](https://plaid.com/docs/api/accounts#account-type-schema).
    - `redirect_uri` string, nullable, required — The `redirect_uri` specified in the `/link/token/create` call.
    - `client_name` string, nullable, required — The `client_name` specified in the `/link/token/create` call.
  - `user_id` string — A unique user identifier, created by `/user/create`. Integrations that began using `/user/create` after December 10, 2025 use this field to identify a user instead of the `user_token`. For more details, see [New User APIs](https://plaid.com/docs/api/users/user-apis).
  - `request_id` string, required — A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive.

## Other responses

- `default` — Error response

---

[API](https://skmtc.net/plaid/apis/the-plaid-api.md) · [All operations](https://skmtc.net/plaid/apis/the-plaid-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/plaid/the-plaid-api/versions/64c4514ea59b/schema)
