Invalid Input Errors
Guide to troubleshooting invalid input errors
DIRECT_INTEGRATION_NOT_ENABLED
An attempt was made to create an Item without using Link.
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "DIRECT_INTEGRATION_NOT_ENABLED",
"error_message": "your client ID is only authorized to use Plaid Link. head to the docs (https://plaid.com/docs) to get started.",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INCORRECT_DEPOSIT_VERIFICATION
The user submitted an incorrect Manual Same-Day micro-deposit verification input during Item verification in Link.
Sample user-facing error message
Code is incorrect, 2 attempts remaining: Check the bank statement of your account ending in •••0000 for the $0.01 deposit and try again.Common causes
- Your user submitted an incorrect micro-deposit verification input when verifying an account via Manual Same-Day micro-deposits.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INCORRECT_DEPOSIT_VERIFICATION",
"error_message": "",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_ACCESS_TOKEN
Common causes
- Access tokens are in the format:
access-<environment>-<identifier> - This error can happen when the
access_tokenyou provided is invalid or pertains to a different API environment
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_ACCESS_TOKEN",
"error_message": "could not find matching access token",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_ACCOUNT_ID
The supplied account_id is not valid
Common causes
One of the account_id(s) specified in the API call's account_ids object is invalid or does not exist.
- Your integration is passing a correctly formatted, but invalid
account_idfor the Item in question. - The underlying account may have been closed at the bank, and thus removed from our API.
- The Item affected is at an institution that uses OAuth-based connections, and the user revoked access to the specific account.
- The
account_idwas removed from our API, either completely or a newaccount_idwas assigned to the same underlying account. - You are requesting an account that your user has de-selected in the Account Select v2 update flow.
Troubleshooting steps
Ensure that your integration only uses account_id(s) that belong to the Item in question. Early on in your development it is
important to verify that your integration only uses account_id(s), and other Plaid identifiers like item_id, for the Item that they belong to.
Also be sure to preserve the case of any non-numeric characters in Plaid identifiers, as they are case sensitive.
Account churn
If the underlying account has not been closed or changed at the bank and the account_id no longer appears, Plaid may have
removed the account entirely or assigned the account a new account_id, a situation known as "account churn".
Some common causes for account churn are:
- The Item was in an unhealthy state for an extended period of time. If an Item has remained in an error state for over a year, its underlying data may be removed. If the Item is then later refreshed, the Item data will be re-generated, resulting in new
account_iddata. - The bank or user drastically changing the name of the account, e.g. an account named "Savings account" becomes "Jane's vacation fund".
- The account's mask is changed by the bank, which can occur when banks change their backend systems.
Account churn caused by the latter two reasons is unexpected API behavior. If you experience account churn on an Item that was otherwise healthy, file a Support ticket.
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_ACCOUNT_ID",
"error_message": "failed to find requested account ID for requested item",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_API_KEYS
The client ID and secret included in the request body were invalid. Find your API keys in the Dashboard.
Common causes
- The API keys are not valid for the environment being used, which can commonly happen when switching between development environments and forgetting to switch API keys
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_API_KEYS",
"error_message": "invalid client_id or secret provided",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_AUDIT_COPY_TOKEN
The audit copy token supplied to the server was invalid.
Common causes
- You attempted to access an Asset Report using an
audit_copy_tokenthat is invalid or was revoked using/asset_report/audit_copy/removeor/asset_report/remove.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_AUDIT_COPY_TOKEN",
"error_message": null,
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_INSTITUTION
The institution_id specified is invalid or does not exist.
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_INSTITUTION",
"error_message": "invalid institution_id provided",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_LINK_CUSTOMIZATION
The Link customization is not valid for the request.
Common causes
- The Link customization is missing a use case and the session is enabled for Data Transparency Messaging.
- This error can happen when requesting to update account selections with a Link customization that does not enable Account Select v2.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_LINK_CUSTOMIZATION",
"error_message": "requested link customization is not set to update account selection",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_LINK_TOKEN
The link_token provided to initialize Link was invalid.
Sample user-facing error message
Username or password incorrect: Check that your credentials are the same that you use for this institutionCommon causes
- The
link_tokenhas expired. Alink_tokenlasts at least 30 minutes before expiring. - The
link_tokenwas already used. Alink_tokencan only be used once, except when working in the Sandbox test environment. - The
link_tokenwas created in a different environment than the one it was used with. For example, a Sandboxlink_tokenwas used in Production. - A user entered invalid credentials too many times during the Link flow, invalidating the
link_token.
Troubleshooting steps
For more detailed instructions on handling this error, see Handling invalid Link Tokens.
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_LINK_TOKEN",
"error_message": "invalid link_token provided",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_PROCESSOR_TOKEN
The processor_token provided to initialize Link was invalid.
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_PROCESSOR_TOKEN",
"error_message": null,
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_PRODUCT
Your client ID does not have access to this product.
Common causes
- The endpoint you are trying to access is not enabled for your account in the environment where you are trying to use it. For example, Identity Verification access is only available in Sandbox after you have received Production access.
- Your integration is using a partner endpoint integration that has not yet been enabled in the Dashboard.
- Your integration is attempting to call a processor endpoint on an Item that was initialized with products that are not compatible with processor endpoints.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_PRODUCT",
"error_message": "client is not authorized to access the following products: [\"identity_verification\"]",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_USER_ID
The user id is not in a valid format
Common causes
- A different identifier (such as a
client_user_idoruser_token) was sent instead of auser_id.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_USER_ID",
"error_message": "user.user_id must be a non-empty string",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_USER_IDENTITY_DATA
The user identity provided failed Plaid’s validation checks. The error message will contain specific details about which field(s) failed validation.
Common causes
- Invalid phone number. Plaid phone number validation checks not only for the correct number of digits, but also for a valid area code, prefix, etc., even in the Sandbox environment.
- Required identity fields are empty or contain only whitespace
- Invalid email address format
- Invalid date of birth format (must be YYYY-MM-DD)
- Incomplete address data (missing required fields when any address field is provided)
Troubleshooting steps
http code 403
{
"error_type": "USER_ERROR",
"error_code": "INVALID_USER_IDENTITY_DATA",
"error_message": "Invalid email format.",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}ADDITIONAL_CONSENT_REQUIRED
The end user has not provided consent to the requested product
Common causes
- You are using a Link flow that is enabled for Data Transparency Messaging and are trying to access an endpoint you did not collect consent for.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "ADDITIONAL_CONSENT_REQUIRED",
"error_message": "client does not have user consent to access the PRODUCT_AUTH product",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_PUBLIC_TOKEN
Common causes
- Public tokens are in the format:
public-<environment>-<identifier> - This error can happen when the
public_tokenyou provided is invalid, pertains to a different API environment, or has expired.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_PUBLIC_TOKEN",
"error_message": "could not find matching public token",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_STRIPE_ACCOUNT
The supplied Stripe account is invalid
Common causes
After /processor/stripe/bank_account_token/create was called, Plaid received a response from Stripe indicating that the Stripe account specified in the API call's account_id is invalid.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_STRIPE_ACCOUNT",
"error_message": "",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_USER_TOKEN
The supplied user token is invalid
Common causes
- The user token is not associated with the given user ID.
- The user token is invalid or pertains to a different API environment.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_USER_TOKEN",
"error_message": "could not find matching user token",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}INVALID_WEBHOOK_VERIFICATION_KEY_ID
The key_id provided to the webhook verification endpoint was invalid.
Common causes
- A request was made to
/webhook_verification_key/getusing an invalidkey_id. - The call to
/webhook_verification_key/getwas made from an environment different than the one the webhook was sent from (for example, verification of a Sandbox webhook was attempted against Production).
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "INVALID_WEBHOOK_VERIFICATION_KEY_ID",
"error_message": "invalid key_id provided. note that key_ids are specific to Plaid environments, and verification requests must be made to the same environment that the webhook was sent from",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}PROFILE_AUTHENTICATION_FAILED
The end user could not authenticate the device associated with their profile
Common causes
- When prompted to verify their phone number by entering a code delivered to their number via SMS, the end user entered three incorrect codes. (The first and second incorrect codes will result in an
INVALID_OTPerror, which is recoverable within Link and will not prompt the user to end the Link session.)
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "PROFILE_AUTHENTICATION_FAILED",
"error_message": "the profile could not be authenticated",
"display_message": "We were not able to authenticate your access to this Plaid account.",
"request_id": "HNTDNrA8F1shFEW"
}TOO_MANY_VERIFICATION_ATTEMPTS
The user attempted to verify their Manual Same-Day micro-deposit codes more than 3 times and their Item is now permanently locked. The user must retry submitting their account information in Link.
Sample user-facing error message
No attempts remaining: You’ve used up all of your attempts. To continue, connect a different bankCommon causes
- Your user repeatedly submitted incorrect micro-deposit codes when verifying an account via Manual Same-Day micro-deposits.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "TOO_MANY_VERIFICATION_ATTEMPTS",
"error_message": "",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}UNAUTHORIZED_ENVIRONMENT
Your client ID does not have access to this API environment. See which environments you are enabled for from the Dashboard.
Sample user-facing error message
Unauthorized environment: Your Client ID is not authorized to access this API environment. Contact Support to gain accessCommon causes
- You may not be enabled for the environment you are using.
- Your code may be calling a deprecated endpoint.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "UNAUTHORIZED_ENVIRONMENT",
"error_message": "you are not authorized to create items in this api environment. Go to the Dashboard (https://dashboard.plaid.com) to see which environments you are authorized for.",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}UNAUTHORIZED_ROUTE_ACCESS
Your client ID does not have access to this route.
Common causes
- The endpoint you are trying to access must be manually enabled for your account.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "UNAUTHORIZED_ROUTE_ACCESS",
"error_message": "you are not authorized to access this route in this api environment.",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}USER_PERMISSION_REVOKED
The end user has revoked access to their data.
Common causes
- The end user revoked access to their data via the Plaid consumer portal at my.plaid.com.
Troubleshooting steps
http code 400
{
"error_type": "INVALID_INPUT",
"error_code": "USER_PERMISSION_REVOKED",
"error_message": "the holder of this account has revoked their permission for your application to access it",
"display_message": null,
"request_id": "HNTDNrA8F1shFEW"
}