# Home | Plaid Docs Welcome to the Docs  ==================== #### Here you'll find guides, resources, and references to build with Plaid.  (An image of "Decorative image of a Abe Lincoln enjoying an energy drink") #### Quickstart  Learn about Plaid's key concepts and run starter code [Get started](https://plaid.com/docs/quickstart/index.html.md) #### API Reference  Explore server-side API libraries and integrate with API endpoints [View reference](https://plaid.com/docs/api/index.html.md) #### Link  Link, Plaid's client-side component, helps your users connect their accounts [Build with Link](https://plaid.com/docs/link/index.html.md) #### Payments and Funding  #### Auth  [Retrieve bank account information for ACH, wire, and other bank-to-bank transfers.](https://plaid.com/docs/auth/index.html.md) #### Balance  [Retrieve real-time balance information to prevent ACH returns.](https://plaid.com/docs/balance/index.html.md) #### Identity  [Verify users' financial account ownership and reduce fraud.](https://plaid.com/docs/identity/index.html.md) #### Signal Transaction Scores  [Reduce fraud and provide instant funds access by assessing the return risk of an ACH debit transaction.](https://plaid.com/docs/signal/index.html.md) #### Transfer  [Send and receive money end to end with Plaid.](https://plaid.com/docs/transfer/index.html.md) #### Investments Move  [Get verified data for initiating an ACATS or ATON brokerage-to-brokerage transfer.](https://plaid.com/docs/investments-move/index.html.md) #### Payments (Europe)  [Make one-time payments, recurring payments, or payouts within your app.](https://plaid.com/docs/payment-initiation/index.html.md) #### Financial Insights  #### Transactions  [Retrieve transaction data for budgeting tools, expense management, and more.](https://plaid.com/docs/transactions/index.html.md) #### Investments  [View holdings and transactions from investment accounts.](https://plaid.com/docs/investments/index.html.md) #### Liabilities  [Access loan data, like balances and interest rates, for student loans, mortgages, and credit cards.](https://plaid.com/docs/liabilities/index.html.md) #### Enrich  [Add detailed information and insights to your existing transactions data.](https://plaid.com/docs/enrich/index.html.md) #### KYC, AML, and anti-fraud  #### Identity Verification  [Global KYC compliance and anti-fraud. Verify user identity data and documents.](https://plaid.com/docs/identity-verification/index.html.md) #### Monitor  [Use with Identity Verification to enable sanction, PEP, and watchlist screening for anti-money laundering compliance.](https://plaid.com/docs/monitor/index.html.md) #### Beacon  [Join the Plaid anti-fraud network](https://plaid.com/docs/beacon/index.html.md) #### Protect  [Prevent fraud before it happens — at every step of the user lifecycle.](https://plaid.com/docs/protect/index.html.md) #### Instant Onboarding  #### Layer  [Onboard users instantly with just a phone number.](https://plaid.com/docs/layer/index.html.md) #### Credit and Underwriting  #### Consumer Report (by Plaid Check)  [Make smarter credit and lending decisions with insights powered by Plaid Check.](https://plaid.com/docs/check/index.html.md) #### Assets  [Access users' financial information for loan underwriting.](https://plaid.com/docs/assets/index.html.md) #### Statements  [Get PDF statements directly from the user's bank, for underwriting verification and compliance.](https://plaid.com/docs/statements/index.html.md) #### Income  [Verify income and employment, for lending use cases and more.](https://plaid.com/docs/income/index.html.md) --- # Authentication | Plaid Docs Authentication  =============== #### Building Plaid Core Exchange OpenID Connect Protocol  #### Overview  Core Exchange uses the [OpenID Connect protocol](https://openid.net/connect/) (OIDC) to authenticate your customers. OIDC is an extension of OAuth2. Plaid will use the OIDC flow to get authorization from the end user. This authorization allows Plaid to access your Core Exchange API on their behalf. In order to successfully allow your users to complete the authorization flow, you must: * [Create an OIDC-compliant server](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) * [Issue Plaid a client ID and client secret](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#issue-plaid-a-client-id-and-client-secret) * [Guide your users through all the steps in the authorization flow](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#authorization-flow) #### Create an OIDC-compliant server  You can generate an OIDC-compliant server in any of the following ways: * Using your existing OAuth identity provider. (For example, Okta, Auth0, Ping Identity, Azure Active Directory, AWS Cognito) * If you don't yet have an identity provider, Plaid recommends [our partner, Okta](https://www.okta.com/blog/2023/02/how-oktas-new-plaid-integration-keeps-your-banking-secure/) . Okta is an industry-leading, independent provider with expertise onboarding data partners to OAuth integrations. [Contact us](https://plaid.commailto:dataconnectivity@plaid.com) for help getting started with Okta. * Building a server with an [OIDC-certified open source or commercial implementation](https://openid.net/developers/certified/) * Building a server from scratch (not recommended) ##### Basic server requirements  | Configuration | Notes | | --- | --- | | Server domain | Communicate the fully qualified domain name of your OIDC server to Plaid. | | Well-known configuration endpoint | Your organization must respond to Plaid's request with the information listed in the next section . | ##### Well-known configuration  The `/.well-known/openid-configuration` endpoint of the OIDC server is a public endpoint that accepts HTTP GET requests without authentication. It returns a JSON object containing the minimum following values: | Property | Description | | --- | --- | | `authorization_endpoint` | The authorization endpoint: the endpoint hosting the user authentication page. Must support TLS and be publicly accessible. | | `token_endpoint` | The endpoint Plaid will call to exchange the authorization code for an access token. | | `userinfo_endpoint` | The endpoint Plaid will call to retrieve the user identifier. | | `token_endpoint_auth_methods_supported` | The supported authentication methods Plaid can use to [request an access token](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#4-plaid-requests-an-access-token) from the `token_endpoint`. (If omitted, Plaid will use [basic authentication](https://www.rfc-editor.org/rfc/rfc6749#section-2.3.1) by default.) | | `response_types_supported` | An array of supported response types. Plaid expects this to include `code`. | | `scopes_supported` | Transaction data subscriptions | ###### Example  **Plaid's request:** ```bash curl -X GET 'https://auth.firstplatypusbank.com/.well-known/openid-configuration' ``` **Your response:** ```json { "authorization_endpoint": "https://auth.firstplatypusbank.com/oauth2/v1/authorize", "token_endpoint": "https://auth.firstplatypusbank.com/oauth2/v1/token", "userinfo_endpoint": "https://auth.firstplatypusbank.com/oauth2/v1/userinfo", "token_endpoint_auth_methods_supported": ["client_secret_basic"], "response_types_supported": ["code"], "scopes_supported": ["openid", "offline_access"] } ``` #### Issue Plaid a client ID and client secret  In order to allow Plaid to authenticate its request for an access token, you must issue Plaid a client ID and client secret. These allow Plaid to identify itself. You may create the client ID and client secret using your preferred method, but we provide some guidance in the sections below. ##### Client ID  A client ID is a public identifier that you assign to Plaid. While it is not secret, we recommend choosing a client ID that is not easy to guess. **Note:** The client ID must be between 8 and 256 characters long. ###### How to create a client ID  One way to create a client ID is to use a random 32-character hex string. For example: Node▼ ```javascript import crypto from "crypto"; const randomString = crypto.randomBytes(16).toString("hex"); console.log(randomString) ``` ##### Client secret  The client secret is essentially a password that you assign to Plaid. In order to keep it secure, please follow these [best practices](https://www.oauth.com/oauth2-servers/client-registration/client-id-secret/) : * Generate the client secret in a way that makes it impossible to guess or backwards-generate. (For example, do not use a UUID as many common libraries take into account the timestamp or MAC address of the generating server.) * Never store the client secret in plain text—always keep it encrypted or hashed. * Make the client secret visually different from the client ID. (This reduces the risk of a user copy/paste error when handling the client ID and client secret.) **Note:** The client secret must be between 8 and 256 characters long. ###### How to generate a client secret  One way to securely generate a client secret is to follow the steps below: 1. Create a 256-bit value using a cryptographically secure pseudo random number generator (CSPRNG) 2. Convert the value from step 1 to a hexadecimal representation **Example:** Node▼ ```javascript import crypto from "crypto"; const randomString = crypto.randomBytes(32).toString("hex"); console.log(randomString) ``` #### Authorization flow  Once you have an OIDC-compliant server and have issued Plaid a client ID and client secret, you are ready to complete the authorization flow. The flow described below conforms to commonly implemented patterns for the [OIDC spec](https://openid.net/specs/) . Plaid welcomes partner [feedback](https://plaid.commailto:dataconnectivity@plaid.com) . **Steps overview:** 1. [Plaid redirects the end user to your authorization endpoint](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#1-plaid-redirects-the-end-user) 2. [The user completes all authentication steps](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#2-the-user-completes-all-authentication-steps) 3. [You create an authorization code and send it to Plaid](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#3-you-give-plaid-an-authorization-code) 4. [Plaid requests an access token](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#4-plaid-requests-an-access-token) 5. Plaid uses the access token to identify the user and authenticate Plaid's requests to your [Core Exchange API](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/index.html.md) ##### Steps  ###### 1\. Plaid redirects the end user  When your user first starts the process of linking their account, Plaid redirects their browser to the authorization endpoint specified in your [well-known configuration](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#well-known-configuration) . Plaid's redirect includes the following query parameters: | Query parameter | Description | Value | | --- | --- | --- | | `response_type` | A string, indicating type of response Plaid expects. | Set to: `code` | | `redirect_uri` | Where Plaid expects your organization to redirect back to once the user completed all authentication steps. | `https://cdn.plaid.com/link/v2/stable/oauth.html` | | `scope` | A set of strings indicating the set of scopes Plaid requests access to. | Will be set to `openid` and `offline_access`, at minimum | | `client_id` | The [client ID](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#issue-plaid-a-client-id-and-client-secret) you issued to Plaid. | A [client ID](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#client-id) | | `state` | Your organization will return the same string when redirecting to the `redirect_uri`. | An opaque string | | `prompt` | Specifies the type of authentication prompt the server will send to the end user. | Set to `login` | | `code_challenge` | _Optional:_ This value will be included only if your organization is using PKCE. | The `code_verifier`, either as a Base64URL-encoded hash or in plain text | | `code_challenge_method` | _Optional:_ This value will be included only if your organization is using PKCE. | plain: The code\_verifier is in plain text | **Plaid redirect example:** ```json https://auth.firstplatypus.com/oauth2/v1/authorize?response_type=code &client_id=dc1fe34ae9e5e98147f2fd76060016a4 &redirect_uri=https%3A%2F%2Fcdn.plaid.com%2Flink%2Fv2%2Fstable%2Foauth.html &state=v2.9f77edf0-a328-4501-9528-4a5f460cf770.0.0 &scope=openid%20offline_access%20accounts%20transactions &prompt=login &code_challenge=4dKRcTlKg7PbBxYokEH5gbfwfXcUdvDVYVdFZniVq4s &code_challenge_method=S256 ``` This page will be requested directly by the user's device. ##### 2\. The user completes all authentication steps  Control of user authentication has now been handed off to you. A typical authentication flow will include a username and password submission form and a 2FA step. For partners with native mobile applications, Plaid strongly recommends enabling support for [App2App](https://plaid.comhttps://plaid.com/core-exchange/docs/user-experience/index.html.md#app2app) and using [biometric authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/user-experience/index.html.md#webauthn) to improve the user's authentication experience. **Note:** If a user does not complete all the required steps (for example, if they choose to cancel rather than authorize) you should [handle it as an error](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#user-cancellation) . ##### 3\. You give Plaid an authorization code  After the user completes all required authentication steps, your organization generates a temporary authorization code and redirects the user's browser back to the `redirect_uri`. The following query parameters must be included with the request: | Query parameter | Description | | --- | --- | | `code` | The temporary authorization code. Plaid will exchange this for an access token in the [next step](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#4-plaid-requests-an-access-token) . | | `state` | The `state` parameter from the [step 1](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#1-plaid-redirects-the-end-user) . Plaid verifies that the two values match. | **Example of your response:** ```json https://cdn.plaid.com/link/v2/stable/oauth.html?code=1284918391 &state=eyJvYXV0aF9zdGF0ZV ``` ##### 4\. Plaid requests an access token  Plaid sends a request to your `token_endpoint`. Unlike the previous steps, the request to the `token_endpoint` is a backend-to-backend call and must be authenticated. The authentication credentials consist of the [client ID and client secret](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#issue-plaid-a-client-id-and-client-secret) you issued to Plaid. The authentication method will be one of the [authentication methods](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication) specified in your [well-known configuration](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#well-known-configuration) . For example, if the authentication method is set to `client_secret_basic`, Plaid will include a [basic authentication](https://plaid.comhttps://www.twilio.com/docs/glossary/what-is-basic-authentication/index.html.md) header in its request. Plaid will send the parameters listed in the table below in the body of the request, in `application/x-www-form-urlencoded` format. ###### Body parameters  | Body parameter | Description | Value | | --- | --- | --- | | `prompt` | Specifies the type of a prompt the server will send to the end user. | Will be set to: `consent` | | `grant_type` | The type of grant Plaid is exchanging for an access token. (In this case, an authorization code.) | Will be set to: `authorization_code` | | `code` | The temporary authorization code Plaid is exchanging for the access token. | The `code` you sent to Plaid in the [previous step](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#3-you-give-plaid-an-authorization-code) | | `redirect_uri` | Where Plaid expects your organization to redirect back to once the user completed all authentication steps. | `https://cdn.plaid.com/link/v2/stable/oauth.html` | | `scope` | The set of possible scopes. | An array of scopes, for example: `[offline_access, openid, accounts, transactions, identity]` | | `audience` | _Optional:_ Defines who the token is for. This value will be sent if Plaid has this information. [More information](https://community.auth0.com/t/what-is-the-audience/71414) | A string, for example: `https://test-api` | | `code_verifier` | _Optional:_ This value will be included only if your organization is using PKCE. | The `code_verifier`, created prior to starting the authentication flow | **Plaid request example:** ```bash curl --request POST 'https://auth.firstplatypusbank.com/oauth2/v1/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header "Authorization: Basic YzVhNTI0NWIwNjJiZjg0MjBkMTFhYjQzNjFiMjhhMTU6clZYWU9vUVM0ckhVRzc5bl80OGFs" --data-raw '{ "prompt": "login", "grant_type": "authorization_code", "code": "1284918391", "redirect_uri": "https://cdn.plaid.com/link/v2/stable/oauth.html", "scope": ["offline_access", "accounts"] }' ``` Your organization validates that the `client_id`, `client_secret`, `code` and `redirect_uri` all match the expected values. If everything is correct, you respond to Plaid with the `access_token`, `id_token`, and `refresh_token`. Plaid requires all of these values to later access your Core Exchange API. ###### Response parameters  | Property | Description | | --- | --- | | `access_token` | An opaque string (likely a JWT structured according to the [Oauth2 specification](https://datatracker.ietf.org/doc/html/rfc9068#section-2.2) ). Plaid will present this string as a bearer token to all requests made to your Core Exchange API. This encodes the identity of the user and the scope of access granted. | | `expires_in` | The lifetime of the access token, in seconds. Typically 15 minutes (900 seconds). Plaid checks for expiration before using an access token. If the access token is expired, Plaid will use the refresh token to request a new access token. If your organization expires the token before the stated expiration date, Plaid expects to receive a 401 response with an error code of "602 not authorized". | | `id_token` | An [OIDC ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . Plaid only reads the `sub` field from this token. In a deployment with multiple financial institutions, the `sub` field must be unique to each financial institution. (It doesn't need to be unique to the user across all financial institutions.) | | `refresh_token` | An opaque string (likely a JWT) that can be used to request a new access token. Plaid will use this to fetch data periodically long after the original access token expires. See the [refresh flow](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#refresh-flow) section for more information. Plaid doesn't recommend setting an inactivity timeout for the refresh token because it's not a good indicator of whether a user is active with a Plaid partner. For example, some Plaid partners can trigger Plaid to call the Core Exchange endpoint `/accounts/{accountID}` infrequently for large transactions. | **Example of your response:** ```json { "access_token": "agstynmdygjdghabrgraeh...", "expires_in": 900, "id_token": "snsyjrhvjdtvyjvsgcegaethstj...", "refresh_token": "dhcsrtjsrgayvkdisfdgntshstu..." } ``` After it receives this response, Plaid has everything it needs to access your Core Exchange API. ##### Error handling  If an error occurs during the [authorization flow](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#authorization-flow) , respond with the appropriate [error](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#errors) . (See [RFC 6749 section 4.1](https://www.rfc-editor.org/rfc/rfc6749#section-4.1.2.1) for a full description of each error.) ###### Incorrect redirect URI  If the request fails due to an incorrect, missing, invalid, or mismatched `redirect_uri`, notify Plaid of the error and _do not_ redirect the user to the `redirect_uri`. We recommend displaying an error page to notify the user that an error has occurred. ###### Expired access token  If Plaid sends an expired `access_token` for any reason, send a 401 response with an error code of "602 not authorized". ###### User cancellation  If the user cancels the request or if the request fails for any other reason other than an incorrect URI, include the following required query parameters with the request. | Query parameter | Description | | --- | --- | | `error` | The reason for the error. See the [Errors](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#errors) table below for a list of possible errors. | | `state` | The opaque string Plaid passed as the `state` parameter in the [authorization\_endpoint](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#1-plaid-redirects-the-end-user) redirect step. | **Example error response:** ```json https://cdn.plaid.com/link/v2/stable/oauth.html?error=access_denied &state=eyJvYXV0aF9zdGF0ZV ``` ###### Errors  | Error value | Description | | --- | --- | | `invalid_request` | The request is missing a required parameter, includes an invalid parameter value, includes a parameter more than once, or is otherwise malformed. | | `unauthorized_client` | The client is not authorized to request an authorization code using this method. | | `access_denied` | The resource owner or authorization server denied the request. | | `unsupported_response_type` | The authorization server does not support obtaining an authorization code using this method. | | `invalid_scope` | The requested scope is invalid, unknown, or malformed. | | `server_error` | The authorization server encountered an unexpected condition that prevented it from fulfilling the request. (This error code is needed because a 500 Internal Server Error HTTP status code cannot be returned to the client via an HTTP redirect.) | | `temporarily_unavailable` | The authorization server is currently unable to handle the request due to a temporary overloading or maintenance of the server. (This error code is needed because a 503 Service Unavailable HTTP status code can't be returned to the client via an HTTP redirect.) | #### Refresh flow  For some use cases, Plaid needs to periodically fetch fresh data on behalf of the user. To get a new access token, Plaid makes another request to your `token_endpoint` with a different set of parameters. The request body will be encoded in the `application/x-www-form-urlencoded` format. ###### Body parameters  | Body parameter | Description | Value | | --- | --- | --- | | `grant_type` | Specifies that Plaid is requesting a new access token to replace the expired access token. | Will be set to: `refresh_token` | | `refresh_token` | The refresh token you issued to Plaid. Plaid recommends setting the expiration at 13 months. This allows you to avoid running into expiration issues during time-sensitive intervals (for example, on tax day). | Example: `dhcsrtjsrgayvkdisfdgntshstu...` | **Plaid request example:** ```bash curl --request POST 'https://auth.firstplatypusbank.com/oauth2/v1/token' \ --header 'Content-Type: application/x-www-form-urlencoded' \ --header "Authorization: Basic YzVhNTI0NWIwNjJiZjg0MjBkMTFhYjQzNjFiMjhhMTU6clZYWU9vUVM0ckhVRzc5bl80OGFs" --data-raw '{ "grant_type": "refresh_token", "refresh_token": "dhcsrtjsrgayvkdisfdgntshstu..." }' ``` Your organization validates that the `grant_type` and `refresh_token` are valid and responds with the `access_token`, `id_token`, and `refresh_token`. Plaid will use these values to continue to access your Core Exchange API. It's recommended to provide a new refresh token each time with a rotated expiration date for enhanced security, but Plaid can support using the same refresh token for multiple refresh requests. ###### Response parameters  | Property | Description | | --- | --- | | `access_token` | An opaque string (likely a JWT structured according to the [Oauth2 specification](https://datatracker.ietf.org/doc/html/rfc9068#section-2.2) ). Plaid will present this string as a bearer token to all requests made to your Core Exchange API. This encodes the identity of the user and the scope of access granted. | | `expires_in` | The lifetime of the access token, in seconds. Typically 15 minutes (900 seconds). Plaid checks for expiration before using an access token. If the access token is expired, Plaid will use the refresh token to request a new access token. If your organization expires the token before the stated expiration date, Plaid expects to receive a 401 response with an error code of "602 not authorized". | | `id_token` | An [OIDC ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . Plaid only reads the `sub` field from this token. In a deployment with multiple financial institutions, the `sub` field must be unique to each financial institution. (It doesn't need to be unique to the user across all financial institutions.) | | `refresh_token` | An opaque string (likely a JWT) that can be used to request a new access token. When using refresh token rotation, this will be a new refresh token that replaces the one sent in the request. If not using rotation, this may be the same refresh token. Plaid recommends setting the expiration at 13 months to avoid expiration issues during time-sensitive intervals (for example, on tax day). | **Example success response:** ```json { "access_token": "lngarogglkcangasgabba...", "expires_in": 900, "id_token": "snsyjrhvjdtvyjvsgcegaethstj...", "refresh_token": "dhcsrtjsrgayvkdisfdgntshstu..." } ``` ##### Error handling  If an error occurs during the [refresh flow](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#refresh-flow) , respond with a 400 HTTP status code. You must include the appropriate `error` as shown in the [table below](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#error-codes) . You may optionally include an error description and an error URI. (See [RFC 6749 section 5.2](https://datatracker.ietf.org/doc/html/rfc6749#section-5.2) for complete information of each field.) **Example error response:** ```json { "error": "invalid_grant", "error_description": "Authorization grant does not match redirect URI", "error_uri": "https://www.your-org.com/human-readable-error-info/" } ``` ###### Error codes  | Error code | Description | | --- | --- | | `invalid_request` | The request is missing a required parameter. | | `invalid_client` | Client authentication failed. | | `invalid_grant` | The provided authorization grant or refresh token is invalid, expired, revoked, does not match the redirection URI used in the authorization request, or was issued to another client (rely on error description from FIs to further break this out). | | `unauthorized_client` | The authenticated client is not authorized to use this authorization grant type. | | `unsupported_grant_type` | The authorization grant type is not supported by the authorization server. | | `invalid_scope` | The requested scope is invalid, unknown, or malformed. | #### App2app  App2app is a feature that allows mobile apps using OAuth2 or OpenID Connect based authentication to offer a simpler, faster flow. App2app can be used if the user already has an app provided by the authorization server owner installed on their mobile device. To implement App2app with your Core Exchange API: ###### 1\. Set up app deep link URLs  Set up claimed HTTPS URLs so that the OAuth redirect launches the app (if installed) instead of the mobile web page. Ensure fallback to web if the app is not installed or is unavailable. (For example, if the user is on a desktop.) See the resources below for instructions on how to set up deep link URLs: * iOS: [Universal links](https://developer.apple.com/documentation/xcode/allowing-apps-and-websites-to-link-to-your-content?language=objc) * Android: [App Links](https://developer.android.com/training/app-links#android-app-links) ###### 2\. Set up in-app flow to issue OAuth authorization code  * **Native experience** (Recommended): Build a fully in-app flow whereby the users completes the authentication flow and the authorization code is issued from within the app, before redirecting back to Plaid. * **Semi-native experience** (Alternative): If a fully native experience cannot be resourced we can discuss alternative options, but there will be UX trade-offs. ###### 3\. Provide the authorization endpoint redirect URLs to Plaid  Plaid recommends that the data partner provides Plaid with two redirect URLs: * An App2app flow redirect URL * A regular web-based flow redirect URL This allows Plaid to control the user path and isolate any issues that may arise. (For example, if a specific developer ("app") incorrectly implements the App2app flow.) --- # Changelog | Plaid Docs Plaid Core Exchange Changelog  ============================== #### Tracks changes to Plaid Core Exchange  See the following changelist for updates to the Core Exchange specification. Core Exchange uses the same version numbers as FDX. \=\*=\*=\*= #### Core Exchange IP Allowlist Update  October 15, 2025 * A new range of Plaid IPs has been added for Core Exchange. Update your allowlist to include the following: * `162.120.88.0/22` * `2602:F74B::/40` \=\*=\*=\*= #### v6.3 Core Exchange API specification   ##### New Features  **Enhanced Pagination**: Added `pageKey` query parameter and `nextPageKey` response property for improved pagination across all paginated endpoints: * `GET /accounts` * `GET /accounts/{accountId}/payment-networks` * `GET /accounts/{accountId}/statements` * `GET /accounts/{accountId}/transactions` **New Deposit Account Types**: Added support for specialized savings accounts: * `FIRSTHOMESAVINGSACCOUNT` - First Home Savings Account type * `HIGHINTERESTSAVINGSACCOUNT` - High Interest Savings Account type **Enhanced Contact Information**: Improved contact data support with new fields: * **Account Holder Relationships**: Added `AUTHORIZED_SIGNER` relationship type for account holders * **Phone Number Enhancements**: * New phone types: `BOTH`, `PERSONAL` * Added `network` property for mobile network information * Added `primary` property to identify primary contact numbers * Enhanced country code validation with new pattern `^\\+?[1-9][0-9]{0,2}$` **Enhanced Loan Account Details**: Added optional properties for loan accounts: * `currentSchool` - Current educational institution for student loans * `loanProviderName` - Name of the loan provider **Transaction Enhancements**: * Added `cardNumberDisplay` property for all transaction types to show masked card numbers * Added date filtering with `startDate` and `endDate` query parameters for statements and transactions endpoints ##### Breaking Changes  **Contact Phone Number Field Changes**: * Increased maximum length for `telephones[].country` from 3 to 4 characters * Modified `payee` field structure in deposit transactions (removed maxLength constraint and changed type structure) **Schema Cleanup**: Removed unused `TelephoneNumberType` schema \=\*=\*=\*= #### v6.2 Core Exchange API specification   ##### New Features  * **Digital Wallet Support**: Added support for `DIGITAL_WALLET` account category across all account types and transactions * **New Currency Support**: Added support for `ZWG` (Zimbabwean Gold) currency code across all account types, transactions, and investment holdings * **Investment Account Enhancement**: Added `PREPAID` account type for investment accounts * **Digital Wallet Account Descriptor**: New `DigitalWalletDescriptor` schema added to the `/accounts` endpoint response ##### Breaking Changes  **Pagination Changes**: Removed optional `totalElements` property from paginated responses in the following endpoints: * `GET /accounts` * `GET /accounts/{accountId}/payment-networks` * `GET /accounts/{accountId}/statements` * `GET /accounts/{accountId}/transactions` **Statement Status Cleanup**: Removed the following enum values from statement status: * `AVAILABLE` * `FAILED` * `PROCESSING` \=\*=\*=\*= #### v6.1 Core Exchange API specification   ##### FDX changelist  * Minor updates and improvements to existing schemas ##### Plaid changelist  * Internal improvements and optimizations \=\*=\*=\*= #### v6.0 Core Exchange API specification   ##### FDX changelist  `US_FEDNOW` (Federal Reserve Instant Payment System) is now an accepted `PaymentNetworkType` in the `/payment-networks` endpoint ###### Breaking changes  * In the response for the `/accounts/{accountId}` endpoint, the account object is no longer wrapped with a named property (ex. `depositAccount`). The discriminator value `accountCategory` is now required on each account type. The `accountCategory` may be any of the following: * `ANNUITY_ACCOUNT` * `COMMERCIAL_ACCOUNT` * `DEPOSIT_ACCOUNT` * `INSURANCE_ACCOUNT` * `INVESTMENT_ACCOUNT` * `LOAN_ACCOUNT` * `LOC_ACCOUNT` (These values have not changed since prior versions v5.2 and v5.3.) * In the response for the `/accounts/{accountId}/transactions` endpoint, the transaction object is no longer wrapped with a named property (ex. `depositTransaction`). The discriminator value `accountCategory` is now required on each transaction object. An implementer’s mapping of each transaction must set the required the `accountCategory` property. The `accountCategory` may be any of the following: * `DEPOSIT_ACCOUNT` * `INVESTMENT_ACCOUNT` * `LOAN_ACCOUNT` * `LOC_ACCOUNT` * The `holding` object in investment accounts now supports an array of `securityIds` with `id`/`idType` pairs. (These pairs have replaced the `securityId`/`securityIdType` keys as identifiers.) ##### Plaid changelist  ###### Breaking changes  In AccountWithDetails (response for `/accounts/{accountId}` endpoint) removing the seven `xxxAccount` properties and requiring discriminator value `accountCategory`: on each account type, one of `ANNUITY_ACCOUNT`, `COMMERCIAL_ACCOUNT`, `DEPOSIT_ACCOUNT`, `INSURANCE_ACCOUNT`, `INVESTMENT_ACCOUNT`, `LOAN_ACCOUNT` or `LOC_ACCOUNT`. These values have not changed since prior versions v5.2 and v5.3 An implementer’s mapping of each account must set the required `accountCategory` property. The account object is no longer wrapped with a named property (ex. `depositAccount`). \=\*=\*=\*= #### V5.3 Core Exchange API specification   ##### FDX changelist  * A new account type (`CommercialAccountType`) was added. The following account types are classified as commercial accounts: * `COMMERCIALDEPOSIT` * `COMMERCIALINVESTMENT` * `COMMERCIALLOAN` * `COMMERCIALLINEOFCREDIT` * Commercial account type includes a new descriptor: `CommercialAccountDescriptor`. ###### Breaking changes  * The ISO 3166 country code standard was updated to ISO 3166-1 alpha-2. * The list of ISO 4217 currency codes was updated. (As of January 1, 2023) * **Note:** Some country codes (`AN`, `CS`) and currency codes (`HRK`) were removed in the updated version, making this a breaking change. (Please see the [ISO standards](https://www.iso.org/standards.html) for more information.) ##### Plaid changelist  ###### Breaking changes  * Plaid will not provide balance product support for the new `CommercialAccountType`. \=\*=\*=\*= #### V5.2 Core Exchange API specification   ##### FDX changelist  * None ##### Plaid changelist  * None \=\*=\*=\*= #### V5.1 Core Exchange API specification   ##### FDX changelist  * For the endpoints that Plaid supports, FDX introduces minor enum, model, and formatting changes in this version. ###### Breaking changes:  * None ##### Plaid changelist  * Plaid introduces support and documentation for FDX Digital Assets. \=\*=\*=\*= #### V5.0 Core Exchange API specification   ##### FDX changelist  * For the endpoints that Plaid supports, FDX introduces minor enum, model, and formatting changes in this version. ###### Breaking changes:  * The `state` property on an Address was renamed to the more inclusive `region`. * The specification requires timestamps on transactions be in ISO 8601 format. ##### Plaid changelist  * Plaid introduces support and documentation for FDX investment models, including investment accounts, investment holdings, and investment transactions. \=\*=\*=\*= #### v4.6   ##### FDX changelist  * None ##### Plaid changelist  * Plaid introduces Core Exchange in this version by choosing a subset of FDX endpoints to support and adding Plaid-specific documentation. --- # Dashboard overview | Plaid Docs Dashboard overview  =================== #### An overview of the configuration options available in Plaid's Dashboard  Your institution profile  ------------------------- After signup, you'll land on the Overview page. Before you can start using Core Exchange, you need to complete your profile by providing some basic information about your institution. This includes: * Verifying your email address * Basic information about your institution * Business information about your company * Technical contact information (An image of "no description available") Complete your profile to get started Integration metrics and health  ------------------------------- Once your profile tasks are complete, the Overview page will get you started on your journey to build your FDX-aligned API and launch your institution on Plaid's network. (An image of "no description available") Get an overview of your integration's performance * **Conversion rate** → Pre‑handoff user journey quality. * **Connection health** → Post‑link data extraction reliability. * **Performance** → Infrastructure characteristics observed by Plaid (availability and speed). * **Errors** → Specific issues encountered during data extraction. ### Integration health  Integration health provides real-time error logs and health metrics for your Plaid integration. You can search and filter error logs to investigate and troubleshoot issues your customers are experiencing. #### Conversion rate  * **What it measures** — How often users who select your institution successfully complete account linking. This metric only covers activity **after** a user enters your institution's login flow and **before** control returns to Plaid (the **“Handoff”** step). * **Formula** — (Number of successful user login attempts) / (Total number of user login attempts) * **Where it's evaluated** — Conversion in the user flow is evaluated between **Select institution** → **Handoff**: (An image of "Data flow: link open -> search -> select institution -> handoff -> token exchange -> data pulls") Data flow Tip: Conversion reflects the pre‑handoff experience. It does not include any post‑link data exchange. #### Connection health  **What it measures** — The success rate of Plaid's data extractions from your API **after** an account has been linked. Unlike conversion rate, Connection health focuses on post‑Link activity and is evaluated at **Token exchange** and **Data pulls**. Note: Connection health does not capture events from the institution login flow (e.g., authentication behaviors or failures during sign‑in). ##### Traffic types  Plaid sends two kinds of traffic to your API: * **User‑initiated traffic** — Triggered when a user is actively going through a login or update flow. Account and transaction data are pulled in real time and made available to apps. * **Batch traffic** — Scheduled, automated requests that keep financial data (e.g., transactions, balances) up to date even when the user isn't active. ##### Result classification  * **Success** — Plaid did not encounter any errors during data extraction while interacting with your API. * **Error** — Plaid encountered an error at any point during data extraction. While many errors come from non‑200 responses from your API, certain 200 responses can still be classified as errors if the extraction fails. ##### Health score  The proportion of successful API calls across your API's data resource endpoints: **(Number of successful API calls) / (Total API calls made)** (An image of "Data flow: link open -> search -> select institution -> handoff -> token exchange -> data pulls") Data flow #### Performance  * **Uptime** — Calculated as the percentage of successful and client‑error responses (**HTTP 2xx, 3xx, and 4xx**) out of all received responses, excluding scheduled downtime (as indicated by **FDX 503** errors). * **Latency** — The round‑trip response time when Plaid calls your endpoints from the **us‑east‑1 (Virginia)** region. ### Detailed logs  Click **View all** to see detailed logs of all errors encountered during data extraction. (An image of "no description available") View detailed logs of all errors encountered during data extraction Institutions  ------------- The **Institutions** section enables you to configure your institution, which involves setting up Plaid's access to your API and establishing your institution's brand in Plaid Link. ### Configure Plaid's access to your FDX API  There are three different institution configuration profiles that are available to you. Development and Staging can be configured to pre-production environments, allowing you to test them using the Validator. The Production configuration profile is designated only for your production environment. (An image of "no description available") Your institution's OAuth and API configuration ### Configure your institution's brand info  Using the **Brand Editor**, you can configure your logo, institution name, and institution URL. (An image of "no description available") Configure your institution's brand information ### Configure multiple institutions  If you are a digital banking platform, then your **Institutions** section will have a slightly different view to support the many institutions that you might support as your customers. (An image of "View for digital banking platforms") View your platforms Manage connections and webhooks  -------------------------------- The **Permissions Manager** section allows you to: * Search by customer to view authorization details of their connections * View detailed API docs * Set up webhooks to get real-time alerts each time a customer connects to or revokes access from a new application (An image of "Permissions manager") Lookup (An image of "API docs") Permissions manager - Find and manage connections your users have made to Plaid (An image of "Webhooks") Webhook configuration - receive alerts every time a user connects or disconnects View connected apps  -------------------- The **App Directory** section displays details about the apps your customers are connected to, including categories and the number of connections. You can also view additional resources for the App Directory's FDX-aligned API. (An image of "App directory") App Directory --- # Implementation Checklist | Plaid Docs Implementation Checklist  ========================= #### Checklist for implementing Plaid Core Exchange  Scoping and implementation  --------------------------- ✓ Review the [Core Exchange API Reference documentation](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/index.html.md) ✓ Review the [architecture diagram](https://plaid.comhttps://plaid.com/core-exchange/docs/implementation-checklist/index.html.md#architecture-diagram) ✓ Try out our [Postman collection](https://plaid.comhttps://plaid.com/core-exchange/docs/mock-server/index.html.md) to test requests and responses on a mock bank server ✓ Complete the [Intake Questionnaire](https://forms.gle/SSJAfnrxLv7b1Em99) . The information provided allows us to best support you through your onboarding experience ✓ Get access to the Plaid Data Partner Dashboard: Your Plaid contact will provide you a one-time use link to either sign up for a data partner dashboard account if you do not already have Plaid dashboard access or create a new team if you already have access to the dashboard as a Plaid customer. ✓ Gather business information In our onboarding flow, we verify your organization and require the following information which you can collect in advance: * Name and business email address of a responsible business contact representing the data provider organization * Company address * Company name * Company tax ID * Company [Legal Entity Identifier](https://www.gleif.org/en/about-lei/get-an-lei-find-lei-issuing-organizations) * Industry * Licensing and registration (e.g., FDIC, NCUA, SIPC) ✓ Gather technical contact information Before you go live, we require technical contact information In the event an urgent technical issue arises: * Shared email address * Phone number (if available) * Additional individual contacts ✓ Prepare one or more test accounts for each type of account you support (checking, savings, credit card, loan, 401k, etc.) Ensure that: * All accounts have balance data * All accounts have contact data * Depository, loan, and investment accounts have transaction data * Depository accounts have payment networks data ✓ Allowlist the following Plaid IPs: * `162.120.88.0/22` * `2602:F74B::/40` _Do not remove_ any of the following Plaid IPs from your allowlist, if they are already present: `18.214.218.91`, `3.211.30.208`, `3.214.25.67`, `54.88.74.128`, `54.208.59.10`, `54.88.202.28`, `34.199.37.46`, `35.168.137.48`, `3.215.49.214`, `34.202.178.138`, `52.0.205.192`, `52.3.166.211`, `35.174.147.86`, `52.88.82.239`, `52.41.247.19`, `3.233.249.56`, `35.153.85.253`, `3.219.116.195` Building and testing  --------------------- ### Develop and test authentication  ✓ Create an [OIDC-compliant server](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) , including: * A server domain * A [well-known configuration endpoint](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#well-known-configuration) ✓ Issue Plaid a [client ID and client secret](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#issue-plaid-a-client-id-and-client-secret) ✓ Make identity information available to Plaid (Choose one below): * OIDC compliant (recommended): * [ID Token + JWKS URI Route](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) * [UserInfo Endpoint](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) * Non-OIDC compliant (not recommended): * [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#customerscurrent) endpoint ✓ Create a [token exchange](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#4-plaid-requests-an-access-token) endpoint ### Develop and test FDX data subsets  ✓ [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts) : Search and view customer accounts ✓ [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccoutid) : Get account balances, liabilities, and other information ✓ [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsacouuntidpayment-networks) : Get payment networks supported by an account ✓ [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#) : Get account contact information ✓ [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#) : List all account transactions ✓ [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#customerscurrent) (only if OpenID Connect compliance is not followed): Get the ID of the customer within the authorization scope Go-live  -------- ### Get ready for production  ✓ Confirm you have implemented strong authentication in your OAuth flow (i.e., MFA) ✓ Confirm your organization's name, logo, and URL. Plaid uses this information to populate your organization's details in Plaid Link. Your logo file must be a 96x96 or 152x152 circular PNG and under 2MB ✓ If you would like to make an external launch announcement, reach out to our Plaid team to finalize plans ✓ Once you have validated your integration, request production access in the [Plaid dashboard](https://dashboard.plaid.com/) or reach out to your Plaid contact ### Pilot and migrate  _(Note: This section only applies to existing Plaid partners)_ If your institution is already supported in [Plaid Link](https://plaid.comhttps://plaid.com/core-exchange/docs/user-experience/index.html.md) or you are a [platform provider](https://plaid.comhttps://plaid.com/core-exchange/docs/implementation-checklist/index.html.md#key-considerations-for-digital-banking-platforms) with numerous institutions, we will partner together to develop a pilot and migration plan. Migrations typically have 4 phases: | | Phase | Description | Timeline\* | | --- | --- | --- | --- | | 1 | Friends and Family Testing | Limited access, internal user traffic | ~ 2 weeks | | 2 | Pilot Cohort | Enable new connections in production for pilot cohort, monitor health and resolve issues | ~ 2 weeks | | 3 | Remaining Cohorts | Enable new connections for remaining cohorts\* in production, monitor health and resolve issues _\# of cohorts is partner dependent_ | ~ 2-3 weeks | | 4 | Existing User Migration | After integration health is validated, Plaid will begin a process to migrate all existing items over to the OAuth + API connection. | ~120 days | _\*Timeline illustrative. Speed contingent on ability to validate institutional health, address any open issues etc._ Ongoing management  ------------------- We will continue to partner together to ensure integration quality after you go live on API connectivity with Plaid. Key integration health metrics Plaid monitors include: conversion, data access success rate, data availability and accuracy. ✓ Update the Plaid team with the correct point of contact to support ongoing integration health ✓ Log the identifiers below to aid in troubleshooting issues with Plaid: * OAuth `state` parameter: Plaid sends a unique string in the `state` parameter when redirecting the user’s browser to the `authorization_endpoint`. Useful in debugging OAuth flow errors. * `X-Request-ID` header: Plaid sends this header in requests to your resource server. It can be correlated with error logs on our [Integration Health dashboard](https://plaid.comhttps://plaid.com/core-exchange/docs/dashboard-overview/index.html.md#overview) . * User identifier. This is useful in debugging the request flow for a given user. Depending on how you set up your API this value can be from the following sources: * The value of `sub` from your OIDC token * The value of `sub` from your OIDC `userinfo_endpoint` * Value of `customerId` from the `/customers/current` endpoint * Consider ways to take your integration to the next level: * Increase consumer throughput with [App2App functionality](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#app2app) * Show your customers their most up-to-date connections to Plaid-powered apps and enable them to make updates in real-time, automatically syncing permissions across the financial ecosystem via [Permissions Manager](https://plaid.com/privacy-controls-permissions-manager/) Key considerations for Digital Banking Platforms  ------------------------------------------------- Partnering with Digital Banking Platforms is essential to how Plaid leads the market in preparing for the open finance future. Over 30 platforms, representing 7000+ financial institutions are already live or in the process of going live with API-based data connectivity with Plaid. The Plaid team has made key investments to support rapid scaling of our API migrations. Our Data Partner Dashboard and internal tooling make it straightforward to migrate hundreds of financial institutions and millions of new and existing users to API in a matter of weeks. ### 1\. Execute an "opt-out migration"  Financial institutions and their end users now expect highly reliable and secure data access. In order to deliver that experience as quickly as possible, we recommend an "opt-out" migration strategy for Digital Banking Platform institutions. #### How to execute:  * Communicate with your financial institutions that Plaid API access is rolling out for all institutions * Share with Plaid the number of institutions you support * Determine if cohort-based ramping of institutions is needed (details to consider in [step 2](https://plaid.comhttps://plaid.com/core-exchange/docs/implementation-checklist/index.html.md#2-consider-backend-data-complexities-upfront) ) * Dependent on the scale of your existing Plaid volume, we may encourage either: * **Friends and family pilot**: Set up 1-2 financial institutions for testing in production under a pseudonym only findable by active testers. Plaid will share a PDF checklist of tests to run to testers. * **Production pilot**: Bring 1-5 financial institutions live in production to validate integration before bringing the rest of your institutions live. * Upload financial institutions into the [Data Partner dashboard](https://dashboard.plaid.com/) * Plaid brings financial institutions live on API! ### 2\. Consider backend data complexities upfront:  * **Pilot/testing plan**: Do you have different backend pods, product lines, or backend core groupings that might align to different backend data models? If so, we encourage representing each subgroup in a pilot cohort to uncover any variability or errors. * **Account and routing numbers**: There is zero room for error when it comes to accuracy of account and routing numbers. We have found with platforms representing different backend cores there can be some edge-case discrepancy. Please validate that `/payment-network` data is accurate for all institutions before going live. Architecture diagram  --------------------- This sequence diagram depicts the standard flow of an end-user selecting an institution in Plaid Link and the resulting interaction flow between Plaid and a data partner’s API. Core Exchange offers flexibility that meets your needs, so exact flows can vary depending on your OAuth 2.0 and FDX implementation. (An image of "core-exchange-sequence-diagram") --- # Home - Welcome | Plaid Docs Welcome  ======== #### Plaid Developer Docs for an FDX-Aligned API  #### Introduction  With Plaid’s Developer Docs for an FDX-aligned API, we’ve taken the guesswork out of building to the FDX standard. With our simplified spec, your organization will know exactly which fields are needed to power connectivity to the Plaid Network in alignment with FDX. With our implementation guide, you’ll enable your customers to seamlessly connect their accounts to the thousands of applications within the Plaid network (the largest of any aggregator), including payment services, budgeting apps, and more. Plaid’s open finance solutions are completely free for data providers and makes it easier for you to comply with the key aspects of open banking regulation. It includes three parts: **1\. Core Exchange:** Offers an easier way to implement an FDX-aligned API in a matter of weeks, with these docs, developer tooling in our data partner dashboard, and dedicated support from our expert team. Once your API is in place, we have additional solutions to give you visibility into consumer and app-level connections as well as comply more easily with 1033 standards. **2\. Permissions Manager:** Gives data providers the tools to gain visibility into the authorization details for connections their customers have made via Plaid, build a consent portal that enables customers to manage their connections, and receive real-time alerts. Available via no-code dashboard as well as APIs and webhooks. **3\. App Directory:** Gives data providers insights about the thousands of apps on Plaid’s network that their customers have connected to, including categories and number of connections. FDX-aligned and available via no-code dashboard as well as APIs. #### CFPB’s rulemaking on Personal Financial Data rights (i.e. “1033”)  The Consumer Financial Protection Bureau (CFPB) [finalized its Section 1033 rule](https://www.consumerfinance.gov/about-us/newsroom/cfpb-finalizes-personal-financial-data-rights-rule-to-boost-competition-protect-privacy-and-give-families-more-choice-in-financial-services/) on October 22, 2024. This rule has formalized the requirement for certain providers of financial services to provide a developer interface (an API) to allow their customers to access and share their financial data. Learn more about the Dodd-Frank Section 1033 rule and key considerations for financial services providers going forward in this article. Building your FDX-aligned API with Plaid will help prepare your organization to comply with upcoming regulatory requirements. For more information on preparing your open banking API strategy, please reach out to us [here](https://plaid.com/products/core-exchange/#contactForm) . #### What this guide contains  This documentation contains all the information you need to build your own FDX-aligned API. It includes: * A [checklist](https://plaid.comhttps://plaid.com/core-exchange/docs/implementation-checklist/index.html.md) of all the steps that must be completed during each stage of development * A visual walkthrough of the [experience](https://plaid.comhttps://plaid.com/core-exchange/docs/user-experience/index.html.md) your customers will have once Plaid is fully integrated to your FDX-aligned API * An in-depth explanation of the [OpenID Connect-compliant authentication process](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md) * Example requests you can send to our [mock server](https://plaid.comhttps://plaid.com/core-exchange/docs/mock-server/index.html.md) to get familiar with FDX data payloads * An [API reference](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/index.html.md) with sample requests, responses, and required fields for all our FDX-aligned spec endpoints Please reach out to the Plaid team for implementation questions not addressed in this documentation. #### Benefits of building with Core Exchange  When you build your API with Plaid, your customers will gain access to Plaid's extensive network of financial apps, the largest of any aggregator. You will also benefit from having an API that is interoperable with other organizations that comply with Financial Data Exchange (FDX) API standards. ##### Plaid network  Once your your API has been successfully validated by Plaid, your organization will appear in [Plaid Link's](https://plaid.comhttps://plaid.com/core-exchange/docs/user-experience/index.html.md) list of available financial institutions. See the [Plaid Link Demo](https://plaid.com/demo/) for a visual walkthrough of your customer’s experience. (An image of "Plaid Link bank selection") ##### Interoperability  Plaid’s spec is a subset of the [Financial Data Exchange](https://plaid.com/resources/api/what-is-fdx/) (FDX) API standard. FDX is the common standard for financial data networks (including the Plaid network). This means that when you build an FDX-aligned API with Plaid, you will be able to connect it to Plaid’s extensive ecosystem of fintech apps as well as to other financial data aggregators and organizations. ##### Simplified implementation  Plaid’s free open finance solution allows you to streamline and validate your API implementation. With one dedicated engineer in your organization, building an FDX-aligned API with Plaid can typically be completed in six to eight weeks from the date all approvals and resources are in place for your organization. This estimated timeline covers the time period for building, testing, and deployment. It doesn't cover your institution's internal review and approval process, migrating existing integrations, or other considerations included in this document. #### API flow overview  At a [high level](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#authorization-flow) , the Plaid network sends your API [secure requests](https://plaid.comhttps://plaid.com/core-exchange/docs/index.html.md#security-flow) for account balance and transaction information. ##### Security flow  Plaid uses your [OpenID Connect security flow](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#authorization-flow) to allow your customers to connect their financial accounts to their other financial applications. ##### Plaid requests account information  The first time one of your customers connects their account to the Plaid network, Plaid will send a request for a transaction history period of two years. Afterward, Plaid will send periodic requests for a transaction history period of 14 days. Plaid will also periodically request other account information, including current balances, available balances, liabilities, and statements. The most common accounts are: * Deposit accounts * Investment accounts * Loan accounts (most commonly STUDENTLOAN and MORTGAGE) * Line of credit accounts (most commonly CREDITCARD) #### Security and privacy  Plaid has established security and privacy processes to help keep your customer's data secure. See the [Plaid Security Portal](https://security.plaid.com/) for more information. --- # Mock server | Plaid Docs Plaid Core Exchange Mock Server  ================================ #### Mock bank server  Use our mock bank server to understand the subset of FDX information that Plaid consumes. This mock server uses hardcoded public bearer tokens. Remember that in production, bearer tokens must be secure. See the following Postman collection: Or, skip Postman and make a few example cURL calls directly to the mock server in a command line: | Action | Example call | | --- | --- | | [List all accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts) for the test user | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts' --header 'Authorization: Bearer 000000000001'` | | [Get the balance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountid) of the test user's checking account | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/deposit_01_checking' --header 'Authorization: Bearer 000000000001'` | | [List the transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidtransactions) on the test user's checking account | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/deposit_01_checking/transactions?startTime=2022-01-30&endTime=2022-05-30' --header 'Authorization: Bearer 000000000001'` | | [List the supported payment networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidpayment-networks) for the test user's savings account | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/deposit_02_savings/payment-networks' --header 'Authorization: Bearer 000000000001'` | | [Get the contact info](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountid) on the test user's savings account | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/deposit_02_savings/contact' --header 'Authorization: Bearer 000000000001'` | | [Get the balance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountid) of the test user's mortgage account | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/loan_02_mortgage' --header 'Authorization: Bearer 000000000001'` | | [Get the balance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountid) of the test user's credit card | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/loc_01_creditcard' --header 'Authorization: Bearer 000000000001'` | | [List the transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidtransactions) on the test user's credit card | `curl --request GET 'https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/loc_01_creditcard/transactions?startTime=2022-01-30&endTime=2022-05-30' --header 'Authorization: Bearer 000000000001'` | | [List available account statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidstatements) for the test user's checking account | `curl --request GET https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/deposit_01_checking/statements --header 'Authorization: Bearer 000000000001'` | | [Get a single account statement PDF](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidstatementsstatementid) from the test user's checking account | `curl --request GET https://api.firstplaidypusbank.plaid.com/fdx/v6/accounts/deposit_01_checking/statements/000001 --header 'Authorization: Bearer 000000000001'` | --- # 4.6 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v4.6 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY_JOINT_TENANTS`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `SECONDARY`, `SECONDARY_JOINT_TENANTS`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [state](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-state) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BM`, `BN`, `BO`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CS`, `CU`, `CV`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `ST`, `SV`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-response-page-totalElements) integer Total number of elements [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "depositAccount": { "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "loanAccount": { "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "locAccount": { "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "investmentAccount": { "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } } ] } ``` \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` \=\*=\*=\*= #### /accounts/{accountId}/statements  ###### 200 OK  \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  ###### 200 OK  A 200 response will return a PDF account statement. \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-response-page-totalElements) integer Total number of elements [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "depositTransaction": { "checkNumber": 1234, "payee": "ACME llc", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 } }, { "depositTransaction": { "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 } }, { "depositTransaction": { "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } } ] } ``` \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-page-totalElements) integer Total number of elements [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_FEDWIRE: Fedwire Funds Service * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System Possible values: `US_ACH`, `US_FEDWIRE`, `US_CHIPS`, `CA_ACSS`, `CA_LVTS` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following accounts types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `ESOP`, `GUARDIAN`, `INSTITUTIONALTRUST`, `IRA`, `KEOGH`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `SARSEP`, `TAXABLE`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2, "holdings": [ { "securityId": "123456789", "securityIdType": "CUSIP", "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01T14:46:41.000Z", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15T14:46:41.375Z", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15T14:46:41.375Z", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15T14:46:41.375Z", "maturityDate": "2021-07-15T14:46:41.375Z", "interestRate": 6.99, "interestRateType": "FIXED" } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-nextPaymentDate) string Due date of next payment ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-lastPaymentDate) string Last payment date ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-lastStmtDate) string Last statement date ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15T14:46:41.375Z", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15T14:46:41.375Z", "lastStmtDate": "2021-07-15T14:46:41.375Z" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Commercial account descriptor  ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `ESOP`, `GUARDIAN`, `INSTITUTIONALTRUST`, `IRA`, `KEOGH`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `SARSEP`, `TAXABLE`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Account status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Commercial account types  The `accountType` field for commercial accounts may be set to any of the following: | Account type | Description | | --- | --- | | `COMMERCIALDEPOSIT` | A deposit account for commercial customers, for example a business trust account | | `COMMERCIALLOAN` | A preset borrowing limit that can be used at any time | | `COMMERCIALLINEOFCREDIT` | An account with a preset borrowing limit that can be used at any time | | `COMMERCIALINVESTMENT` | Investment Account for Commercial Customers. e.g. Commercial Brokerage Account | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT` API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md#LocTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 5.0 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v5.0 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY_JOINT_TENANTS`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `SECONDARY`, `SECONDARY_JOINT_TENANTS`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BM`, `BN`, `BO`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CS`, `CU`, `CV`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `ST`, `SV`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "depositAccount": { "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "loanAccount": { "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "locAccount": { "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "investmentAccount": { "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | \=\*=\*=\*= #### /accounts/{accountId}/statements  ###### 200 OK  \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  ###### 200 OK  A 200 response will return a PDF account statement. \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "depositTransaction": { "checkNumber": 1234, "payee": "ACME llc", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 } }, { "depositTransaction": { "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 } }, { "depositTransaction": { "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_FEDWIRE: Fedwire Funds Service * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System Possible values: `US_ACH`, `US_FEDWIRE`, `US_CHIPS`, `CA_ACSS`, `CA_LVTS` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following accounts types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `ESOP`, `GUARDIAN`, `INSTITUTIONALTRUST`, `IRA`, `KEOGH`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `SARSEP`, `TAXABLE`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2, "holdings": [ { "securityId": "123456789", "securityIdType": "CUSIP", "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99, "interestRateType": "FIXED" } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `ESOP`, `GUARDIAN`, `INSTITUTIONALTRUST`, `IRA`, `KEOGH`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `SARSEP`, `TAXABLE`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | | `RESTRICTED` | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT` API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md#LocTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 5.1 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v5.1 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY_JOINT_TENANTS`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `SECONDARY`, `SECONDARY_JOINT_TENANTS`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BM`, `BN`, `BO`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CS`, `CU`, `CV`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `ST`, `SV`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-response-page-totalElements) integer Total number of elements [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "depositAccount": { "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "loanAccount": { "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "locAccount": { "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "investmentAccount": { "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-response-page-totalElements) integer Total number of elements [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "depositTransaction": { "checkNumber": 1234, "payee": "ACME llc", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 } }, { "depositTransaction": { "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 } }, { "depositTransaction": { "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-page-totalElements) integer Total number of elements [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * US\_FEDWIRE: Fedwire Funds Service * US\_RTP: US Real Time Payments System Possible values: `US_ACH`, `US_FEDWIRE`, `US_CHIPS`, `US_RTP`, `CA_ACSS`, `CA_LVTS` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following accounts types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `ESOP`, `GUARDIAN`, `INSTITUTIONALTRUST`, `IRA`, `KEOGH`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `SARSEP`, `TAXABLE`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2, "holdings": [ { "securityId": "123456789", "securityIdType": "CUSIP", "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99, "interestRateType": "FIXED" } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `ESOP`, `GUARDIAN`, `INSTITUTIONALTRUST`, `IRA`, `KEOGH`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `SARSEP`, `TAXABLE`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | CLOSED | An account that is closed or no longer exists | | DELINQUENT | An account with unpaid payments that are past due | | NEGATIVECURRENTBALANCE | An account with a current negative balance | | PAID | An account that is paid in full | | PENDINGCLOSE | An account that is in the process of being closed | | PENDINGOPEN | An account that is in the process of being opened | | RESTRICTED | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. * `FEE`: Fee charge. For example, a late payment fee. * `INTEREST`: Interest charge. * `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). * `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. * `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. * `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. * `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md#LocTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 5.2 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v5.2 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accountsaccountidstatements) | Get account statements | | [/accounts/{accountId}/statements/{statementId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accountsaccountidstatementsstatementid) | Get account statement PDF | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY_JOINT_TENANTS`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `SECONDARY`, `SECONDARY_JOINT_TENANTS`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AN`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BM`, `BN`, `BO`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CS`, `CU`, `CV`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `ST`, `SV`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-response-page-totalElements) integer Total number of elements [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "depositAccount": { "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "loanAccount": { "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "locAccount": { "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "investmentAccount": { "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements  #### Search for statements  Get account statements. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements?startTime=2022-04-01&endTime=2022-04-30' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-page-totalElements) integer Total number of elements [statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements) required, \[object\] An array of statements, each with its own HATEOAS link to retrieve the account statement [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-accountId) string Corresponds to `accountId` in Account entity Max length: `256` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-statementId) string Long-term persistent identity of the statement. This identity must be unique within your organization Max length: `256` [statementDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-statementDate) string The date the statement becomes available to be viewed by the user Format: `date` Max length: `10` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-description) string Description of the statement [links](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-links) \[object\] The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array [href](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-links-href) required, string The resource URL Format: `uri-reference` [action](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-links-action) string The HTTP method to use for the request Possible values: `GET`, `POST`, `PATCH`, `DELETE`, `PUT` [rel](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-links-rel) string The relation of this link to its containing entity, as defined by the [IETF RFC5988](https://datatracker.ietf.org/doc/html/rfc5988) [types](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-links-types) \[string\] The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type Possible values: `application/pdf`, `image/gif`, `image/jpeg`, `image/tiff`, `image/png`, `application/json` [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-response-statements-status) string Availability status of statement Possible values: `AVAILABLE`, `PROCESSING`, `FAILED` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T", "total": 3 }, "statements": [ { "accountId": "10001", "statementId": "20001", "statementDate": "2024-01-15", "description": "January 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20001", "rel": "self", "action": "GET", "types": [ "application/pdf" ] }, { "href": "/accounts/10001/statements/20001/download", "rel": "download", "action": "GET", "types": [ "application/pdf" ] } ], "status": "AVAILABLE" }, { "accountId": "10001", "statementId": "20002", "statementDate": "2024-02-15", "description": "February 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20002", "rel": "self", "action": "GET", "types": [ "application/pdf" ] } ], "status": "PROCESSING" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  #### Get account statement  Get account statement PDF **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-{statementid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-statements-{statementid}-request-statementId) string Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements/{statementId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return a raw binary PDF statement file. ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-response-page-totalElements) integer Total number of elements [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "depositTransaction": { "transactionType": "CHECK", "checkNumber": 1234, "payee": "ACME llc", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 } }, { "depositTransaction": { "transactionType": "ADJUSTMENT", "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 } }, { "depositTransaction": { "transactionType": "ATMDEPOSIT", "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-page-totalElements) integer Total number of elements [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * US\_FEDWIRE: Fedwire Funds Service * US\_RTP: US Real Time Payments System Possible values: `US_ACH`, `US_FEDWIRE`, `US_CHIPS`, `US_RTP`, `CA_ACSS`, `CA_LVTS` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following accounts types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `ROLLOVER`, `ROTH`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2, "holdings": [ { "securityId": "123456789", "securityIdType": "CUSIP", "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99, "interestRateType": "FIXED" } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `COMMERCIALDEPOSIT`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COMMERCIALINVESTMENT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `ROLLOVER`, `ROTH`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `COMMERCIALLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-currency-currencyCode) required, string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `COMMERCIALLINEOFCREDIT`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | CLOSED | An account that is closed or no longer exists | | DELINQUENT | An account with unpaid payments that are past due | | NEGATIVECURRENTBALANCE | An account with a current negative balance | | PAID | An account that is paid in full | | PENDINGCLOSE | An account that is in the process of being closed | | PENDINGOPEN | An account that is in the process of being opened | | RESTRICTED | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. * `FEE`: Fee charge. For example, a late payment fee. * `INTEREST`: Interest charge. * `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). * `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. * `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. * `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. * `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-foreignCurrency) string ISO 4217 Currency codes Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HRK`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLL`, `SOS`, `SRD`, `SSP`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UZS`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md#LocTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 5.3 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v5.3 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accountsaccountidstatements) | Get account statements | | [/accounts/{accountId}/statements/{statmentId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accountsaccountidstatementsstatementid) | Get account statement PDF | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY_JOINT_TENANTS`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `SECONDARY`, `SECONDARY_JOINT_TENANTS`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-response-page-totalElements) integer Total number of elements [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [commercialAccount](https://plaid.com#commercial-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "depositAccount": { "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "loanAccount": { "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "locAccount": { "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } } }, { "investmentAccount": { "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements  #### Search for statements  Get account statements. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts/{accountId}/statements?startTime=2022-04-01&endTime=2022-04-30' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-page-totalElements) integer Total number of elements [statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements) required, \[object\] An array of statements, each with its own HATEOAS link to retrieve the account statement [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-accountId) string Corresponds to `accountId` in Account entity Max length: `256` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-statementId) string Long-term persistent identity of the statement. This identity must be unique within your organization Max length: `256` [statementDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-statementDate) string The date the statement becomes available to be viewed by the user Format: `date` Max length: `10` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-description) string Description of the statement [links](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-links) \[object\] The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array [href](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-links-href) required, string The resource URL Format: `uri-reference` [action](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-links-action) string The HTTP method to use for the request Possible values: `GET`, `POST`, `PATCH`, `DELETE`, `PUT` [rel](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-links-rel) string The relation of this link to its containing entity, as defined by the [IETF RFC5988](https://datatracker.ietf.org/doc/html/rfc5988) [types](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-links-types) \[string\] The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type Possible values: `application/pdf`, `image/gif`, `image/jpeg`, `image/tiff`, `image/png`, `application/json` [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-response-statements-status) string Availability status of statement Possible values: `AVAILABLE`, `PROCESSING`, `FAILED` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T", "total": 3 }, "statements": [ { "accountId": "10001", "statementId": "20001", "statementDate": "2024-01-15", "description": "January 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20001", "rel": "self", "action": "GET", "types": [ "application/pdf" ] }, { "href": "/accounts/10001/statements/20001/download", "rel": "download", "action": "GET", "types": [ "application/pdf" ] } ], "status": "AVAILABLE" }, { "accountId": "10001", "statementId": "20002", "statementDate": "2024-02-15", "description": "February 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20002", "rel": "self", "action": "GET", "types": [ "application/pdf" ] } ], "status": "PROCESSING" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  #### Get account statement  Get account statement PDF **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-{statementid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-statements-{statementid}-request-statementId) string Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response Max length: `256` In: `path` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts/{accountId}/statements/{statementId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return a raw binary PDF statement file. ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-response-page-totalElements) integer Total number of elements [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "depositTransaction": { "checkNumber": 1234, "payee": "ACME llc", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 } }, { "depositTransaction": { "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 } }, { "depositTransaction": { "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-organization.plaid.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-page-totalElements) integer Total number of elements [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * US\_FEDWIRE: Fedwire Funds Service * US\_RTP: US Real Time Payments System Possible values: `US_ACH`, `US_FEDWIRE`, `US_CHIPS`, `US_RTP`, `CA_ACSS`, `CA_LVTS` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following accounts types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2, "holdings": [ { "securityId": "123456789", "securityIdType": "CUSIP", "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99, "interestRateType": "FIXED" } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Commercial account descriptor  A commercial account. For example, a business deposit account. The `accountType` field for commercial accounts may be set to any of the [account types](https://plaid.com#commercial-account-types) listed below **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#CommercialAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `COMMERCIALDEPOSIT`, `COMMERCIALINVESTMENT`, `COMMERCIALLOAN`, `COMMERCIALLINEOFCREDIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "COMMERCIALLOAN" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "5921", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | | `RESTRICTED` | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Commercial account types  The `accountType` field for accounts may be set to any of the following: | Account type | Description | | --- | --- | | `COMMERCIALDEPOSIT` | A deposit account for commercial customers, for example a business trust account | | `COMMERCIALLOAN` | A preset borrowing limit that can be used at any time | | `COMMERCIALLINEOFCREDIT` | An account with a preset borrowing limit that can be used at any time | | `COMMERCIALINVESTMENT` | Investment Account for Commercial Customers. e.g. Commercial Brokerage Account | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CUSIP`, `ISIN`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. * `FEE`: Fee charge. For example, a late payment fee. * `INTEREST`: Interest charge. * `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). * `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. * `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. * `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. * `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `PURCHASE`, `WITHDRAWAL` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md#LocTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "transactionId": "someLongTermUniqueIDString", "referenceTransactionId": "someLongTermUniqueIDString", "postedTimestamp": "2021-07-15T14:46:41.375Z", "transactionTimestamp": "2021-07-15T14:46:41.375Z", "foreignCurrency": "CAD" } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, but rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, but rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 6.0 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v6.0 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountidstatements) | Get account statements | | [/accounts/{accountId}/statements/{statementId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountidstatementsstatementid) | Get account statement PDF | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | | [/accounts/{accountId}/asset-transfer-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accountsaccountidasset-transfer-networks) | Get asset transfer networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `PRIMARY_JOINT_TENANTS`, `SECONDARY`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SECONDARY_JOINT_TENANTS`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-response-page-totalElements) integer Total number of elements [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [commercialAccount](https://plaid.com#commercial-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investment account](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOAN_ACCOUNT", "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOC_ACCOUNT", "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#loan-account) ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements  #### Search for statements  Get account statements. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements?startTime=2022-04-01&endTime=2022-04-30' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-page-totalElements) integer Total number of elements [statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements) required, \[object\] An array of statements, each with its own HATEOAS link to retrieve the account statement [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-accountId) string Corresponds to `accountId` in Account entity Max length: `256` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-statementId) string Long-term persistent identity of the statement. This identity must be unique within your organization Max length: `256` [statementDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-statementDate) string The date the statement becomes available to be viewed by the user Format: `date` Max length: `10` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-description) string Description of the statement [links](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-links) \[object\] The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array [href](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-links-href) required, string The resource URL Format: `uri-reference` [action](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-links-action) string The HTTP method to use for the request Possible values: `GET`, `POST`, `PATCH`, `DELETE`, `PUT` [rel](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-links-rel) string The relation of this link to its containing entity, as defined by the [IETF RFC5988](https://datatracker.ietf.org/doc/html/rfc5988) [types](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-links-types) \[string\] The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type Possible values: `application/pdf`, `image/gif`, `image/jpeg`, `image/tiff`, `image/png`, `application/json` [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-response-statements-status) string Availability status of statement Possible values: `AVAILABLE`, `PROCESSING`, `FAILED` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T", "total": 3 }, "statements": [ { "accountId": "10001", "statementId": "20001", "statementDate": "2024-01-15", "description": "January 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20001", "rel": "self", "action": "GET", "types": [ "application/pdf" ] }, { "href": "/accounts/10001/statements/20001/download", "rel": "download", "action": "GET", "types": [ "application/pdf" ] } ], "status": "AVAILABLE" }, { "accountId": "10001", "statementId": "20002", "statementDate": "2024-02-15", "description": "February 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20002", "rel": "self", "action": "GET", "types": [ "application/pdf" ] } ], "status": "PROCESSING" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  #### Get account statement  Get account statement PDF **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-{statementid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-statements-{statementid}-request-statementId) string Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements/{statementId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return a raw binary PDF statement file. ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-response-page-totalElements) integer Total number of elements [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "accountCategory": "DEPOSIT_ACCOUNT", "checkNumber": 1234, "payee": "ACME LLC", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-page-totalElements) integer Total number of elements [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * US\_FEDNOW: Federal Reserve Instant Payment System * US\_FEDWIRE: Fedwire Funds Service * US\_RTP: US Real Time Payments System Possible values: `CA_ACSS`, `CA_LVTS`, `US_ACH`, `US_CHIPS`, `US_FEDNOW`, `US_FEDWIRE`, `US_RTP` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/asset-transfer-networks  #### Get asset transfer details for this account  Get asset transfer networks supported by an account. For example, Automated Customer Account Transfer Service (ACATS). For more information about how Plaid uses this information, see the [Plaid Investments Move API](https://plaid.com/docs/api/products/investments-move/index.html.md#investmentsauthget) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/asset-transfer-networks?limit=25' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [assetTransferNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks) required, \[object\] A paginated array of asset transfer networks for the account [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifier) required, string The number used to identify the account within the asset transfer network. If identifierType is ACCOUNT_NUMBER, this is the account number; if identifierType is TOKENIZED_ACCOUNT_NUMBER, this is a tokenized account number_ [identifierType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifierType) string The type of identifier used to identify the account in the payment network Possible values: `ACCOUNT_NUMBER`, `TOKENIZED_ACCOUNT_NUMBER` [institutionName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionName) string The name of the institution holding the account [institutionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionId) required, string Institution identifier used by the asset transfer network ie. the Depository Trust and Clearing Corporation code for the institution holding the account [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-type) required, string The type of asset transfer Possible values: `CA_ATON`, `US_ACATS`, `US_DTC` [jointAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-jointAccount) boolean Whether this account has joint owners Response Object ```json { "assetTransferNetworks": [ { "identifier": "23348817826", "identifierType": "ACCOUNT_NUMBER", "institutionName": "First Plaidypus Bank", "institutionId": "FPB", "type": "US_ACATS", "jointAccount": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following account types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1832.11, "availableBalance": 1832.11 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityIds](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-securityIds) \[object\] Array of security identifiers [id](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-securityIds-id) string Value for a unique identifier Max length: `256` [idType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-securityIds-idType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 8302.18, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 3702.19, "holdings": [ { "securityIds": [ { "id": "123456789", "idType": "CUSIP" } ], "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestPaidYearToDate": 403.04, "interestRate": 6.99, "interestRateType": "FIXED" } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "creditLine": 2, "availableCredit": 8302.73, "nextPaymentAmount": 1832.11, "nextPaymentDate": "2021-07-15", "principalBalance": 132.28, "currentBalance": 892.1, "minimumPaymentAmount": 190.32, "lastPaymentAmount": 2852.91, "lastPaymentDate": "2021-07-15", "pastDueAmount": 0, "lastStmtBalance": 5393.81, "lastStmtDate": "2021-07-15", "purchasesApr": 0, "advancesApr": 0 } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `ANNUITY_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "ANNUITY_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Commercial account descriptor  A commercial account. For example, a business deposit account. The `accountType` field for commercial accounts may be set to any of the [account types](https://plaid.com#commercial-account-types) listed below **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `COMMERCIAL_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#CommercialAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `COMMERCIALDEPOSIT`, `COMMERCIALINVESTMENT`, `COMMERCIALLOAN`, `COMMERCIALLINEOFCREDIT` API Object ```json { "accountCategory": "COMMERCIAL_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "COMMERCIALLOAN" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INSURANCE_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountCategory": "INSURANCE_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | | `RESTRICTED` | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Commercial account types  The `accountType` field for accounts may be set to any of the following: | Account type | Description | | --- | --- | | `COMMERCIALDEPOSIT` | A deposit account for commercial customers, for example a business trust account | | `COMMERCIALLOAN` | A preset borrowing limit that can be used at any time | | `COMMERCIALLINEOFCREDIT` | An account with a preset borrowing limit that can be used at any time | | `COMMERCIALINVESTMENT` | Investment Account for Commercial Customers. e.g. Commercial Brokerage Account | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "ATM deposit", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 38.9 } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Share purchase", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 428.08, "fees": 4.28, "transactionType": "PURCHASED" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. * `FEE`: Fee charge. For example, a late payment fee. * `INTEREST`: Interest charge. * `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). * `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. * `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. * `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. * `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Monthly loan payment-minimum due", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 1638.83 } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL`, `PURCHASE` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md#LineOfCreditTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "LOC_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Recurring payment", "debitCreditMemo": "MEMO", "status": "AUTHORIZATION", "amount": 38.9 } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 6.1 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v6.1 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidstatements) | Get account statements | | [/accounts/{accountId}/statements/{statementId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidstatementsstatementid) | Get account statement PDF | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | | [/accounts/{accountId}/asset-transfer-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accountsaccountidasset-transfer-networks) | Get asset transfer networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `PRIMARY_JOINT_TENANTS`, `SECONDARY`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SECONDARY_JOINT_TENANTS`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-response-page-totalElements) integer Total number of elements [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [commercialAccount](https://plaid.com#commercial-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investment account](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOAN_ACCOUNT", "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOC_ACCOUNT", "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements  #### Search for statements  Get account statements. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements?startTime=2022-04-01&endTime=2022-04-30' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-page-totalElements) integer Total number of elements [statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements) required, \[object\] An array of statements, each with its own HATEOAS link to retrieve the account statement [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-accountId) string Corresponds to `accountId` in Account entity Max length: `256` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-statementId) string Long-term persistent identity of the statement. This identity must be unique within your organization Max length: `256` [statementDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-statementDate) string The date the statement becomes available to be viewed by the user Format: `date` Max length: `10` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-description) string Description of the statement [links](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-links) \[object\] The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array [href](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-links-href) required, string The resource URL Format: `uri-reference` [action](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-links-action) string The HTTP method to use for the request Possible values: `GET`, `POST`, `PATCH`, `DELETE`, `PUT` [rel](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-links-rel) string The relation of this link to its containing entity, as defined by the [IETF RFC5988](https://datatracker.ietf.org/doc/html/rfc5988) [types](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-links-types) \[string\] The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type Possible values: `application/pdf`, `image/gif`, `image/jpeg`, `image/tiff`, `image/png`, `application/json` [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-response-statements-status) string Availability status of statement Possible values: `AVAILABLE`, `PROCESSING`, `FAILED` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T", "total": 3 }, "statements": [ { "accountId": "10001", "statementId": "20001", "statementDate": "2024-01-15", "description": "January 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20001", "rel": "self", "action": "GET", "types": [ "application/pdf" ] }, { "href": "/accounts/10001/statements/20001/download", "rel": "download", "action": "GET", "types": [ "application/pdf" ] } ], "status": "AVAILABLE" }, { "accountId": "10001", "statementId": "20002", "statementDate": "2024-02-15", "description": "February 2024 Monthly Statement", "links": [ { "href": "/accounts/10001/statements/20002", "rel": "self", "action": "GET", "types": [ "application/pdf" ] } ], "status": "PROCESSING" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  #### Get account statement  Get account statement PDF **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-{statementid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-statements-{statementid}-request-statementId) string Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements/{statementId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return a raw binary PDF statement file. ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-response-page-totalElements) integer Total number of elements [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "accountCategory": "DEPOSIT_ACCOUNT", "checkNumber": 1234, "payee": "ACME LLC", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [totalElements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-page-totalElements) integer Total number of elements [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System _CA\_LVTS: Large-Value Transfer System_ US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) _US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks)_ US\_FEDNOW: Federal Reserve Instant Payment System _US\_FEDWIRE: Fedwire Funds Service_ US\_RTP: US Real Time Payments System Possible values: `CA_ACSS`, `CA_LVTS`, `US_ACH`, `US_CHIPS`, `US_FEDNOW`, `US_FEDWIRE`, `US_RTP` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/asset-transfer-networks  #### Get asset transfer details for this account  Get asset transfer networks supported by an account. For example, Automated Customer Account Transfer Service (ACATS). For more information about how Plaid uses this information, see the [Plaid Investments Move API](https://plaid.com/docs/api/products/investments-move/index.html.md#investmentsauthget) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/asset-transfer-networks?limit=25' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [assetTransferNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks) required, \[object\] A paginated array of asset transfer networks for the account [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifier) required, string The number used to identify the account within the asset transfer network. If identifierType is ACCOUNT_NUMBER, this is the account number; if identifierType is TOKENIZED_ACCOUNT_NUMBER, this is a tokenized account number_ [identifierType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifierType) string The type of identifier used to identify the account in the payment network Possible values: `ACCOUNT_NUMBER`, `TOKENIZED_ACCOUNT_NUMBER` [institutionName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionName) string The name of the institution holding the account [institutionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionId) required, string Institution identifier used by the asset transfer network ie. the Depository Trust and Clearing Corporation code for the institution holding the account [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-type) required, string The type of asset transfer Possible values: `CA_ATON`, `US_ACATS`, `US_DTC` [jointAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-jointAccount) boolean Whether this account has joint owners Response Object ```json { "assetTransferNetworks": [ { "identifier": "23348817826", "identifierType": "ACCOUNT_NUMBER", "institutionName": "First Plaidypus Bank", "institutionId": "FPB", "type": "US_ACATS", "jointAccount": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following account types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityIds](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-securityIds) \[object\] Array of security identifiers [id](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-securityIds-id) string Value for a unique identifier Max length: `256` [idType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-securityIds-idType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2, "holdings": [ { "securityIds": [ { "id": "123456789", "idType": "CUSIP" } ], "holdingName": "Apple Inc.", "holdingType": "STOCK", "holdingSubType": "CASH", "symbol": "AAPL", "purchasedPrice": 150, "currentUnitPrice": 175, "currentUnitPriceDate": "2023-10-01", "units": 1, "marketValue": 1750, "cashAccount": true, "currency": { "currencyCode": "USD" }, "fiAttributes": [ { "name": "isCashEquivalent", "value": "false" } ] } ] } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: _`principalBalance`_ `interestRate` _`interestRateType` Optional fields for `STUDENTLOAN` accounts:_ `interestPaidYearToDate` _`lastPaymentAmount`_ `lastPaymentDate` _`maturityDate`_ `nextPaymentDate` _`originalPrincipal`_ `originatingDate` Required for `MORTGAGE` accounts: _`accountNumber` Optional fields for `MORTGAGE` accounts:_ `escrowBalance` _`interestPaidYearToDate`_ `lastPaymentAmount` _`lastPaymentDate`_ `loanTerm` _`maturityDate`_ `nextPaymentAmount` _`nextPaymentDate`_ `originalPrincipal` _`originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00`_ **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99 } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` _`creditLine`_ `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` _`lastPaymentAmount`_ `lastPaymentDate` _`lastStmtBalance`_ `lastStmtDate` _`minimumPaymentAmount`_ `nextPaymentDate` _`purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`_ **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. - `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. - `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `ANNUITY_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "ANNUITY_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Commercial account descriptor  A commercial account. For example, a business deposit account. The `accountType` field for commercial accounts may be set to any of the [account types](https://plaid.com#commercial-account-types) listed below **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `COMMERCIAL_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#CommercialAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `COMMERCIALDEPOSIT`, `COMMERCIALINVESTMENT`, `COMMERCIALLOAN`, `COMMERCIALLINEOFCREDIT` API Object ```json { "accountCategory": "COMMERCIAL_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "COMMERCIALLOAN" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. - `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. - `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. - `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. - `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. - `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. - `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. - `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. - `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. - `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INSURANCE_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountCategory": "INSURANCE_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. - `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. - `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. - `529`: A tax-advantaged savings plan designed to help pay for education. - `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. - `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. - `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. - `DIGITALASSET`: An account containing digital assets. - `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. - `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. - `INSTITUTIONALTRUST`: An institutional trust account. - `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. - `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. - `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. - `OTHERINVESTMENT`: Use when none of the listed enums apply. - `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. - `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. - `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. - `TAXABLE`: A taxable investment account. - `TDA`: TreasuryDirect Account. - `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. - `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. - `UGMA`: Uniform Gifts to Minors Act account. - `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFEDPLAN`, `NONQUALIFIEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. - `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. - `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. - `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. - `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. - `MILITARYLOAN`: A military loan. - `MORTGAGE`: A type of loan you can use to buy or refinance a home. - `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. - `SMBLOAN`: A small/medium business loan. - `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. - `CHARGE`: An account to which goods and services may be charged on credit. - `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. - `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. - `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | | `RESTRICTED` | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Commercial account types  The `accountType` field for accounts may be set to any of the following: | Account type | Description | | --- | --- | | `COMMERCIALDEPOSIT` | A deposit account for commercial customers, for example a business trust account | | `COMMERCIALLOAN` | A preset borrowing limit that can be used at any time | | `COMMERCIALLINEOFCREDIT` | An account with a preset borrowing limit that can be used at any time | | `COMMERCIALINVESTMENT` | Investment Account for Commercial Customers. e.g. Commercial Brokerage Account | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): - `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) - `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) - `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. _`AUTHORIZATION`_ `MEMO` - A pending transaction to be completed at the end of this day _`PENDING` - A pending transaction_ `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "ATM deposit", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 38.9 } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` _`transactionType`_ If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` _`units`_ `symbol` OR both `securityId` and `securityIdType` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): - `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) - `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) - `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. _`AUTHORIZATION`_ `MEMO` - A pending transaction to be completed at the end of this day _`PENDING` - A pending transaction_ `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee _ATM - cash_ CASH - cash _CHECK - cash_ CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. _CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum._ CONTRIBUTION - buy (if transaction involves a security) or cash _DEP - cash_ DEPOSIT - cash _DIRECTDEBIT - cash_ DIRECTDEP - cash _DIV - cash_ DIVIDEND - cash _DIVIDENDREINVEST - buy_ EXPENSE - cash _FEE - fee_ INCOME - cash _INTEREST - cash_ INVEXPENSE - cash _JRNLFUND - transfer_ JRNLSEC - transfer _MARGININTEREST - cash_ OPTIONEXERCISE - transfer _OPTIONEXPIRATION - transfer_ OTHER - cash - (unclassified) _PAYMENT - cash_ POS - cash _PURCHASED - buy_ PURCHASEDTOCOVER - buy _PURCHASETOCLOSE - buy_ PURCHASETOOPEN - buy _REINVESTOFINCOME - buy_ REPEATPMT - cash _RETURNOFCAPITAL - cash_ SOLD - sell _SOLDTOCLOSE - sell_ SOLDTOOPEN - sell _SPLIT - transfer_ SRVCHG - fee _TRANSFER - transfer_ XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Share purchase", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 428.08, "fees": 4.28, "transactionType": "PURCHASED" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): - `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) - `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) - `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. _`AUTHORIZATION`_ `MEMO` - A pending transaction to be completed at the end of this day _`PENDING` - A pending transaction_ `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. - `FEE`: Fee charge. For example, a late payment fee. - `INTEREST`: Interest charge. - `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). - `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. - `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. - `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. - `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Monthly loan payment-minimum due", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 1638.83 } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): - `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) - `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) - `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. _`AUTHORIZATION`_ `MEMO` - A pending transaction to be completed at the end of this day _`PENDING` - A pending transaction_ `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-foreignCurrency) string Currency, fund and precious metal codes as of Jan. 1, 2023 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL`, `PURCHASE` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md#LineOfCreditTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "LOC_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Recurring payment", "debitCreditMemo": "CREDIT", "status": "AUTHORIZATION", "amount": 38.9 } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 6.2 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v6.2 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountidstatements) | Get account statements | | [/accounts/{accountId}/statements/{statementId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountidstatementsstatementid) | Get account statement PDF | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | | [/accounts/{accountId}/asset-transfer-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accountsaccountidasset-transfer-networks) | Get asset transfer networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `PRIMARY_JOINT_TENANTS`, `SECONDARY`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SECONDARY_JOINT_TENANTS`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-telephones-type) required, string Telephone number type Possible values: `HOME`, `BUSINESS`, `CELL`, `FAX` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Max length: `3` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-response-page-nextOffset) string Opaque offset identifier [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [commercialAccount](https://plaid.com#commercial-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [digitalWallet](https://plaid.com#digital-wallet-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investment account](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOAN_ACCOUNT", "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOC_ACCOUNT", "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements  #### Search for statements  Get account statements. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements?startTime=2022-04-01&endTime=2022-04-30' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-page-nextOffset) string Opaque offset identifier [statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements) required, \[object\] An array of statements, each with its own HATEOAS link to retrieve the account statement [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-accountId) string Corresponds to `accountId` in Account entity Max length: `256` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-statementId) string Long-term persistent identity of the statement. This identity must be unique within your organization Max length: `256` [statementDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-statementDate) string The date the statement becomes available to be viewed by the user Format: `date` Max length: `10` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-description) string Description of the statement [links](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-links) \[object\] The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array [href](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-links-href) required, string The resource URL Format: `uri-reference` [action](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-links-action) string The HTTP method to use for the request Possible values: `GET`, `POST`, `PATCH`, `DELETE`, `PUT` [rel](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-links-rel) string The relation of this link to its containing entity, as defined by the [IETF RFC5988](https://datatracker.ietf.org/doc/html/rfc5988) [types](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-links-types) \[string\] The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type Possible values: `application/pdf`, `image/gif`, `image/jpeg`, `image/tiff`, `image/png`, `application/json` [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-response-statements-status) string Availability status of statement Response Object ```json { "page": { "nextOffset": "B47D80MVP23T", "total": 3 }, "statements": [ { "accountId": "10001", "statementId": "20001", "links": [ { "href": "/accounts/1111/statements?offSet=2&limit=10" } ] } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  #### Get account statement  Get account statement PDF **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-{statementid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-statements-{statementid}-request-statementId) string Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements/{statementId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return a raw binary PDF statement file. ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque offset identifier [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "accountCategory": "DEPOSIT_ACCOUNT", "transactionType": "CHECK", "checkNumber": 1234, "payee": "ACME LLC", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionType": "ADJUSTMENT", "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionType": "ATMDEPOSIT", "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque offset identifier [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * US\_FEDNOW: Federal Reserve Instant Payment System * US\_FEDWIRE: Fedwire Funds Service * US\_RTP: US Real Time Payments System Possible values: `CA_ACSS`, `CA_LVTS`, `US_ACH`, `US_CHIPS`, `US_FEDNOW`, `US_FEDWIRE`, `US_RTP` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/asset-transfer-networks  #### Get asset transfer details for this account  Get asset transfer networks supported by an account. For example, Automated Customer Account Transfer Service (ACATS). For more information about how Plaid uses this information, see the [Plaid Investments Move API](https://plaid.com/docs/api/products/investments-move/index.html.md#investmentsauthget) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-request-offset) string An opaque ID that indicates there is at least one more page of data available. This value does not need to be numeric or have any specific pattern. If provided, Plaid will use this value to send a new request and retrieve the next page. Omitting this value indicates that there is no more data to retrieve. In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/asset-transfer-networks?limit=25' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [assetTransferNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks) required, \[object\] A paginated array of asset transfer networks for the account [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifier) required, string The number used to identify the account within the asset transfer network. If identifierType is ACCOUNT_NUMBER, this is the account number; if identifierType is TOKENIZED_ACCOUNT_NUMBER, this is a tokenized account number_ [identifierType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifierType) string The type of identifier used to identify the account in the payment network Possible values: `ACCOUNT_NUMBER`, `TOKENIZED_ACCOUNT_NUMBER` [institutionName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionName) string The name of the institution holding the account [institutionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionId) required, string Institution identifier used by the asset transfer network ie. the Depository Trust and Clearing Corporation code for the institution holding the account [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-type) required, string The type of asset transfer Possible values: `CA_ATON`, `US_ACATS`, `US_DTC` [jointAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-jointAccount) boolean Whether this account has joint owners Response Object ```json { "assetTransferNetworks": [ { "identifier": "23348817826", "identifierType": "ACCOUNT_NUMBER", "institutionName": "First Plaidypus Bank", "institutionId": "FPB", "type": "US_ACATS", "jointAccount": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following account types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFIEDPLAN`, `NONQUALIFEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `PREPAID`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityIds](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-securityIds) \[object\] Array of security identifiers [id](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-securityIds-id) string Value for a unique identifier Max length: `256` [idType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-securityIds-idType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2 } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99 } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-minimumPaymentAmount) number Minimum payment amount, which is due at the date specified in `nextPaymentDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-lastStmtBalance) number Last statement balance [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `ANNUITY_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "ANNUITY_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Commercial account descriptor  A commercial account. For example, a business deposit account. The `accountType` field for commercial accounts may be set to any of the [account types](https://plaid.com#commercial-account-types) listed below **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `COMMERCIAL_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#CommercialAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `COMMERCIALDEPOSIT`, `COMMERCIALINVESTMENT`, `COMMERCIALLOAN`, `COMMERCIALLINEOFCREDIT` API Object ```json { "accountCategory": "COMMERCIAL_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "COMMERCIALLOAN" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `OTHERDEPOSIT` API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INSURANCE_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountCategory": "INSURANCE_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFIEDPLAN`, `NONQUALIFEDPLAN`, `OTHERINVESTMENT`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `PREPAID`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `ROLLOVER`, `ROTH`, `SARSEP`, `SPECIFIEDPENSIONPLAN`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | | `RESTRICTED` | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Commercial account types  The `accountType` field for accounts may be set to any of the following: | Account type | Description | | --- | --- | | `COMMERCIALDEPOSIT` | A deposit account for commercial customers, for example a business trust account | | `COMMERCIALLOAN` | A preset borrowing limit that can be used at any time | | `COMMERCIALLINEOFCREDIT` | An account with a preset borrowing limit that can be used at any time | | `COMMERCIALINVESTMENT` | Investment Account for Commercial Customers. e.g. Commercial Brokerage Account | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-payee) string Payee name Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "ATM deposit", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 38.9 } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Share purchase", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 428.08, "fees": 4.28, "transactionType": "PURCHASED" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. * `FEE`: Fee charge. For example, a late payment fee. * `INTEREST`: Interest charge. * `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). * `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. * `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. * `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. * `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Monthly loan payment-minimum due", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 1638.83 } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL`, `PURCHASE` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md#LineOfCreditTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "LOC_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Recurring payment", "debitCreditMemo": "CREDIT", "status": "AUTHORIZATION", "amount": 38.9 } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # 6.3 - Plaid Core Exchange API Reference | Plaid Docs Core Exchange v6.3 API Reference  ================================= #### Plaid Core Exchange API Reference  ### Overview  When your organization builds Core Exchange, you implement a Financial Data Exchange (FDX)-aligned API. This API handles GET HTTP requests that the Plaid network (or other data networks that you partner with) send. These requests are for information about your customers' financial accounts. Please note that this specification is subject to change as we make improvements to the product. If you have questions, please reach out to the [Plaid team](https://plaid.commailto:dataconnectivity@plaid.com) . \=\*=\*=\*= #### Endpoints  This specification contains the following endpoints: | Endpoints | | | --- | --- | | [/customers/current](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#customerscurrent) | Get the ID of the customer within the authorization scope | | [/accounts/{accountId}/contact](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountidcontact) | Get account contact information | | [/accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts) | Search and view customer accounts | | [/accounts/{accountId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountid) | Get account balances, liabilities, and other information | | [/accounts/{accountId}/statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountidstatements) | Get account statements | | [/accounts/{accountId}/statements/{statementId}](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountidstatementsstatementid) | Get account statement PDF | | [/accounts/{accountId}/transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountidtransactions) | List all account transactions | | [/accounts/{accountId}/payment-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountidpayment-networks) | Get payment networks supported by an account | | [/accounts/{accountId}/asset-transfer-networks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accountsaccountidasset-transfer-networks) | Get asset transfer networks supported by an account | \=\*=\*=\*= #### Plaid integration and interoperability  The Core Exchange specifications describe the subset of FDX endpoints required by Plaid, as well as the subset of FDX information Plaid consumes from each endpoint. Plaid takes the following approach to documenting these subsets: * **ENUMS**: In cases where an endpoint describes FDX enums that Plaid doesn't consume, the specifications note the enums Plaid consumes, but refrains from removing unused enums. This enables your organization to more easily integrate your Core Exchange implementation with other data networks. For example, FDX defines many account type enums, so the specifications retain these enums but notes which account type enums Plaid consumes in the `GET \accounts\{id}` endpoint reference. * **SCHEMAS**: In cases where an endpoint describes FDX schemas that Plaid doesn't consume, the specification _omits_ the schema. \=\*=\*=\*= #### FDX compliance  The Core Exchange API specifications are a subset of the Financial Data Exchange (FDX) API specification, the usage thereof (or any part thereof) constitutes acceptance of the FDX API License Agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The FDX API specification is distributed exclusively by FDX. Modifications to eliminate required or conditional elements prescribed in the FDX API Certification Use Cases will render any implementations using said modifications non-conformant with the FDX API Certification Use Cases. Please note that building the FDX-compliant Core Exchange API and permitting Plaid to call your build constitutes acceptance of the FDX end user license agreement, which can be found at [https://financialdataexchange.org/](https://financialdataexchange.org/) . The full FDX API standard specification is distributed exclusively by FDX. \=\*=\*=\*= #### Download the specification  To view this specification and documentation as an OpenAPI YAML file, see [the public Core Exchange Github repository](https://github.com/plaid/core-exchange/tree/main/versions) . \=\*=\*=\*= #### Errors  ##### Error responses  An error entity which can be used at the API level for error responses or at the account level to indicate a problem specific to a particular account. Error responses must contain a `code` and `message`, and may optionally include a `debugMessage`. See the descriptions below: * `code`: The FDX error code: A long-term persistent identifier which can be used to trace error condition back to log information. (**Note:** This code may differ from the HTTP status code.) * `message`: End user displayable information which might help the customer diagnose an error * `debugMessage`: Message used to debug the root cause of the error. Contents should not be used in consumer's business logic. Can change at any time and should only be used for consumer to communicate with the data provider about an issue. Provider can include an error GUID in message for their use ##### Example error  The following is an example response with an HTTP status code of 409. ```json { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. ### Endpoints  \=\*=\*=\*= #### /customers/current  #### Get current authenticated customer ID  Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.comhttps://plaid.com/core-exchange/docs/authentication/index.html.md#create-an-oidc-compliant-server) (recommended) you _do not_ need to implement this endpoint. Plaid will identify the customer using the OIDC [ID token](https://openid.net/specs/openid-connect-core-1_0.html#IDToken) . If you use OAuth2 authentication, Plaid will use this endpoint as an alternate method of customer identification. **Request fields** This endpoint or method takes an empty request body. ```json curl -X GET 'https://api.your-org.com/fdx/v5/customers/current' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [customerId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#customers-current-response-customerId) required, string Long-term persistent identity of the customer. This identity must be unique within your organization. Plaid consumes this customer ID if your organization uses OAuth2 instead of OIDC to secure the API. Plaid expects your organization to issue the ID as a consistent, static, opaque, unique identifier for the user Max length: `256` Response Object ```json { "customerId": "someLongTermUniqueIDString" } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/contact  #### Get an account's contact information  Get contact information on the account. Plaid links contact information to accounts, rather than to users. Plaid consumes multiple holders and their contact information for the account, but doesn't attempt to correlate holders to their respective contact information. For more information about Plaid's identity model, see [Plaid Identity API](https://plaid.com/docs/api/products/identity/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-contact-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/contact' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  Details used to verify an account **Properties** [holders](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders) required, \[object\] Owners of the account. Note that while the [FDX specification](https://financialdataexchange.org) enables associating holders and their contact information in the full `AccountHolder` schema, Plaid doesn't consume these associations. Instead, Plaid consumes limited information for each `AccountHolder` and doesn't associate contact information such as emails, addresses, or telephone numbers to account holders. For more information about Plaid's data model for account contact information, see [Identity](https://plaid.com/docs/api/products/identity/index.html.md) Min items: `1` [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-name) required, object The name of an individual in their role as a customer. Plaid expects at least one populated name field. If any field is missing (for example, no first name), then you respond with an empty string for that field [first](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-name-first) required, string First name [middle](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-name-middle) string Middle name [last](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-name-last) required, string Last name [suffix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-name-suffix) string Generational or academic suffix, e.g. Jr., Sr., III [prefix](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-name-prefix) string Prefix, e.g. Mr., Mrs., Dr. [relationship](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-holders-relationship) string Customer's relationship to the account Possible values: `AUTHORIZED_SIGNER`, `AUTHORIZED_USER`, `BUSINESS`, `FOR_BENEFIT_OF`, `FOR_BENEFIT_OF_PRIMARY`, `FOR_BENEFIT_OF_PRIMARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SECONDARY`, `FOR_BENEFIT_OF_SECONDARY_JOINT_RESTRICTED`, `FOR_BENEFIT_OF_SOLE_OWNER_RESTRICTED`, `POWER_OF_ATTORNEY`, `PRIMARY`, `PRIMARY_BORROWER`, `PRIMARY_JOINT`, `PRIMARY_JOINT_TENANTS`, `SECONDARY`, `SECONDARY_BORROWER`, `SECONDARY_JOINT`, `SECONDARY_JOINT_TENANTS`, `SOLE_OWNER`, `TRUSTEE`, `UNIFORM_TRANSFER_TO_MINOR` [emails](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-emails) required, \[string\] Email addresses associated with the account Min items: `1` [addresses](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses) required, \[object\] Physical mail addresses associated with the account Min items: `1` [line1](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-line1) required, string Address line 1 Max length: `64` [line2](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-line2) string Address line 2 Max length: `64` [line3](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-line3) string Address line 3 Max length: `64` [city](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-city) required, string City Max length: `64` [region](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-region) string State or province Max length: `64` [postalCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-postalCode) string Postal code Max length: `10` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-country) required, string Country code Possible values: `AD`, `AE`, `AF`, `AG`, `AI`, `AL`, `AM`, `AO`, `AQ`, `AR`, `AS`, `AT`, `AU`, `AW`, `AX`, `AZ`, `BA`, `BB`, `BD`, `BE`, `BF`, `BG`, `BH`, `BI`, `BJ`, `BL`, `BM`, `BN`, `BO`, `BQ`, `BR`, `BS`, `BT`, `BV`, `BW`, `BY`, `BZ`, `CA`, `CC`, `CD`, `CF`, `CG`, `CH`, `CI`, `CK`, `CL`, `CM`, `CN`, `CO`, `CR`, `CU`, `CV`, `CW`, `CX`, `CY`, `CZ`, `DE`, `DJ`, `DK`, `DM`, `DO`, `DZ`, `EC`, `EE`, `EG`, `EH`, `ER`, `ES`, `ET`, `FI`, `FJ`, `FK`, `FM`, `FO`, `FR`, `GA`, `GB`, `GD`, `GE`, `GF`, `GG`, `GH`, `GI`, `GL`, `GM`, `GN`, `GP`, `GQ`, `GR`, `GS`, `GT`, `GU`, `GW`, `GY`, `HK`, `HM`, `HN`, `HR`, `HT`, `HU`, `ID`, `IE`, `IL`, `IM`, `IN`, `IO`, `IQ`, `IR`, `IS`, `IT`, `JE`, `JM`, `JO`, `JP`, `KE`, `KG`, `KH`, `KI`, `KM`, `KN`, `KP`, `KR`, `KW`, `KY`, `KZ`, `LA`, `LB`, `LC`, `LI`, `LK`, `LR`, `LS`, `LT`, `LU`, `LV`, `LY`, `MA`, `MC`, `MD`, `ME`, `MF`, `MG`, `MH`, `MK`, `ML`, `MM`, `MN`, `MO`, `MP`, `MQ`, `MR`, `MS`, `MT`, `MU`, `MV`, `MW`, `MX`, `MY`, `MZ`, `NA`, `NC`, `NE`, `NF`, `NG`, `NI`, `NL`, `NO`, `NP`, `NR`, `NU`, `NZ`, `OM`, `PA`, `PE`, `PF`, `PG`, `PH`, `PK`, `PL`, `PM`, `PN`, `PR`, `PS`, `PT`, `PW`, `PY`, `QA`, `RE`, `RO`, `RS`, `RU`, `RW`, `SA`, `SB`, `SC`, `SD`, `SE`, `SG`, `SH`, `SI`, `SJ`, `SK`, `SL`, `SM`, `SN`, `SO`, `SR`, `SS`, `ST`, `SV`, `SX`, `SY`, `SZ`, `TC`, `TD`, `TF`, `TG`, `TH`, `TJ`, `TK`, `TL`, `TM`, `TN`, `TO`, `TR`, `TT`, `TV`, `TW`, `TZ`, `UA`, `UG`, `UM`, `US`, `UY`, `UZ`, `VA`, `VC`, `VE`, `VG`, `VI`, `VN`, `VU`, `WF`, `WS`, `YE`, `YT`, `ZA`, `ZM`, `ZW` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-type) string Type of address location. One of BUSINESS, DELIVERY, HOME, MAILING Possible values: `BUSINESS`, `DELIVERY`, `HOME`, `MAILING` [primary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-addresses-primary) boolean Whether this is the primary and first address to use for contact [telephones](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-telephones) required, \[object\] Telephone numbers associated with the account Min items: `1` [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-telephones-type) required, string Purpose of the phone number: HOME, BUSINESS, PERSONAL, FAX, or BOTH. BOTH indicates number is used for both HOME and BUSINESS purposes. `CELL` value is deprecated in v6.3, replaced as a `network` value Possible values: `BOTH`, `BUSINESS`, `CELL`, `FAX`, `HOME`, `PERSONAL` [country](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-telephones-country) string Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [Listofcountrycallingcodes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) Min length: `1` Max length: `4` Pattern: `^\+?[1-9][0-9]{0,2}$` [number](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-telephones-number) required, string Telephone subscriber number defined by ITU-T recommendation E.164 Max length: `15` Pattern: `\d+` [network](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-telephones-network) string The network technology used for this telephone. One of CELLULAR, LANDLINE, PAGER, SATELLITE, or VOIP Possible values: `CELLULAR`, `LANDLINE`, `PAGER`, `SATELLITE`, `VOIP` [primary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AccountContact-telephones-primary) boolean Whether this is the primary and first telephone number to call API Object ```json { "holders": [ { "relationship": "SECONDARY", "name": { "first": "Ernest", "middle": "Miller", "last": "Hemingway", "suffix": "IV" } }, { "relationship": "PRIMARY_JOINT", "name": { "first": "Maya", "last": "Angelou", "middle": "Annie" } } ], "emails": [ "ernest.m.hemingway@domain.tld", "m.angelou@domain.tld" ], "addresses": [ { "line1": "1850 N Clark St", "line2": "Apartment 103", "city": "Chicago", "region": "IL", "postalCode": "60614", "country": "US" }, { "line1": "2014 N Main St", "city": "San Francisco", "region": "CA", "postalCode": "94105", "country": "US" } ], "telephones": [ { "type": "HOME", "country": "1", "number": "3127771926" }, { "type": "CELL", "country": "53", "number": "45915607" }, { "type": "HOME", "country": "1", "number": "4157771926" } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts  #### List all accounts  Search and view customer accounts **Request fields** [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-request-offset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release In: `query` [pageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-request-pageKey) string Opaque cursor used by the provider to send the next set of records. Pagination can be implemented per provider's preference In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts?offset=15&limit=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-response-page-nextOffset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release [nextPageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-response-page-nextPageKey) string Opaque identifier. Does not need to be numeric or have any specific pattern. Implementation specific [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-response-accounts) required, \[object\] An optionally paginated array of account descriptors. Each account descriptor is sent as a key-value pair, with the account descriptor object as the value and the account type as the key. Accepted keys include: [annuityAccount](https://plaid.com#annuity-account-descriptor) , [commercialAccount](https://plaid.com#commercial-account-descriptor) , [depositAccount](https://plaid.com#deposit-account-descriptor) , [digitalWallet](https://plaid.com#digital-wallet-descriptor) , [investmentAccount](https://plaid.com#investment-account-descriptor) , [locAccount](https://plaid.com#line-of-credit-account-descriptor) , [loanAccount](https://plaid.com#loan-account-descriptor) , [investment account](https://plaid.com#investment-account-descriptor) , and [insuranceAccount](https://plaid.com#insurance-account-descriptor) . Min items: `1` Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "accounts": [ { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "depositAccount0000001", "accountType": "CHECKING", "accountNumberDisplay": "5820", "productName": "Checking", "nickname": "Main Checking", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOAN_ACCOUNT", "accountId": "loanAccount0000001", "accountType": "LOAN", "accountNumberDisplay": "4704", "productName": "Loan", "nickname": "Primary Loan", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "LOC_ACCOUNT", "accountId": "locAccount0000001", "accountType": "LINEOFCREDIT", "accountNumberDisplay": "8200", "productName": "Line of Credit", "nickname": "First plaidypus LOC", "status": "OPEN", "currency": { "currencyCode": "USD" } }, { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "investmentAccount0000001", "accountType": "TAXABLE", "accountNumberDisplay": "1050", "productName": "Brokerage Account", "nickname": "First plaidypus Brokerage", "status": "OPEN", "currency": { "currencyCode": "USD" } } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}  #### Get detailed information for a specific account  Get account balances, liabilities, and other information. Plaid uses this endpoint to get balances for [deposit accounts](https://plaid.com#deposit-account) , get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` [loan accounts](https://plaid.com#loan-account) , and get balances and holdings for investment accounts for [investment accounts](https://plaid.com#investment-account) . See [Plaid Balance API](https://plaid.com/docs/api/products/balance/index.html.md) , [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) , and [Plaid Investments API](https://plaid.com/docs/investments/index.html.md) for more information on how Plaid uses this information. **Info**: Plaid does not use `/accounts/{accountId}` for annuity accounts, commercial accounts, or insurance accounts. However, these accounts are still included in the `/accounts` list, so that they are discoverable by users. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return one of the following type of [accounts](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts) : * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#investment-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#line-of-credit-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#loan-account) Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `HIGHINTERESTSAVINGSACCOUNT`, `FIRSTHOMESAVINGSACCOUNT`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements  #### Search for statements  Get account statements. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-offset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release In: `query` [pageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-pageKey) string Opaque cursor used by the provider to send the next set of records. Pagination can be implemented per provider's preference In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Will support filtering by time in a future major release. To support filtering by date only, see StartDateQuery Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Will support filtering by time in a future major release. To support filtering by date only, see EndDateQuery Format: `date` Max length: `10` In: `query` [startDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-startDate) string Start date for use in retrieval of elements (ISO 8601 format). Provider to define the date ranges and behaviors they will support. Example of defined behavior: - Recipients need to either specify both start date and end date or neither. If both start date and end date are not specified; default provided. Default range: 7 Days of past data. (Today's date - 6 days both dates are inclusive) \- Recipient can specify the same start date and end date. The returned data will reflect transactions from that date \- If start date and end date both are specified and if start date is later than end date, return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec \- If start Date and end date both are specified and if start date is older than what the Data Provider supports, then the Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec. Example: If today is 5/14/2024 and the DP supports 24 months, the start date should be 5/14/2022 and newer; it should not be 5/13/2022 or older \- If start date is specified but end date is not specified or vice versa; Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec Format: `date` Max length: `10` In: `query` [endDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-request-endDate) string End date for use in retrieval of elements (ISO 8601 format). Provider to define the date ranges and behaviors they will support. Example of defined behavior: - Recipients need to either specify both start date and end date or neither. If both start date and end date are not specified; default provided. Default range: 7 Days of past data. (Today's date - 6 days both dates are inclusive) \- Recipient can specify the same start date and end date. The returned data will reflect transactions from that date - If start date and end date both are specified and if start date is later than end date, return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec \- If start Date and end date both are specified and if start date is older than what the Data Provider supports, then the Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec. Example: If today is 5/14/2024 and the DP supports 24 months, the start date should be 5/14/2022 and newer; it should not be 5/13/2022 or older \- If start date is specified but end date is not specified or vice versa; Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec \- If end date is today's date, the most recent transactions from the time the request is received will be returned Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements?startTime=2022-04-01&endTime=2022-04-30' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-page-nextOffset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release [nextPageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-page-nextPageKey) string Opaque identifier. Does not need to be numeric or have any specific pattern. Implementation specific [statements](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements) required, \[object\] An array of statements, each with its own HATEOAS link to retrieve the account statement [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-accountId) string Corresponds to `accountId` in Account entity Max length: `256` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-statementId) string Long-term persistent identity of the statement. This identity must be unique within your organization Max length: `256` [statementDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-statementDate) string The date the statement becomes available to be viewed by the user Format: `date` Max length: `10` [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-description) string Description of the statement [links](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-links) \[object\] The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array [href](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-links-href) required, string The resource URL Format: `uri-reference` [action](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-links-action) string The HTTP method to use for the request Possible values: `GET`, `POST`, `PATCH`, `DELETE`, `PUT` [rel](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-links-rel) string The relation of this link to its containing entity, as defined by the [IETF RFC5988](https://datatracker.ietf.org/doc/html/rfc5988) [types](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-links-types) \[string\] The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type Possible values: `application/pdf`, `image/gif`, `image/jpeg`, `image/tiff`, `image/png`, `application/json` [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-response-statements-status) string Availability status of statement Response Object ```json { "page": { "nextOffset": "B47D80MVP23T", "total": 3 }, "statements": [ { "accountId": "10001", "statementId": "20001", "links": [ { "href": "/accounts/1111/statements?offSet=2&limit=10" } ] } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/statements/{statementId}  #### Get account statement  Get account statement PDF **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-{statementid}-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [statementId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-statements-{statementid}-request-statementId) string Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response Max length: `256` In: `path` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/statements/{statementId}' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  A 200 response will return a raw binary PDF statement file. ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 601 | Customer not found | A customer with the provided customer ID could not be found | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/transactions  #### Search for account transactions  List all account transactions. Plaid always queries this endpoint using a `startTime` and an `endTime`, for example, `/accounts/{accountId}/transactions?startTime=2022-01-30&endTime=2022-05-30`, and expects the time filters to be based on the `postedTimestamp`. Plaid consumes data from this endpoint only for [loan](https://plaid.com#loan-account) , [investment](https://plaid.com#investment-account) , [deposit](https://plaid.com#deposit-account) , and [line of credit](https://plaid.com#line-of-credit-account) accounts. **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-offset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release In: `query` [pageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-pageKey) string Opaque cursor used by the provider to send the next set of records. Pagination can be implemented per provider's preference In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` [startTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-startTime) string Start time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Will support filtering by time in a future major release. To support filtering by date only, see StartDateQuery Format: `date` Max length: `10` In: `query` [endTime](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-endTime) string End time for use in retrieval of elements (ISO 8601). For transactions, Plaid expects this to filter by the `postedTimestamp` Will support filtering by time in a future major release. To support filtering by date only, see EndDateQuery Format: `date` Max length: `10` In: `query` [startDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-startDate) string Start date for use in retrieval of elements (ISO 8601 format). Provider to define the date ranges and behaviors they will support. Example of defined behavior: - Recipients need to either specify both start date and end date or neither. If both start date and end date are not specified; default provided. Default range: 7 Days of past data. (Today's date - 6 days both dates are inclusive) \- Recipient can specify the same start date and end date. The returned data will reflect transactions from that date \- If start date and end date both are specified and if start date is later than end date, return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec \- If start Date and end date both are specified and if start date is older than what the Data Provider supports, then the Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec. Example: If today is 5/14/2024 and the DP supports 24 months, the start date should be 5/14/2022 and newer; it should not be 5/13/2022 or older \- If start date is specified but end date is not specified or vice versa; Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec Format: `date` Max length: `10` In: `query` [endDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-request-endDate) string End date for use in retrieval of elements (ISO 8601 format). Provider to define the date ranges and behaviors they will support. Example of defined behavior: - Recipients need to either specify both start date and end date or neither. If both start date and end date are not specified; default provided. Default range: 7 Days of past data. (Today's date - 6 days both dates are inclusive) \- Recipient can specify the same start date and end date. The returned data will reflect transactions from that date - If start date and end date both are specified and if start date is later than end date, return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec \- If start Date and end date both are specified and if start date is older than what the Data Provider supports, then the Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec. Example: If today is 5/14/2024 and the DP supports 24 months, the start date should be 5/14/2022 and newer; it should not be 5/13/2022 or older \- If start date is specified but end date is not specified or vice versa; Data Provider should return 'invalid date range' error code: 703, HTTPS 400 per the FDX spec \- If end date is today's date, the most recent transactions from the time the request is received will be returned Format: `date` Max length: `10` In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/transactions?startTime2022-11-01&limit=100' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-response-page-nextOffset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release [nextPageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-response-page-nextPageKey) string Opaque identifier. Does not need to be numeric or have any specific pattern. Implementation specific [transactions](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-transactions-response-transactions) required, array An optionally paginated array of transactions. May be any of the following: [deposit transaction](https://plaid.com#deposit-transaction) , [investment transaction](https://plaid.com#investment-transaction) , [loan transaction](https://plaid.com#loan-transaction) , [line of credit transaction](https://plaid.com#line-of-credit-transaction) Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "transactions": [ { "accountCategory": "DEPOSIT_ACCOUNT", "transactionType": "CHECK", "checkNumber": 1234, "payee": "ACME LLC", "transactionId": "depositTransaction000000001", "postedTimestamp": "2022-04-06T00:00:00.000Z", "transactionTimestamp": "2022-04-05T00:00:00.000Z", "description": "check for latest ACME invoice", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 400 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionType": "ADJUSTMENT", "transactionId": "depositTransaction000000002", "postedTimestamp": "2022-04-07T00:00:00.000Z", "transactionTimestamp": "2022-04-07T00:00:00.000Z", "description": "reconciliation/adjustment of bank statement error", "debitCreditMemo": "DEBIT", "status": "POSTED", "amount": 0.8 }, { "accountCategory": "DEPOSIT_ACCOUNT", "transactionType": "ATMDEPOSIT", "transactionId": "depositTransaction000000003", "postedTimestamp": "2022-04-08T00:00:00.000Z", "transactionTimestamp": "2022-04-08T00:00:00.000Z", "description": "ATM cash deposit location #1234", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 101.8 } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 422 | 704 | Account type not supported | The account type does not support the selected action | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/payment-networks  #### Get payment networks supported by the account  Get payment networks supported by an account, for example ACH (Automated Clearing House). For more information about how Plaid uses this information, see the [Plaid Auth API](https://plaid.com/docs/api/products/auth/index.html.md) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-request-offset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release In: `query` [pageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-request-pageKey) string Opaque cursor used by the provider to send the next set of records. Pagination can be implemented per provider's preference In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/payment-networks?offset=50' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [page](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-page) object Contains the opaque identifier, `nextOffset`, to indicate a paginated result set. [nextOffset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-page-nextOffset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release [nextPageKey](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-page-nextPageKey) string Opaque identifier. Does not need to be numeric or have any specific pattern. Implementation specific [paymentNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks) required, \[object\] Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH Min items: `1` [bankId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-bankId) required, string Bank identifier used by the payment network. Typically the 9-digit routing transit number (RTN) associated with the account number at a US institution, or the 3-digit Institution (FID) and 5-digit Transit numbers for Canadian institutions, including leading zeroes [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-identifier) required, string The number used to identify the account within the payment network. [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-type) required, string Suggested values for Payment Network Type. `US_` refers to the USA, and `CA_` refers to Canada. Possible values: * CA\_ACSS: Automated Clearing House Settlement System * CA\_LVTS: Large-Value Transfer System * US\_ACH: Automated Clearing House, also called Fed ACH network (mostly small banks) * US\_CHIPS: Clearinghouse Interbank Payments System. Also called Clearing House ACH network (primarily big banks) * US\_FEDNOW: Federal Reserve Instant Payment System * US\_FEDWIRE: Fedwire Funds Service * US\_RTP: US Real Time Payments System Possible values: `CA_ACSS`, `CA_LVTS`, `US_ACH`, `US_CHIPS`, `US_FEDNOW`, `US_FEDWIRE`, `US_RTP` [transferIn](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferIn) required, boolean Can transfer funds to the account using this information. Plaid expect that this value represents the account's current ability to be credited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH [transferOut](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-payment-networks-response-paymentNetworks-transferOut) required, boolean Can transfer funds from the account using this information. Plaid expect that this value represents the account's current ability to be debited through a payment network. Plaid recommends dynamically updating this value, for example to represent if the account is locked or not. **Note:** Both `transferIn` and `transferOut` must be `true` in order for the account to support ACH Response Object ```json { "page": { "nextOffset": "B47D80MVP23T" }, "paymentNetworks": [ { "bankId": "010088889", "identifier": "1111222233335820", "type": "US_ACH", "transferIn": true, "transferOut": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | \=\*=\*=\*= #### /accounts/{accountId}/asset-transfer-networks  #### Get asset transfer details for this account  Get asset transfer networks supported by an account. For example, Automated Customer Account Transfer Service (ACATS). For more information about how Plaid uses this information, see the [Plaid Investments Move API](https://plaid.com/docs/api/products/investments-move/index.html.md#investmentsauthget) . **Request fields** [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-request-accountId) string Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number **Note:** If the status of the `accountId` provided is `RESTRICTED`, you can send a 200 response with an empty body to indicate that no payment networks are available at this time. Max length: `256` In: `path` [offset](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-request-offset) string Opaque cursor used by the provider to send the next set of records. Deprecated in favor of PageKeyQuery, will be removed with a future major release In: `query` [limit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-request-limit) integer The number of elements that the API consumer wishes to receive. Plaid has a default limit of 100 elements. If your organization has a different limit, use the lower limit to determine how many items to send per page. To retrieve multiple pages, Plaid will use the opaque `nextOffset` field to send a subsequent request until the `nextOffset` is no longer included. In: `query` ```json curl -X GET 'https://api.your-org.com/fdx/v5/accounts/{accountId}/asset-transfer-networks?limit=25' \ -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ' ``` ###### 200 OK  **Response fields** [assetTransferNetworks](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks) required, \[object\] A paginated array of asset transfer networks for the account [identifier](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifier) required, string The number used to identify the account within the asset transfer network. If identifierType is ACCOUNT_NUMBER, this is the account number; if identifierType is TOKENIZED_ACCOUNT_NUMBER, this is a tokenized account number_ [identifierType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-identifierType) string The type of identifier used to identify the account in the payment network Possible values: `ACCOUNT_NUMBER`, `TOKENIZED_ACCOUNT_NUMBER` [institutionName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionName) string The name of the institution holding the account [institutionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-institutionId) required, string Institution identifier used by the asset transfer network ie. the Depository Trust and Clearing Corporation code for the institution holding the account [type](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-type) required, string The type of asset transfer Possible values: `CA_ATON`, `US_ACATS`, `US_DTC` [jointAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#accounts-{accountid}-asset-transfer-networks-response-assetTransferNetworks-jointAccount) boolean Whether this account has joint owners Response Object ```json { "assetTransferNetworks": [ { "identifier": "23348817826", "identifierType": "ACCOUNT_NUMBER", "institutionName": "First Plaidypus Bank", "institutionId": "FPB", "type": "US_ACATS", "jointAccount": true } ] } ``` ###### Error responses  | HTTP status code | FDX error code | Example message | Example debug message | | --- | --- | --- | --- | | 401 | 602 | Customer not authorized | Authenticated customer does not have the authorization to perform this action | | 404 | 701 | Account not found | An account with the provided account ID could not be found | | 409 | 705 | Account is closed | Operation is not supported by the closed account | | 500 | 500 | Internal server error | Provider custom developer-level error details for troubleshooting | | 500 | 501 | Subsystem unavailable | A system required to process the request was not available. Request was not processed | | 503 | 503 | Scheduled maintenance | System is down for maintenance. Retry-After HTTP header may be used to communicate estimated time of recovery | ### Data definitions  \=\*=\*=\*= #### Accounts  Account objects contain full details of each account type. (**Note:** Account objects differ from [account descriptors](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#account-descriptors) , which are lightweight objects that contain minimally necessary account details.) The Core Exchange API supports the following account types: * [Deposit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#deposit-account) * [Investment account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#investment-account) * [Loan account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#loan-account) * [Line of credit account](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#line-of-credit-account) ##### Deposit account  Full details of a deposit account. Plaid consumes the same information for all types of deposit accounts. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00`. The `accountType` field for deposit accounts may be set to any of the [account types](https://plaid.com#deposit-account-types) listed below. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `HIGHINTERESTSAVINGSACCOUNT`, `FIRSTHOMESAVINGSACCOUNT`, `OTHERDEPOSIT` [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-currentBalance) required, number The total amount of money in the account (sum of all posted/cleared transactions, not including pending transactions). For Plaid's full definition, see the [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-current) [availableBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccount-availableBalance) required, number The money in the account available to spend (sum of all transactions, plus or minus pending transactions). For Plaid's full definition, see [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#transactions-get-response-accounts-balances-available) API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS", "currentBalance": 1399.02, "availableBalance": 1399.02 } ``` ##### Investment account  Full details of an investment account. Plaid consumes all `InvestmentAccount` FDX fields for all types of investment accounts. In the holdings array, Plaid consumes fields depending on their relevancy to the holding type. See the `holdings` array for more information. Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFIEDPLAN`, `NONQUALIFEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `PREPAID`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `SPECIFIEDPENSIONPLAN`, `SARSEP`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` [availableCashBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-availableCashBalance) required, number Cash balance across all sub-accounts. Plaid expects that this includes sweep funds [balanceAsOf](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-balanceAsOf) string Date and time of the balance ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [currentValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-currentValue) required, number Total current value of all investments [holdings](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings) \[object\] Holdings in the investment account. Plaid maps the `holding` and the `investmentAccount` FDX models to its securities models, which hold universal information like the ticker symbol, and to its holdings models, which hold account-specific information like balances. For more information, see [Plaid investments](https://plaid.com/docs/investments/index.html.md#securities-and-holdings) [securityIds](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-securityIds) \[object\] Array of security identifiers [id](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-securityIds-id) string Value for a unique identifier Max length: `256` [idType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-securityIds-idType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [holdingName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-holdingName) string Holding name or security name [holdingType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-holdingType) string Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-type) . Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `ANNUITY`, `BOND`, `CD`, `DIGITALASSET`, `MUTUALFUND`, `OPTION`, `OTHER`, `STOCK` [holdingSubType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-holdingSubType) string The subtype of an investment holding. Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (CASH, MONEYMARKET). Possible values: `CASH`, `MONEYMARKET` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [purchasedPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-purchasedPrice) number Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-cost-basis) using the purchase price and the number of units. Plaid cannot take fees into account to determine the cost basis because the FDX holding schema doesn't include fees. [currentUnitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-currentUnitPrice) number Current unit price. Plaid uses this as the [institutionprice](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-holdings-institution-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-close-price) if you don't return `securityId` for holdings involving securities. [currentUnitPriceDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-currentUnitPriceDate) string Current unit price as of date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [marketValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-marketValue) required, number Market value at the time of data retrieved [faceValue](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-faceValue) number Required for bonds. Face value at the time of data retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. [cashAccount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-cashAccount) required, boolean If true, indicates that this holding is used to maintain proceeds from sales, dividends, and other cash postings to the investment account. If you don't set a value for `isCashEquivalent` in the `fiAttributes` array, then Plaid uses `cashAccount` in determining the [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) status. [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-currency) object Currency information if it is different from Account entity [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-holdings-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccount-holdings-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH", "availableCashBalance": 3209.54, "balanceAsOf": "2021-07-15T14:46:41.375Z", "currentValue": 34938.2 } ``` ##### Loan account  Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](https://plaid.com#loan-account-types) listed below. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/index.html.md) . For other loan account types Plaid consumes account details and transactions. Plaid consumes all loan account information as returned in the `GET /accounts` endpoint, as well as the additional information listed below: Required for all loan accounts: * `principalBalance` * `interestRate` * `interestRateType` Optional fields for `STUDENTLOAN` accounts: * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `maturityDate` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Required for `MORTGAGE` accounts: * `accountNumber` Optional fields for `MORTGAGE` accounts: * `escrowBalance` * `interestPaidYearToDate` * `lastPaymentAmount` * `lastPaymentDate` * `loanTerm` * `maturityDate` * `nextPaymentAmount` * `nextPaymentDate` * `originalPrincipal` * `originatingDate` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"escrowBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` [accountNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-accountNumber) string Full account number for the end user's handle for the account at the owning institution Required for accountType 'MORTGAGE' [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-principalBalance) required, number Principal balance [escrowBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-escrowBalance) number Escrow balance of loan [originalPrincipal](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-originalPrincipal) number Original principal of loan [originatingDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-originatingDate) string Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [loanTerm](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-loanTerm) integer Term of loan in months [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [maturityDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-maturityDate) string Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [interestPaidYearToDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-interestPaidYearToDate) number Interest paid year to date [interestRate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-interestRate) required, number The interest rate for the account, expressed as a number between 0 and 100. For example, `4` represents 4.00%, and `7.99` represents 7.99%. [interestRateType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-interestRateType) required, string Specifies whether an interest rate is fixed or variable. This information is helpful for personal financial planning and advising. For example, it affects the potential benefits of refinancing, and informs whether a mortgage payment is expected to change in the future Possible values: `FIXED`, `VARIABLE` [currentSchool](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-currentSchool) string Current school the student loan is connected to [loanProviderName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccount-loanProviderName) string Name of the institution providing the loan API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN", "accountNumber": "loanAccount0000001", "principalBalance": 580303.95, "escrowBalance": 3400.61, "originalPrincipal": 650400, "originatingDate": "2021-07-15", "loanTerm": 360, "nextPaymentAmount": 2483.12, "nextPaymentDate": "2021-07-15", "lastPaymentAmount": 2483.12, "lastPaymentDate": "2021-07-15", "maturityDate": "2021-07-15", "interestRate": 6.99 } ``` ##### Line of credit account  Full details of a line of credit account. The `accountType` field for line of credit accounts may be set to any of the [account types](https://plaid.com#line-of-credit-account-types) listed below. Plaid may consume all the parameters returned by the `GET /accounts` endpoint: * `availableCredit` * `creditLine` * `currentBalance` Additionally, for the `CREDITCARD` accountType, Plaid consumes the previous information plus the following for its liabilities product: * `advancesApr` * `lastPaymentAmount` * `lastPaymentDate` * `lastStmtBalance` * `lastStmtDate` * `minimumPaymentAmount` * `nextPaymentDate` * `purchasesApr` Plaid expects a decimal amount with two places (to represent fractional values of the base currency) for all monetary amounts. For example, `"currentBalance": 192.00` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` [creditLine](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-creditLine) number Credit limit [availableCredit](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-availableCredit) number Available credit. Required for all accountTypes except for `CHARGE` [nextPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-nextPaymentAmount) number Amount of next payment. May differ from minimumPaymentAmount if the customer pays more than their minimum or out of cycle [nextPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-nextPaymentDate) string Due date of next payment. May differ from statementAmountDueDate if the customer pays out of cycle ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [principalBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-principalBalance) number Principal balance [currentBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-currentBalance) required, number Current balance of line of credit [minimumPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-minimumPaymentAmount) number Minimum payment amount from last statement balance, which is due at `statementAmountDueDate` [lastPaymentAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-lastPaymentAmount) number Amount of last payment [lastPaymentDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-lastPaymentDate) string Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [pastDueAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-pastDueAmount) number Amount owed that the account holder failed to pay on the due date [lastStmtBalance](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-lastStmtBalance) number Final balance amount at end of last statement [lastStmtDate](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-lastStmtDate) string Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339.html#section-5.6) Format: `date` Max length: `10` [purchasesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-purchasesApr) number Annual percentage rate for purchases [advancesApr](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccount-advancesApr) number Annual percentage rate for cash advances API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD", "nextPaymentDate": "2021-07-15", "currentBalance": 1722.81, "lastPaymentDate": "2021-07-15", "lastStmtDate": "2021-07-15" } ``` \=\*=\*=\*= #### Account descriptors  ##### Annuity account descriptor  An annuity account. For example, a fixed or variable annuity account. The `accountType` field for annuity accounts may be set to any of the following: * `ANNUITY`: A form of insurance or investment entitling the investor to a series of annual sums. * `FIXEDANNUITY`: A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account. * `VARIABLEANNUITY`: A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `ANNUITY_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#AnnuityAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `ANNUITY`, `FIXEDANNUITY`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "ANNUITY_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "FIXEDANNUITY" } ``` ##### Commercial account descriptor  A commercial account. For example, a business deposit account. The `accountType` field for commercial accounts may be set to any of the [account types](https://plaid.com#commercial-account-types) listed below **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `COMMERCIAL_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#CommercialAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `COMMERCIALDEPOSIT`, `COMMERCIALINVESTMENT`, `COMMERCIALLOAN`, `COMMERCIALLINEOFCREDIT` API Object ```json { "accountCategory": "COMMERCIAL_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "COMMERCIALLOAN" } ``` ##### Deposit account descriptor  A deposit account. For example, a checking, savings or money market account. Plaid consumes more detailed information for `CHECKING` and `SAVINGS` accounts. The `accountType` field for deposit accounts may be set to any of the following: * `CHECKING`: A deposit account held at a financial institution that allows withdrawals and deposits. * `SAVINGS`: An interest-bearing deposit account held at a bank or other financial institution. * `CD`: A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time. * `COMMERCIALDEPOSIT`: A deposit account for commercial customers, for example a business trust account. * `ESCROW`: A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties. * `MONEYMARKET`: A deposit account that pays interest based on current interest rates in the money markets. * `OTHERDEPOSIT`: Use when none of the listed enums apply. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `CHECKING`, `SAVINGS`, `CD`, `ESCROW`, `MONEYMARKET`, `HIGHINTERESTSAVINGSACCOUNT`, `FIRSTHOMESAVINGSACCOUNT`, `OTHERDEPOSIT` API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "SAVINGS" } ``` ##### Insurance account descriptor  An insurance account. For example, whole life insurance or short-term disability. The `accountType` field for insurance accounts may be set to any of the following: * `LONGTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year. * `SHORTTERMDISABILITY`: Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year. * `UNIVERSALLIFE`: A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest. * `WHOLELIFE`: Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INSURANCE_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InsuranceAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LONGTERMDISABILITY`, `SHORTTERMDISABILITY`, `UNIVERSALLIFE`, `WHOLELIFE` API Object ```json { "accountCategory": "INSURANCE_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "WHOLELIFE" } ``` ##### Investment account descriptor  An investment account. For example, a 401K or IRA. Plaid consumes the same details for all investment accounts. The `accountType` field for investment accounts may be set to any of the following: * `401A`: An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both. * `401K`: An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code. * `403B`: A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States. * `529`: A tax-advantaged savings plan designed to help pay for education. * `BROKERAGEPRODUCT`: Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options. * `COMMERCIALINVESTMENT`: Investment Account for Commercial Customers. e.g. Commercial Brokerage Account. * `COVERDELL`: A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account. * `DIGITALASSET`: An account containing digital assets. * `DEFINEDBENEFIT`: An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history. * `GUARDIAN`: An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent. * `INSTITUTIONALTRUST`: An institutional trust account. * `IRA`: An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement. * `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes. * `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. * `OTHERINVESTMENT`: Use when none of the listed enums apply. * `ROLLOVER`: An account containing investments rolled over from an employee-sponsored account. * `ROTH`: An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement. * `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. * `TAXABLE`: A taxable investment account. * `TDA`: TreasuryDirect Account. * `TRUST`: A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms. * `TERM`: Life insurance that provides coverage at a fixed rate of payments for a limited period of time. * `UGMA`: Uniform Gifts to Minors Act account. * `UTMA`: Uniform Transfers to Minors Act account. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `401A`, `401K`, `403B`, `529`, `BROKERAGEPRODUCT`, `COVERDELL`, `DIGITALASSET`, `DEFINEDBENEFIT`, `DEFERREDPROFITSHARINGPLAN`, `ESOP`, `GUARDIAN`, `INDIVIDUALPENSIONPLAN`, `INSTITUTIONALTRUST`, `INVESTMENTACCOUNT`, `IRA`, `KEOGH`, `LIFEINCOMEFUND`, `LOCKEDINRETIREMENTACCOUNT`, `LOCKEDINRETIREMENTINCOMEFUND`, `LOCKEDINRETIREMENTSAVINGSPLAN`, `NONQUALIFIEDPLAN`, `NONQUALIFEDPLAN`, `OTHERINVESTMENT`, `ROLLOVER`, `ROTH`, `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`, `PREPAID`, `REGISTEREDPENSIONPLAN`, `REGISTEREDDISABILITYSAVINGSPLAN`, `REGISTEREDEDUCATIONSAVINGSPLAN`, `REGISTEREDRETIREMENTINCOMEFUND`, `REGISTEREDRETIREMENTSAVINGSPLAN`, `RESTRICTEDLIFEINCOMEFUND`, `RESTRICTEDLOCKEDINSAVINGSPLAN`, `SPECIFIEDPENSIONPLAN`, `SARSEP`, `TAXABLE`, `TAXFREESAVINGSACCOUNT`, `TDA`, `TRUST`, `TERM`, `UGMA`, `UTMA`, `VARIABLEANNUITY` API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "ROTH" } ``` ##### Loan account descriptor  A loan account. For example, mortgage, student loan or auto loan. Plaid consumes more detailed information for `MORTGAGE` and `STUDENTLOAN` accounts. The `accountType` field for loan accounts may be set to any of the following: * `AUTOLOAN`: A type of loan used to finance a car purchase. * `COMMERCIALLOAN`: A preset borrowing limit that can be used at any time. * `HOMEEQUITYLOAN`: A type of loan in which the borrower uses the equity of his or her home as collateral. * `INSTALLMENT`: A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments. * `LOAN`: The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. * `MILITARYLOAN`: A military loan. * `MORTGAGE`: A type of loan you can use to buy or refinance a home. * `PERSONALLOAN`: A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower. * `SMBLOAN`: A small/medium business loan. * `STUDENTLOAN`: A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `AUTOLOAN`, `HOMEEQUITYLOAN`, `INSTALLMENT`, `LOAN`, `MILITARYLOAN`, `MORTGAGE`, `PERSONALLOAN`, `SMBLOAN`, `STUDENTLOAN` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "HOMEEQUITYLOAN" } ``` ##### Line of credit account descriptor  A line-of-credit account. For example, a credit card or home equity line of credit. Plaid consumes more detailed information for `CREDITCARD` accounts. The `accountType` field for line of credit accounts may be set to any of the following: * `LINEOFCREDIT`: A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds. * `CHARGE`: An account to which goods and services may be charged on credit. * `COMMERCIALLINEOFCREDIT`: An account with a preset borrowing limit that can be used at any time. * `CREDITCARD`: Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment. * `HOMELINEOFCREDIT`: A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house. **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [accountId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-accountId) required, string Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. Max length: `256` [accountNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-accountNumberDisplay) string Account display number for the end user's handle at the owning financial institution. Plaid expects that the last 4 digits of this masked number correspond to the last 4 digits of the account number. [productName](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-productName) required, string Marketed product name for this account. Used in UIs to assist in account selection [nickname](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-nickname) string Account nickname [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-status) required, string Account status Possible values: `CLOSED`, `DELINQUENT`, `NEGATIVECURRENTBALANCE`, `OPEN`, `PAID`, `PENDINGCLOSE`, `PENDINGOPEN`, `RESTRICTED` [currency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-currency) required, object ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) [currencyCode](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-currency-currencyCode) required, string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [accountType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditAccountDescriptor-accountType) required, string The account type. Plaid consumes basic balance account information from the `accounts/{accountId}` endpoint for a subset of the possible account types described in the FDX specification. Possible values: `LINEOFCREDIT`, `CHARGE`, `CREDITCARD`, `HOMELINEOFCREDIT` API Object ```json { "accountCategory": "LOC_ACCOUNT", "accountId": "someLongTermUniqueIDString", "accountNumberDisplay": "4321", "productName": "Premier Account", "status": "OPEN", "currency": { "currencyCode": "CAD" }, "accountType": "CREDITCARD" } ``` \=\*=\*=\*= #### Account statuses  See the table below for help in selecting the appropriate account status. | Status | Description | | --- | --- | | `CLOSED` | An account that is closed or no longer exists | | `DELINQUENT` | An account with unpaid payments that are past due | | `NEGATIVECURRENTBALANCE` | An account with a current negative balance | | `PAID` | An account that is paid in full | | `PENDINGCLOSE` | An account that is in the process of being closed | | `PENDINGOPEN` | An account that is in the process of being opened | | `RESTRICTED` | An account with restricted access | \=\*=\*=\*= #### Account types  ##### Annuity account types  The `accountType` field for annuity accounts may be set to any of the following: | Account type | Description | | --- | --- | | `ANNUITY` | A form of insurance or investment entitling the investor to a series of annual sums | | `FIXEDANNUITY` | A type of insurance contract that promises to pay the buyer a specific, guaranteed interest rate on their contributions to the account | | `VARIABLEANNUITY` | A type of insurance contract that promises to pay back the buyer based on the performance of an underlying portfolio of mutual funds selected by the buyer | ##### Commercial account types  The `accountType` field for accounts may be set to any of the following: | Account type | Description | | --- | --- | | `COMMERCIALDEPOSIT` | A deposit account for commercial customers, for example a business trust account | | `COMMERCIALLOAN` | A preset borrowing limit that can be used at any time | | `COMMERCIALLINEOFCREDIT` | An account with a preset borrowing limit that can be used at any time | | `COMMERCIALINVESTMENT` | Investment Account for Commercial Customers. e.g. Commercial Brokerage Account | ##### Deposit account types  The `accountType` field for deposit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `CHECKING` | An interest-bearing deposit account held at a bank or other financial institution | | `SAVINGS` | An interest-bearing deposit account held at a bank or other financial institution | | `CD` | A certificate of deposit (CD) is a product offered by banks and credit unions that provides an interest rate premium in exchange for the customer agreeing to leave a lump-sum deposit untouched for a predetermined period of time | | `ESCROW` | A contractual arrangement in which a third party (the stakeholder or escrow agent) receives and disburses money or property for the primary transacting parties, with the disbursement dependent on conditions agreed to by the transacting parties | | `MONEYMARKET` | A deposit account that pays interest based on current interest rates in the money markets | | `OTHERDEPOSIT` | Use when none of the listed enums apply | ##### Insurance account types  The `accountType` field for insurance accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LONGTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for an extended period of time, usually more than a year | | `SHORTTERMDISABILITY` | Insurance that replaces a portion of the policyholder's income due to a disability for a short period of time, usually less than a year | | `UNIVERSALLIFE` | A type of a cash value life insurance where the excess of premium payments above the current cost of insurance is credited to the cash value of the policy, which in turn is credited each month with interest | | `WHOLELIFE` | Life insurance which is guaranteed to remain in force for the insured's entire lifetime, provided required premiums are paid, or to the maturity date | ##### Investment account types  The `accountType` field for investment accounts may be set to any of the following: | Account type | Description | | --- | --- | | `401A` | An employer-sponsored money-purchase retirement plan that allows dollar or percentage-based contributions from the employer, the employee, or both | | `401K` | An employer-sponsored defined-contribution pension account defined in subsection 401(k) of the Internal Revenue Code | | `403B` | A U.S. tax-advantaged retirement savings plan available for public education organizations, some non-profit employers (only Internal Revenue Code 501(c)(3) organizations), cooperative hospital service organizations, and self-employed ministers in the United States | | `529` | A tax-advantaged savings plan designed to help pay for education | | `BROKERAGEPRODUCT` | Investment management offered by a licensed brokerage firm that places trades on behalf of the customer, utilizing any number of investment options | | `COVERDELL` | A trust or custodial account set up in the United States solely for paying qualified education expenses for the designated beneficiary of the account | | `DIGITALASSET` | An account containing digital assets | | `DEFINEDBENEFIT` | An employer-sponsored retirement plan where employee benefits are computed using a formula that considers several factors, such as length of employment and salary history | | `ESOP` | An employee stock ownership plan (ESOP) is an employee benefit plan that gives workers ownership interest in the company | | `GUARDIAN` | An account of a child in the parent's name, with legal title to the assets in the account, as well as all capital gains and tax liabilities produced from the account belonging to the parent | | `INSTITUTIONALTRUST` | An institutional trust account | | `IRA` | An individual retirement account (IRA) is a tax-advantaged account that individuals use to save and invest for retirement | | `KEOGH` | A tax-deferred pension plan available to self-employed individuals or unincorporated businesses for retirement purposes | | `NONQUALIFIEDPLAN` | A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines | | `OTHERINVESTMENT` | Use when none of the listed enums apply | | `ROLLOVER` | An account containing investments rolled over from an employee-sponsored account | | `ROTH` | An individual retirement account that offers tax-free growth and tax-free withdrawals in retirement | | `SARSEP` | A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement | | `TAXABLE` | A taxable investment account | | `TDA` | TreasuryDirect Account | | `TRUST` | A type of financial account that is opened by an individual and managed by a designated trustee for the benefit of a third party in accordance with agreed-upon terms | | `TERM` | Life insurance that provides coverage at a fixed rate of payments for a limited period of time | | `UGMA` | Uniform Gifts to Minors Act account | | `UTMA` | Uniform Transfers to Minors Act account | ##### Loan account types  The `accountType` field for loan accounts may be set to any of the following: | Account type | Description | | --- | --- | | `AUTOLOAN` | A type of loan used to finance a car purchase | | `HOMEEQUITYLOAN` | A type of loan in which the borrower uses the equity of his or her home as collateral | | `INSTALLMENT` | A type of agreement or contract involving a loan that is repaid over time with a set number of scheduled payments | | `LOAN` | The lending of money by one or more individuals, organizations, or other entities to other individuals, organizations etc. | | `MILITARYLOAN` | A military loan | | `MORTGAGE` | A type of loan you can use to buy or refinance a home | | `PERSONALLOAN` | A type of debt that is not protected by a guarantor, or collateralized by a lien on specific assets of the borrower | | `SMBLOAN` | A small/medium business loan | | `STUDENTLOAN` | A type of loan designed to help students pay for post-secondary education and the associated fees, such as tuition, books and supplies, and living expenses | ##### Line of credit account types  The `accountType` field for line of credit accounts may be set to any of the following: | Account type | Description | | --- | --- | | `LINEOFCREDIT` | A credit facility extended by a bank or other financial institution to a government, business or individual customer that enables the customer to draw on the facility when the customer needs funds | | `CHARGE` | An account to which goods and services may be charged on credit | | `CREDITCARD` | Allows cardholders to borrow funds with which to pay for goods and services with merchants that accept cards for payment | | `HOMELINEOFCREDIT` | A loan in which the lender agrees to lend a maximum amount within an agreed period, where the collateral is the borrower's equity in their house | \=\*=\*=\*= #### Transaction objects  ##### Deposit transaction  A transaction on a deposit account type **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `DEPOSIT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [cardNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-cardNumberDisplay) string The payment card number (e.g. debit, credit or digital), suitably masked, used to originate the transaction. May differ from primary account number as a secondary or employee card or a one-time use number. This is an optional field and won't be returned for certain types of transactions such as cash or check deposits [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [payee](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-payee) string Payee name. This is deprecated and will be removed in a future major release in place of `transactionPayee` which provides detailed information of a payee's name and place of business on the `Transaction` entity Max length: `255` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#DepositTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "DEPOSIT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "ATM deposit", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 38.9 } ``` ##### Investment transaction  A transaction on an investment account. In addition to the required fields in the base `Transaction` model, Plaid requires the following fields for all transactions on an investment account: * `fees` * `transactionType` If the transaction involves a security, Plaid additionally requires the following fields: * `unitPrice` * `units` * `symbol` OR both `securityId` and `securityIdType` **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `INVESTMENT_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [cardNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-cardNumberDisplay) string The payment card number (e.g. debit, credit or digital), suitably masked, used to originate the transaction. May differ from primary account number as a secondary or employee card or a one-time use number. This is an optional field and won't be returned for certain types of transactions such as cash or check deposits [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-transactionType) required, string The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . Plaid doesn't map these enums to Plaid-specific transaction subtypes. Plaid maps these enums as follows: * ADJUSTMENT - fee * ATM - cash * CASH - cash * CHECK - cash * CLOSURE - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CLOSUREOPT - Plaid suggests using SOLDTOCLOSE, PURCHASETOCLOSE, OPTIONEXERCISE or OPTIONEXPIRATION to indicate the specific type of closure, instead of using this enum. * CONTRIBUTION - buy (if transaction involves a security) or cash * DEP - cash * DEPOSIT - cash * DIRECTDEBIT - cash * DIRECTDEP - cash * DIV - cash * DIVIDEND - cash * DIVIDENDREINVEST - buy * EXPENSE - cash * FEE - fee * INCOME - cash * INTEREST - cash * INVEXPENSE - cash * JRNLFUND - transfer * JRNLSEC - transfer * MARGININTEREST - cash * OPTIONEXERCISE - transfer * OPTIONEXPIRATION - transfer * OTHER - cash - (unclassified) * PAYMENT - cash * POS - cash * PURCHASED - buy * PURCHASEDTOCOVER - buy * PURCHASETOCLOSE - buy * PURCHASETOOPEN - buy * REINVESTOFINCOME - buy * REPEATPMT - cash * RETURNOFCAPITAL - cash * SOLD - sell * SOLDTOCLOSE - sell * SOLDTOOPEN - sell * SPLIT - transfer * SRVCHG - fee * TRANSFER - transfer * XFER - transfer Possible values: `ADJUSTMENT`, `ATM`, `CASH`, `CHECK`, `CLOSURE`, `CLOSUREOPT`, `CONTRIBUTION`, `DEP`, `DEPOSIT`, `DIRECTDEBIT`, `DIRECTDEP`, `DIV`, `DIVIDEND`, `DIVIDENDREINVEST`, `EXPENSE`, `FEE`, `INCOME`, `INTEREST`, `INVEXPENSE`, `JRNLFUND`, `JRNLSEC`, `MARGININTEREST`, `OPTIONEXERCISE`, `OPTIONEXPIRATION`, `OTHER`, `PAYMENT`, `POS`, `PURCHASED`, `PURCHASEDTOCOVER`, `PURCHASETOCLOSE`, `PURCHASETOOPEN`, `REINVESTOFINCOME`, `REPEATPMT`, `RETURNOFCAPITAL`, `SOLD`, `SOLDTOCLOSE`, `SOLDTOOPEN`, `SPLIT`, `SRVCHG`, `TRANSFER`, `XFER` [securityId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-securityId) string If you return the `securityId` for a holding, Plaid uses it to look up the closing price from NYSE Group Security Master. If you don't return `securityId` for a holding that uses security IDs (not recommended), Plaid uses the `unitPrice` as the closing price. This field, along with `securityIdType` are **required** unless `symbol` is provided. **Note:** If `securityId` is provided, `securityIdType` is required. [securityIdType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-securityIdType) string Plaid consumes solely CUSIP, ISIN, and SEDOL. This field, along with `securityId` are **required** unless `symbol` is provided. **Note:** If `securityIdType` is provided, `securityId` is required. Possible values: `CINS`, `CMC`, `CME`, `CUSIP`, `ISIN`, `ITSA`, `NASDAQ`, `SEDOL`, `SICC`, `VALOR`, `WKN` [securityType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-securityType) string The type of a security Possible values: `BOND`, `DEBT`, `MUTUALFUND`, `DIGITALASSET`, `OPTION`, `OTHER`, `STOCK`, `SWEEP` [symbol](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-symbol) string Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided [commission](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-commission) number Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` [fees](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-fees) required, number Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` [unitPrice](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-unitPrice) number Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-investment-transactions-price) . Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-close-price) if you don't return `securityId` for transactions involving securities. **Note:** This field is required if the transaction involves a security [units](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-units) number Plaid requires this field for holdings and transactions involving securities. For security-based actions other than stock splits, quantity. Shares for stocks, mutual funds, and others. Face value for bonds. Contracts for options. **Note:** This field is required if the transaction involves a security. [unitType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-unitType) string The units of an investment transaction Possible values: `CURRENCY`, `SHARES` [fiAttributes](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-fiAttributes) \[object\] Array of financial institution-specific attributes. Plaid recommends including a value for [is\_cash\_equivalent](https://plaid.com/docs/api/products/investments/index.html.md#investments-transactions-get-response-securities-is-cash-equivalent) property in this array. Plaid accepts `isCashEquivalent` as the attribute name and a string value of `true` or `false`. [name](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-fiAttributes-name) string Name of the financial institution-specific attribute [value](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#InvestmentTransaction-fiAttributes-value) string Value of the financial institution-specific attribute API Object ```json { "accountCategory": "INVESTMENT_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Share purchase", "debitCreditMemo": "DEBIT", "status": "PENDING", "amount": 428.08, "fees": 4.28, "transactionType": "PURCHASED" } ``` ##### Loan transaction  A transaction on a loan account **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOAN_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [cardNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-cardNumberDisplay) string The payment card number (e.g. debit, credit or digital), suitably masked, used to originate the transaction. May differ from primary account number as a secondary or employee card or a one-time use number. This is an optional field and won't be returned for certain types of transactions such as cash or check deposits [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LoanTransaction-transactionType) string The type of a loan transaction. Plaid passes through all loan transaction types * `ADJUSTMENT`: Adjustment or correction. * `FEE`: Fee charge. For example, a late payment fee. * `INTEREST`: Interest charge. * `PAYMENT`: Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages). * `LUMP_SUM_PAYMENT`: A single payment of money, as opposed to a series of payments made over time. * `SKIP_PAYMENT`: Payment that satisfies deferral of a required payment. * `DOUBLE_UP_PAYMENT`: Additional payment beyond the required payment to reduce the principal. * `PAYOFF`: Payment that satisfies the terms of the mortgage loan and completely pays off the debt. Possible values: `ADJUSTMENT`, `FEE`, `INTEREST`, `PAYMENT`, `LUMP_SUM_PAYMENT`, `SKIP_PAYMENT`, `DOUBLE_UP_PAYMENT`, `PAYOFF` API Object ```json { "accountCategory": "LOAN_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Monthly loan payment-minimum due", "debitCreditMemo": "CREDIT", "status": "POSTED", "amount": 1638.83 } ``` ##### Line of credit transaction  A line-of-credit transaction **Properties** [accountCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-accountCategory) required, string The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. Possible values: `LOC_ACCOUNT` [transactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-transactionId) required, string Long term persistent identity of the transaction (unique to account). Plaid expects that `status: PENDING` and `status: POSTED` transactions have different IDs Max length: `256` [referenceTransactionId](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-referenceTransactionId) string For reverse postings, the identity of the transaction being reversed. For the correction transaction, the identity of the reversing post. For credit card posting transactions, the identity of the authorization transaction Max length: `256` [postedTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-postedTimestamp) string The date and time that the transaction was posted to the account. This property is **required** by Plaid when `status=POSTED`. Plaid expects this property to be omitted when `status=PENDING` ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [transactionTimestamp](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-transactionTimestamp) required, string The date and time that the transaction was added to the server backend systems ISO 8601 date-time in format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) Format: `date-time` [cardNumberDisplay](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-cardNumberDisplay) string The payment card number (e.g. debit, credit or digital), suitably masked, used to originate the transaction. May differ from primary account number as a secondary or employee card or a one-time use number. This is an optional field and won't be returned for certain types of transactions such as cash or check deposits [description](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-description) required, string Description of the transaction, such as information about a merchant's name or place of business in a manner that is user friendly and accessible to the customer [debitCreditMemo](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-debitCreditMemo) required, string The posting type of a transaction. Because the transaction `amount` is an absolute value, this parameter is required to indicate the transaction direction and sign (+/-): * `DEBIT`: Money is leaving the account. The transaction amount will be exposed with a **positive** sign (+) * `CREDIT`: Money is entering the account. The transaction amount will be exposed with a **negative** sign (-) * `MEMO`: The transaction is pending and will be completed at the end of the day. (Plaid handles `MEMO` transaction the same as `DEBIT` transactions.) Possible values: `CREDIT`, `DEBIT`, `MEMO` [category](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-category) string Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable [subCategory](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-subCategory) string Transaction category detail specifying the standard of the transaction category. For example, "MCC" [status](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-status) required, string The status of a transaction. Plaid consumes solely the `PENDING` and `POSTED` enums, and treats `MEMO` and `AUTHORIZATION` as if they were `PENDING`. Plaid expects that pending and posted transactions have different `transactionIds`. * `AUTHORIZATION` * `MEMO` - A pending transaction to be completed at the end of this day * `PENDING` - A pending transaction * `POSTED` - A posted transaction Possible values: `AUTHORIZATION`, `MEMO`, `PENDING`, `POSTED` [amount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-amount) required, number The amount of money in the account currency. The amount is an absolute value. Plaid relies on the `DebitCreditMemo` enum to determine the direction (and sign) of the transaction [foreignAmount](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-foreignAmount) number The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set [foreignCurrency](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-foreignCurrency) string Currency, fund and precious metal codes effective from June 25, 2024 per [ISO 4217 Currency Code Maintenance](https://www.six-group.com/en/products-services/financial-information/data-standards.html) . ZWL (the Zimbabwean dollar) expires August 31, 2024 and is deprecated and replaced with ZWG (Zimbabwe Gold), effective on June 25, 2024. Possible values: `AED`, `AFN`, `ALL`, `AMD`, `ANG`, `AOA`, `ARS`, `AUD`, `AWG`, `AZN`, `BAM`, `BBD`, `BDT`, `BGN`, `BHD`, `BIF`, `BMD`, `BND`, `BOB`, `BOV`, `BRL`, `BSD`, `BTN`, `BWP`, `BYN`, `BZD`, `CAD`, `CDF`, `CHE`, `CHF`, `CHW`, `CLF`, `CLP`, `CNY`, `COP`, `COU`, `CRC`, `CUC`, `CUP`, `CVE`, `CZK`, `DJF`, `DKK`, `DOP`, `DZD`, `EGP`, `ERN`, `ETB`, `EUR`, `FJD`, `FKP`, `GBP`, `GEL`, `GHS`, `GIP`, `GMD`, `GNF`, `GTQ`, `GYD`, `HKD`, `HNL`, `HTG`, `HUF`, `IDR`, `ILS`, `INR`, `IQD`, `IRR`, `ISK`, `JMD`, `JOD`, `JPY`, `KES`, `KGS`, `KHR`, `KMF`, `KPW`, `KRW`, `KWD`, `KYD`, `KZT`, `LAK`, `LBP`, `LKR`, `LRD`, `LSL`, `LYD`, `MAD`, `MDL`, `MGA`, `MKD`, `MMK`, `MNT`, `MOP`, `MRU`, `MUR`, `MVR`, `MWK`, `MXN`, `MXV`, `MYR`, `MZN`, `NAD`, `NGN`, `NIO`, `NOK`, `NPR`, `NZD`, `OMR`, `PAB`, `PEN`, `PGK`, `PHP`, `PKR`, `PLN`, `PYG`, `QAR`, `RON`, `RSD`, `RUB`, `RWF`, `SAR`, `SBD`, `SCR`, `SDG`, `SEK`, `SGD`, `SHP`, `SLE`, `SLL`, `SOS`, `SRD`, `SSP`, `STN`, `SVC`, `SYP`, `SZL`, `THB`, `TJS`, `TMT`, `TND`, `TOP`, `TRY`, `TTD`, `TWD`, `TZS`, `UAH`, `UGX`, `USD`, `USN`, `UYI`, `UYU`, `UYW`, `UZS`, `VED`, `VES`, `VND`, `VUV`, `WST`, `XAF`, `XAG`, `XAU`, `XBA`, `XBB`, `XBC`, `XBD`, `XCD`, `XDR`, `XOF`, `XPD`, `XPF`, `XPT`, `XSU`, `XTS`, `XUA`, `XXX`, `YER`, `ZAR`, `ZMW`, `ZWG`, `ZWL` [transactionType](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-transactionType) string The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types Possible values: `ADJUSTMENT`, `CHECK`, `FEE`, `INTEREST`, `PAYMENT`, `WITHDRAWAL`, `PURCHASE` [checkNumber](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md#LineOfCreditTransaction-checkNumber) integer Check number. Plaid expects this solely if the transaction involves a check API Object ```json { "accountCategory": "LOC_ACCOUNT", "transactionId": "78RJ3311PLU34300E", "transactionTimestamp": "2024-07-15T14:46:41.375+02:00", "description": "Recurring payment", "debitCreditMemo": "CREDIT", "status": "AUTHORIZATION", "amount": 38.9 } ``` \=\*=\*=\*= #### Transaction types  ##### Investment transaction types  Plaid maps these enums to Plaid investment transaction types [investment transaction types](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) . but not to Plaid-specific transaction subtypes. | Transaction type | [Investment transaction type](https://plaid.com/docs/api/accounts/index.html.md#investment-transaction-types-schema) | | --- | --- | | `ADJUSTMENT` | `fee` | | `ATM` | `cash` | | `CASH` | `cash` | | `CHECK` | `cash` | | `CLOSURE` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CLOSUREOPT` | Plaid recommends against using this value, rather specifying the closure type with any of the following: `SOLDTOCLOSE`, `PURCHASETOCLOSE`, `OPTIONEXERCISE` or `OPTIONEXPIRATION` | | `CONTRIBUTION` | `buy` (if transaction involves a security) or `cash` | | `DEP` | `cash` | | `DEPOSIT` | `cash` | | `DIRECTDEBIT` | `cash` | | `DIRECTDEP` | `cash` | | `DIV` | `cash` | | `DIVIDEND` | `cash` | | `DIVIDENDREINVEST` | `buy` | | `EXPENSE` | `cash` | | `FEE` | `fee` | | `INCOME` | `cash` | | `INTEREST` | `cash` | | `INVEXPENSE` | `cash` | | `JRNLFUND` | `transfer` | | `JRNLSEC` | `transfer` | | `MARGININTEREST` | `cash` | | `OPTIONEXERCISE` | `transfer` | | `OPTIONEXPIRATION` | `transfer` | | `OTHER` | `cash` (unclassified) | | `PAYMENT` | `cash` | | `POS` | `cash` | | `PURCHASED` | `buy` | | `PURCHASEDTOCOVER` | `buy` | | `PURCHASETOCLOSE` | `buy` | | `PURCHASETOOPEN` | `buy` | | `REINVESTOFINCOME` | `buy` | | `REPEATPMT` | `cash` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `RETURNOFCAPITAL` | `cash` | | `SOLD` | `sell` | | `SOLDTOCLOSE` | `sell` | | `SOLDTOOPEN` | `sell` | | `SPLIT` | `transfer` | | `SRVCHG` | `fee` | | `TRANSFER` | `transfer` | | `XFER` | `transfer` | ##### Loan transaction types  | Account type | Description | | --- | --- | | `ADJUSTMENT` | Adjustment or correction | | `FEE` | Fee charge. For example, a late payment fee | | `INTEREST` | Interest charge | | `PAYMENT` | Required payment that satisfies the minimum payment (e.g. principal + interest for mortgages) | | `LUMP_SUM_PAYMENT` | A single payment of money, as opposed to a series of payments made over time | | `SKIP_PAYMENT` | Payment that satisfies deferral of a required payment | | `DOUBLE_UP_PAYMENT` | Additional payment beyond the required payment to reduce the principal | | `PAYOFF` | Payment that satisfies the terms of the mortgage loan and completely pays off the debt | --- # Core Exchange - Authentication | Plaid Docs Authentication  =============== #### Authentication options for the Core Exchange API  This API uses an [OpenID Connect (OIDC) authentication flow](https://plaid.com/core-exchange/authentication/) and accepts the resulting [access token](https://plaid.com/core-exchange/authentication/#response-parameters) as a bearer token. For example, `curl -H 'Authorization: Bearer '`. * openIdConnectUrl: [https://www.your-organization.com/.well-known/openid-configuration](https://www.your-organization.com/.well-known/openid-configuration) This API uses an [OAuth2.0 authorization code flow](https://plaid.comhttps://auth0.com/docs/get-started/authentication-and-authorization-flow/authorization-code-flow/index.html.md) and accepts the resulting access token as a bearer token. For example, `curl -H 'Authorization: Bearer '`. Flows: * authorizationCode * authorizationUrl: [https://www.your-organization.com/authorize](https://www.your-organization.com/authorize) * tokenUrl: [https://www.your-organization.com/token](https://www.your-organization.com/token) * scopes: * Account: (optional) Read account data * Customer: (optional) Read customer data * Transactions: (optional) Read transaction data --- # API Reference | Plaid Docs API Reference  ============== #### Endpoints and data definitions  #### Core Exchange v6.3  Reference for building the latest version of Plaid's FDX-aligned Core Exchange API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.3/index.html.md) #### Core Exchange v6.2  Reference for building Plaid's Core Exchange v6.2 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.2/index.html.md) #### Core Exchange v6.1  Reference for building Plaid's Core Exchange v6.1 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.1/index.html.md) #### Core Exchange v6.0  Reference for building Plaid's Core Exchange v6.0 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/6.0/index.html.md) #### Core Exchange v5.3  Reference for building Plaid's Core Exchange v5.3 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.3/index.html.md) #### Core Exchange v5.2  Reference for building Plaid's Core Exchange v5.2 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.2/index.html.md) #### Core Exchange v5.1  Reference for building Plaid's Core Exchange v5.1 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.1/index.html.md) #### Core Exchange v5.0  Reference for building Plaid's Core Exchange v5.0 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/5.0/index.html.md) #### Core Exchange v4.6  Reference for building Plaid's Core Exchange v4.6 API [Endpoints & data dictionary](https://plaid.comhttps://plaid.com/core-exchange/docs/reference/4.6/index.html.md) --- # User experience | Plaid Docs User experience  ================ #### Plaid user experience guide  [Plaid Link](https://plaid.com/docs/link/index.html.md) is the UI component users interact with to link their accounts to an app using Plaid. Your institution will show up in Plaid Link after you go live on Core Exchange. #### Institution selection  A user wants to connect their financial account to an app called WonderWallet. WonderWallet sends them to Plaid Link where they can select their financial institution. In this example, the financial institution is called First Platypus Bank. (An image of "OAuth Example") #### Data transparency messaging  Data Transparency Messaging (DTM) gives consumers a way of understanding the data types needed to power an app or service that they want to use. (An image of "Data transparency messaging example") This enables Plaid and our customers to meet 1033 requirements: the 1033 rule requires that Plaid and our customers (third parties) disclose the data types they are requesting access to, and for which use cases. Additionally, Plaid customers need to ensure customer authorization is captured. With DTM, Plaid shows data types and use cases on behalf of the customer in Link, and then captures the authorization. DTM will appear as a footer on the Pre-OAuth pane for all users that connect through OAuth. Plaid and Plaid customers will only access the specific data the user has consented to via DTM. If additional data is required, the consumer will need to provide additional consent. When an item has been created with DTM, Plaid will also expose the consent records including the use case, data types, and time stamp of consent via Permissions Manager—this ensures you have full visibility into the consumers’ consent, enabling you (as a Data Provider) to “confirm” authorization under the rule. If consent status or scope change on an item, such as if a user revokes access or grants additional access, these changes will also be reflected in the Permissions Manager records. To ensure a consistent user experience and to avoid repetition, Plaid recommends that you do not include a description of the data scopes/fields shared in your OAuth flow. #### Authentication Guidance  ##### OAuth  The user is asked to authenticate with First Platypus. Plaid recommends you do this using the OAuth 2.0 protocol. You own the OAuth user experience and host it on your domain. We encourage you have two screens with your logo prominently featured: a login screen and two-step verification screen. Your OAuth flow must implement **strong authentication** and not solely rely on username/password, incorporating multi-factor authentication with one-time passcodes or stronger methods like push-based authentication or biometrics through [App2App or WebAuthn](https://plaid.comhttps://plaid.com/core-exchange/docs/user-experience/index.html.md#optional-components) . (An image of "OAuth Authentication Example Login Page") #### Account selection  If the user has more than one financial account, the user returns to Plaid Link and is asked to select which accounts they’d like to link. The user then sees a success screen. Tapping the continue button will return them to WonderWallet. (An image of "Account Selection Example") #### Returning user experience  Plaid’s returning user experience streamlines onboarding for users who have previously connected a financial account with Plaid via your institution’s OAuth and API integration. In [Link](https://plaid.com/docs/link/index.html.md) , a user can choose to be remembered by Plaid by entering their phone number and then verifying it using a one-time password. Next, the user connects their account through your OAuth flow, which would be associated with their phone number. When the same user wants to connect their account to another app, Plaid enables the user to do so using their phone number and secure authentication methods like one-time passcodes and passkeys. This streamlined experience has built-in security controls and advanced monitoring that automatically detect suspicious activity and help prevent fraud. As a data partner for Core Exchange, you’re automatically enabled for this streamlined experience with no integration work required. Your users can now opt-in and benefit from a faster way to securely connect their accounts to apps and services on the Plaid network. #### Optional components  ##### App2app  [App2app](https://openid.net/tag/app2app/) is a mechanism that allows mobile apps performing OAuth2 or OpenID Connect based authentication to offer a much simpler faster flow if the user already has an app provided by the authorization server owner installed on their mobile device. The example below uses App2app. The user is brought to the First Platypus app to authenticate where they can use biometrics. (An image of "App2app Example Login Page") ##### WebAuthn  We also recommend using [WebAuthn](https://webauthn.guide/) for web-based authentication. Users can enroll and then easily use biometrics to authenticate on any web browser. (An image of "WebAuthn Biometric Login Example") --- # Account - Activity, logs, and status | Plaid Docs Dashboard logs and troubleshooting  =================================== #### Discover logging and troubleshooting information available in the Plaid Dashboard  #### Logs for webhooks, Link, and API requests  The Plaid Dashboard [Activity Log](https://dashboard.plaid.com/activity/usage) shows the past 14 days of API activity. Using the dashboard, you can see a record of all requests and responses, as well as all webhooks sent by the Plaid API, and all Link events. (An image of "Plaid API logs showing request types, descriptions, institutions, environments, timestamps, and response codes in a dashboard.") You can view the details of any request, response, webhook, or event, and view error information for any failed API request. (An image of "Request and response details for failed API call: invalid public token expired. Error code 400, Halifax, Bank API, success rate 100%.") ##### Link analytics  The [Link analytics](https://dashboard.plaid.com/link-analytics) page in the Dashboard shows a summary of Link conversion, along with top Link errors your users are experiencing and recommendations for increasing conversion. For more details, see [Link conversion](https://plaid.com/docs/link/best-practices/index.html.md) . #### Logs for billable activity  The Plaid Dashboard [Usage Page](https://dashboard.plaid.com/activity/usage) shows billable API usage for most Plaid products. Usage data is also available via the Plaid MCP server, allowing you to interact with this data via chat or an LLM agent. For more details, see the [blog post on the Plaid Dashboard MCP server](https://plaid.com/blog/plaid-mcp-ai-assistant-claude/) and the [Plaid Dashboard MCP server documentation](https://plaid.com/docs/resources/mcp/index.html.md) . #### Logs for Payment Initiation, Transfer, and Signal  The Payment Initiation (UK and Europe), Transfer, and Signal products also have their own logs in the Plaid Dashboard. If you are enabled for these products, links to view activity will appear in the Products menu within the dashboard. Using these logs, you can view the status and history of payment and transfer attempts, returns, and other product-specific information. For Payment Initiation and Transfer, this information is also available via the API; for more details, see the API documentation for [Payment Initiation](https://plaid.com/docs/api/products/payment-initiation/index.html.md) and [Transfer](https://plaid.com/docs/api/products/transfer/index.html.md) . #### Audit logs  Audit logs of activity occurring in the Dashboard is available to admins on teams with Premium Support Packages. To learn more about upgrading to a Premium Support Package, contact your Account Manager. Dashboard audit logs include user identity, action type, IP address, and timestamps for core Dashboard actions. Audit log support for actions on product-specific Dashboard pages is not yet available. #### Troubleshooting institution status  The Plaid Dashboard contains an [Institution Status](https://dashboard.plaid.com/activity/status) pane, which allows you to view details and stats about institution connectivity over the past two weeks, as well as any recent downtime or special notes about the institution. You can also use this view to search institutions to see whether they are supported by Plaid and which Plaid products can be used with them. Most of this information is also available via the API; for more information on programmatically retrieving institution status, see [Institutions API endpoints](https://plaid.com/docs/api/institutions/index.html.md) . ##### Institution status details  (An image of "Plaid status for a bank: Auth 100%, Identity 100%, Transactions 100%. Historical graph of item add success. All products 100% success rate.") The graph at the top of the page shows institution status over the past two weeks, while the boxes below the graph show the current institution status. The time range used for calculating the current institution status may range from the most recent few minutes to the past six hours. In general, smaller institutions will show status that was calculated over a longer period of time. For Investment updates, which are refreshed less frequently, the period assessed may be 24 hours or more. Plaid displays both Item add success rates (success adding new Items) and Item update success rates (success refreshing data for existing Items). The success rate as shown on the [main status page](https://dashboard.plaid.com/activity/status) is the Item add success rate. All success rates reflect the percentage of successful attempts to retrieve data. Both Plaid errors and institution errors are combined when calculating the percentage of unsuccessful attempts. User errors, such as an Item add failing due to an incorrect password entered during Link, are not considered when calculating success rates. All success rates are rounded down to the nearest percentage point. A success rate of 99% or higher indicates that the institution is considered healthy. ##### Institution migration status  Within the Institutions Status page, you can use the [migration pane](https://dashboard.plaid.com/activity/status) to view the status of OAuth migrations. The migration pane shows all institutions with planned or current migrations and allows you to drill in to see the migration timeline and the impact on existing Items. (An image of "Plaid migration status for a bank, in progress, type: Classic to API, timeline displayed.") ##### Insufficient data and delayed data  If the institution has not had enough Plaid traffic during the window being evaluated to produce meaningful health data, the "Insufficient Data" message will be displayed. This is most likely to affect small institutions. If this occurs, try using the [Item Debugger](https://dashboard.plaid.com/activity/debugger) instead to diagnose the problem. If Plaid has not been able to update data from the institution for over two days, the institution status may appear as "delayed". If it has been at least two weeks since the last successful institution update, or if Plaid is aware of a problem in updating data that is likely to take over two weeks to resolve, the institution status will appear as "stopped". ##### Alerting  You can set up alerts to be notified of changes to the global Item add success rate of any institution. From [Settings > Team Settings > Communications](https://dashboard.plaid.com/settings/team/notification-preferences) , open the "Status alerts" tab to create an alert. You can also create an alert directly from the institution's status page. If you choose webhook-based alerting, the webhook that will be sent is the [INSTITUTION\_STATUS\_ALERT\_TRIGGERED](https://plaid.com/docs/api/institutions/index.html.md#institution_status_alert_triggered) webhook. #### Troubleshooting with Item Debugger  To view the status of a specific Item or Link session in the dashboard, you can use the [Item Debugger](https://dashboard.plaid.com/activity/debugger) . You can look up Items and Link sessions by `client_user_id`, `item_id`, `access_token`, `link_token`, or `link_session_id`. Troubleshooting information available includes error codes and suggested troubleshooting steps you can take to resolve any errors. Access to the Item Debugger is also available via Plaid's Dashboard MCP server, allowing you to troubleshoot Item details via LLM chat or an agent. For more details, see the [blog post on the Plaid Dashboard MCP server](https://plaid.com/blog/plaid-mcp-ai-assistant-claude/) and the [Plaid Dashboard MCP server documentation](https://plaid.com/docs/resources/mcp/index.html.md) . (An image of "Item debugger showing a healthy item for institution Juno with an ID, transactions updated 5 hours ago.") --- # Account - Pricing and billing | Plaid Docs Plaid pricing and billing  ========================== #### Learn about pricing, what is considered a billable event, and how to monitor your bill  #### Pricing information  A price list is not available in the documentation. **To view pricing, [apply for Production access](https://dashboard.plaid.com/overview/request-products) . Pricing information for Pay as you go and Growth plans will be displayed on the last page before you submit your request.** For Custom plans, select the Custom option and submit the form, and Sales will reach out to discuss pricing. Or, you can [contact Sales](https://plaid.com/contact/) to learn more about custom pricing. #### Pricing plans  Plaid offers three types of pricing plans: * **Pay as you go** – has no minimum spend or commitment. * **Growth** – Minimum spend, annual commitment. Lower per-use costs than Pay as you go plans. * **Custom (aka Scale)** – Higher minimum spend and annual commitment but provides access to the lowest per-use costs. Minimums can apply across the entire Plaid account or by product and can apply across both Plaid and Plaid Check. For a Custom plan, [contact Sales](https://plaid.com/contact/) . To change your plan, see [Viewing or changing pricing plans](https://plaid.com/docs/account/billing/index.html.md#viewing-or-changing-pricing-plans) . For customers based in the EU or UK, or who will be serving end users based in the EU or UK, only Custom plans are offered. In addition, Signal Transaction Scores, Transfer, and all Plaid Check products except for Base Report and Income Insights, are currently offered only via Custom plans. #### Pricing models  Plaid has multiple different pricing models, depending on the product. These models only apply to Production traffic; usage of Sandbox is always free. Note that the details outlined below are general information and guidance about typical pricing structures and policies for new customers. Your specific pricing and billing structure is governed by your agreement with Plaid. If you have questions about your bill, [contact Support](https://dashboard.plaid.com/support/new/admin/account-administration/pricing) . Endpoints that are not associated with any particular product are typically available to Plaid customers free of charge. Examples of these free-to-use endpoints include [Institutions endpoints](https://plaid.com/docs/api/institutions/index.html.md) , [Item endpoints](https://plaid.com/docs/api/items/index.html.md) , [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) (not to be confused with [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) , which is associated with the Balance product), and [user management endpoints](https://plaid.com/docs/api/users/index.html.md) . ##### One-time fee  You will incur charges for one-time fee products whenever the product is successfully added to an Item. This occurs when an Item has been successfully created by Link and this product was specified in [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . An Item is typically considered to be successfully created if a `public_token` was exchanged, but sometimes (e.g. when using micro-deposit Auth flows, or the in-Link Identity Match flow) it may be considered created once the `public_token` was created. If the Item was not initialized with the product at the time of creation, the product can also be added to the Item later by calling a product endpoint belonging to that product on the Item. For one-time fee products, it does not matter how many API calls are made for the Item (or user); the cost is the same regardless of whether the product's endpoints are called many times or zero times. For the Auth and Identity products, if the product was added to the Item via the `optional_products` parameter in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call, you will not incur charges for those products until their corresponding endpoint is called. For example, if you initialize an Item with `auth` in the `products` parameter and `identity` in the `optional_products` parameter, you will not be charged for Identity on that Item until you call [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) or [/identity/get](https://plaid.com/docs/api/products/identity/index.html.md#identityget) for that access token. Note: Identity Match is a Per-request flat fee product, so calling [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) multiple times will result in repeated charges for Identity Match, but only one charge for Identity. For Document Income and Payroll Income, charges will be incurred when data is available to be accessed. This will typically be indicated by the `INCOME_VERIFICATION` webhook firing with the status of `VERIFICATION_STATUS_PROCESSING_COMPLETE`. For Document Income, the fee depends on the documents processed and which processing options are enabled (i.e. fraud, document parsing, or both). For bank statements, the fee is based on the number of pages in the statement; for all other document types, there is a flat fee per document. For Hosted Link, each session delivered via SMS or email will incur a one-time fee. There is no fee to use Hosted Link if you are not using Plaid to deliver sessions. When using Transfer, each Item initialized with Transfer (unless created using the [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) endpoint) will also incur the one-time Auth fee, and no additional fee will be incurred for using Auth endpoints with that Item. When using Layer, a billing event is incurred for each converted Link session (when `onSuccess` fires). You will not be billed for Layer eligibility checks or unconverted Layer sessions. Products that use one-time fee pricing are: * Auth * Identity * Income (except for [/credit/bank\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomerefresh) and [/credit/payroll\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerefresh) , which use per-request pricing) * Layer ##### Subscription fee  Under the subscription fee model, an Item will incur a monthly subscription fee as long as a valid `access_token` exists for the Item. Removing the Item via [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) will end the subscription. The subscription will also be ended if the end user depermissions their Item, such as via [my.plaid.com](https://my.plaid.com/) or by contacting Plaid support. If the end user depermissions the Item via their financial institution's portal, this may also end the subscription, although this is not guaranteed, as not all institutions notify Plaid about permissions revocations performed via their portals. Once a subscription fee product has been added to an Item, it is not possible to end the subscription and leave the Item in place. The Item must be deleted, which can be done by calling [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) . If the Item's subscription is active, Plaid will charge for the subscription even if no API calls are made for the Item or API calls cannot be successfully made for the Item (e.g. because the Item is in an error state). Plaid's subscription cycle is based on calendar months in the UTC time zone; each month begins a new cycle. Fees for Items created or removed in the middle of the month are not pro-rated. If you add a subscription-billed product to an Item using your free API request allocation (for example, by creating an Item initialized with Transactions, Investments, or Liabilities in Limited Production), you will be not be charged for that subscription unless you continue to use the Item after using up your free API requests and receiving full Production access. When using subscription fee products in Production, it is important to persist the access token so that you can remove the Item when needed to avoid being billed indefinitely. If you have created access tokens for which you are being billed but did not store the tokens, [contact support](https://dashboard.plaid.com/support) for assistance. Products that use subscription fee pricing are: * Transactions (except for the [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) endpoint) * Recurring Transactions * Liabilities * Investments (except for the [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) endpoint) A single Item can have multiple different subscriptions on it (for example, Transactions and Liabilities), but the same subscription will not be added multiple times to the same Item. Investments has two separate subscriptions that can be associated with an Item: Investments Holdings and Investments Transactions. Adding Investments to an Item via [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) or by calling [/investments/holdings/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentsholdingsget) adds the Investments Holdings subscription. Calling [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) on an Item adds both the Investments Transactions and Investments Holdings subscriptions. ##### Per-request flat fee  For per-request flat fee products, a flat fee is charged for each successful API call to that product endpoint. Products and endpoints that use per-request flat fee pricing are: * Balance ([/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) or [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) ) * Signal Transaction Scores ([/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) ) * Refresh endpoints, except for Statements Refresh ([/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) , [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) , [/credit/bank\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomerefresh) , [/credit/payroll\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerefresh) ) * Asset report PDF and Audit Copy ([/asset\_report/audit\_copy/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportaudit_copycreate) , [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) ) * Transfer Risk Engine ([/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) ), see [Transfer fee model](https://plaid.com/docs/account/billing/index.html.md#transfer-fee-model) for more details * Identity Match ([/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) ), see below for more details * Beacon Account Insights ([/beacon/user/account\_insights/get](https://plaid.com/docs/api/products/beacon/index.html.md#beaconuseraccount_insightsget) ) There is also a flat fee for each link delivered through SMS or email via Link Delivery (beta), when using Hosted Link with the optional Link Delivery feature enabled. Identity Match can optionally be enabled via the Dashboard. In this integration mode, the Identity Match check is automatically performed during Link and you never call the [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) endpoint directly. The billing trigger for Identity Match in this situation is when Plaid successfully obtains Identity data from the Item. If Plaid could not obtain any Identity data for the Item, you will not be billed. The [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) endpoint is a billable endpoint that is used by two different products, Balance and Signal Transaction Scores. It will be billed as a Balance API call if used with a Balance-only ruleset. It will be billed as a Signal Transaction Scores API call if used with a Signal Transaction Score-powered ruleset, or if used with no ruleset on a Signal Transaction Scores-enabled account. Calls to [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) that use a ruleset (including the default ruleset) will be billed when the ruleset is evaluated, even if some or all data could not be extracted from the Item. ##### Per-request flexible fee  For per-request flexible fee products, a fee is charged for each successful API call to that product endpoint. The fee will vary depending on the amount of information requested in the API request. For Assets, the fee is calculated based on the number of Items in the report as well as the number of days of history requested. An additional fee is charged for an Asset Report containing more than 5 Items; this fee will be charged twice if the Asset Report contains more than 10 Items, and so on. An "Additional History" fee is also charged for each Item for which more than 61 days of history is requested. The Additional History fee is a flat fee regardless of how many days of additional history are requested; it does not matter how many days beyond 61 are requested. For Enrich, the flexible fee is based on the number of transactions sent to be enriched. For [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) , the flexible fee is based on the number of statements available between the provided start and end dates found when calling [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) . Note that you will be charged for any statement extracted, even those that you previously requested at an earlier date. Products that use per-request flexible fee pricing are: * Assets * Statements Refresh * Enrich ##### Per-Item flexible fee  For per-Item flexible fee products, a fee is charged when the Item is created, which is deemed to occur when the `public_token` is created. The fee will vary depending on the amount of information requested when creating the Item. For Statements, the flexible fee is calculated based on the number of statements available within the date range requested when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . The fee will be charged even if you do not call any Statements endpoints. Products that use per-Item flexible fee pricing are: * Statements (excluding [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) , which is charged as a per-request flexible fee) ##### Payment Initiation fee model  A fee is charged for each payment initiated. A payment is considered initiated if the end user reached the end of the payment flow and received a confirmation success screen. Standing orders (recurring payments) are considered a single payment but are billed on a separate pricing schedule from one-time payments. Fees will vary depending on the payment amount and the network used to transfer the payment. ##### Plaid Check fee model  Most Plaid Check products are charged when the corresponding /get endpoint is called ([/cra/check\_report/base\_report/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportbase_reportget) , [/cra/check\_report/income\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportincome_insightsget) , [/cra/check\_report/network\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportnetwork_insightsget) , and [/cra/check\_report/pdf/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportpdfget) ). The exception is Partner Insights, which is charged when the associated report is first generated and `partner_insights` is specified in the product array, which can happen during [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) , [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) , or [/cra/check\_report/partner\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportpartner_insightsget) . The Plaid Check fee model is similar to the one-time fee model. Like the one-time fee model, there is no additional charge to call an endpoint multiple times if the same Consumer Report is being retrieved each time. However, unlike the one-time fee model, if a new Consumer Report is generated for a given `user_token`, which can be done by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) , a new set of fees will be incurred for calling a `/get/` endpoint on the new Consumer Report. In addition to any product-specific charges, each Plaid Check Report incurs a Base Report charge. This fee is charged when the first `/get` endpoint is called for a given `user_token` and report. For example, if you called [/cra/check\_report/base\_report/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportbase_reportget) followed by [/cra/check\_report/income\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportincome_insightsget) , you would be charged the Base Report fee when [/cra/check\_report/base\_report/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportbase_reportget) is called, but only charged the Income Insights fee when [/cra/check\_report/income\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportincome_insightsget) is called. If you call the endpoints in the opposite order, calling [/cra/check\_report/income\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportincome_insightsget) followed by [/cra/check\_report/base\_report/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportbase_reportget) , both the Base Report fee and Income Insights fee would be charged when [/cra/check\_report/income\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportincome_insightsget) is called, and no fees would be charged when calling [/cra/check\_report/base\_report/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportbase_reportget) . For certain use cases, Plaid Check customers can select between different fee and billing models to accommodate different use cases and provide cost predictability. For details, [contact Sales](https://plaid.com/check/income-and-underwriting/#contact-form) . ##### Transfer fee model  When working with Transfer, there are three fees: The Auth fee, the Risk Engine Fee, and the per-transfer fee. ###### Auth fee  When using Transfer, each Item with the Transfer product (unless created by the [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) endpoint) will also have Auth added to the Item and will incur a one-time Auth fee in addition to the per-payment Transfer fee. ###### Risk Engine fee  When using the Transfer Risk Engine, calls to [/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) will incur a per-request flat fee. If you have opted out of the Transfer Risk Engine and are instead checking for transfer risk in another way, such as via direct calls to Balance or Signal endpoints, you will not be charged for calls to [/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) . If the Transfer Risk Engine is unable to assess the return risk of the transaction (i.e. it returns a value of `approved` with a non-`null` `rationale_code`), you will not be charged for the [/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) call. ###### Per-transfer fee  A fee is charged for each transfer made. A transfer is considered made if it was successfully created via [/transfer/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercreate) . The per-transfer fee is charged even if the payment is later reversed or clawed back. In such cases, a reversed payment fee may be charged as well. Fees will vary depending on the payment amount and the network used to make the payment. A per-transfer fee is also applied to funds transfers between your bank account and your balance held with Plaid, such as sweeps, or payments to and from the Plaid Ledger. ##### Monitor fee model  Monitor uses a model with two fees: * A base fee, which is incurred the first time a new user is scanned * A rescanning fee, which is incurred based on the number of users rescanned each month The rescanning fee is calculated based on the number of users on a rescanning program in a given month and works similarly to the subscription fee model. Plaid's subscription cycle is based on calendar months in the UTC time zone; each month begins a new cycle. Fees for users added to or removed from a rescanning program in the middle of the month are not pro-rated. To avoid being rebilled for a user you no longer need recurring scans for (e.g., a user who has closed their account with you), create a program specifically for former users, make sure rescans are disabled, and move the user into that program when they are offboarded from your system. ##### Identity Verification fee model  For Identity Verification, a fee is charged based on the end user performing certain activities during the Link flow. The following events are billed: * Anti-Fraud Engine (the first verification check run, typically when the end user enters their phone number to begin SMS verification. If this is skipped, the Anti-Fraud Engine fee will be incurred later on. For example, if the SMS check is skipped in favor of the document check, the document check will incur both the Anti-Fraud Engine fee and the document check fee.) * Data Source verification (cost varies based on the end user's country, see your pricing contract for details) * Document check * Selfie check If a retry is issued for a session, the retry will be billed like a new session, including the Anti-Fraud Engine and any other verification checks included in the retried session. #### Partnerships pricing  If you are using a Plaid partner, you will be charged for Plaid API usage performed by the partner using your processor token in the same way as if the calls had been made by you. The partner's API usage will not be included in your Plaid Dashboard [usage report](https://dashboard.plaid.com/activity/usage) . If you have questions about the partner's API activity, contact the Plaid partner. #### Viewing billable activity and invoices  To view billable activity for your account, see the Production [Usage](https://dashboard.plaid.com/activity/usage) page on the Dashboard. Invoices will be sent each month to the [billing contact](https://dashboard.plaid.com/settings/company/profile) configured for the team. ##### Setting cost centers  For some products, you can set a cost center using the `PLAID-COST-CENTER-ID` header to set an arbitrary string of 3-30 printable ASCII characters as a cost center ID. This header should be applied when calling [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) . If the billable event occurs later (i.e. when using an endpoint billed on a per-request fee model, like [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) or [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) , or when using [post-Link initialization](https://plaid.com/docs/link/initializing-products/index.html.md#adding-products-post-link) it should be applied when calling the billable endpoint. For Identity Verification, the header should be added when calling [/identity\_verification/create](https://plaid.com/docs/api/products/identity-verification/index.html.md#identity_verificationcreate) or [/identity\_verification/retry](https://plaid.com/docs/api/products/identity-verification/index.html.md#identity_verificationretry) . If a `PLAID-COST-CENTER-ID` is set, the cost center will be reported in billable activity reports and invoices. Products that support setting cost centers are: * Auth * Identity * Identity Verification * Balance * Transactions #### Updating payment information  Pay as you go customers can update [payment method](https://dashboard.plaid.com/settings/team/billing) and [billing contact](https://dashboard.plaid.com/settings/company/profile) information on the Plaid Dashboard. Custom plan customers should contact their account manager to update this information. #### Updating products  To view your currently enabled products, see the [Products](https://dashboard.plaid.com/settings/team/products) page on the Dashboard under the Team Settings section. To add additional products to your Plaid account you can [submit the product request form](https://dashboard.plaid.com/overview/request-products) located on the Dashboard. This form is also accessible via the [Products](https://dashboard.plaid.com/settings/team/products) page. #### Viewing or changing pricing plans  To view current pricing or to switch between pricing plans, customers on Pay as you go or Growth plans can use the [Plans page](https://dashboard.plaid.com/settings/team/plans) within the Dashboard. Customers with Pay as you go plans can upgrade their plan at any time. Customers with Growth plans can submit a request to upgrade or downgrade their plan at any time; requests will take effect after the minimum commitment period on the existing Growth plan has been satisfied. Customers on Custom plans should [contact Support](https://dashboard.plaid.com/support/new/product-and-development) or their Plaid Account Manager. --- # Account - Overview | Plaid Docs Account Overview  ================= #### Learn about your Plaid developer account  #### Developer account overview  Your Plaid developer account is managed through the [Plaid Dashboard](https://dashboard.plaid.com) . (An image of "Plaid Dashboard with Institution Status, Usage, and Item Debugger options. Support shows recent case details and status.") This section provides information on topics related to managing your Plaid developer account, such as [billing](https://plaid.com/docs/account/billing/index.html.md) , [account security](https://plaid.com/docs/account/security/index.html.md) , and [team membership](https://plaid.com/docs/account/teams/index.html.md) . You can also find information on [logging and troubleshooting](https://plaid.com/docs/account/activity/index.html.md) in the dashboard, including institution status details and logs of API activity on your account. A Plaid developer account is different from a Plaid account at my.plaid.com. To manage the financial information you're sharing via Plaid, visit [my.plaid.com](https://my.plaid.com/) . --- # Account - For resellers | Plaid Docs Resellers  ========== #### Create and manage your customers  The Reseller Dashboard and API are functionality that Plaid has developed to support our authorized Reseller Partners. If you don't have a formal partnership established with Plaid, [contact us](https://plaid.com/contact/) to learn about signing up or to receive the appropriate contractual agreements to unlock this functionality. #### Overview  This guide explains how an authorized Plaid Reseller Partner can create and manage their End Customer teams. Each one of your End Customers is required to have a unique set of Plaid API keys, which enables reporting their billable usage, filing and managing support issues, customizing their Plaid Link experience, and registering their applications with our financial institution partners. #### Configuring your Reseller Partner team  When you join the Plaid Reseller Partner program, you will work with your Partner Account Manager to set up a Reseller Partner team for your company. Get started by [signing up](https://dashboard.plaid.com/signup) for a Dashboard account, which will automatically create a team for you. Next, talk to your Partner Account Manager to configure your team as a Reseller Partner team. If you already have a Plaid Dashboard account, or are using Plaid for a separate use case or business line, we require that you create a separate Reseller Partner team. You can use the same Dashboard user account (email address) to access both teams. #### Methods for creating and managing End Customers  Plaid offers two ways to create and manage End Customers: 1. The Dashboard (described in this guide) 2. The reseller API (documented in the [reseller API reference docs](https://plaid.com/docs/api/partner/index.html.md) ) The steps described in [Configuring your Reseller Partner team](https://plaid.com/docs/account/resellers/index.html.md#configuring-your-reseller-partner-team) are required regardless of whether you use the Dashboard or the reseller API. If you expect to onboard a large number of End Customers, or if you'd like to minimize the amount of manual work required by your operations staff, we strongly recommend that you integrate with our [reseller API](https://plaid.com/docs/api/partner/index.html.md) , which allows you to programmatically incorporate End Customer creation and management into your onboarding flows. Whether you create End Customers programmatically via the reseller API or manually in the Dashboard, they will be visible and active in both places. For example, if you create an End Customer via the API, you will be able to view it in the Dashboard, and vice versa. Under the hood, the reseller API and the Dashboard behave identically and follow the same onboarding process, which is described in [Creating End Customers](https://plaid.com/docs/account/resellers/index.html.md#creating-end-customers) . #### Viewing the Dashboard as a Reseller Partner  Being a member of a Reseller Partner team automatically grants you permission to create and manage End Customers. However, you must first switch to your Reseller Partner team in the Dashboard to exercise these permissions. Ensure that your Reseller Partner team's name appears in the top left-hand corner of the Dashboard. If a different team's name is displayed, click the team's name to open the team switcher and then select your Reseller Partner team's name: (An image of "Dropdown menu showing selected team 'My reseller team' and option to 'Create new team.'") If your Reseller Partner team does not appear in the list (which can happen if you have a lot of End Customers), you will first need to go to the Teams page. Click on your name in the bottom-left corner of any page and select [Teams](https://dashboard.plaid.com/personal/teams) . (An image of "Dropdown menu with options: Profile, Security, Teams, Logout; associated with user section labeled 'My Name'.") You can then access reseller partner features in the navigation bar on the left side of the dashboard (An image of "Manage End Customers: Options for Summary, Support, and Usage with icons for each.") #### Creating End Customers  First, follow the instructions in [Viewing the Dashboard as a Reseller Partner](https://plaid.com/docs/account/resellers/index.html.md#viewing-the-dashboard-as-a-reseller-partner) . Next, select the team switcher in top left-hand corner and then click **Create new team**. Fill out and submit the form. Plaid automatically enables new customers for Data Transparency Messaging, including all new End Customers. In Production, Link will not work if a use case has not been selected for Data Transparency Messaging. To automatically populate a Data Transparency Messaging use case, when filling out the form to create a new team, Select "Apply customization from your default Link configuration" in the Link Customization dropdown. This will duplicate the default Link customization from your parent account, including the use case for Data Transparency Messaging. Alternatively, you can individually customize this setting on the Dashboard on a per-End Customer basis by going to **[Link > Link Customization > Data Transparency](https://dashboard.plaid.com/link/data-transparency-v5)** . Once you have created the End Customer, it will appear in the [Partner End Customer Summary](https://dashboard.plaid.com/partner/customers-summary) page: (An image of "Partner End Customer Summary page with search, filter by Production and OAuth Status, create button, list of end customers.") You can view the newly created End Customer's API keys by clicking on the End Customer and navigating to the Developers > [Keys](https://dashboard.plaid.com/developers/keys) tab. The customer will automatically be enabled Sandbox and Limited Production to facilitate testing. The newly created End Customer will be assigned a _status_, which will change as they move through the onboarding process. The possible statuses are described below: * `UNDER REVIEW`: You successfully created the End Customer, but more information is needed before Plaid can approve or deny them. This status is most commonly seen when the newly created End Customer is already a Plaid customer, in which case you will need to talk with your Partner Account Manager to resolve the channel conflict. * `DENIED`: You successfully created the End Customer, but Plaid has determined that we cannot service them through your reseller contract. This status is most commonly seen in the case of channel conflicts (i.e., Plaid already has a contract with this End Customer). * `PENDING ENABLEMENT`: You successfully created the End Customer and Plaid has approved them. You may now enable the End Customer (see the next section, [Enabling End Customers](https://plaid.com/docs/account/resellers/index.html.md#enabling-end-customers) , for details on the enablement process). * `ACTIVE`: You successfully created and enabled the End Customer. The End Customer's API keys can now be used in the Production environment. #### Enabling End Customers  When you create an End Customer, they will be enabled in Sandbox and Limited Production. This allows you to test your End Customers prior to enabling them for full Production access. It also prevents you from accidentally incurring billable activity prior to launching with your End Customers. To enable an End Customer, find the end customer you wish to enable in the [Partner End Customer Summary](https://dashboard.plaid.com/partner/customers-summary) page, and then click the **Enable** button. Alternatively, you can select their team to navigate to the [Overview](https://dashboard.plaid.com/overview) page and then click **Get production access**. Enablement happens instantly. Once the End Customer has been enabled for full Production, you will be able to make API calls to Plaid in the full Production environment. Any remaining unused credits for free API calls will _not_ carry over into full Production. When you enable an End Customer, Plaid will automatically begin registering them with financial institutions that require OAuth access for connectivity, such as Chase and Capital One. Registration at most institutions happens within 24 hours, but for some institutions it may take several weeks. You can check the registration status for all OAuth institutions via the [OAuth institutions](https://dashboard.plaid.com/settings/compliance/us-oauth-institutions) page for a given End Customer. Alternatively, you can set up a webhook in the dashboard to get automatically notified when an End Customer has their OAuth status updated. To configure the webhook, go to the [webhooks page](https://dashboard.plaid.com/developers/webhooks) and create a new webhook listening to the **End Customer OAuth status updated** event type. For details on the webhook, see the [partner API documentation](https://plaid.com/docs/api/partner/index.html.md#partner_end_customer_oauth_status_updated) . If you encounter errors during OAuth registration, or if after 3 business days your end customer has not been registered at _any_ OAuth institutions, contact your Partner Account Manager for help. #### Managing End Customers  All of your end customers' support tickets are searchable in the [Partner End Customer Support](https://dashboard.plaid.com/partner/customers-support) page, and their API usage data can be found in the [Partner End Customer Usage](https://dashboard.plaid.com/partner/customers-usage) page. #### Deleting End Customers  In some cases you may wish to delete an End Customer prior to enabling them for Production, possibly because they were created in error or because they are no longer working with you. To delete an End Customer, go to the [Partner End Customer Summary](https://dashboard.plaid.com/partner/customers-summary) page, and then click **Delete**: (An image of "Deleting an End Customer confirmation with Yes and No options. Lists End Customer 0-2, dates, status, and actions.") Deleting the End Customer will immediately deactivate their API keys and remove them from view in the Dashboard. This feature does not work for Production-enabled End Customers (those with a status of `ACTIVE`). To delete a Production-enabled customer, contact your Partner Account Manager. --- # Account - Security | Plaid Docs Plaid Dashboard account security and account management  ======================================================== #### Learn how to protect and manage your Plaid Dashboard account  #### Password resets  To reset your password, log in to the Plaid Dashboard, then access the [Personal Security page](https://dashboard.plaid.com/personal/security) , which contains a password reset screen. If you ever forget your password to your Plaid Dashboard account, use the **Password reset** button on the login page to reset your password. You will only be able to receive your password reset email if you have verified your Plaid email address. If your email address is unverified, search your email for a message from [no-reply@plaid.com](https://plaid.commailto:no-reply@plaid.com) with the subject line "Confirm your email" and click on the link in that email to verify your address. You should then be able to reset your password. #### Two-factor authentication  Plaid allows you to enable two-factor authentication for your dashboard account via either text message or app-based authentication. After you enable two-factor authentication, you’ll be prompted to enter an authentication code each time you sign in. When you enable two-factor authentication, Plaid will show you a backup recovery code. Be sure to write down the recovery code and store it in a safe place, since it will only be displayed once. To check whether your team members have enabled two-factor authentication, you can visit the [Team Members page](https://dashboard.plaid.com/settings/team/members) , where your team members' status will be displayed as "2FA ON", "2FA OFF", or "PENDING". #### SSO login  Plaid offers SSO (single sign-on) login to the Plaid Dashboard for all customers, except those on Pay-as-you-go-plans. We support all major identity providers, including Okta, Google Workspaces, OneLogin, and over 30 others. You can enable your account for SSO via the Dashboard, under [Settings > Team Settings > SSO](https://dashboard.plaid.com/settings/team/sso) . There is no additional charge for SSO enablement. SAML support is available to customers on Plus or Premium Support packages, and SCIM support is available to customers on Premium Support packages only. To learn more, contact your Account Manager. #### Rotating keys  If your `secret` is ever compromised, you should rotate it from the [Keys](https://dashboard.plaid.com/developers/keys) section of the Dashboard. Clicking the **Rotate secret** button will generate a new secret, which you can then copy and test. The old secret will still remain active until you delete it by clicking the **Delete** button. #### Managing notification settings  To control which emails you receive from Plaid, you can update your [notification settings](https://dashboard.plaid.com/settings/team/notification-preferences) in the Dashboard. #### Deleting accounts  To leave or delete a team, see [Leaving or deleting a team](https://plaid.com/docs/account/teams/index.html.md#leaving-or-deleting-a-team) . To delete your Plaid Dashboard login itself, [contact Support](https://dashboard.plaid.com/support/new/product-and-development/account-administration/delete-account) . Note that deleting your login is irreversible. A Plaid Dashboard account is different from a Plaid account at my.plaid.com. To manage the financial information you're sharing via Plaid, visit [my.plaid.com](https://my.plaid.com/) . --- # Account - Teams | Plaid Docs Plaid teams  ============ #### Learn about Plaid teams  Your Plaid Dashboard account can create or join multiple teams to enable collaboration across different teams or companies. You can be a member of multiple Plaid teams, each with their own API keys and billing information. #### Creating a team  At the top-left of your Plaid Dashboard, click the team name drop-down and select **Create new team**. (An image of "Dropdown displaying team options: WonderWallet, WonderWallet Team 2, WizardCash, and option to create a new team.") Once you have submitted your team name and purpose into the form, click **Create team**. Your new team will come with a fresh set of API keys which can be used to build a new Plaid integration. #### Managing your team membership  You can create a new team, view your existing teams, and leave a team from the [Personal menu](https://dashboard.plaid.com/personal/teams) , found at the bottom-left of your Plaid Dashboard: (An image of "Personal menu with options: Profile, Security, Teams, Logout for Plaid User; dropdown indicator present.") #### Team-specific settings  Visit [Settings > Team Settings](https://dashboard.plaid.com/settings/company/profile) in your Plaid Dashboard to view your company information, team members, billing settings, and invoices: (An image of "Company and team settings menu with options for profile, branding, members, products, communication, link migrations, and compliance.") #### Managing team member permissions  From the Team Settings menu, you can also add and remove team members, as long as you have the Team management permission. You can assign specific permissions to each team member that you add to your Plaid team. Members with the **Admin** permission are automatically granted all permissions to the entire Plaid Dashboard. Members with the **Team Management** permission have similar access to the Admin permission – they can see and manage almost everything. However, they can't view or change API keys or view and file Support tickets. Some of what this role can do: * Make production / product requests * Change API configurations (OAuth redirect URIs, change pinned API version) * Configure webhooks * Configure team’s display settings and name * Manage billing / invoices * Manage team membership * Manage OAuth migrations * Delete the team Members with the **Support** permission have access to the Support pages for viewing and filing support tickets. Members with the **Link Customization Write Access** permission can create or edit Link customizations. Certain pages are accessible to all Dashboard team members, regardless of their permissions. These pages include: * Overview * Status * Logs * Usage * Analytics You can also use the Team Settings page to control which environments team members have access to. In order to view the team's `client_id`, team members must have access to at least one environment. ##### Identity Verification, Monitor, and Beacon permissions  Members with Admin or Team Management permissions are able to assign granular permissions for Plaid Identity Verification, Monitor, and Beacon. There are numerous permission settings, which allow you to define who should be able to view certain information (e.g. end user PII) and take various actions. These permissions can be assigned while adding a team member or editing permissions for existing team members in the [Team Settings](https://dashboard.plaid.com/settings/team/members) page. Note that 2FA will need to be enabled for a user to be able to access this data. ##### Transfer Dashboard permissions  See the [Transfer Dashboard documentation](https://plaid.com/docs/transfer/dashboard/index.html.md#dashboard-permissions) for details on Transfer-specific Dashboard permissions. ##### Credit Dashboard permissions  * **Credit Dashboard All Permissions** - Grants access to all Credit Dashboard features. * **Credit Dashboard Access** - Grants access to view Credit Dashboard * **Credit Dashboard Application Creation** - Grants ability to create hosted link URLs * **Credit Dashboard User Profile Access** - Grants access to view Credit Dashboard user profiles * **Credit Dashboard View PII** - Allows viewing of PII on Credit Dashboard #### Consolidating multiple accounts using teams  Teams prevent you from having to maintain multiple developer accounts. However, if you have already created multiple accounts, you can still consolidate them into a single account without having to create new keys or re-apply for access. To do so, follow these steps: 1. Select an account to be the new primary account that will contain all the teams. 2. From each account that you will be consolidating into the new primary account, invite the new primary account to the team. 3. From each account that you will be consolidating into the new primary account, create a new empty team. 4. From the new primary account, accept the invitations. 5. From each account that you will be consolidating into the new primary account, leave the old team. Your teams will now be consolidated under the new account. #### Leaving or deleting a team  To leave or delete a team, click on your name in the lower-left corner of the Dashboard and select **Teams** to access the [Teams page](https://dashboard.plaid.com/personal/teams) . Click on the **...** button on the right side of the team's listing. Select **Leave Team** or **Delete Team**. Deleting the team will remove access to the team for all users, and the API keys for team will be deactivated. You must have the Team Management permission to delete a team. You may only delete a team via the Dashboard if you are on a Pay-as-you-go plan. If you have a dedicated Plaid Account Manager, contact your Account Manager instead to request team deletion. --- # API - Accounts | Plaid Docs Accounts  ========= #### API reference for retrieving account information and seeing all possible account types and subtypes  \=\*=\*=\*= #### /accounts/get  #### Retrieve accounts  The [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) endpoint can be used to retrieve a list of accounts associated with any linked Item. Plaid will only return active bank accounts — that is, accounts that are not closed and are capable of carrying a balance. To return new accounts that were created after the user linked their Item, you can listen for the [NEW\_ACCOUNTS\_AVAILABLE](https://plaid.com/docs/api/items/index.html.md#new_accounts_available) webhook and then use Link's [update mode](https://plaid.com/docs/link/update-mode/index.html.md) to request that the user share this new account with you. [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) is free to use and retrieves cached information, rather than extracting fresh information from the institution. The balance returned will reflect the balance at the time of the last successful Item update. If the Item is enabled for a regularly updating product, such as Transactions, Investments, or Liabilities, the balance will typically update about once a day, as long as the Item is healthy. If the Item is enabled only for products that do not frequently update, such as Auth or Identity, balance data may be much older. For realtime balance information, use the paid endpoints [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) or [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) instead. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /accounts/get results. **options->account\_ids** (\[string\]) An array of account\_ids to retrieve for the Account. /accounts/get Node▼ ```javascript const request: AccountsGetRequest = { access_token: ACCESS_TOKEN, }; try { const response = await plaidClient.accountsGet(request); const accounts = response.data.accounts; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) An array of financial institution accounts associated with the Item. If /accounts/balance/get was called, each account will include real-time balance information. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "blgvvBlXw3cq5GMPwqB6s6q4dLKB9WcVqGDGo", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "holder_category": "personal", "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, { "account_id": "6PdjjRP6LmugpBy5NgQvUqpRXMWxzktg3rwrk", "balances": { "available": null, "current": 23631.9805, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "6666", "name": "Plaid 401k", "official_name": null, "subtype": "401k", "type": "investment" }, { "account_id": "XMBvvyMGQ1UoLbKByoMqH3nXMj84ALSdE5B58", "balances": { "available": null, "current": 65262, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "7777", "name": "Plaid Student Loan", "official_name": null, "subtype": "student", "type": "loan" } ], "item": { "available_products": [ "balance", "identity", "payment_initiation", "transactions" ], "billed_products": [ "assets", "auth" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_117650", "institution_name": "Royal Bank of Plaid", "item_id": "DWVAAPWq4RHGlEaNyGKRTAnPLaEmo8Cvq7na6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "bkVE1BHWMAZ9Rnr" } ``` \=\*=\*=\*= #### Account type schema  The schema below describes the various `types` and corresponding `subtypes` that Plaid recognizes and reports for financial institution accounts. For a mapping of supported types and subtypes to Plaid products, see the [Account type / product support matrix](https://plaid.com/docs/api/accounts/index.html.md#account-type--product-support-matrix) . #### Properties  **depository** (string) An account type holding cash, in which funds are deposited. **depository->cash management** (string) A cash management account, typically a cash account at a brokerage **depository->cd** (string) Certificate of deposit account **depository->checking** (string) Checking account **depository->ebt** (string) An Electronic Benefit Transfer (EBT) account, used by certain public assistance programs to distribute funds (US only) **depository->hsa** (string) Health Savings Account (US only) that can only hold cash **depository->money market** (string) Money market account **depository->paypal** (string) PayPal depository account **depository->prepaid** (string) Prepaid debit card **depository->savings** (string) Savings account **credit** (string) A credit card type account. **credit->credit card** (string) Bank-issued credit card **credit->paypal** (string) PayPal-issued credit card **loan** (string) A loan type account. **loan->auto** (string) Auto loan **loan->business** (string) Business loan **loan->commercial** (string) Commercial loan **loan->construction** (string) Construction loan **loan->consumer** (string) Consumer loan **loan->home equity** (string) Home Equity Line of Credit (HELOC) **loan->line of credit** (string) Pre-approved line of credit **loan->loan** (string) General loan **loan->mortgage** (string) Mortgage loan **loan->other** (string) Other loan type or unknown loan type **loan->overdraft** (string) Pre-approved overdraft account, usually tied to a checking account **loan->student** (string) Student loan **investment** (string) An investment account. In API versions 2018-05-22 and earlier, this type is called brokerage. **investment->529** (string) Tax-advantaged college savings and prepaid tuition 529 plans (US) **investment->401a** (string) Employer-sponsored money-purchase 401(a) retirement plan (US) **investment->401k** (string) Standard 401(k) retirement account (US) **investment->403B** (string) 403(b) retirement savings account for non-profits and schools (US) **investment->457b** (string) Tax-advantaged deferred-compensation 457(b) retirement plan for governments and non-profits (US) **investment->brokerage** (string) Standard brokerage account **investment->cash isa** (string) Individual Savings Account (ISA) that pays interest tax-free (UK) **investment->crypto exchange** (string) Standard cryptocurrency exchange account **investment->education savings account** (string) Tax-advantaged Coverdell Education Savings Account (ESA) (US) **investment->fixed annuity** (string) Fixed annuity **investment->gic** (string) Guaranteed Investment Certificate (Canada) **investment->health reimbursement arrangement** (string) Tax-advantaged Health Reimbursement Arrangement (HRA) benefit plan (US) **investment->hsa** (string) Non-cash tax-advantaged medical Health Savings Account (HSA) (US) **investment->ira** (string) Traditional Individual Retirement Account (IRA) (US) **investment->isa** (string) Non-cash Individual Savings Account (ISA) (UK) **investment->keogh** (string) Keogh self-employed retirement plan (US) **investment->lif** (string) Life Income Fund (LIF) retirement account (Canada) **investment->life insurance** (string) Life insurance account **investment->lira** (string) Locked-in Retirement Account (LIRA) (Canada) **investment->lrif** (string) Locked-in Retirement Income Fund (LRIF) (Canada) **investment->lrsp** (string) Locked-in Retirement Savings Plan (Canada) **investment->mutual fund** (string) Mutual fund account **investment->non-custodial wallet** (string) A cryptocurrency wallet where the user controls the private key **investment->non-taxable brokerage account** (string) A non-taxable brokerage account that is not covered by a more specific subtype **investment->other** (string) An account whose type could not be determined **investment->other annuity** (string) An annuity account not covered by other subtypes **investment->other insurance** (string) An insurance account not covered by other subtypes **investment->pension** (string) Standard pension account **investment->prif** (string) Prescribed Registered Retirement Income Fund (Canada) **investment->profit sharing plan** (string) Plan that gives employees share of company profits **investment->qshr** (string) Qualifying share account **investment->rdsp** (string) Registered Disability Savings Plan (RSDP) (Canada) **investment->resp** (string) Registered Education Savings Plan (Canada) **investment->retirement** (string) Retirement account not covered by other subtypes **investment->rlif** (string) Restricted Life Income Fund (RLIF) (Canada) **investment->roth** (string) Roth IRA (US) **investment->roth 401k** (string) Employer-sponsored Roth 401(k) plan (US) **investment->rrif** (string) Registered Retirement Income Fund (RRIF) (Canada) **investment->rrsp** (string) Registered Retirement Savings Plan (Canadian, similar to US 401(k)) **investment->sarsep** (string) Salary Reduction Simplified Employee Pension Plan (SARSEP), discontinued retirement plan (US) **investment->sep ira** (string) Simplified Employee Pension IRA (SEP IRA), retirement plan for small businesses and self-employed (US) **investment->simple ira** (string) Savings Incentive Match Plan for Employees IRA, retirement plan for small businesses (US) **investment->sipp** (string) Self-Invested Personal Pension (SIPP) (UK) **investment->stock plan** (string) Standard stock plan account **investment->tfsa** (string) Tax-Free Savings Account (TFSA), a retirement plan similar to a Roth IRA (Canada) **investment->thrift savings plan** (string) Thrift Savings Plan, a retirement savings and investment plan for Federal employees and members of the uniformed services. **investment->trust** (string) Account representing funds or assets held by a trustee for the benefit of a beneficiary. Includes both revocable and irrevocable trusts. **investment->ugma** (string) 'Uniform Gift to Minors Act' (brokerage account for minors, US) **investment->utma** (string) 'Uniform Transfers to Minors Act' (brokerage account for minors, US) **investment->variable annuity** (string) Tax-deferred capital accumulation annuity contract **payroll** (string) A payroll account. **payroll->payroll** (string) Standard payroll account **other** (string) Other or unknown account type. \=\*=\*=\*= #### Account type / product support matrix  The chart below indicates which products can be used with which account types. Note that some products can only be used with certain subtypes: * Auth and Signal require a debitable `checking`, `savings`, or `cash management` account. * Liabilities does not support `loan` types other than `student` or `mortgage`. * Transactions does not support `loan` types other than `student`. (For Canadian institutions, Transactions also supports the `mortgage` loan type.) * Investments does not support `depository` types other than `cash management`. Also note that not all institutions support all products; for details on which products a given institution supports, use [/institutions/get\_by\_id](https://plaid.com/docs/api/institutions/index.html.md#institutionsget_by_id) or look up the institution on the [Plaid Dashboard status page](https://dashboard.plaid.com/activity/status) or the [Coverage Explorer](https://plaid.com/docs/institutions/index.html.md) . | Product | Depository | Credit | Investments | Loan | Other | | --- | --- | --- | --- | --- | --- | | [Balance](https://plaid.com/docs/balance/index.html.md) | | | \* | | | | [Transactions](https://plaid.com/docs/transactions/index.html.md) | | | | | | | [Identity](https://plaid.com/docs/identity/index.html.md) | | | | | | | [Assets](https://plaid.com/docs/assets/index.html.md) | | | | | | | [Consumer Reports by Plaid Check](https://plaid.com/docs/check/index.html.md) | | | | | | | [Investments](https://plaid.com/docs/investments/index.html.md) | | | | | | | [Investments Move](https://plaid.com/docs/investments/index.html.md) | | | | | | | [Liabilities](https://plaid.com/docs/liabilities/index.html.md) | | | | | | | [Auth](https://plaid.com/docs/auth/index.html.md) | | | | | | | [Transfer](https://plaid.com/docs/transfer/index.html.md) | | | | | | | [Income (Bank Income flow)](https://plaid.com/docs/income/index.html.md) | | | | | | | [Statements](https://plaid.com/docs/statements/index.html.md) | | | | | | | [Signal](https://plaid.com/docs/signal/index.html.md) | | | | | | | [Payment Initiation (UK and Europe)](https://plaid.com/docs/payment-initiation/index.html.md) | | | | | | | [Virtual Accounts (UK and Europe)](https://plaid.com/docs/payment-initiation/index.html.md) | | | | | | \* Investments holdings data is not priced intra-day. \=\*=\*=\*= #### Currency code schema  The following currency codes are supported by Plaid. #### Properties  **iso\_currency\_code** (string) Plaid supports all ISO 4217 currency codes. **unofficial\_currency\_code** (string) List of unofficial currency codes **unofficial\_currency\_code->ADA** (string) Cardano **unofficial\_currency\_code->BAT** (string) Basic Attention Token **unofficial\_currency\_code->BCH** (string) Bitcoin Cash **unofficial\_currency\_code->BNB** (string) Binance Coin **unofficial\_currency\_code->BTC** (string) Bitcoin **unofficial\_currency\_code->BTG** (string) Bitcoin Gold **unofficial\_currency\_code->BSV** (string) Bitcoin Satoshi Vision **unofficial\_currency\_code->CNH** (string) Chinese Yuan (offshore) **unofficial\_currency\_code->DASH** (string) Dash **unofficial\_currency\_code->DOGE** (string) Dogecoin **unofficial\_currency\_code->ETC** (string) Ethereum Classic **unofficial\_currency\_code->ETH** (string) Ethereum **unofficial\_currency\_code->GBX** (string) Pence sterling, i.e. British penny **unofficial\_currency\_code->LSK** (string) Lisk **unofficial\_currency\_code->NEO** (string) Neo **unofficial\_currency\_code->OMG** (string) OmiseGO **unofficial\_currency\_code->QTUM** (string) Qtum **unofficial\_currency\_code->USDT** (string) Tether **unofficial\_currency\_code->XLM** (string) Stellar Lumen **unofficial\_currency\_code->XMR** (string) Monero **unofficial\_currency\_code->XRP** (string) Ripple **unofficial\_currency\_code->ZEC** (string) Zcash **unofficial\_currency\_code->ZRX** (string) 0x \=\*=\*=\*= #### Investment transaction types schema  Valid values for investment transaction types and subtypes. Note that transactions representing inflow of cash will appear as negative amounts, outflow of cash will appear as positive amounts. #### Properties  **buy** (string) Buying an investment **buy->assignment** (string) Assignment of short option holding **buy->contribution** (string) Inflow of assets into a tax-advantaged account **buy->buy** (string) Purchase to open or increase a position **buy->buy to cover** (string) Purchase to close a short position **buy->dividend reinvestment** (string) Purchase using proceeds from a cash dividend **buy->interest reinvestment** (string) Purchase using proceeds from a cash interest payment **buy->long-term capital gain reinvestment** (string) Purchase using long-term capital gain cash proceeds **buy->short-term capital gain reinvestment** (string) Purchase using short-term capital gain cash proceeds **sell** (string) Selling an investment **sell->distribution** (string) Outflow of assets from a tax-advantaged account **sell->exercise** (string) Exercise of an option or warrant contract **sell->sell** (string) Sell to close or decrease an existing holding **sell->sell short** (string) Sell to open a short position **cancel** (string) A cancellation of a pending transaction **cash** (string) Activity that modifies a cash position **cash->account fee** (string) Fees paid for account maintenance **cash->contribution** (string) Inflow of assets into a tax-advantaged account **cash->deposit** (string) Inflow of cash into an account **cash->dividend** (string) Inflow of cash from a dividend **cash->stock distribution** (string) Inflow of stock from a distribution **cash->interest** (string) Inflow of cash from interest **cash->legal fee** (string) Fees paid for legal charges or services **cash->long-term capital gain** (string) Long-term capital gain received as cash **cash->management fee** (string) Fees paid for investment management of a mutual fund or other pooled investment vehicle **cash->margin expense** (string) Fees paid for maintaining margin debt **cash->non-qualified dividend** (string) Inflow of cash from a non-qualified dividend **cash->non-resident tax** (string) Taxes paid on behalf of the investor for non-residency in investment jurisdiction **cash->pending credit** (string) Pending inflow of cash **cash->pending debit** (string) Pending outflow of cash **cash->qualified dividend** (string) Inflow of cash from a qualified dividend **cash->short-term capital gain** (string) Short-term capital gain received as cash **cash->tax** (string) Taxes paid on behalf of the investor **cash->tax withheld** (string) Taxes withheld on behalf of the customer **cash->transfer fee** (string) Fees incurred for transfer of a holding or account **cash->trust fee** (string) Fees related to administration of a trust account **cash->unqualified gain** (string) Unqualified capital gain received as cash **cash->withdrawal** (string) Outflow of cash from an account **fee** (string) Fees on the account, e.g. commission, bookkeeping, options-related. **fee->account fee** (string) Fees paid for account maintenance **fee->adjustment** (string) Increase or decrease in quantity of item **fee->dividend** (string) Inflow of cash from a dividend **fee->interest** (string) Inflow of cash from interest **fee->interest receivable** (string) Inflow of cash from interest receivable **fee->long-term capital gain** (string) Long-term capital gain received as cash **fee->legal fee** (string) Fees paid for legal charges or services **fee->management fee** (string) Fees paid for investment management of a mutual fund or other pooled investment vehicle **fee->margin expense** (string) Fees paid for maintaining margin debt **fee->non-qualified dividend** (string) Inflow of cash from a non-qualified dividend **fee->non-resident tax** (string) Taxes paid on behalf of the investor for non-residency in investment jurisdiction **fee->qualified dividend** (string) Inflow of cash from a qualified dividend **fee->return of principal** (string) Repayment of loan principal **fee->short-term capital gain** (string) Short-term capital gain received as cash **fee->stock distribution** (string) Inflow of stock from a distribution **fee->tax** (string) Taxes paid on behalf of the investor **fee->tax withheld** (string) Taxes withheld on behalf of the customer **fee->transfer fee** (string) Fees incurred for transfer of a holding or account **fee->trust fee** (string) Fees related to administration of a trust account **fee->unqualified gain** (string) Unqualified capital gain received as cash **transfer** (string) Activity that modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transfer **transfer->assignment** (string) Assignment of short option holding **transfer->adjustment** (string) Increase or decrease in quantity of item **transfer->exercise** (string) Exercise of an option or warrant contract **transfer->expire** (string) Expiration of an option or warrant contract **transfer->merger** (string) Stock exchanged at a pre-defined ratio as part of a merger between companies **transfer->request** (string) Request fiat or cryptocurrency to an address or email **transfer->send** (string) Inflow or outflow of fiat or cryptocurrency to an address or email **transfer->spin off** (string) Inflow of stock from spin-off transaction of an existing holding **transfer->split** (string) Inflow of stock from a forward split of an existing holding **transfer->trade** (string) Trade of one cryptocurrency for another **transfer->transfer** (string) Movement of assets into or out of an account --- # API - Consent | Plaid Docs Consent  ======== #### API reference for managing consent  | Endpoints | | | --- | --- | | [/consent/events/get](https://plaid.com/docs/api/consent/index.html.md#consenteventsget) | Retrieve consent events | | See also | | | --- | --- | | [/item/get](https://plaid.com/docs/api/items/index.html.md#itemget) | Retrieve an Item (includes Item consent details) | \=\*=\*=\*= #### /consent/events/get  #### List a historical log of item consent events  List a historical log of Item consent events. Consent logs are only available for events occurring on or after November 7, 2024. Extremely recent events (occurring within the past 12 hours) may not be available via this endpoint. Up to three years of consent logs will be available via the endpoint. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. /consent/events/get Node▼ ```javascript const request: ConsentEventsGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.consentEventsGet(request); const consentEvents = response.data.consent_events; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **consent\_events** (\[object\]) A list of consent events. **consent\_events->item\_id** (string) 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. **consent\_events->created\_at** (string) The date and time when the consent event occurred, in ISO 8601 format. Format: date-time **consent\_events->event\_type** (string) A broad categorization of the consent event. Possible values: CONSENT\_GRANTED, CONSENT\_REVOKED, CONSENT\_UPDATED **consent\_events->event\_code** (string) Codes describing the object of a consent event. Possible values: USER\_AGREEMENT, USE\_CASES, DATA\_SCOPES, ACCOUNT\_SCOPES, REVOCATION **consent\_events->institution\_id** (nullable, string) Unique identifier for the institution associated with the Item. Field is null for Items created via Same Day Micro-deposits. **consent\_events->institution\_name** (nullable, string) The full name of the institution associated with the Item. Field is null for Items created via Same Day Micro-deposits. **consent\_events->initiator** (string) The entity that initiated collection of consent. Possible values: PLAID, DATA\_PROVIDER, CUSTOMER, END\_USER **consent\_events->consented\_use\_cases** (\[string\]) A list of strings containing the full list of use cases the end user has consented to for the Item. See the full list of use cases. **consent\_events->consented\_data\_scopes** (\[string\]) A list of strings containing the full list of data scopes the end user has consented to for the Item. These correspond to consented products; see the full mapping of data scopes and products. **consent\_events->consented\_accounts** (\[object\]) An array containing the accounts associated with the Item for which authorizations are granted. **consent\_events->consented\_accounts->account\_id** (string) Plaid’s unique identifier for the account. Like all Plaid identifiers, the account\_id is case sensitive. **consent\_events->consented\_accounts->mask** (string) The last 2-4 alphanumeric characters of an account's official account number **consent\_events->consented\_accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **consent\_events->consented\_accounts->official\_name** (string) The official name of the account as given by the financial institution **consent\_events->consented\_accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **consent\_events->consented\_accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity Response Object ```json { "request_id": "m8MDnv9okwxFNBV", "consent_events": [ { "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "event_type": "CONSENT_GRANTED", "event_code": "USER_AGREEMENT", "institution_id": "ins_123456", "institution_name": "Platypus bank", "initiator": "END_USER", "created_at": "2019-02-15T15:51:39Z", "consented_use_cases": [], "consented_data_scopes": [], "consented_accounts": [] }, { "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "event_type": "CONSENT_GRANTED", "event_code": "USE_CASES", "institution_id": "ins_123456", "institution_name": "Platypus bank", "initiator": "END_USER", "created_at": "2019-02-15T15:52:39Z", "consented_use_cases": [ "Send and receive money", "Track and manage your finances" ], "consented_data_scopes": [], "consented_accounts": [] }, { "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "event_type": "CONSENT_GRANTED", "event_code": "DATA_SCOPES", "institution_id": "ins_123456", "institution_name": "Platypus bank", "initiator": "END_USER", "created_at": "2019-02-15T15:52:39Z", "consented_use_cases": [], "consented_data_scopes": [ "account_balance_info", "contact_info", "account_routing_number" ], "consented_accounts": [] }, { "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "event_type": "CONSENT_GRANTED", "event_code": "ACCOUNT_SCOPES", "institution_id": "ins_123456", "institution_name": "Platypus bank", "initiator": "END_USER", "created_at": "2019-02-15T15:53:39Z", "consented_use_cases": [], "consented_data_scopes": [], "consented_accounts": [ { "account_id": "blgvvBlXw3cq5GMPwqB6s6q4dLKB9WcVqGDGo", "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "type": "depository", "subtype": "checking" } ] }, { "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "event_type": "CONSENT_REVOKED", "event_code": "REVOCATION", "institution_id": "ins_123456", "institution_name": "Platypus bank", "initiator": "END_USER", "created_at": "2020-02-20T15:53:39Z", "consented_use_cases": [], "consented_data_scopes": [], "consented_accounts": [] } ] } ``` --- # API - Overview | Plaid Docs API Reference  ============== #### Comprehensive reference for integrating with Plaid API endpoints  #### API endpoints and webhooks  For documentation on specific API endpoints and webhooks, use the navigation menu or search. #### API access  To gain access to the Plaid API, create an account on the [Plaid Dashboard](https://dashboard.plaid.com) . Once you’ve completed the signup process and acknowledged our terms, we’ll provide a live `client_id` and `secret` via the Dashboard. #### API protocols and headers  The Plaid API is JSON over HTTP. Requests are POST requests, and responses are JSON, with errors indicated in response bodies as `error_code` and `error_type` (use these in preference to HTTP status codes for identifying application-level errors). All responses come as standard JSON, with a small subset returning binary data where appropriate. The Plaid API is served over HTTPS TLS v1.2 to ensure data privacy; HTTP and HTTPS with TLS versions other than 1.2 are not supported. Clients must use an up to date root certificate bundle as the only TLS verification path; certificate pinning should never be used. All requests must include a `Content-Type` of `application/json` and the body must be valid JSON. Almost all Plaid API endpoints require a `client_id` and `secret`. These may be sent either in the request body or in the headers `PLAID-CLIENT-ID` and `PLAID-SECRET`. Every Plaid API response includes a `request_id`, either in the body or (in the case of endpoints that return binary data, such as [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) ) in the response headers. For faster support, include the `request_id` when contacting support regarding a specific API call. #### API host  ```switcher https://sandbox.plaid.com (Sandbox) https://production.plaid.com (Production) ``` Plaid has two environments: Sandbox and Production. Items cannot be moved between environments. The Sandbox environment supports only test Items. You can [request Production API access](https://dashboard.plaid.com/overview/production) via the Dashboard. #### API status and incidents  API status is available at [status.plaid.com](https://status.plaid.com) . API status and incidents are also available programmatically via the following endpoints: * [https://status.plaid.com/api/v2/status.json](https://status.plaid.com/api/v2/status.json) for current status * [https://status.plaid.com/api/v2/incidents.json](https://status.plaid.com/api/v2/incidents.json) for current and historical incidents For a complete list of all API status information available programmatically, as well as more information on using these endpoints, see the [Atlassian Status API documentation](https://status.atlassian.com/api) . For information on institution-specific status, see [Troubleshooting institution status](https://plaid.com/docs/account/activity/index.html.md#troubleshooting-institution-status) . #### Storing API data  Any token returned by the API is sensitive and should be stored securely. Except for the `public_token` and `link_token`, all Plaid tokens are long-lasting and should never be exposed on the client side. Consumer data obtained from the Plaid API is sensitive information and should be managed accordingly. For guidance and best practices on how to store and handle sensitive data, see the [Open Finance Security Data Standard](https://ofdss.org/#documents) . Identifiers used by the Plaid API that do not contain consumer data and are not keys or tokens are designed for usage in less sensitive contexts. The most common of these identifiers are the `account_id`, `item_id`, `link_session_id`, and `request_id`. These identifiers are commonly used for logging and debugging purposes. #### API field formats  ##### Strings  Many string fields returned by Plaid APIs are reported exactly as returned by the financial institution. For this reason, Plaid does not have maximum length limits or standardized formats for strings returned by the API. In practice, field lengths of 280 characters will generally be adequate for storing returned strings, although Plaid does not guarantee this as a maximum string length. ##### Numbers and money  Plaid returns all currency values as decimal values in dollars (or the equivalent for the currency being used), rather than as integers. In some cases, it may be possible for a money value returned by the Plaid API to have more than two digits of precision -- this is common, for example, when reporting crypto balances. #### OpenAPI definition file  OpenAPI is a standard format for describing RESTful APIs that allows those APIs to be integrated with tools for a wide variety of applications, including testing, client library generation, IDE integration, and more. The Plaid API is specified in our [Plaid OpenAPI GitHub repo](https://github.com/plaid/plaid-openapi) . #### Postman collection  The [Postman collection](https://github.com/plaid/plaid-postman) is a convenient tool for exploring Plaid API endpoints without writing code. The Postman collection provides pre-formatted requests for almost all of Plaid's API endpoints. All you have to do is fill in your API keys and any arguments. To get started, check out the [Plaid Postman Collection Quickstart](https://github.com/plaid/plaid-postman) on GitHub. #### Client libraries  See the [client libraries](https://plaid.com/docs/api/libraries/index.html.md) page for more information on Plaid's client libraries. --- # API - Items | Plaid Docs Items  ====== #### API reference for managing Items  | Endpoints | | | --- | --- | | [/item/get](https://plaid.com/docs/api/items/index.html.md#itemget) | Retrieve an Item | | [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) | Remove an Item | | [/item/webhook/update](https://plaid.com/docs/api/items/index.html.md#itemwebhookupdate) | Update a webhook URL | | [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) | Exchange a public token from Link for an access token | | [/item/access\_token/invalidate](https://plaid.com/docs/api/items/index.html.md#itemaccess_tokeninvalidate) | Rotate an access token without deleting the Item | | See also | | | --- | --- | | [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) | Create a test Item (Sandbox only) | | [/sandbox/item/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemreset_login) | Force an Item into an error state (Sandbox only) | | [/sandbox/item/set\_verification\_status](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemset_verification_status) | Set Auth verification status (Sandbox only) | | [/sandbox/item/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) | Fire a test webhook (Sandbox only) | | Webhooks | | | --- | --- | | [ERROR](https://plaid.com/docs/api/items/index.html.md#error) | Item has entered an error state | | [LOGIN\_REPAIRED](https://plaid.com/docs/api/items/index.html.md#login_repaired) | Item has healed from `ITEM_LOGIN_REQUIRED` without update mode | | [NEW\_ACCOUNTS\_AVAILABLE](https://plaid.com/docs/api/items/index.html.md#new_accounts_available) | New account detected for an Item | | [PENDING\_DISCONNECT](https://plaid.com/docs/api/items/index.html.md#pending_disconnect) | Item access is about to expire (US/CA) or end | | [PENDING\_EXPIRATION](https://plaid.com/docs/api/items/index.html.md#pending_expiration) | Item access is about to expire (UK/EU) | | [USER\_PERMISSION\_REVOKED](https://plaid.com/docs/api/items/index.html.md#user_permission_revoked) | The user has revoked access to an Item | | [USER\_ACCOUNT\_REVOKED](https://plaid.com/docs/api/items/index.html.md#user_account_revoked) | The user has revoked access to an account | | [WEBHOOK\_UPDATE\_ACKNOWLEDGED](https://plaid.com/docs/api/items/index.html.md#webhook_update_acknowledged) | Item webhook URL updated | ### Token exchange flow  Many API calls to Plaid product endpoints require an `access_token`. An `access_token` corresponds to an _Item_, which is a login at a financial institution. To obtain an `access_token`: 1. Obtain a `link_token` by calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . 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](https://plaid.com/docs/link/web/index.html.md#onsuccess) , or, if using [Hosted Link](https://plaid.com/docs/link/hosted-link/index.html.md) , via a webhook. For more information on initializing and receiving data back from Link, see the [Link documentation](https://plaid.com/docs/link/index.html.md) . 3. Exchange the `public_token` for an `access_token` by calling [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) . 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](https://plaid.com/docs/link/update-mode/index.html.md) flow allows you to update an `access_token` that has stopped working. The Sandbox testing environment also offers the [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) endpoint, which allows you to create a `public_token` without using Link. The [Hosted Link](https://plaid.com/docs/link/hosted-link/index.html.md) and [Multi-Item Link](https://plaid.com/docs/link/multi-item-link/index.html.md) flows provide the `public_token` via the backend rather than using the frontend `onSuccess` callback. ### Endpoints  \=\*=\*=\*= #### /item/get  #### Retrieve an Item  Returns information about the status of an Item. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. /item/get Node▼ ```javascript const request: ItemGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.itemGet(request); const item = response.data.item; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **item** (object) Metadata about the Item **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **item->created\_at** (string) The date and time when the Item was created, in ISO 8601 format. Format: date-time **item->consented\_use\_cases** (\[string\]) A list of use cases that the user has consented to for the Item via Data Transparency Messaging. You can see the full list of use cases or update the list of use cases to request at any time via the Link Customization section of the Plaid Dashboard. **item->consented\_data\_scopes** (\[string\]) A list of data scopes that the user has consented to for the Item via Data Transparency Messaging. These are based on the consented\_products; see the full mapping of data scopes and products. Possible values: account\_balance\_info, contact\_info, account\_routing\_number, transactions, credit\_loan\_info, investments, payroll\_info, income\_verification\_paystubs\_info, income\_verification\_w2s\_info, income\_verification\_bank\_statements, income\_verification\_employment\_info, bank\_statements, risk\_info, network\_insights\_lite, fraud\_info **status** (nullable, object) Information about the last successful and failed transactions update for the Item. **status->investments** (nullable, object) Information about the last successful and failed investments update for the Item. **status->investments->last\_successful\_update** (nullable, string) ISO 8601 timestamp of the last successful investments update for the Item. The status will update each time Plaid successfully connects with the institution, regardless of whether any new data is available in the update. Format: date-time **status->investments->last\_failed\_update** (nullable, string) ISO 8601 timestamp of the last failed investments update for the Item. The status will update each time Plaid fails an attempt to connect with the institution, regardless of whether any new data is available in the update. Format: date-time **status->transactions** (nullable, object) Information about the last successful and failed transactions update for the Item. **status->transactions->last\_successful\_update** (nullable, string) ISO 8601 timestamp of the last successful transactions update for the Item. The status will update each time Plaid successfully connects with the institution, regardless of whether any new data is available in the update. This field does not reflect transactions updates performed by non-Transactions products (e.g. Signal). Format: date-time **status->transactions->last\_failed\_update** (nullable, string) ISO 8601 timestamp of the last failed transactions update for the Item. The status will update each time Plaid fails an attempt to connect with the institution, regardless of whether any new data is available in the update. This field does not reflect transactions updates performed by non-Transactions products (e.g. Signal). Format: date-time **status->last\_webhook** (nullable, object) Information about the last webhook fired for the Item. **status->last\_webhook->sent\_at** (nullable, string) ISO 8601 timestamp of when the webhook was fired. Format: date-time **status->last\_webhook->code\_sent** (nullable, string) The last webhook code sent. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "item": { "created_at": "2019-01-22T04:32:00Z", "available_products": [ "balance", "auth" ], "billed_products": [ "identity", "transactions" ], "products": [ "identity", "transactions" ], "error": null, "institution_id": "ins_109508", "institution_name": "First Platypus Bank", "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "update_type": "background", "webhook": "https://plaid.com/example/hook", "auth_method": null, "consented_products": [ "identity", "transactions" ], "consented_data_scopes": [ "account_balance_info", "contact_info", "transactions" ], "consented_use_cases": [ "Verify your account", "Track and manage your finances" ], "consent_expiration_time": "2024-03-16T15:53:00Z" }, "status": { "transactions": { "last_successful_update": "2019-02-15T15:52:39Z", "last_failed_update": "2019-01-22T04:32:00Z" }, "last_webhook": { "sent_at": "2019-02-15T15:53:00Z", "code_sent": "DEFAULT_UPDATE" } }, "request_id": "m8MDnv9okwxFNBV" } ``` \=\*=\*=\*= #### /item/remove  #### Remove an Item  The [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) endpoint allows you to remove an Item. Once removed, the `access_token`, as well as any processor tokens or bank account tokens associated with the Item, is no longer valid and cannot be used to access any data that was associated with the Item. Calling [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) is a recommended best practice when offboarding users or if a user chooses to disconnect an account linked via Plaid. For subscription products, such as Transactions, Liabilities, and Investments, calling [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) is required to end subscription billing for the Item, unless the end user revoked permission (e.g. via [https://my.plaid.com/](https://my.plaid.com/) ). For more details, see [Subscription fee model](https://plaid.com/docs/account/billing/index.html.md#subscription-fee) . In Limited Production, calling [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) does not impact the number of remaining Limited Production Items you have available. Removing an Item does not affect any Asset Reports or Audit Copies you have already created, which will remain accessible until you remove access to them specifically using the [/asset\_report/remove](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportremove) endpoint. Also note that for certain OAuth-based institutions, an Item removed via [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) may still show as an active connection in the institution's OAuth permission manager. API versions 2019-05-29 and earlier return a `removed` boolean as part of the response. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **reason\_code** (string) The reason for removing the item FRAUD\_FIRST\_PARTY: The end user who owns the connected bank account committed fraud FRAUD\_FALSE\_IDENTITY: The end user created the connection using false identity information or stolen credentials FRAUD\_ABUSE: The end user is abusing the client's service or platform through their connected account FRAUD\_OTHER: Other fraud-related reasons involving the end user not covered by the specific fraud categories CONNECTION\_IS\_NON\_FUNCTIONAL: The connection to the end user's financial institution is broken and cannot be restored OTHER: Any other reason for removing the connection not covered by the above categories Possible values: FRAUD\_FIRST\_PARTY, FRAUD\_FALSE\_IDENTITY, FRAUD\_ABUSE, FRAUD\_OTHER, CONNECTION\_IS\_NON\_FUNCTIONAL, OTHER **reason\_note** (string) Additional context or details about the reason for removing the item. Personally identifiable information, such as an email address or phone number, should not be included in the reason\_note. Max length: 512 /item/remove Node▼ ```javascript const request: ItemRemoveRequest = { access_token: accessToken, }; try { const response = await plaidClient.itemRemove(request); // The Item was removed, access_token is now invalid } catch (error) { // handle error } // The Item was removed, access_token is now invalid ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "m8MDnv9okwxFNBV" } ``` \=\*=\*=\*= #### /item/webhook/update  #### Update Webhook URL  The POST [/item/webhook/update](https://plaid.com/docs/api/items/index.html.md#itemwebhookupdate) allows you to update the webhook URL associated with an Item. This request triggers a [WEBHOOK\_UPDATE\_ACKNOWLEDGED](https://plaid.com/docs/api/items/index.html.md#webhook_update_acknowledged) webhook to the newly specified webhook URL. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **webhook** (string) The new webhook URL to associate with the Item. To remove a webhook from an Item, set to null. Format: url /item/webhook/update Node▼ ```javascript // Update the webhook associated with an Item const request: ItemWebhookUpdateRequest = { access_token: accessToken, webhook: 'https://example.com/updated/webhook', }; try { const response = await plaidClient.itemWebhookUpdate(request); // A successful response indicates that the webhook has been // updated. An acknowledgement webhook will also be fired. const item = response.data.item; } catch (error) { // handle error } ``` #### Response fields  **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "item": { "available_products": [ "balance", "identity", "payment_initiation", "transactions" ], "billed_products": [ "assets", "auth" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_117650", "institution_name": "Royal Bank of Plaid", "item_id": "DWVAAPWq4RHGlEaNyGKRTAnPLaEmo8Cvq7na6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "vYK11LNTfRoAMbj" } ``` \=\*=\*=\*= #### /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](https://plaid.com/docs/api/items/index.html.md#itemremove) . 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](https://plaid.com/docs/api/items/index.html.md#itemget) request. #### Request fields  **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** (required, string) Your public\_token, obtained from the Link onSuccess callback or /sandbox/item/public\_token/create. /item/public\_token/exchange Node▼ ```javascript const request: ItemPublicTokenExchangeRequest = { public_token: publicToken, }; try { const response = await plaidClient.itemPublicTokenExchange(request); const accessToken = response.data.access_token; const itemId = response.data.item_id; } catch (err) { // handle error } ``` #### Response fields  **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. Response Object ```json { "access_token": "access-sandbox-de3ce8ef-33f8-452c-a685-8671031fc0f6", "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op", "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /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](https://plaid.com/docs/api/items/index.html.md#itemaccess_tokeninvalidate) endpoint to rotate the `access_token` associated with an Item. The endpoint returns a new `access_token` and immediately invalidates the previous `access_token`. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. /item/access\_token/invalidate Node▼ ```javascript // Generate a new access_token for an Item, invalidating the old one const request: ItemAccessTokenInvalidateRequest = { access_token: accessToken, }; try { const response = await plaidClient.itemAccessTokenInvalidate(request); // Store the new access_token in a persistent, secure datastore const accessToken = response.data.new_access_token; } catch (error) { // handle error } ``` #### Response fields  **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. Response Object ```json { "new_access_token": "access-sandbox-8ab976e6-64bc-4b38-98f7-731e7a349970", "request_id": "m8MDnv9okwxFNBV" } ``` ### Webhooks  Webhooks are used to communicate changes to an Item, such as an updated webhook, or errors encountered with an Item. The error typically requires user action to resolve, such as when a user changes their password. All Item webhooks have a `webhook_type` of `ITEM`. \=\*=\*=\*= #### ERROR  Fired when an error is encountered with an Item. The error can be resolved by having the user go through Link’s update mode. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) ERROR **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "ERROR", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": { "display_message": "The user’s OAuth connection to this institution has been invalidated.", "error_code": "ITEM_LOGIN_REQUIRED", "error_code_reason": "OAUTH_INVALID_TOKEN", "error_message": "the login details of this item have changed (credentials, MFA, or required user action) and a user login is required to update this information. use Link's update mode to restore the item to a good state", "error_type": "ITEM_ERROR", "status": 400 }, "environment": "production" } ``` \=\*=\*=\*= #### LOGIN\_REPAIRED  Fired when an Item has exited the `ITEM_LOGIN_REQUIRED` state without the user having gone through the update mode flow in your app (this can happen if the user completed the update mode in a different app). If you have messaging that tells the user to complete the update mode flow, you should silence this messaging upon receiving the `LOGIN_REPAIRED` webhook. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) LOGIN\_REPAIRED **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "LOGIN_REPAIRED", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "environment": "production" } ``` \=\*=\*=\*= #### NEW\_ACCOUNTS\_AVAILABLE  Fired when Plaid detects a new account. Upon receiving this webhook, you can prompt your users to share new accounts with you through [update mode](https://plaid.com/docs/link/update-mode/index.html.md#using-update-mode-to-request-new-accounts) (US/CA only). If the end user has opted not to share new accounts with Plaid via their institution's OAuth settings, Plaid will not detect new accounts and this webhook will not fire. For end user accounts in the EU and UK, upon receiving this webhook, you can prompt your user to re-link their account and then delete the old Item via [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) . #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) NEW\_ACCOUNTS\_AVAILABLE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "NEW_ACCOUNTS_AVAILABLE", "item_id": "gAXlMgVEw5uEGoQnnXZ6tn9E7Mn3LBc4PJVKZ", "error": null, "environment": "production" } ``` \=\*=\*=\*= #### PENDING\_DISCONNECT  Fired when an Item is expected to be disconnected. The webhook will currently be fired 7 days before the existing Item is scheduled for disconnection. This can be resolved by having the user go through Link’s [update mode](https://plaid.comhttp://plaid.com/docs/link/update-mode/index.html.md) . Currently, this webhook is fired only for US or Canadian institutions; in the UK or EU, you should continue to listed for the [PENDING\_EXPIRATION](https://plaid.com/docs/api/items/index.html.md#pending_expiration) webhook instead. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) PENDING\_DISCONNECT **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **reason** (string) Reason why the item is about to be disconnected. INSTITUTION\_MIGRATION: The institution is moving to API or to a different integration. For example, this can occur when an institution moves from a non-OAuth integration to an OAuth integration. INSTITUTION\_TOKEN\_EXPIRATION: The consent on an Item associated with a US or CA institution is about to expire. Possible values: INSTITUTION\_MIGRATION, INSTITUTION\_TOKEN\_EXPIRATION **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "PENDING_DISCONNECT", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "reason": "INSTITUTION_MIGRATION", "environment": "production" } ``` \=\*=\*=\*= #### PENDING\_EXPIRATION  Fired when an Item’s access consent is expiring in 7 days. This can be resolved by having the user go through Link’s update mode. This webhook is fired only for Items associated with institutions in Europe (including the UK); for Items associated with institutions in the US or Canada, see [PENDING\_DISCONNECT](https://plaid.com/docs/api/items/index.html.md#pending_disconnect) instead. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) PENDING\_EXPIRATION **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **consent\_expiration\_time** (string) The date and time at which the Item's access consent will expire, in ISO 8601 format. Format: date-time **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "PENDING_EXPIRATION", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "consent_expiration_time": "2020-01-15T13:25:17.766Z", "environment": "production" } ``` \=\*=\*=\*= #### USER\_PERMISSION\_REVOKED  The `USER_PERMISSION_REVOKED` webhook may be fired when an end user has revoked the permission that they previously granted to access an Item. If the end user revoked their permissions through Plaid (such as via the Plaid Portal or by contacting Plaid Support), the webhook will fire. If the end user revoked their permissions directly through the institution, this webhook may not always fire, since some institutions’ consent portals do not trigger this webhook. To attempt to restore the Item, it can be sent through [update mode](https://plaid.com/docs/link/update-mode/index.html.md) . Depending on the exact process the end user used to revoke permissions, it may not be possible to launch update mode for the Item. If you encounter an error when attempting to create a Link token for update mode on an Item with revoked permissions, create a fresh Link token for the user. Note that when working with tokenized account numbers with Auth or Transfer, the account number provided by Plaid will no longer work for creating transfers once user permission has been revoked, except for US Bank Items. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) USER\_PERMISSION\_REVOKED **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "USER_PERMISSION_REVOKED", "error": { "error_code": "USER_PERMISSION_REVOKED", "error_message": "the holder of this account has revoked their permission for your application to access it", "error_type": "ITEM_ERROR", "status": 400 }, "item_id": "gAXlMgVEw5uEGoQnnXZ6tn9E7Mn3LBc4PJVKZ", "environment": "production" } ``` \=\*=\*=\*= #### USER\_ACCOUNT\_REVOKED  The `USER_ACCOUNT_REVOKED` webhook is fired when an end user has revoked access to their account on the Data Provider's portal. This webhook is currently sent only for PNC Items, but may be sent in the future for other financial institutions that allow account-level permissions revocation through their portals. Upon receiving this webhook, it is recommended to delete any Plaid-derived data you have stored that is associated with the revoked account. If you are using Auth and receive this webhook, this webhook indicates that the TAN associated with the revoked account is no longer valid and cannot be used to create new transfers. You should not create new ACH transfers for the account that was revoked until access has been re-granted. You can request the user to re-grant access to their account by sending them through [update mode](https://plaid.com/docs/link/update-mode/index.html.md) . Alternatively, they may re-grant access directly through the Data Provider's portal. After the user has re-granted access, Auth customers should call the auth endpoint again to obtain the new TAN. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) USER\_ACCOUNT\_REVOKED **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **account\_id** (string) The external account ID of the affected account **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "USER_ACCOUNT_REVOKED", "item_id": "gAXlMgVEw5uEGoQnnXZ6tn9E7Mn3LBc4PJVKZ", "account_id": "BxBXxLj1m4HMXBm9WZJyUg9XLd4rKEhw8Pb1J", "environment": "production" } ``` \=\*=\*=\*= #### WEBHOOK\_UPDATE\_ACKNOWLEDGED  Fired when an Item's webhook is updated. This will be sent to the newly specified webhook. #### Properties  **webhook\_type** (string) ITEM **webhook\_code** (string) WEBHOOK\_UPDATE\_ACKNOWLEDGED **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **new\_webhook\_url** (string) The new webhook URL **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ITEM", "webhook_code": "WEBHOOK_UPDATE_ACKNOWLEDGED", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_webhook_url": "https://plaid.com/example/webhook", "environment": "production" } ``` --- # API - Look up Dashboard users | Plaid Docs Dashboard User Audit API  ========================= #### API reference for viewing Dashboard users for Monitor and Beacon  These endpoints are used to look up a Dashboard user, as referenced in an `audit_trail` object from the [Monitor](https://plaid.com/docs/api/products/monitor/index.html.md) or [Beacon](https://plaid.com/docs/api/products/beacon/index.html.md) APIs. | Endpoints | | | --- | --- | | [/dashboard\_user/get](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userget) | Retrieve information about Dashboard user | | [/dashboard\_user/list](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userlist) | List Dashboard users | \=\*=\*=\*= #### /dashboard\_user/get  #### Retrieve a dashboard user  The [/dashboard\_user/get](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userget) endpoint provides details (such as email address) about a specific Dashboard user based on the `dashboard_user_id` field, which is returned in the `audit_trail` object of certain Monitor and Beacon endpoints. This can be used to identify the specific reviewer who performed a Dashboard action. #### Request fields  **dashboard\_user\_id** (required, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **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\_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. /dashboard\_user/get Node▼ ```javascript const request: DashboardUserGetRequest = { dashboard_user_id: 'usr_1SUuwqBdK75GKi', }; try { const response = await client.dashboardUserGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **status** (string) The current status of the user. Possible values: invited, active, deactivated **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "54350110fedcbaf01234ffee", "created_at": "2020-07-24T03:26:02Z", "email_address": "user@example.com", "status": "active", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /dashboard\_user/list  #### List dashboard users  The [/dashboard\_user/list](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userlist) endpoint provides details (such as email address) all Dashboard users associated with your account. This can use used to audit or track the list of reviewers for Monitor, Beacon, and Identity Verification products. #### Request fields  **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\_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. **cursor** (string) An identifier that determines which page of results you receive. /dashboard\_user/list Node▼ ```javascript try { const response = await client.dashboardUserList({}); } catch (error) { // handle error } ``` #### Response fields  **dashboard\_users** (\[object\]) List of dashboard users **dashboard\_users->id** (string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **dashboard\_users->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **dashboard\_users->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **dashboard\_users->status** (string) The current status of the user. Possible values: invited, active, deactivated **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "dashboard_users": [ { "id": "54350110fedcbaf01234ffee", "created_at": "2020-07-24T03:26:02Z", "email_address": "user@example.com", "status": "active" } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` --- # API - Libraries | Plaid Docs Libraries  ========== #### Learn about libraries and SDKs to easily integrate with the Plaid APIs  All libraries for Plaid are listed below. If you've built anything that you'd be willing to share with the Plaid community, please let us know and we'll link to it here! #### Client libraries  Plaid offers official API libraries for different programming languages, which are regularly updated for breaking and non-breaking API changes. These client libraries are generated from our [OpenAPI file](https://github.com/plaid/plaid-openapi) . [(An image of "Node logo")Nodeplaid-node](https://github.com/plaid/plaid-node) [(An image of "Python logo")Pythonplaid-python](https://github.com/plaid/plaid-python) [(An image of "Ruby logo")Rubyplaid-ruby](https://github.com/plaid/plaid-ruby) [(An image of "Java logo")Javaplaid-java](https://github.com/plaid/plaid-java) [(An image of "Go logo")Goplaid-go](https://github.com/plaid/plaid-go) #### Community libraries  Explore some of the community-supported libraries available for Plaid listed below. If you built your own library, please reach out to our [Support team](https://dashboard.plaid.com/support/new) to add it to this list! The best way to create your own library is by using the [Plaid OpenAPI file](https://github.com/plaid/plaid-openapi) . Note that community libraries are not officially supported by Plaid. Plaid cannot provide assistance with using these libraries or guarantee that they will be kept up-to-date with all the changes needed to support the latest modifications to the Plaid API. [Elixirby @tylerwray](https://github.com/tylerwray/elixir-plaid) [Elixirby @wfgilman](https://github.com/wfgilman/plaid-elixir) [.NETGoing.Plaid, by @viceroypenguin](https://github.com/viceroypenguin/Going.Plaid.NET) [Nodeplaid-fetch, by @heysanil. For Vercel Edge Runtime environments that don't support Axios middleware.](https://github.com/heysanil/plaid-fetch) #### Link client SDKs  For information on Plaid's front-end SDKs for web and mobile, see [Link](https://plaid.com/docs/link/index.html.md) . To learn more about installing and using Link SDKs, check out the docs pages for Link on [JavaScript and React (web)](https://plaid.com/docs/link/web/index.html.md) , [React Native](https://plaid.com/docs/link/react-native/index.html.md) , [iOS](https://plaid.com/docs/link/ios/index.html.md) , [Android](https://plaid.com/docs/link/android/index.html.md) , and [Hosted Link](https://plaid.com/docs/link/hosted-link/index.html.md) . Note that libraries marked as (community) are not officially supported by Plaid. Plaid cannot provide assistance with using these libraries or guarantee that they will be kept up-to-date with all the changes needed to support the latest modifications to the Plaid API. [(An image of "iOS logo")iOSplaid-link-ios](https://github.com/plaid/plaid-link-ios) [(An image of "Android logo")Androidplaid-link-android](https://github.com/plaid/plaid-link-android) [(An image of "React logo")Reactreact-plaid-link](https://github.com/plaid/react-plaid-link) [(An image of "React Native logo")React Nativereact-native-plaid-link-sdk](https://github.com/plaid/react-native-plaid-link-sdk) [JavaScriptWeb](https://plaid.com/docs/link/web/index.html.md) [Vue by Jeroen Claessens (community)](https://github.com/jclaessens97/vue-plaid-link) [Flutter (mobile)by @jorgefspereira (community)](https://github.com/jorgefspereira/plaid_flutter) [Flutter UniversalBased on Flutter (mobile), adds Flutter Desktop support. By @maxintapp (community)](https://github.com/maxint-app/plaid_universal/) [SolidJS by @thedanchez (community)](https://github.com/dsnchz/solid-plaid-link) #### Quickstart & example apps  For a listing of Plaid sample apps, see the [Resources page](https://plaid.com/docs/resources/index.html.md#sample-apps) . --- # API - Link | Plaid Docs Link endpoints  =============== #### API reference for Link tokens and webhooks  This page covers the backend flow for creating and managing Link tokens. For the Link frontend, see [Link docs](https://plaid.com/docs/link/index.html.md) . | Endpoints | | | --- | --- | | [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) | Create a token for initializing a Link session | | [/link/token/get](https://plaid.com/docs/api/link/index.html.md#linktokenget) | Get the public token and other details about a completed Link session | | See also | | | --- | --- | | [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) | Exchange a public token for an access token | | [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) | Create a public token without the Link flow (Sandbox only) | | [/sandbox/item/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemreset_login) | Force an Item into an error state (Sandbox only) | | [/session/token/create](https://plaid.com/docs/api/products/layer/index.html.md#sessiontokencreate) | Create a session (Layer only) | | Webhooks | | | --- | --- | | [ITEM\_ADD\_RESULT](https://plaid.com/docs/api/link/index.html.md#item_add_result) | An Item was added during a Link session | | [EVENTS](https://plaid.com/docs/api/link/index.html.md#events) | Events were received from a Hosted Link session | | [SESSION\_FINISHED](https://plaid.com/docs/api/link/index.html.md#session_finished) | The user has completed a Link session | ### Endpoints  \=\*=\*=\*= #### /link/token/create  #### Create Link Token  The [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) endpoint creates a `link_token`, which is required as a parameter when initializing Link. Once Link has been initialized, it returns a `public_token`. For most Plaid products, the `public_token` is saved and exchanged for an `access_token` via [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) as part of the main Link flow. For more details, see the [Link flow overview](https://plaid.com/docs/link/index.html.md#link-flow-overview) . A `link_token` generated by [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) is also used to initialize other Link flows, such as the [update mode](https://plaid.com/docs/link/update-mode/index.html.md) flow for tokens with expired credentials, or the Identity Verification flow. #### Request fields  **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** (required, string) 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** (required, string) 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')Hindi ('hi')Italian ('it')Latvian ('lv')Lithuanian ('lt')Norwegian ('no')Polish ('pl')Portuguese ('pt')Romanian ('ro')Spanish ('es')Swedish ('sv')Vietnamese ('vi') 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/. By default, access is granted to US and CA. For Production or Limited Production access to other countries, contact Sales or your account manager. If using Identity Verification, 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. While all countries are enabled by default in Sandbox, in Production only the countries you have requested access for are shown. To request access to additional countries, file a product access Support ticket via the Plaid dashboard. If using a Link customization, make sure the country codes in the customization match those specified in country\_codes, or the customization may not be applied. If using the Auth features Instant Match, Instant Micro-deposits, Same-day Micro-deposits, Automated Micro-deposits, or Database Auth, 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, AT, FI **user** (object) An object specifying information about the end user who will be linking their account. Required if user\_id isn't included. **user->client\_user\_id** (required, string) 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 **user->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. **user->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. **user->name->given\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->phone\_number** (string) The user's phone number in E.164 format. If supplied, will be used when applicable to prefill phone number fields in Link for the returning user flow and the Identity Verification flow. Phone number input is validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **user->email\_address** (string) The user's email address. Can be used to prefill Link fields when used with Identity Verification. **user->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 **user->address** (object) The user's address. Used only for Identity Verification and the Identity Match in Link workflows. If provided for Identity Verification, the user will not be shown fields to enter their address in the Identity Verification flow. If provided for Identity Match, the provided data will be used to match against the user's address. May be omitted, but if not omitted, all fields marked as required must be provided. **user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->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. **user->address->country** (required, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->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. **user->id\_number->value** (required, string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (required, string) 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) that the linked Item must support. If launching Link in update mode, should be omitted (unless you are using update mode to add a credit product, such as Assets, Statements, Income, or Plaid Check Consumer Report, to an existing Item); at least one product is required otherwise. To maximize the number of institutions and accounts available, initialize Link with the minimal product set required for your use case, as the products specified will limit which institutions and account types will be available to your users in Link. Only institutions that support all requested products can be selected; 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. For each specified product, the Item connected by the user must contain at least one compatible account. For details on compatible product / account type combinations, see the account type/product support matrix. To add products without limiting the institution list or account types, use the optional\_products or required\_if\_supported\_products fields. Products can also be added to an Item by calling the product endpoint after obtaining an access token; this may require the product to be listed in the additional\_consented\_products array. For details, see Choosing when to initialize products. 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. If launching Link with CRA products, cra\_base\_reports is required and must be included in the products array. 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, beacon, employment, identity, income\_verification, identity\_verification, investments, liabilities, payment\_initiation, standing\_orders, signal, statements, transactions, transfer, cra\_base\_report, cra\_income\_insights, cra\_cashflow\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_network\_insights, cra\_monitoring, layer, protect\_linked\_bank **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, signal, statements, protect\_linked\_bank **optional\_products** (\[string\]) List of Plaid product(s) that will enhance the consumer's use case, but that your app can function without. Plaid will attempt to fetch data for these products on a best-effort basis, and failure to support these products will not affect Item creation. There should be no overlap between this array and the 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, signal, statements, transactions **additional\_consented\_products** (\[string\]) List of additional Plaid product(s) you wish to collect consent for to support your use case. These products will not be billed until you start using them by calling the relevant endpoints. 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. If you include signal in additional\_consented\_products, you will need to call /signal/prepare before calling /signal/evaluate for the first time on an Item in order to get the most accurate results. For more details, see /signal/prepare. Possible values: auth, balance\_plus, identity, investments, investments\_auth, 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), Monitor, and Identity Verification are configured via the Dashboard instead. In update mode, this field will not have an effect; to update the webhook receiver endpoint for an existing Item, use /item/webhook/update instead. Format: url **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 another app. The redirect\_uri should not contain any query parameters. When used in Production, 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. **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. **institution\_data->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, savings, and cash management 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. **account\_filters->depository** (object) A filter to apply to depository-type accounts **account\_filters->depository->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 **account\_filters->credit** (object) A filter to apply to credit-type accounts **account\_filters->credit->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 **account\_filters->loan** (object) A filter to apply to loan-type accounts **account\_filters->loan->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, overdraft, line of credit, student, other, all **account\_filters->investment** (object) A filter to apply to investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier). **account\_filters->investment->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 **account\_filters->other** (object) A filter to apply to other-type accounts **account\_filters->other->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 **institution\_id** (string) Used for certain legacy use cases **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\_initiation->payment\_id** (string) The payment\_id provided by the /payment\_initiation/payment/create endpoint. **payment\_initiation->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->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. **income\_verification->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\_verification->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 **income\_verification->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. **income\_verification->bank\_income->days\_requested** (required, integer) The number of days of data to request for the Bank Income product Minimum: 1 Maximum: 731 **income\_verification->bank\_income->enable\_multiple\_items** (deprecated, boolean) Whether to enable multiple Items to be added in the Link session. This setting is deprecated and has been replaced by the more general enable\_multi\_item\_link setting, which supports all products. Default: false **income\_verification->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.) **income\_verification->payroll\_income->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 **income\_verification->payroll\_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 **income\_verification->payroll\_income->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. **income\_verification->payroll\_income->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 **income\_verification->stated\_income\_sources** (\[object\]) A list of user stated income sources **income\_verification->stated\_income\_sources->employer** (string) The employer corresponding to an income source specified by the user **income\_verification->stated\_income\_sources->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 **income\_verification->stated\_income\_sources->pay\_per\_cycle** (number) The income amount paid per cycle for a specified income source Format: double **income\_verification->stated\_income\_sources->pay\_annual** (number) The income amount paid annually for a specified income source Format: double **income\_verification->stated\_income\_sources->pay\_type** (string) The pay type - GROSS, NET, or UNKNOWN for a specified income source Possible values: UNKNOWN, GROSS, NET **income\_verification->stated\_income\_sources->pay\_frequency** (string) The pay frequency of a specified income source Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY **cra\_options** (object) Specifies options for initializing Link for use with Plaid Check products **cra\_options->days\_requested** (required, integer) The number of days of history to include in Plaid Check products. Maximum is 731; minimum is 180. If a value lower than 180 is provided, a minimum of 180 days of history will be requested. Maximum: 731 **cra\_options->days\_required** (integer) The minimum number of days of data required for the report to be successfully generated. Maximum: 184 **cra\_options->client\_report\_id** (string) Client-generated identifier, which can be used by lenders to track loan applications. **cra\_options->partner\_insights** (object) Specifies options for initializing Link for use with the Credit Partner Insights product. **cra\_options->partner\_insights->prism\_products** (deprecated, \[string\]) The specific Prism products to return. If none are passed in, then all products will be returned. Possible values: insights, scores **cra\_options->partner\_insights->prism\_versions** (object) The versions of Prism products to evaluate **cra\_options->partner\_insights->prism\_versions->firstdetect** (string) The version of Prism FirstDetect. If not specified, will default to v3. Possible values: 3, null **cra\_options->partner\_insights->prism\_versions->detect** (string) The version of Prism Detect Possible values: 4, null **cra\_options->partner\_insights->prism\_versions->cashscore** (string) The version of Prism CashScore. If not specified, will default to v3. Possible values: 4, 3, null **cra\_options->partner\_insights->prism\_versions->extend** (string) The version of Prism Extend Possible values: 4, null **cra\_options->partner\_insights->prism\_versions->insights** (string) The version of Prism Insights. If not specified, will default to v3. Possible values: 4, 3, null **cra\_options->base\_report** (object) Specifies options for initializing Link for use with the Base Report product, specifically the client\_report\_id. **cra\_options->base\_report->client\_report\_id** (string) Client-generated identifier, which can be used by lenders to track loan applications. **cra\_options->base\_report->gse\_options** (object) Specifies options for initializing Link to create reports that can be shared with GSEs for mortgage verification. **cra\_options->base\_report->gse\_options->report\_types** (required, \[string\]) Specifies which types of reports should be made available to GSEs. Possible values: VOA, EMPLOYMENT\_REFRESH **cra\_options->base\_report->require\_identity** (boolean) Indicates that the report must include identity information. If identity information is not available, the report will fail. **cra\_options->cashflow\_insights** (object) Specifies options for initializing Link for use with the Cashflow Insights product. **cra\_options->cashflow\_insights->attributes\_version** (string) The version of cashflow attributes Possible values: CFI1 **cra\_options->lend\_score** (object) Specifies options for initializing Link for use with the CRA LendScore product. **cra\_options->lend\_score->lend\_score\_version** (string) The version of the LendScore Possible values: LS1 **cra\_options->network\_insights** (object) Specifies options for initializing Link for use with the CRA Network Insights product. **cra\_options->network\_insights->network\_insights\_version** (string) The version of network insights Possible values: NI1 **cra\_options->include\_investments** (boolean) Indicates that investment data should be extracted from the linked account(s). **consumer\_report\_permissible\_purpose** (string) Describes the reason you are generating a Consumer Report for this user. This parameter is required when using Plaid Check (CRA) products. If you omit this parameter during Link token creation, you must call the /cra/check\_report/create endpoint to generate a report. If the Link session is not configured to use any Plaid Check (CRA) products, this parameter cannot be used and will cause an error if included. ACCOUNT\_REVIEW\_CREDIT: In connection with a consumer credit transaction for the review or collection of an account pursuant to FCRA Section 604(a)(3)(A). ACCOUNT\_REVIEW\_NON\_CREDIT: For a legitimate business need of the information to review a non-credit account provided primarily for personal, family, or household purposes to determine whether the consumer continues to meet the terms of the account pursuant to FCRA Section 604(a)(3)(F)(2). EXTENSION\_OF\_CREDIT: In connection with a credit transaction initiated by and involving the consumer pursuant to FCRA Section 604(a)(3)(A). LEGITIMATE\_BUSINESS\_NEED\_TENANT\_SCREENING: For a legitimate business need in connection with a business transaction initiated by the consumer primarily for personal, family, or household purposes in connection with a property rental assessment pursuant to FCRA Section 604(a)(3)(F)(i). LEGITIMATE\_BUSINESS\_NEED\_OTHER: For a legitimate business need in connection with a business transaction made primarily for personal, family, or household initiated by the consumer pursuant to FCRA Section 604(a)(3)(F)(i). WRITTEN\_INSTRUCTION\_PREQUALIFICATION: In accordance with the written instructions of the consumer pursuant to FCRA Section 604(a)(2), to evaluate an application’s profile to make an offer to the consumer. WRITTEN\_INSTRUCTION\_OTHER: In accordance with the written instructions of the consumer pursuant to FCRA Section 604(a)(2), such as when an individual agrees to act as a guarantor or assumes personal liability for a consumer, business, or commercial loan. Possible values: ACCOUNT\_REVIEW\_CREDIT, ACCOUNT\_REVIEW\_NON\_CREDIT, EXTENSION\_OF\_CREDIT, LEGITIMATE\_BUSINESS\_NEED\_TENANT\_SCREENING, LEGITIMATE\_BUSINESS\_NEED\_OTHER, WRITTEN\_INSTRUCTION\_PREQUALIFICATION, WRITTEN\_INSTRUCTION\_OTHER **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. The default behavior described in the documentation is the default behavior that will apply if you have not requested your account manager to apply a different default. If you have enabled the Dashboard Account Verification pane, the settings enabled there will override any settings in this object. **auth->auth\_type\_select\_enabled** (boolean) Specifies whether Auth Type Select is enabled for the Link session, allowing the end user to choose between linking via a credentials-based flow (i.e. Instant Auth, Instant Match, Automated Micro-deposits) or a manual flow that does not require login (all other Auth flows) prior to selecting their financial institution. Default behavior is false. **auth->automated\_microdeposits\_enabled** (boolean) Specifies whether the Link session is enabled for the Automated Micro-deposits flow. Default behavior is false. **auth->instant\_match\_enabled** (boolean) Specifies whether the Link session is enabled for the Instant Match flow. Instant Match is enabled by default. Instant Match can be disabled by setting this field to false. **auth->same\_day\_microdeposits\_enabled** (boolean) Specifies whether the Link session is enabled for the Same Day Micro-deposits flow. Default behavior is false. **auth->instant\_microdeposits\_enabled** (boolean) Specifies whether the Link session is enabled for the Instant Micro-deposits flow. Default behavior for Plaid teams created after November 2023 is false; default behavior for Plaid teams created before that date is true. **auth->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. Default behavior is OPTIONAL. Possible values: OFF, OPTIONAL, FORCED **auth->database\_match\_enabled** (deprecated, boolean) Database Match has been deprecated and replaced with Database Auth. Use the Account Verification Dashboard to enable Database Auth. **auth->database\_insights\_enabled** (deprecated, boolean) Database Insights has been deprecated and replaced with Database Auth. Use the Account Verification Dashboard to enable Database Auth. **auth->flow\_type** (deprecated, string) This field has been deprecated in favor of auth\_type\_select\_enabled. Possible values: FLEXIBLE\_AUTH **auth->sms\_microdeposits\_verification\_enabled** (boolean) Specifies whether the Link session is enabled for SMS micro-deposits verification. Default behavior is true. **transfer** (object) Specifies options for initializing Link for use with the Transfer product. **transfer->intent\_id** (string) The id returned by the /transfer/intent/create endpoint. **transfer->authorization\_id** (string) The id returned by the /transfer/authorization/create endpoint. Used to indicate Link session to complete required user action in order to make a decision for the authorization. If set, access\_token can be omitted. **update** (object) Specifies options for initializing Link for update mode. **update->account\_selection\_enabled** (boolean) If true, enables update mode with Account Select for institutions in the US and Canada that do not use OAuth, or that use OAuth but do not have their own account selection flow. For institutions in the US 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 **update->user** (boolean) If true, a user\_token must also be provided, and Link will open in update mode for the given user. Default: false **update->item\_ids** (\[string\]) An array of item\_ids associated with the user to be updated in update mode. If empty or null, this field will default to initializing update mode for the most recent unhealthy Item associated with the user. A user\_token must also be provided to use this field. **identity\_verification** (object) Specifies option for initializing Link for use with the Identity Verification product. **identity\_verification->template\_id** (required, string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **identity\_verification->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. This field is required for the statements product. **statements->start\_date** (required, string) The start date for statements, in ISO 8601 "YYYY-MM-DD" format, e.g. "2020-10-30". Format: date **statements->end\_date** (required, string) The end date for statements, in ISO 8601 "YYYY-MM-DD" format, e.g. "2020-10-30". You can request up to two years of data. 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 **investments->allow\_unverified\_crypto\_wallets** (boolean) If true, allow self-custody crypto wallets to be added without requiring signature verification. Defaults to false. **investments->allow\_manual\_entry** (boolean) If true, allow users to manually enter Investments account and holdings information. Defaults to false. **investments\_auth** (object) Configuration parameters for the Investments Move product **investments\_auth->manual\_entry\_enabled** (boolean) If true, show institutions that use the manual entry fallback flow. Default: false **investments\_auth->masked\_number\_match\_enabled** (boolean) If true, show institutions that use the masked number match fallback flow. Default: false **investments\_auth->stated\_account\_number\_enabled** (boolean) If true, show institutions that use the stated account number fallback flow. Default: false **hosted\_link** (object) Configuration parameters for Hosted Link. To enable the session for Hosted Link, send this object in the request. It can be empty. **hosted\_link->delivery\_method** (string) How Plaid should deliver the Plaid Link session to the customer. Only available to customers enabled for Link Delivery (beta). To request Link Delivery access, contact your account manager. 'sms' will deliver via SMS. Must pass 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 environment to test Link Delivery instead. Possible values: sms, email **hosted\_link->completion\_redirect\_uri** (string) URI that Hosted Link will redirect to upon completion of the Link flow. This will only occur in Hosted Link sessions, not in other implementation methods. **hosted\_link->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 7 days for links delivered by email, 1 day for links delivered via SMS, and 30 minutes for links not sent via Plaid Link delivery. This parameter will override the value of all three link types. **hosted\_link->is\_mobile\_app** (boolean) This indicates whether the client is opening hosted Link in a mobile app in an AsWebAuthenticationSession or Chrome custom tab. Default: false **transactions** (object) Configuration parameters for the Transactions product **transactions->days\_requested** (integer) The maximum number of days of transaction history to request for the Transactions product. The more transaction history is requested, the longer the historical update poll will take. The default value is 90 days. If a value under 30 is provided, a minimum of 30 days of history will be requested. Once Transactions has been added to an Item, this value cannot be updated. Customers using Recurring Transactions should request at least 180 days of history for optimal results. Minimum: 1 Maximum: 730 Default: 90 **identity** (object) Identity object used to specify document upload **identity->is\_document\_upload** (boolean) Used to specify whether the Link session is Identity Document Upload **identity->account\_ids** (\[string\]) An array of account\_ids. Currently can only contain one account\_id. Must be populated if using Document Upload. **identity->parsing\_configs** (\[string\]) An array of parsing configurations. Valid parsing configurations are ocr and risk\_signals. If parsing configurations are omitted, defaults to ocr Possible values: ocr, risk\_signals **enable\_multi\_item\_link** (boolean) If true, enable linking multiple items in the same Link session. Defaults to false. **user\_id** (string) A unique ID generated by Plaid representing the end user. Typically, this ID will come from the /user/create response, when the endpoint is invoked with the with\_upgraded\_user request field set to true. Required if the user object isn't included. If this field is included, then the remaining user object fields are ignored. /link/token/create Node▼ ```javascript const request: LinkTokenCreateRequest = { loading_sample: true }; try { const response = await plaidClient.linkTokenCreate(request); const linkToken = response.data.link_token; } catch (error) { // handle error } ``` #### Response fields  **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 and time for the link\_token, in ISO 8601 format. By default, a link\_token created to generate a public\_token that will be exchanged for a new access\_token expires after 4 hours, and 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. If using Hosted Link, the link\_token will expire at the same time as the Hosted Link URL, and you can customize the duration using the hosted\_link.url\_lifetime\_seconds option in the request. If using Link Delivery (beta), the link\_token will expire by default after 24 hours if sent via SMS and after 7 days if sent via email. If using Identity Verification, Link token expiration will not be enforced; an Identity Verification Link session can be created with an expired Link token. 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 session is enabled for Hosted Link. To enable the session for Hosted Link, send a hosted\_link object in the request. **user\_id** (string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. Response Object ```json { "link_token": "link-sandbox-af1a0311-da53-4636-b754-dd15cc058176", "expiration": "2020-03-27T12:56:34Z", "request_id": "XQVgFigpGHXkb0b" } ``` \=\*=\*=\*= #### /link/token/get  #### Get Link Token  The [/link/token/get](https://plaid.com/docs/api/link/index.html.md#linktokenget) 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/index.html.md) and the [Multi-Item Link flow](https://plaid.com/docs/link/multi-item-link/index.html.md) . 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](https://plaid.com/docs/api/link/index.html.md#linktokenget) 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 fields  **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** (required, string) A link\_token from a previous invocation of /link/token/create /link/token/get Node▼ ```javascript const request: LinkTokenGetRequest = { link_token: linkToken, }; try { const response = await plaidClient.linkTokenGet(request); } catch (error) { // handle error } ``` #### Response fields  **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** (nullable, string) The creation timestamp for the link\_token, in ISO 8601 format. Format: date-time **expiration** (nullable, string) 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. Session data will be provided for up to six hours after the session has ended. **link\_sessions->link\_session\_id** (string) The unique ID for the link session. **link\_sessions->started\_at** (string) The timestamp at which the link session was first started, in ISO 8601 format. Format: date-time **link\_sessions->finished\_at** (nullable, string) The timestamp at which the link session was finished, if available, in ISO 8601 format. Format: date-time **link\_sessions->on\_success** (deprecated, nullable, object) An object representing an onSuccess callback from Link. This field is returned only for legacy integrations and is deprecated in favor of 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. **link\_sessions->on\_success->public\_token** (string) Displayed once a user has successfully linked their Item. **link\_sessions->on\_success->metadata** (nullable, object) Displayed once a user has successfully linked their Item. **link\_sessions->on\_success->metadata->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->on\_success->metadata->institution->name** (string) The full institution name, such as 'Wells Fargo' **link\_sessions->on\_success->metadata->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->on\_success->metadata->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. **link\_sessions->on\_success->metadata->accounts->id** (string) The Plaid account\_id **link\_sessions->on\_success->metadata->accounts->name** (string) The official account name **link\_sessions->on\_success->metadata->accounts->mask** (nullable, string) 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. **link\_sessions->on\_success->metadata->accounts->type** (string) The account type. See the Account schema for a full list of possible values **link\_sessions->on\_success->metadata->accounts->subtype** (string) The account subtype. See the Account schema for a full list of possible values **link\_sessions->on\_success->metadata->accounts->verification\_status** (nullable, string) 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. **link\_sessions->on\_success->metadata->accounts->class\_type** (deprecated, nullable, string) 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\_sessions->on\_success->metadata->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. **link\_sessions->on\_success->metadata->transfer\_status** (nullable, string) 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, null **link\_sessions->on\_exit** (deprecated, nullable, object) An object representing an onExit callback from Link. This field is returned only for legacy implementations and has been deprecated in favor of exit, for improved naming consistency. If you are receiving this field, contact your Account Manager to migrate to the newer exit field. **link\_sessions->on\_exit->error** (nullable, object) 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. **link\_sessions->on\_exit->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **link\_sessions->on\_exit->error->error\_code** (string) The particular error code. Safe for programmatic use. **link\_sessions->on\_exit->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **link\_sessions->on\_exit->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **link\_sessions->on\_exit->error->display\_message** (nullable, string) 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. **link\_sessions->on\_exit->error->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. **link\_sessions->on\_exit->error->causes** (array) 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. **link\_sessions->on\_exit->error->status** (nullable, integer) 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. **link\_sessions->on\_exit->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **link\_sessions->on\_exit->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **link\_sessions->on\_exit->metadata** (nullable, object) Displayed if a user exits Link without successfully linking an Item. **link\_sessions->on\_exit->metadata->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->on\_exit->metadata->institution->name** (string) The full institution name, such as Wells Fargo **link\_sessions->on\_exit->metadata->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->on\_exit->metadata->status** (string) The point at which the user exited the Link flow. One of the following values. **link\_sessions->on\_exit->metadata->status->requires\_questions** User prompted to answer security questions **link\_sessions->on\_exit->metadata->status->requires\_selections** User prompted to answer multiple choice question(s) **link\_sessions->on\_exit->metadata->status->requires\_code** User prompted to provide a one-time passcode **link\_sessions->on\_exit->metadata->status->choose\_device** User prompted to select a device on which to receive a one-time passcode **link\_sessions->on\_exit->metadata->status->requires\_credentials** User prompted to provide credentials for the selected financial institution or has not yet selected a financial institution **link\_sessions->on\_exit->metadata->status->requires\_account\_selection** User prompted to select one or more financial accounts to share **link\_sessions->on\_exit->metadata->status->requires\_oauth** User prompted to enter an OAuth flow **link\_sessions->on\_exit->metadata->status->institution\_not\_found** User exited the Link flow after unsuccessfully (no results returned) searching for a financial institution **link\_sessions->on\_exit->metadata->status->institution\_not\_supported** User exited the Link flow after discovering their selected institution is no longer supported by Plaid **link\_sessions->on\_exit->metadata->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. **link\_sessions->on\_exit->metadata->request\_id** (string) The request ID for the last request made by Link. This can be shared with Plaid Support to expedite investigation. **link\_sessions->exit** (nullable, object) An object representing an 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. **link\_sessions->exit->error** (nullable, object) 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. **link\_sessions->exit->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **link\_sessions->exit->error->error\_code** (string) The particular error code. Safe for programmatic use. **link\_sessions->exit->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **link\_sessions->exit->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **link\_sessions->exit->error->display\_message** (nullable, string) 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. **link\_sessions->exit->error->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. **link\_sessions->exit->error->causes** (array) 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. **link\_sessions->exit->error->status** (nullable, integer) 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. **link\_sessions->exit->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **link\_sessions->exit->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **link\_sessions->exit->metadata** (nullable, object) Displayed if a user exits Link without successfully linking an Item. **link\_sessions->exit->metadata->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->exit->metadata->institution->name** (string) The full institution name, such as Wells Fargo **link\_sessions->exit->metadata->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->exit->metadata->status** (string) The point at which the user exited the Link flow. One of the following values. **link\_sessions->exit->metadata->status->requires\_questions** User prompted to answer security questions **link\_sessions->exit->metadata->status->requires\_selections** User prompted to answer multiple choice question(s) **link\_sessions->exit->metadata->status->requires\_code** User prompted to provide a one-time passcode **link\_sessions->exit->metadata->status->choose\_device** User prompted to select a device on which to receive a one-time passcode **link\_sessions->exit->metadata->status->requires\_credentials** User prompted to provide credentials for the selected financial institution or has not yet selected a financial institution **link\_sessions->exit->metadata->status->requires\_account\_selection** User prompted to select one or more financial accounts to share **link\_sessions->exit->metadata->status->requires\_oauth** User prompted to enter an OAuth flow **link\_sessions->exit->metadata->status->institution\_not\_found** User exited the Link flow after unsuccessfully (no results returned) searching for a financial institution **link\_sessions->exit->metadata->status->institution\_not\_supported** User exited the Link flow after discovering their selected institution is no longer supported by Plaid **link\_sessions->exit->metadata->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. **link\_sessions->exit->metadata->request\_id** (string) The request ID for the last request made by Link. This can be shared with Plaid Support to expedite investigation. **link\_sessions->events** (\[object\]) List of customer-related Link events **link\_sessions->events->event\_name** (string) Event name **link\_sessions->events->timestamp** (string) Timestamp in ISO 8601 format. **link\_sessions->events->event\_id** (string) UUID that can be used to deduplicate events **link\_sessions->events->event\_metadata** (object) Metadata about an event that occurred while the user was going through Link **link\_sessions->events->event\_metadata->error\_code** (string) The error code that the user encountered. Emitted by ERROR, EXIT. **link\_sessions->events->event\_metadata->error\_message** (string) The error message that the user encountered. Emitted by: ERROR, EXIT. **link\_sessions->events->event\_metadata->error\_type** (string) The error type that the user encountered. Emitted by: ERROR, EXIT. **link\_sessions->events->event\_metadata->exit\_status** (string) The status key indicates the point at which the user exited the Link flow. Emitted by: EXIT. **link\_sessions->events->event\_metadata->institution\_id** (string) The ID of the selected institution. Emitted by: all events. **link\_sessions->events->event\_metadata->institution\_name** (string) The name of the selected institution. Emitted by: all events. **link\_sessions->events->event\_metadata->institution\_search\_query** (string) The query used to search for institutions. Emitted by: SEARCH\_INSTITUTION. **link\_sessions->events->event\_metadata->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. **link\_sessions->events->event\_metadata->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. **link\_sessions->events->event\_metadata->view\_name** (string) The name of the view that is being transitioned to. Emitted by: TRANSITION\_VIEW. **link\_sessions->events->event\_metadata->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. **link\_sessions->events->event\_metadata->brand\_name** (string) The name of the selected brand. **link\_sessions->events->event\_metadata->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. **link\_sessions->events->event\_metadata->routing\_number** (string) The routing number submitted by user at the micro-deposits routing number pane. Emitted by SUBMIT\_ROUTING\_NUMBER. **link\_sessions->events->event\_metadata->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. **link\_sessions->results** (nullable, object) The set of results for a Link session. **link\_sessions->results->item\_add\_results** (\[object\]) 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. **link\_sessions->results->item\_add\_results->public\_token** (string) Returned once a user has successfully linked their Item. **link\_sessions->results->item\_add\_results->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. **link\_sessions->results->item\_add\_results->accounts->id** (string) The Plaid account\_id **link\_sessions->results->item\_add\_results->accounts->name** (string) The official account name **link\_sessions->results->item\_add\_results->accounts->mask** (nullable, string) 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. **link\_sessions->results->item\_add\_results->accounts->type** (string) The account type. See the Account schema for a full list of possible values **link\_sessions->results->item\_add\_results->accounts->subtype** (string) The account subtype. See the Account schema for a full list of possible values **link\_sessions->results->item\_add\_results->accounts->verification\_status** (nullable, string) 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. **link\_sessions->results->item\_add\_results->accounts->class\_type** (deprecated, nullable, string) 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\_sessions->results->item\_add\_results->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->results->item\_add\_results->institution->name** (string) The full institution name, such as 'Wells Fargo' **link\_sessions->results->item\_add\_results->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->results->cra\_item\_add\_results** (\[object\]) The set of Plaid Check Item adds for the Link session. **link\_sessions->results->cra\_item\_add\_results->item\_id** (string) 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. **link\_sessions->results->cra\_item\_add\_results->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. **link\_sessions->results->cra\_item\_add\_results->accounts->id** (string) The Plaid account\_id **link\_sessions->results->cra\_item\_add\_results->accounts->name** (string) The official account name **link\_sessions->results->cra\_item\_add\_results->accounts->mask** (nullable, string) 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. **link\_sessions->results->cra\_item\_add\_results->accounts->type** (string) The account type. See the Account schema for a full list of possible values **link\_sessions->results->cra\_item\_add\_results->accounts->subtype** (string) The account subtype. See the Account schema for a full list of possible values **link\_sessions->results->cra\_item\_add\_results->accounts->verification\_status** (nullable, string) 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. **link\_sessions->results->cra\_item\_add\_results->accounts->class\_type** (deprecated, nullable, string) 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\_sessions->results->cra\_item\_add\_results->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->results->cra\_item\_add\_results->institution->name** (string) The full institution name, such as 'Wells Fargo' **link\_sessions->results->cra\_item\_add\_results->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->results->cra\_update\_results** (\[object\]) The set of Plaid Check Item updates for the Link session. **link\_sessions->results->cra\_update\_results->item\_id** (string) 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. **link\_sessions->results->cra\_update\_results->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. **link\_sessions->results->cra\_update\_results->accounts->id** (string) The Plaid account\_id **link\_sessions->results->cra\_update\_results->accounts->name** (string) The official account name **link\_sessions->results->cra\_update\_results->accounts->mask** (nullable, string) 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. **link\_sessions->results->cra\_update\_results->accounts->type** (string) The account type. See the Account schema for a full list of possible values **link\_sessions->results->cra\_update\_results->accounts->subtype** (string) The account subtype. See the Account schema for a full list of possible values **link\_sessions->results->cra\_update\_results->accounts->verification\_status** (nullable, string) 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. **link\_sessions->results->cra\_update\_results->accounts->class\_type** (deprecated, nullable, string) 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\_sessions->results->cra\_update\_results->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->results->cra\_update\_results->institution->name** (string) The full institution name, such as 'Wells Fargo' **link\_sessions->results->cra\_update\_results->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->results->bank\_income\_results** (\[object\]) The set of bank income verifications for the Link session. **link\_sessions->results->bank\_income\_results->status** (string) 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. Possible values: APPROVED, NO\_DEPOSITS\_FOUND, USER\_REPORTED\_NO\_INCOME **link\_sessions->results->bank\_income\_results->item\_id** (string) 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. **link\_sessions->results->bank\_income\_results->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->results->bank\_income\_results->institution->name** (string) The full institution name, such as 'Wells Fargo' **link\_sessions->results->bank\_income\_results->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->results->payroll\_income\_results** (\[object\]) The set of payroll income verifications for the Link session. **link\_sessions->results->payroll\_income\_results->num\_paystubs\_retrieved** (integer) The number of paystubs retrieved from a payroll provider. **link\_sessions->results->payroll\_income\_results->num\_w2s\_retrieved** (integer) The number of W-2s retrieved from a payroll provider. **link\_sessions->results->payroll\_income\_results->institution** (nullable, object) An institution object. If the Item was created via Same-Day or Instant micro-deposit verification, will be null. **link\_sessions->results->payroll\_income\_results->institution->name** (string) The full institution name, such as 'Wells Fargo' **link\_sessions->results->payroll\_income\_results->institution->institution\_id** (string) The Plaid institution identifier **link\_sessions->results->document\_income\_results** (nullable, object) The details of a document income verification in Link **link\_sessions->results->document\_income\_results->num\_paystubs\_uploaded** (integer) The number of paystubs uploaded by the user. **link\_sessions->results->document\_income\_results->num\_w2s\_uploaded** (integer) The number of w2s uploaded by the user. **link\_sessions->results->document\_income\_results->num\_bank\_statements\_uploaded** (integer) The number of bank statements uploaded by the user. **link\_sessions->results->document\_income\_results->num\_1099s\_uploaded** (integer) The number of 1099s uploaded by the user **link\_sessions->results->cra\_document\_upload\_results** (nullable, object) The details of a document upload CRA session in link **link\_sessions->results->cra\_document\_upload\_results->num\_bank\_statements\_uploaded** (integer) The number of bank statements uploaded by the user. **metadata** (object) An object specifying the arguments originally provided to the /link/token/create call. **metadata->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 **metadata->webhook** (nullable, string) The webhook specified in the /link/token/create call. Format: url **metadata->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, AT, FI **metadata->language** (nullable, string) The language specified in the /link/token/create call. **metadata->institution\_data** (object) A map containing data used to highlight institutions in Link. **metadata->institution\_data->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. **metadata->account\_filters** (object) The account\_filters specified in the original call to /link/token/create. **metadata->account\_filters->depository** (object) A filter to apply to depository-type accounts **metadata->account\_filters->depository->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 **metadata->account\_filters->credit** (object) A filter to apply to credit-type accounts **metadata->account\_filters->credit->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 **metadata->account\_filters->loan** (object) A filter to apply to loan-type accounts **metadata->account\_filters->loan->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, overdraft, line of credit, student, other, all **metadata->account\_filters->investment** (object) A filter to apply to investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier). **metadata->account\_filters->investment->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 **metadata->redirect\_uri** (nullable, string) The redirect\_uri specified in the /link/token/create call. **metadata->client\_name** (nullable, string) 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. Response Object ```json { "created_at": "2024-07-29T20:22:21Z", "expiration": "2024-07-29T20:52:22Z", "link_sessions": [ { "events": [ { "event_id": "8b2b5d28-79ec-468b-bbce-f8bd34be635a", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "Nnclj9HntPMu5dm" }, "event_name": "HANDOFF", "timestamp": "2024-07-29T20:23:59Z" }, { "event_id": "12a888e0-da26-4c38-8ded-2992bc78c246", "event_metadata": { "request_id": "Nnclj9HntPMu5dm" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:23:59Z" }, { "event_id": "6557bdf1-a20a-43b0-8fed-c8b671e2f478", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "sR4EGcU8zniznXi" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:23:56Z" }, { "event_id": "c6745f4c-d8fa-4103-8a65-7b995c60809e", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "4LYDWkxfJ0htDA4" }, "event_name": "SUBMIT_CREDENTIALS", "timestamp": "2024-07-29T20:23:55Z" }, { "event_id": "2610fa06-e765-4c9e-8948-63048d451dbf", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "4LYDWkxfJ0htDA4" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:23:23Z" }, { "event_id": "54b87deb-60a7-4f50-9326-293840090b72", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "FTEFiPeL9OstwL4" }, "event_name": "SELECT_INSTITUTION", "timestamp": "2024-07-29T20:23:23Z" }, { "event_id": "6b285180-0bac-4ccc-bec0-d4ed75c253d2", "event_metadata": { "request_id": "FTEFiPeL9OstwL4" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:23:20Z" }, { "event_id": "239a6000-da50-4319-99f7-919378b7db53", "event_metadata": { "request_id": "WFgwgGivjBbwOb9" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:23:17Z" }, { "event_id": "0a523744-5003-4578-8414-c87e06ef8ca9", "event_metadata": { "institution_id": "ins_127989", "institution_name": "Bank of America", "request_id": "WFgwgGivjBbwOb9" }, "event_name": "HANDOFF", "timestamp": "2024-07-29T20:23:17Z" }, { "event_id": "ff44d52a-51ef-4987-b7d0-b6497dfa93cd", "event_metadata": { "institution_id": "ins_127989", "institution_name": "Bank of America", "request_id": "uqA0Vq8zuKlsB2y" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:23:14Z" }, { "event_id": "e0d7c1dc-8e7e-4361-893f-d6c2d2f050ab", "event_metadata": { "institution_id": "ins_127989", "institution_name": "Bank of America", "request_id": "dTGtMHbK21BLrsp" }, "event_name": "OPEN_OAUTH", "timestamp": "2024-07-29T20:22:49Z" }, { "event_id": "de87a1c0-666e-4d95-88d8-1163f6bf20f1", "event_metadata": { "institution_id": "ins_127989", "institution_name": "Bank of America", "request_id": "dTGtMHbK21BLrsp" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:22:47Z" }, { "event_id": "6edc2c59-96cd-4dee-a86b-140ddfd3076e", "event_metadata": { "institution_id": "ins_127989", "institution_name": "Bank of America", "request_id": "BxBukZsBEmxZw0I" }, "event_name": "SELECT_INSTITUTION", "timestamp": "2024-07-29T20:22:46Z" }, { "event_id": "d176ab57-26d2-45ee-a0fe-67daf0cf0cb0", "event_metadata": { "request_id": "BxBukZsBEmxZw0I" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:22:43Z" }, { "event_id": "b8be9c3d-7ac5-4851-bd92-0638cb63bdeb", "event_metadata": { "request_id": "UtqR09RKzJ1gcEx" }, "event_name": "SKIP_SUBMIT_PHONE", "timestamp": "2024-07-29T20:22:42Z" }, { "event_id": "7144cca7-533b-4dfc-81ed-f78a750ba95f", "event_metadata": { "request_id": "UtqR09RKzJ1gcEx" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:22:40Z" }, { "event_id": "e6a6dcc0-6bbf-4871-8d59-0c3a5eccff53", "event_metadata": { "request_id": "FTiagIVmxfqbevM" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-07-29T20:22:39Z" } ], "finished_at": "2024-07-29T20:24:05.330312653Z", "link_session_id": "43face8b-a5c2-42a4-adec-4a4ec589eb46", "on_success": { "metadata": { "accounts": [ { "class_type": null, "id": "DXzZ94ZG9vhaZy8BvyZRSQ4jJwwlkNS3RwoeX", "mask": "0000", "name": "Plaid Checking", "subtype": "checking", "type": "depository", "verification_status": null }, { "class_type": null, "id": "VJyR7wRm79TNGEKxpEG9fjpJ1mmM5Bt9ymVkR", "mask": "1111", "name": "Plaid Saving", "subtype": "savings", "type": "depository", "verification_status": null }, { "class_type": null, "id": "wZXnexn1eoH6LNWmMNL4hqkPB55ndjHPRNp93", "mask": "9999", "name": "Plaid Business Credit Card", "subtype": "credit card", "type": "credit", "verification_status": null } ], "institution": { "institution_id": "ins_127989", "name": "Bank of America" }, "link_session_id": "43face8b-a5c2-42a4-adec-4a4ec589eb46", "transfer_status": null }, "public_token": "public-sandbox-3b9687f0-3abd-4913-9889-f0ba816d4a3a" }, "results": { "item_add_results": [ { "accounts": [ { "class_type": null, "id": "DXzZ94ZG9vhaZy8BvyZRSQ4jJwwlkNS3RwoeX", "mask": "0000", "name": "Plaid Checking", "subtype": "checking", "type": "depository", "verification_status": null }, { "class_type": null, "id": "VJyR7wRm79TNGEKxpEG9fjpJ1mmM5Bt9ymVkR", "mask": "1111", "name": "Plaid Saving", "subtype": "savings", "type": "depository", "verification_status": null }, { "class_type": null, "id": "wZXnexn1eoH6LNWmMNL4hqkPB55ndjHPRNp93", "mask": "9999", "name": "Plaid Business Credit Card", "subtype": "credit card", "type": "credit", "verification_status": null } ], "institution": { "institution_id": "ins_127989", "name": "Bank of America" }, "public_token": "public-sandbox-3b9687f0-3abd-4913-9889-f0ba816d4a3a" }, { "accounts": [ { "class_type": null, "id": "qvqrX8gDvxCdyvvgGkKzSNPzDwaQGjFgyQk5Z", "mask": "4007", "name": "Checking", "subtype": "checking", "type": "depository", "verification_status": null } ], "institution": { "institution_id": "ins_20", "name": "Citizens Bank" }, "public_token": "public-sandbox-44ba202e-bf6b-45c6-a5ba-d526765626a9" } ], "cra_item_add_results": [], "cra_update_results": [], "bank_income_results": [], "payroll_income_results": [], "document_income_results": null, "protect_results": null }, "started_at": "2024-07-29T20:22:36.522196741Z" } ], "link_token": "link-sandbox-e7b6956c-1522-4823-85d2-c4ca74251949", "metadata": { "client_name": "Wonderwallet", "country_codes": [ "US" ], "initial_products": [ "transactions" ], "language": "en", "redirect_uri": null, "webhook": "https://webhook.site/dc9c138f-75de-4db1-883a-a4add4b7eb7e" }, "request_id": "Pxpgzy0Wjvn99mY" } ``` ### Webhooks  \=\*=\*=\*= #### ITEM\_ADD\_RESULT  Fired when a user successfully adds a Plaid Item during a Link session when using Hosted Link or Multi-Item Link sessions. Contains the public token for the Item. #### Properties  **webhook\_type** (string) LINK **webhook\_code** (string) ITEM\_ADD\_RESULT **link\_session\_id** (string) The identifier for the Link session. **link\_token** (string) The link token used to create the Link session. **public\_token** (string) The public token corresponding to the item that was added. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "LINK", "webhook_code": "ITEM_ADD_RESULT", "link_session_id": "356dbb28-7f98-44d1-8e6d-0cec580f3171", "link_token": "link-sandbox-af1a0311-da53-4636-b754-dd15cc058176", "public_token": "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d", "environment": "sandbox" } ``` \=\*=\*=\*= #### EVENTS  This webhook contains a summary of the events from a Link session and will be fired after the user finishes going through Link. If the user abandons the Link flow (i.e., closes the hosted link webpage or leaves Link open for too long without taking any action), the webhook will be fired 5-15 minutes after the last user interaction. A single Link session may occasionally generate multiple `EVENTS` webhooks. If this occurs, the new webhook will contain all previous events for the session, as well as new events that occurred since the previous `EVENTS` webhook was sent. If this occurs, events can be grouped using the `link_session_id` field and, if necessary, de-duplicated using the `event_id` field. By default, the `EVENTS` webhook is sent only for sessions where the end user goes through a Hosted Link flow (including Link Recovery flows). If you would like to receive this webhook for sessions not using Hosted Link, contact your Account Manager or Support. This enablement will also cause you to receive the `SESSION_FINISHED` webhook for non-Hosted-Link sessions and to be able to use [/link/token/get](https://plaid.com/docs/api/link/index.html.md#linktokenget) to receive events data for non-Hosted Link sessions. #### Properties  **webhook\_type** (string) LINK **webhook\_code** (string) EVENTS **events** (\[object\]) The Link events emitted during the Link session **events->event\_name** (string) Event name **events->timestamp** (string) Timestamp in ISO 8601 format. **events->event\_id** (string) UUID that can be used to deduplicate events **events->event\_metadata** (object) Metadata about an event that occurred while the user was going through Link **events->event\_metadata->error\_code** (string) The error code that the user encountered. Emitted by ERROR, EXIT. **events->event\_metadata->error\_message** (string) The error message that the user encountered. Emitted by: ERROR, EXIT. **events->event\_metadata->error\_type** (string) The error type that the user encountered. Emitted by: ERROR, EXIT. **events->event\_metadata->exit\_status** (string) The status key indicates the point at which the user exited the Link flow. Emitted by: EXIT. **events->event\_metadata->institution\_id** (string) The ID of the selected institution. Emitted by: all events. **events->event\_metadata->institution\_name** (string) The name of the selected institution. Emitted by: all events. **events->event\_metadata->institution\_search\_query** (string) The query used to search for institutions. Emitted by: SEARCH\_INSTITUTION. **events->event\_metadata->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. **events->event\_metadata->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. **events->event\_metadata->view\_name** (string) The name of the view that is being transitioned to. Emitted by: TRANSITION\_VIEW. **events->event\_metadata->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. **events->event\_metadata->brand\_name** (string) The name of the selected brand. **events->event\_metadata->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. **events->event\_metadata->routing\_number** (string) The routing number submitted by user at the micro-deposits routing number pane. Emitted by SUBMIT\_ROUTING\_NUMBER. **events->event\_metadata->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. **link\_session\_id** (string) An identifier for the Link session these events occurred in **link\_token** (string) The Link token used to create the Link session these events are from API Object ```json { "environment": "sandbox", "link_session_id": "1daca4d5-9a0d-4e85-a2e9-1e905ecaa32e", "link_token": "link-sandbox-79e723b0-0e04-4248-8a33-15ceb6828a45", "webhook_code": "EVENTS", "webhook_type": "LINK", "events": [ { "event_id": "9469937a-6fac-40be-9322-f86e8c0b94ed", "event_metadata": { "request_id": "ClqZyuhovgkaQ3j" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-05-21T00:17:54Z" }, { "event_id": "4b2390cf-33a2-4078-b933-62468b9e53a5", "event_metadata": { "error_code": "INVALID_CREDENTIALS", "error_message": "the provided credentials were not correct", "error_type": "ITEM_ERROR", "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "ttK0NtGKaVAlbCR" }, "event_name": "ERROR", "timestamp": "2024-05-21T00:18:09Z" }, { "event_id": "45f76afe-f2aa-495c-a326-f37e043a1ccd", "event_metadata": { "request_id": "WRJqqeh8Hxife05" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-05-21T00:17:56Z" }, { "event_id": "978b772c-f2cc-404f-9449-2113e4671c4f", "event_metadata": { "error_code": "INVALID_CREDENTIALS", "error_message": "the provided credentials were not correct", "error_type": "ITEM_ERROR", "exit_status": "requires_credentials", "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "u1HcAeiCKtz3qmm" }, "event_name": "EXIT", "timestamp": "2024-05-21T00:18:13Z" }, { "event_id": "a873db76-aa4e-4a00-9d60-7ae08aa8e63f", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "ttK0NtGKaVAlbCR" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-05-21T00:18:09Z" }, { "event_id": "ca85566d-5f32-4716-909f-82f3a0b6160b", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "XRvev3cP9wYUFz5" }, "event_name": "SUBMIT_CREDENTIALS", "timestamp": "2024-05-21T00:18:07Z" }, { "event_id": "09220752-6b83-407e-baf0-f6228df16ea0", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "WRJqqeh8Hxife05" }, "event_name": "SELECT_INSTITUTION", "timestamp": "2024-05-21T00:18:01Z" }, { "event_id": "1c75d2ee-19c1-4d1b-8600-7d06cecbb270", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "5vc1IyBHfLkIVFx" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-05-21T00:18:12Z" }, { "event_id": "1c9c9059-c065-4362-836a-d9afb91a6125", "event_metadata": { "request_id": "MlFW5NSWtCs1KLI" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-05-21T00:17:50Z" }, { "event_id": "4f381b3f-172b-4bca-9804-c230f8d36a3b", "event_metadata": { "institution_id": "ins_20", "institution_name": "Citizens Bank", "request_id": "XRvev3cP9wYUFz5" }, "event_name": "TRANSITION_VIEW", "timestamp": "2024-05-21T00:18:02Z" }, { "event_id": "dd9d4747-d4da-4c11-88d6-b5a0e96f1886", "event_metadata": { "request_id": "ClqZyuhovgkaQ3j" }, "event_name": "SKIP_SUBMIT_PHONE", "timestamp": "2024-05-21T00:17:55Z" } ] } ``` \=\*=\*=\*= #### SESSION\_FINISHED  Contains the state of a completed Link session, along with the public token(s) if available. By default, this webhook is sent only for sessions enabled for the Hosted Link flow (including Link Recovery flows), a Multi-Item Link flow, or a Layer flow. If you would like to receive this webhook for other sessions, contact your Account Manager or Support. This enablement will also enable the `EVENTS` webhook for all Link sessions and the ability to use [/link/token/get](https://plaid.com/docs/api/link/index.html.md#linktokenget) to retrieve events for non-Hosted-Link sessions. #### Properties  **webhook\_type** (string) LINK **webhook\_code** (string) SESSION\_FINISHED **status** (string) The final status of the Link session. Will always be "SUCCESS" or "EXITED". **link\_session\_id** (string) The identifier for the Link session. **link\_token** (string) The link token used to create the Link session. **public\_token** (deprecated, string) The public token generated by the Link session. This field has been deprecated; please use public\_tokens instead. **public\_tokens** (\[string\]) The public tokens generated by the Link session. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "LINK", "webhook_code": "SESSION_FINISHED", "status": "SUCCESS", "link_session_id": "356dbb28-7f98-44d1-8e6d-0cec580f3171", "link_token": "link-sandbox-af1a0311-da53-4636-b754-dd15cc058176", "public_tokens": [ "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d" ], "environment": "sandbox" } ``` --- # API - Network | Plaid Docs Network  ======== #### API reference for the Plaid Network  | Endpoints | | | --- | --- | | [/network/status/get](https://plaid.com/docs/api/network/index.html.md#networkstatusget) | Check the status of a user in the Plaid Network | ### Endpoints  \=\*=\*=\*= #### /network/status/get  #### Check a user's Plaid Network status  The [/network/status/get](https://plaid.com/docs/api/network/index.html.md#networkstatusget) endpoint can be used to check whether Plaid has a matching profile for the user. This is useful for determining if a user is eligible for a streamlined experience, such as Layer. Note: it is strongly recommended to check for Layer eligibility in the frontend. [/network/status/get](https://plaid.com/docs/api/network/index.html.md#networkstatusget) should only be used for checking Layer eligibility if a frontend check is not possible for your use case. For instructions on performing a frontend eligibility check, see the [Layer documentation](https://plaid.com/docs/layer/index.html.md#integration-overview) . #### Request fields  **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. **user** (required, object) An object specifying information about the end user for the network status check. **user->phone\_number** (required, string) The user's phone number in E.164 format. **template\_id** (string) The id of a template defined in Plaid Dashboard. This field is used if you have additional criteria that you want to check against (e.g. Layer eligibility). /network/status/get Node▼ ```javascript const request: NetworkStatusGetRequest = { user: { phone_number: '+14155550015', }, }; try { const response = await plaidClient.networkStatusGet(request); const networkStatus = response.data.network_status; } catch (error) { // handle error } ``` #### Response fields  **network\_status** (string) Enum representing the overall network status of the user. Possible values: UNKNOWN, RETURNING\_USER **layer** (nullable, object) An object representing Layer-related metadata for the requested user. **layer->eligible** (boolean) Indicates if the user is eligible for a Layer session. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "network_status": "RETURNING_USER", "request_id": "m8MDnv9okwxFNBV" } ``` --- # API - OAuth | Plaid Docs OAuth  ====== #### API reference for Plaid OAuth endpoints  | Endpoints | | | --- | --- | | [/oauth/token](https://plaid.com/docs/api/oauth/index.html.md#oauthtoken) | Create or refresh an OAuth access token | | [/oauth/introspect](https://plaid.com/docs/api/oauth/index.html.md#oauthintrospect) | Get metadata about an OAuth token | | [/oauth/revoke](https://plaid.com/docs/api/oauth/index.html.md#oauthrevoke) | Revoke an OAuth token | These endpoints are for customers, partners and services that are integrating with Plaid's OAuth service to obtain a token for sharing consumer reports or accessing the Plaid Dashboard or other Plaid services. They are not used for the Plaid Link flow where end users connect their financial institution accounts to Plaid using a bank's OAuth service. If you are a Plaid customer trying to ensure your app supports OAuth-based bank connections, see the [OAuth Guide](https://plaid.com/docs/link/oauth/index.html.md) instead. ### Endpoints  \=\*=\*=\*= #### /oauth/token  #### Create or refresh an OAuth access token  [/oauth/token](https://plaid.com/docs/api/oauth/index.html.md#oauthtoken) issues an access token and refresh token depending on the `grant_type` provided. This endpoint supports `Content-Type: application/x-www-form-urlencoded` as well as JSON. The fields for the form are equivalent to the fields for JSON and conform to the OAuth 2.0 specification. #### Request fields  **grant\_type** (required, string) The type of OAuth grant being requested: client\_credentials allows exchanging a client id and client secret for a refresh and access token. refresh\_token allows refreshing an access token using a refresh token. When using this grant type, only the refresh\_token field is required (along with the client\_id and client\_secret). urn:ietf:params:oauth:grant-type:token-exchange allows exchanging a subject token for an OAuth token. When using this grant type, the audience, subject\_token and subject\_token\_type fields are required. These grants are defined in their respective RFCs. refresh\_token and client\_credentials are defined in RFC 6749 and urn:ietf:params:oauth:grant-type:token-exchange is defined in RFC 8693. Possible values: refresh\_token, urn:ietf:params:oauth:grant-type:token-exchange, client\_credentials **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. **client\_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 as either secret or client\_secret. **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 as either secret or client\_secret. **scope** (string) A JSON string containing a space-separated list of scopes associated with this token, in the format described in https://datatracker.ietf.org/doc/html/rfc6749#section-3.3. Currently accepted values are: user:read allows reading user data. user:write allows writing user data. exchange allows exchanging a token using the urn:plaid:params:oauth:user-token grant type. mcp:dashboard allows access to the MCP dashboard server. **refresh\_token** (string) Refresh token for OAuth **resource** (string) URI of the target resource server **audience** (string) Used when exchanging a token. The meaning depends on the subject\_token\_type: For urn:plaid:params:tokens:user: Must be the same as the client\_id.For urn:plaid:params:oauth:user-token: The other client\_id to exchange tokens to.For urn:plaid:params:credit:multi-user: a client\_id or one of the supported CRA partner URNs: urn:plaid:params:cra-partner:experian, urn:plaid:params:cra-partner:fannie-mae, or urn:plaid:params:cra-partner:freddie-mac. **subject\_token** (string) Token representing the subject. The subject token must be an OAuth refresh token issued from the /oauth/token endpoint. The meaning depends on the subject\_token\_type. **subject\_token\_type** (string) The type of the subject token. urn:plaid:params:tokens:user allows exchanging a Plaid-issued user token for an OAuth token. When using this token type, audience must be the same as the client\_id. subject\_token must be a Plaid-issued user token issued from the /user/create endpoint. urn:plaid:params:oauth:user-token allows exchanging a refresh token for an OAuth token to another client\_id. The other client\_id is provided in audience. subject\_token must be an OAuth refresh token issued from the /oauth/token endpoint. urn:plaid:params:credit:multi-user allows exchanging a Plaid-issued user token for an OAuth token. When using this token type, audience may be a client id or a supported CRA partner URN. audience supports a comma-delimited list of clients. When multiple clients are specified in the audience a multi-party token is created which can be used by all parties in the audience in conjunction with their client\_id and client\_secret. Possible values: urn:plaid:params:tokens:user, urn:plaid:params:oauth:user-token, urn:plaid:params:credit:multi-user /oauth/token Node▼ ```javascript const request = { grant_type: 'urn:ietf:params:oauth:grant-type:token-exchange', scope: 'user:read', subject_token_type: 'urn:plaid:params:credit:multi-user', audience: 'urn:plaid:params:cra-partner:fannie-mae', subject_token: userToken }; try { const response = await client.oauthToken(request); } catch (error) { ... } ``` #### Response fields  **access\_token** (string) Access token for OAuth **refresh\_token** (string) Refresh token for OAuth **token\_type** (string) type of token the access token is. Currently it is always Bearer **expires\_in** (integer) time remaining in seconds before expiration **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "access_token": "pda-RDdg0TUCB0FB25_UPIlnhA==", "refresh_token": "pdr--viXurkDg88d5zf8m6Wl0g==", "expires_in": 900, "token_type": "Bearer", "request_id": "m8MDqcS6F3lzqvP" } ``` \=\*=\*=\*= #### /oauth/introspect  #### Get metadata about an OAuth token  [/oauth/introspect](https://plaid.com/docs/api/oauth/index.html.md#oauthintrospect) returns metadata about an access token or refresh token. Note: This endpoint supports `Content-Type: application/x-www-form-urlencoded` as well as JSON. The fields for the form are equivalent to the fields for JSON and conform to the OAuth 2.0 specification. #### Request fields  **token** (required, string) An OAuth token of any type (refresh\_token, access\_token, etc) **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. **client\_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 as either secret or client\_secret. **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 as either secret or client\_secret. /oauth/introspect Node▼ ```javascript const request = { token: accessToken }; try { const response = await client.oauthIntrospect(request); } catch (error) { ... } ``` #### Response fields  **active** (boolean) Boolean indicator of whether or not the presented token is currently active. A true value indicates that the token has been issued, has not been revoked, and is within the time window of validity. **scope** (string) A JSON string containing a space-separated list of scopes associated with this token, in the format described in https://datatracker.ietf.org/doc/html/rfc6749#section-3.3. Currently accepted values are: user:read allows reading user data. user:write allows writing user data. exchange allows exchanging a token using the urn:plaid:params:oauth:user-token grant type. mcp:dashboard allows access to the MCP dashboard server. **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. **exp** (integer) Expiration time as UNIX timestamp since January 1 1970 UTC **iat** (integer) Issued at time as UNIX timestamp since January 1 1970 UTC **sub** (string) Subject of the token **aud** (string) Audience of the token **iss** (string) Issuer of the token **token\_type** (string) Type of the token **user\_id** (string) User ID of the 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. Response Object ```json { "active": true, "scope": "user:read user:write exchange", "client_id": "68028ce48d2b0dec68747f6c", "exp": 1670000000, "iat": 1670000000, "sub": "68028ce48d2b0dec68747f6c", "aud": "https://production.plaid.com", "iss": "https://production.plaid.com", "token_type": "Bearer", "request_id": "m8MDqcS6F3lzqvP" } ``` \=\*=\*=\*= #### /oauth/revoke  #### Revoke an OAuth token  [/oauth/revoke](https://plaid.com/docs/api/oauth/index.html.md#oauthrevoke) revokes an access or refresh token, preventing any further use. If a refresh token is revoked, all access and refresh tokens derived from it are also revoked, including exchanged tokens. Note: This endpoint supports `Content-Type: application/x-www-form-urlencoded` as well as JSON. The fields for the form are equivalent to the fields for JSON and conform to the OAuth 2.0 specification. #### Request fields  **token** (required, string) An OAuth token of any type (refresh\_token, access\_token, etc) **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. **client\_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 as either secret or client\_secret. **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 as either secret or client\_secret. /oauth/revoke Node▼ ```javascript const request = { token: accessToken }; try { const response = await client.oauthRevoke(request); } catch (error) { ... } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "m8MDqcS6F3lzqvP" } ``` --- # API - Reseller partners | Plaid Docs Partner endpoints and webhooks  =============================== #### Create and manage end customers  For general, non-reference documentation, see [Reseller partners](https://plaid.com/docs/account/resellers/index.html.md) . | Endpoints | | | --- | --- | | [/partner/customer/create](https://plaid.com/docs/api/partner/index.html.md#partnercustomercreate) | Create an end customer | | [/partner/customer/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomerget) | Get the status of an end customer | | [/partner/customer/oauth\_institutions/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomeroauth_institutionsget) | Get the OAuth-institution registration status for an end customer | | [/partner/customer/enable](https://plaid.com/docs/api/partner/index.html.md#partnercustomerenable) | Enable an end customer in Production | | [/partner/customer/remove](https://plaid.com/docs/api/partner/index.html.md#partnercustomerremove) | Remove an end customer | | Webhooks | | | --- | --- | | [PARTNER\_END\_CUSTOMER\_OAUTH\_STATUS\_UPDATED](https://plaid.com/docs/api/partner/index.html.md#partner_end_customer_oauth_status_updated) | Customer OAuth status updated | ### Endpoints  \=\*=\*=\*= #### /partner/customer/create  #### Creates a new end customer for a Plaid reseller.  The [/partner/customer/create](https://plaid.com/docs/api/partner/index.html.md#partnercustomercreate) endpoint is used by reseller partners to create end customers. To create end customers, it should be called in the Production environment only, even when creating Sandbox API keys. If called in the Sandbox environment, it will return a sample response, but no customer will be created and the API keys will not be valid. #### Request fields  **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. **company\_name** (required, string) The company name of the end customer being created. This will be used to display the end customer in the Plaid Dashboard. It will not be shown to end users. **is\_diligence\_attested** (required, boolean) Denotes whether or not the partner has completed attestation of diligence for the end customer to be created. **products** (\[string\]) The products to be enabled for the end customer. If empty or null, this field will default to the products enabled for the reseller at the time this endpoint is called. Possible values: assets, auth, balance, identity, income\_verification, investments, liabilities, transactions, employment, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights **create\_link\_customization** (boolean) If true, the end customer's default Link customization will be set to match the partner's. You can always change the end customer's Link customization in the Plaid Dashboard. See the Link Customization docs for more information. If you require the ability to programmatically create end customers using multiple different Link customization profiles, contact your Plaid Account Manager for assistance. Important: Data Transparency Messaging (DTM) use cases will not be copied to the end customer's Link customization unless the Publish changes button is clicked after the use cases are applied. Link will not work in Production unless the end customer's DTM use cases are configured. For more details, see Data Transparency Messaging. **logo** (string) Base64-encoded representation of the end customer's logo. Must be a PNG of size 1024x1024 under 4MB. The logo will be shared with financial institutions and shown to the end user during Link flows. A logo is required if create\_link\_customization is true. If create\_link\_customization is false and the logo is omitted, the partner's logo will be used if one exists, otherwise a stock logo will be used. **legal\_entity\_name** (required, string) The end customer's legal name. This will be shared with financial institutions as part of the OAuth registration process. It will not be shown to end users. **website** (required, string) The end customer's website. **application\_name** (required, string) The name of the end customer's application. This will be shown to end users when they go through the Plaid Link flow. The application name must be unique and cannot match the name of another application already registered with Plaid. **technical\_contact** (object) The technical contact for the end customer. Defaults to partner's technical contact if omitted. string string string **billing\_contact** (object) The billing contact for the end customer. Defaults to partner's billing contact if omitted. string string string **customer\_support\_info** (object) This information is public. Users of your app will see this information when managing connections between your app and their bank accounts in Plaid Portal. Defaults to partner's customer support info if omitted. This field is mandatory for partners whose Plaid accounts were created after November 26, 2024 and will be mandatory for all partners by the 1033 compliance deadline. **customer\_support\_info->email** (string) This field is mandatory for partners whose Plaid accounts were created after November 26, 2024 and will be mandatory for all partners by the 1033 compliance deadline. string string string **address** (required, object) The end customer's address. string string string string **address->country\_code** (string) ISO-3166-1 alpha-2 country code standard. **is\_bank\_addendum\_completed** (required, boolean) Denotes whether the partner has forwarded the Plaid bank addendum to the end customer. **assets\_under\_management** (object) Assets under management for the given end customer. Required for end customers with monthly service commitments. required, number required, string **redirect\_uris** (\[string\]) A list of URIs indicating the destination(s) where a user can be forwarded after completing the Link flow; used to support OAuth authentication flows when launching Link in the browser or another app. URIs should not contain any query parameters. When used in Production, URIs must use https. To specify any subdomain, use \* as a wildcard character, e.g. https://\*.example.com/oauth.html. To modify redirect URIs for an end customer after creating them, go to the end customer's API page in the Dashboard. **registration\_number** (string) The unique identifier assigned to a financial institution by regulatory authorities, if applicable. For banks, this is the FDIC Certificate Number. For credit unions, this is the Credit Union Charter Number. /partner/customer/create Node▼ ```javascript const request: PartnerCustomerCreateRequest = { address: { city: city, country_code: countryCode, postal_code: postalCode, region: region, street: street, }, application_name: applicationName, billing_contact: { email: billingEmail, given_name: billingGivenName, family_name: billingFamilyName, }, customer_support_info: { email: supportEmail, phone_number: supportPhoneNumber, contact_url: supportContactUrl, link_update_url: linkUpdateUrl, }, company_name: companyName, is_bank_addendum_completed: true, is_diligence_attested: true, legal_entity_name: legalEntityName, products: products, technical_contact: { email: technicalEmail, given_name: technicalGivenName, family_name: technicalFamilyName, }, website: website, }; try { const response = await plaidClient.partnerCustomerCreate(request); const endCustomer = response.data.end_customer; } catch (error) { // handle error } ``` #### Response fields  **end\_customer** (object) The details for the newly created end customer, including secrets for Sandbox and Limited Production. **end\_customer->client\_id** (string) The client\_id of the end customer. **end\_customer->company\_name** (string) The company name associated with the end customer. **end\_customer->status** (string) The status of the given end customer. UNDER\_REVIEW: The end customer has been created and enabled in Sandbox and Limited Production. The end customer must be manually reviewed by the Plaid team before it can be enabled in full production, at which point its status will automatically transition to PENDING\_ENABLEMENT or DENIED. PENDING\_ENABLEMENT: The end customer is ready to be fully enabled in the Production environment. Call the /partner/customer/enable endpoint to enable the end customer in full Production. ACTIVE: The end customer has been fully enabled in all environments. DENIED: The end customer has been created and enabled in Sandbox and Limited Production, but it did not pass review by the Plaid team and therefore cannot be enabled for full Production access. Talk to your Account Manager for more information. Possible values: UNDER\_REVIEW, PENDING\_ENABLEMENT, ACTIVE, DENIED **end\_customer->secrets** (object) The secrets for the newly created end customer. **end\_customer->secrets->sandbox** (string) The end customer's secret key for the Sandbox environment. **end\_customer->secrets->production** (string) The end customer's secret key for the Production environment. The end customer will be provided with a limited number of credits to test in the Production environment before full enablement. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "end_customer": { "client_id": "7f57eb3d2a9j6480121fx361", "company_name": "Plaid", "status": "ACTIVE", "secrets": { "sandbox": "b60b5201d006ca5a7081d27c824d77", "production": "79g03eoofwl8240v776r2h667442119" } }, "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /partner/customer/get  #### Returns a Plaid reseller's end customer.  The [/partner/customer/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomerget) endpoint is used by reseller partners to retrieve data about a single end customer. #### Request fields  **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. required, string /partner/customer/get Node▼ ```javascript const request: PartnerCustomerGetRequest = { end_customer_client_id: clientId, }; try { const response = await plaidClient.partnerCustomerGet(request); const endCustomer = response.data.end_customer; } catch (error) { // handle error } ``` #### Response fields  **end\_customer** (object) The details for an end customer. **end\_customer->client\_id** (string) The client\_id of the end customer. **end\_customer->company\_name** (string) The company name associated with the end customer. **end\_customer->status** (string) The status of the given end customer. UNDER\_REVIEW: The end customer has been created and enabled in Sandbox and Limited Production. The end customer must be manually reviewed by the Plaid team before it can be enabled in full production, at which point its status will automatically transition to PENDING\_ENABLEMENT or DENIED. PENDING\_ENABLEMENT: The end customer is ready to be fully enabled in the Production environment. Call the /partner/customer/enable endpoint to enable the end customer in full Production. ACTIVE: The end customer has been fully enabled in all environments. DENIED: The end customer has been created and enabled in Sandbox and Limited Production, but it did not pass review by the Plaid team and therefore cannot be enabled for full Production access. Talk to your Account Manager for more information. Possible values: UNDER\_REVIEW, PENDING\_ENABLEMENT, ACTIVE, DENIED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "end_customer": { "client_id": "7f57eb3d2a9j6480121fx361", "company_name": "Plaid", "status": "ACTIVE" }, "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /partner/customer/oauth\_institutions/get  #### Returns OAuth-institution registration information for a given end customer.  The [/partner/customer/oauth\_institutions/get](https://plaid.com/docs/api/partner/index.html.md#partnercustomeroauth_institutionsget) endpoint is used by reseller partners to retrieve OAuth-institution registration information about a single end customer. To learn how to set up a webhook to listen to status update events, visit the [reseller documentation](https://plaid.com/docs/account/resellers/index.html.md#enabling-end-customers) . #### Request fields  **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. required, string /partner/customer/oauth\_institutions/get Node▼ ```javascript const request: PartnerCustomerOAuthInstitutionsGetRequest = { end_customer_client_id: clientId, }; try { const response = await plaidClient.partnerCustomerOAuthInstitutionsGet( request, ); } catch (error) { // handle error } ``` #### Response fields  **flowdown\_status** (string) The status of the addendum to the Plaid MSA ("flowdown") for the end customer. Possible values: NOT\_STARTED, IN\_REVIEW, NEGOTIATION, COMPLETE **questionnaire\_status** (string) The status of the end customer's security questionnaire. Possible values: NOT\_STARTED, RECEIVED, COMPLETE **institutions** (\[object\]) The OAuth institutions with which the end customer's application is being registered. string string **institutions->environments** (object) Registration statuses by environment. **institutions->environments->development** (string) The registration status for the end customer's application. Possible values: NOT\_STARTED, PROCESSING, APPROVED, ENABLED, ATTENTION\_REQUIRED **institutions->environments->production** (string) The registration status for the end customer's application. Possible values: NOT\_STARTED, PROCESSING, APPROVED, ENABLED, ATTENTION\_REQUIRED **institutions->production\_enablement\_date** (nullable, string) The date on which the end customer's application was approved by the institution, or an empty string if their application has not yet been approved. **institutions->classic\_disablement\_date** (nullable, string) The date on which non-OAuth Item adds will no longer be supported for this institution, or an empty string if no such date has been set by the institution. **institutions->errors** (\[object\]) The errors encountered while registering the end customer's application with the institutions. **institutions->errors->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **institutions->errors->error\_code** (string) The particular error code. Safe for programmatic use. **institutions->errors->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **institutions->errors->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **institutions->errors->display\_message** (nullable, string) 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. **institutions->errors->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. **institutions->errors->causes** (array) 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. **institutions->errors->status** (nullable, integer) 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. **institutions->errors->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **institutions->errors->suggested\_action** (nullable, string) Suggested steps for resolving the error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "flowdown_status": "COMPLETE", "questionnaire_status": "COMPLETE", "institutions": [ { "name": "Chase", "institution_id": "ins_56", "environments": { "production": "PROCESSING" }, "production_enablement_date": null, "classic_disablement_date": "2022-06-30" }, { "name": "Capital One", "institution_id": "ins_128026", "environments": { "production": "ENABLED" }, "production_enablement_date": "2022-12-19", "classic_disablement_date": null }, { "name": "Bank of America", "institution_id": "ins_1", "environments": { "production": "ATTENTION_REQUIRED" }, "production_enablement_date": null, "classic_disablement_date": null, "errors": [ { "error_type": "PARTNER_ERROR", "error_code": "OAUTH_REGISTRATION_ERROR", "error_message": "Application logo is required", "display_message": null, "request_id": "4zlKapIkTm8p5KM" } ] } ], "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /partner/customer/enable  #### Enables a Plaid reseller's end customer in the Production environment.  The [/partner/customer/enable](https://plaid.com/docs/api/partner/index.html.md#partnercustomerenable) endpoint is used by reseller partners to enable an end customer in the full Production environment. #### Request fields  **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. required, string /partner/customer/enable Node▼ ```javascript const request: PartnerCustomerEnableRequest = { end_customer_client_id: clientId, }; try { const response = await plaidClient.partnerCustomerEnable(request); const productionSecret = response.data.production_secret; } catch (error) { // handle error } ``` #### Response fields  **production\_secret** (string) The end customer's secret key for the Production environment. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "production_secret": "79g03eoofwl8240v776r2h667442119", "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /partner/customer/remove  #### Removes a Plaid reseller's end customer.  The [/partner/customer/remove](https://plaid.com/docs/api/partner/index.html.md#partnercustomerremove) endpoint is used by reseller partners to remove an end customer. Removing an end customer will remove it from view in the Plaid Dashboard and deactivate its API keys. This endpoint can only be used to remove an end customer that has not yet been enabled in full Production. #### Request fields  **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. **end\_customer\_client\_id** (required, string) The client\_id of the end customer to be removed. /partner/customer/remove Node▼ ```javascript const request: PartnerCustomerRemoveRequest = { end_customer_client_id: clientId, }; try { const response = await plaidClient.partnerCustomerRemove(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "4zlKapIkTm8p5KM" } ``` ### Webhooks  \=\*=\*=\*= #### PARTNER\_END\_CUSTOMER\_OAUTH\_STATUS\_UPDATED  The webhook of type `PARTNER` and code `END_CUSTOMER_OAUTH_STATUS_UPDATED` will be fired when a partner's end customer has an update on their OAuth registration status with an institution. #### Properties  **webhook\_type** (string) PARTNER **webhook\_code** (string) END\_CUSTOMER\_OAUTH\_STATUS\_UPDATED **end\_customer\_client\_id** (string) The client ID of the end customer **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production **institution\_id** (string) The institution ID **institution\_name** (string) The institution name **status** (string) The OAuth status of the update Possible values: not-started, processing, approved, enabled, attention-required API Object ```json { "webhook_type": "PARTNER", "webhook_code": "END_CUSTOMER_OAUTH_STATUS_UPDATED", "end_customer_client_id": "634758733ebb4f00134b85ea", "environment": "production", "institution_id": "ins_127989", "institution_name": "Bank of America", "status": "attention-required" } ``` --- # API - Postman Collection | Plaid Docs Plaid Postman Collection  ========================= #### Learn more about the Plaid Postman Collection, which allows you to send API requests without code  #### Introduction  Interested in experimenting with the Plaid API without having to write a full-stack application? Plaid offers a [Postman Collection](https://github.com/plaid/plaid-postman) as a convenient tool for exploring Plaid API endpoints without writing code. The Postman Collection provides pre-formatted requests for almost all of Plaid's API endpoints that you can call from their desktop application, or a web browser. All you have to do is fill in your API keys and any arguments. To get started using the Postman collection, you will need a Plaid account with access to the Sandbox environment, an account at [Postman.com](https://www.postman.com) , and (optionally) the Postman [desktop application](https://www.postman.com/downloads/) . Once you have all the prerequisites, visit our [GitHub page](https://github.com/plaid/plaid-postman) and click the "Run in Postman" button to load up the Plaid collection of endpoints. (An image of "Postman interface showing Plaid API call setup for 'Retrieve Auth' with JSON body and response displaying account details.") --- # API - Processor partners | Plaid Docs Processor partner endpoints  ============================ #### API reference for endpoints for use by Plaid partners  Partner processor endpoints are used by Plaid partners to integrate with Plaid. Instead of using an `access_token` associated with a Plaid `Item`, these endpoints use a `processor_token` to identify a single financial account. These endpoints are used only by partners and not by developers who are using those partners' APIs. If you are a Plaid developer who would like to use a partner, see [Processor token endpoints](https://plaid.com/docs/api/processors/index.html.md) . To learn how to move money with one of our partners, see [Move money with Auth](https://plaid.com/docs/auth/partnerships/index.html.md) . | In this section | | | --- | --- | | [/processor/account/get](https://plaid.com/docs/api/processor-partners/index.html.md#processoraccountget) | Fetch Account data | | [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) | Fetch Auth data | | [/processor/balance/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorbalanceget) | Fetch Balance data | | [/processor/identity/get](https://plaid.com/docs/api/processor-partners/index.html.md#processoridentityget) | Fetch Identity data | | [/processor/identity/match](https://plaid.com/docs/api/processor-partners/index.html.md#processoridentitymatch) | Retrieve Identity match scores | | [/processor/investments/holdings/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentsholdingsget) | Fetch Investments Holdings data | | [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) | Fetch Investments Transactions data | | [/processor/liabilities/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorliabilitiesget) | Retrieve Liabilities data | | [/processor/signal/evaluate](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalevaluate) | Retrieve Signal scores | | [/processor/signal/decision/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignaldecisionreport) | Report whether you initiated an ACH transaction | | [/processor/signal/return/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalreturnreport) | Report a return for an ACH transaction | | [/processor/signal/prepare](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalprepare) | Prepare a processor token for Signal | | [/processor/token/webhook/update](https://plaid.com/docs/api/processor-partners/index.html.md#processortokenwebhookupdate) | Set the webhook URL for a processor token | | [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) | Get transaction data or incremental transaction updates | | [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) | Fetch transaction data | | [/processor/transactions/recurring/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrecurringget) | Fetch recurring transaction data | | [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) | Refresh transaction data | | Webhooks | | | --- | --- | | [WEBHOOK\_UPDATE\_ACKNOWLEDGED](https://plaid.com/docs/api/processor-partners/index.html.md#webhook_update_acknowledged) | Item's webhook receiver endpoint has been updated | \=\*=\*=\*= #### /processor/account/get  #### Retrieve the account associated with a processor token  This endpoint returns the account associated with a given processor token. This endpoint retrieves cached information, rather than extracting fresh information from the institution. As a result, the account balance returned may not be up-to-date; for realtime balance information, use [/processor/balance/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorbalanceget) instead. Note that some information is nullable. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. /processor/account/get Node▼ ```javascript try { const request: ProcessorAccountGetRequest = { processor_token: processorToken, }; const response = await plaidClient.ProcessorAccountGet(request); } catch (error) { // handle error } ``` #### Response fields  **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **institution\_id** (string) The Plaid Institution ID associated with the Account. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "QKKzevvp33HxPWpoqn6rI13BxW4awNSjnw4xv", "balances": { "available": 100, "current": 110, "limit": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Checking", "subtype": "checking", "type": "depository" }, "institution_id": "ins_109508", "request_id": "1zlMf" } ``` \=\*=\*=\*= #### /processor/auth/get  #### Retrieve Auth data  The [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) endpoint returns the bank account and bank identification number (such as the routing number, for US accounts), for a checking, savings, or cash management account that''s associated with a given `processor_token`. The endpoint also returns high-level account data and balances when available. Versioning note: API versions 2019-05-29 and earlier use a different schema for the `numbers` object returned by this endpoint. For details, see [Plaid API versioning](https://plaid.com/docs/api/versioning/index.html.md#version-2020-09-14) . #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- /processor/auth/get Node▼ ```javascript const request: ProcessorAuthGetRequest = { processor_token: processorToken, }; const response = plaidClient.processorAuthGet(request); ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **numbers** (object) An object containing identifying numbers used for making electronic transfers to and from the account. The identifying number type (ACH, EFT, IBAN, or BACS) used will depend on the country of the account. An account may have more than one number type. If a particular identifying number type is not used by the account for which auth data has been requested, a null value will be returned. **numbers->ach** (nullable, object) Identifying information for transferring money to or from a US account via ACH or wire transfer. **numbers->ach->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->ach->account** (string) The ACH account number for the account. At certain institutions, including Chase, PNC, and (coming May 2025) US Bank, you will receive "tokenized" routing and account numbers, which are not the user's actual account and routing numbers. For important details on how this may impact your integration and on how to avoid fraud, user confusion, and ACH returns, see Tokenized account numbers. **numbers->ach->is\_tokenized\_account\_number** (boolean) Indicates whether the account number is tokenized by the institution. For important details on how tokenized account numbers may impact your integration, see Tokenized account numbers. **numbers->ach->routing** (string) The ACH routing number for the account. This may be a tokenized routing number. For more information, see Tokenized account numbers. **numbers->ach->wire\_routing** (nullable, string) The wire transfer routing number for the account. This field is only populated if the institution is known to use a separate wire transfer routing number. Many institutions do not have a separate wire routing number and use the ACH routing number for wires instead. It is recommended to have the end user manually confirm their wire routing number before sending any wires to their account, especially if this field is null. **numbers->eft** (nullable, object) Identifying information for transferring money to or from a Canadian bank account via EFT. **numbers->eft->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->eft->account** (string) The EFT account number for the account **numbers->eft->institution** (string) The EFT institution number for the account **numbers->eft->branch** (string) The EFT branch number for the account **numbers->international** (nullable, object) Identifying information for transferring money to or from an international bank account via wire transfer. **numbers->international->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->international->iban** (string) The International Bank Account Number (IBAN) for the account **numbers->international->bic** (string) The Bank Identifier Code (BIC) for the account **numbers->bacs** (nullable, object) Identifying information for transferring money to or from a UK bank account via BACS. **numbers->bacs->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->bacs->account** (string) The BACS account number for the account **numbers->bacs->sort\_code** (string) The BACS sort code for the account **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized Response Object ```json { "account": { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Checking", "subtype": "checking", "type": "depository" }, "numbers": { "ach": { "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }, "eft": { "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" }, "international": { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "bic": "NWBKGB21", "iban": "GB29NWBK60161331926819" }, "bacs": { "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" } }, "request_id": "1zlMf" } ``` \=\*=\*=\*= #### /processor/balance/get  #### Retrieve Balance data  The [/processor/balance/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorbalanceget) endpoint returns the real-time balance for each of an Item's accounts. While other endpoints may return a balance object, only [/processor/balance/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorbalanceget) forces the available and current balance fields to be refreshed rather than cached. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **options** (object) Optional parameters to /processor/balance/get. **options->min\_last\_updated\_datetime** (string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only necessary when the institution is ins\_128026 (Capital One), and one or more account types being requested is a non-depository account (such as a credit card) as Capital One does not provide real-time balance for non-depository accounts. In this case, a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For all other institutions, as well as for depository accounts at Capital One (including all checking and savings accounts) this field is ignored and real-time balance information will be fetched. If this field is not ignored, and no acceptable balance is available, an INVALID\_RESULT error with the code LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned. Format: date-time Node▼ ```javascript const request: ProcessorBalanceGetRequest = { processor_token: processorToken, }; const response = plaidClient.processorBalanceGet(request); ``` #### Response fields  **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "QKKzevvp33HxPWpoqn6rI13BxW4awNSjnw4xv", "balances": { "available": 100, "current": 110, "limit": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Checking", "subtype": "checking", "type": "depository" }, "request_id": "1zlMf" } ``` \=\*=\*=\*= #### /processor/identity/get  #### Retrieve Identity data  The [/processor/identity/get](https://plaid.com/docs/api/processor-partners/index.html.md#processoridentityget) endpoint allows you to retrieve various account holder information on file with the financial institution, including names, emails, phone numbers, and addresses. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- /processor/identity/get Node▼ ```javascript const request: ProcessorIdentityGetRequest = { processor_token: processorToken, }; const response = plaidClient.processorIdentityGet(request); ``` #### Response fields  **account** (object) Identity information about an account **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **account->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. Only returned by Identity or Assets endpoints. For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution; detecting whether the linked account is a business account is not currently supported. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. In API versions 2018-05-22 and earlier, the owners object is not returned, and instead identity information is returned in the top level identity object. For more details, see Plaid API versioning **account->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **account->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **account->owners->phone\_numbers->data** (string) The phone number. **account->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **account->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **account->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **account->owners->emails->data** (string) The email address. **account->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **account->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **account->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **account->owners->addresses->data** (object) Data about the components comprising an address. **account->owners->addresses->data->city** (nullable, string) The full city name **account->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **account->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **account->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **account->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **account->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "XMGPJy4q1gsQoKd5z9R3tK8kJ9EWL8SdkgKMq", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "2025550123", "primary": false, "type": "home" }, { "data": "1112224444", "primary": false, "type": "work" }, { "data": "1112225555", "primary": false, "type": "mobile1" } ] } ], "subtype": "checking", "type": "depository" }, "request_id": "eOPkBl6t33veI2J" } ``` \=\*=\*=\*= #### /processor/identity/match  #### Retrieve identity match score  The [/processor/identity/match](https://plaid.com/docs/api/processor-partners/index.html.md#processoridentitymatch) endpoint generates a match score, which indicates how well the provided identity data matches the identity information on file with the account holder's financial institution. Fields within the `balances` object will always be null when retrieved by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) . Instead, use the free [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) endpoint to request balance cached data, or [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) for real-time data. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **user** (object) The user's legal name, phone number, email address and address used to perform fuzzy match. If Financial Account Matching is enabled in the Identity Verification product, leave this field empty to automatically match against PII collected from the Identity Verification checks. **user->legal\_name** (string) The user's full legal name. **user->phone\_number** (string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14157452130". Phone numbers provided in other formats will be parsed on a best-effort basis. Phone number input is validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **user->email\_address** (string) The user's email address. **user->address** (object) Data about the components comprising an address. **user->address->city** (string) The full city name **user->address->region** (string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **user->address->street** (string) The full street address Example: "564 Main Street, APT 15" **user->address->postal\_code** (string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **user->address->country** (string) The ISO 3166-1 alpha-2 country code /processor/identity/match Node▼ ```javascript const request: ProcessorIdentityMatchRequest = { processor_token: processorToken, }; const response = plaidClient.processorIdentityMatch(request); ``` #### Response fields  **account** (object) Identity match scores for an account **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **account->legal\_name** (nullable, object) Score found by matching name provided by the API with the name on the account at the financial institution. If the account contains multiple owners, the maximum match score is filled. **account->legal\_name->score** (nullable, integer) Match score for name. 100 is a perfect score, 99-85 means a strong match, 84-70 is a partial match, any score less than 70 is a mismatch. Typically, the match threshold should be set to a score of 70 or higher. If the name is missing from either the API or financial institution, this is null. **account->legal\_name->is\_first\_name\_or\_last\_name\_match** (nullable, boolean) first or last name completely matched, likely a family member **account->legal\_name->is\_nickname\_match** (nullable, boolean) nickname matched, example Jennifer and Jenn. **account->legal\_name->is\_business\_name\_detected** (nullable, boolean) Is true if the name on either of the names that was matched for the score contained strings indicative of a business name, such as "CORP", "LLC", "INC", or "LTD". A true result generally indicates that an account's name is a business name. However, a false result does not mean the account name is not a business name, as some businesses do not use these strings in the names used for their financial institution accounts. **account->phone\_number** (nullable, object) Score found by matching phone number provided by the API with the phone number on the account at the financial institution. 100 is a perfect match and 0 is a no match. If the account contains multiple owners, the maximum match score is filled. **account->phone\_number->score** (nullable, integer) Match score for normalized phone number. 100 is a perfect match, 99-70 is a partial match (matching the same phone number with extension against one without extension, etc.), anything below 70 is considered a mismatch. Typically, the match threshold should be set to a score of 70 or higher. If the phone number is missing from either the API or financial institution, this is null. **account->email\_address** (nullable, object) Score found by matching email provided by the API with the email on the account at the financial institution. 100 is a perfect match and 0 is a no match. If the account contains multiple owners, the maximum match score is filled. **account->email\_address->score** (nullable, integer) Match score for normalized email. 100 is a perfect match, 99-70 is a partial match (matching the same email with different '+' extensions), anything below 70 is considered a mismatch. Typically, the match threshold should be set to a score of 70 or higher. If the email is missing from either the API or financial institution, this is null. **account->address** (nullable, object) Score found by matching address provided by the API with the address on the account at the financial institution. The score can range from 0 to 100 where 100 is a perfect match and 0 is a no match. If the account contains multiple owners, the maximum match score is filled. **account->address->score** (nullable, integer) Match score for address. 100 is a perfect match, 99-90 is a strong match, 89-70 is a partial match, anything below 70 is considered a weak match. Typically, the match threshold should be set to a score of 70 or higher. If the address is missing from either the API or financial institution, this is null. **account->address->is\_postal\_code\_match** (nullable, boolean) postal code was provided for both and was a match **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": null, "current": null, "iso_currency_code": null, "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "legal_name": { "score": 90, "is_nickname_match": true, "is_first_name_or_last_name_match": true, "is_business_name_detected": false }, "phone_number": { "score": 100 }, "email_address": { "score": 100 }, "address": { "score": 100, "is_postal_code_match": true }, "subtype": "checking", "type": "depository" }, "request_id": "3nARps6TOYtbACO" } ``` \=\*=\*=\*= #### /processor/investments/holdings/get  #### Retrieve Investment Holdings  This endpoint returns the stock position data of the account associated with a given processor token. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. /processor/investments/holdings/get Node▼ ```javascript const request: ProcessorInvestmentsHoldingsGetRequest = { processor_token: processorToken, }; const response = plaidClient.processorInvestmentsHoldingsGet(request); ``` #### Response fields  **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **holdings** (\[object\]) The holdings belonging to investment accounts associated with the Item. Details of the securities in the holdings are provided in the securities field. **holdings->account\_id** (string) The Plaid account\_id associated with the holding. **holdings->security\_id** (string) The Plaid security\_id associated with the holding. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data. The security\_id for the same security will typically be the same across different institutions, but this is not guaranteed. The security\_id does not typically change, but may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **holdings->institution\_price** (number) The last price given by the institution for this security. Format: double **holdings->institution\_price\_as\_of** (nullable, string) The date at which institution\_price was current. Format: date **holdings->institution\_price\_datetime** (nullable, string) Date and time at which institution\_price was current, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). Format: date-time **holdings->institution\_value** (number) The value of the holding, as reported by the institution. Format: double **holdings->cost\_basis** (nullable, number) The total cost basis of the holding (e.g., the total amount spent to acquire all assets currently in the holding). Format: double **holdings->quantity** (number) The total quantity of the asset held, as reported by the financial institution. If the security is an option, quantity will reflect the total number of options (typically the number of contracts multiplied by 100), not the number of contracts. Format: double **holdings->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the holding. Always null if unofficial\_currency\_code is non-null. **holdings->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **holdings->vested\_quantity** (nullable, number) The total quantity of vested assets held, as reported by the financial institution. Vested assets are only associated with equities. Format: double **holdings->vested\_value** (nullable, number) The value of the vested holdings as reported by the institution. Format: double **securities** (\[object\]) Objects describing the securities held in the account. **securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **securities->isin** (nullable, string) 12-character ISIN, a globally unique securities identifier. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->cusip** (nullable, string) 9-character CUSIP, an identifier assigned to North American securities. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->sedol** (deprecated, nullable, string) (Deprecated) 7-character SEDOL, an identifier assigned to securities in the UK. **securities->institution\_security\_id** (nullable, string) An identifier given to the security by the institution **securities->institution\_id** (nullable, string) If institution\_security\_id is present, this field indicates the Plaid institution\_id of the institution to whom the identifier belongs. **securities->proxy\_security\_id** (nullable, string) In certain cases, Plaid will provide the ID of another security whose performance resembles this security, typically when the original security has low volume, or when a private security can be modeled with a publicly traded security. **securities->name** (nullable, string) A descriptive name for the security, suitable for display. **securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **securities->is\_cash\_equivalent** (nullable, boolean) Indicates that a security is a highly liquid asset and can be treated like cash. **securities->type** (nullable, string) The security type of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security type. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **securities->subtype** (nullable, string) The security subtype of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security subtype. Possible values: asset backed security, bill, bond, bond with warrants, cash, cash management bill, common stock, convertible bond, convertible equity, cryptocurrency, depositary receipt, depositary receipt on debt, etf, float rating note, fund of funds, hedge fund, limited partnership unit, medium term note, money market debt, mortgage backed security, municipal bond, mutual fund, note, option, other, preferred convertible, preferred equity, private equity fund, real estate investment trust, structured equity product, treasury inflation protected securities, unit, warrant. **securities->close\_price** (nullable, number) Price of the security at the close of the previous trading session. Null for non-public securities. If the security is a foreign currency this field will be updated daily and will be priced in USD. If the security is a cryptocurrency, this field will be updated multiple times a day. As crypto prices can fluctuate quickly and data may become stale sooner than other asset classes, refer to update\_datetime with the time when the price was last updated. Format: double **securities->close\_price\_as\_of** (nullable, string) Date for which close\_price is accurate. Always null if close\_price is null. Format: date **securities->update\_datetime** (nullable, string) Date and time at which close\_price is accurate, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Always null if close\_price is null. Format: date-time **securities->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the price given. Always null if unofficial\_currency\_code is non-null. **securities->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the security. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **securities->market\_identifier\_code** (nullable, string) The ISO-10383 Market Identifier Code of the exchange or market in which the security is being traded. **securities->sector** (nullable, string) The sector classification of the security, such as Finance, Health Technology, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->industry** (nullable, string) The industry classification of the security, such as Biotechnology, Airlines, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->option\_contract** (nullable, object) Details about the option security. For the Sandbox environment, this data is currently only available if the Item is using a custom Sandbox user and the ticker field of the custom security follows the OCC Option Symbol standard with no spaces. For an example of simulating this in Sandbox, see the custom Sandbox GitHub. **securities->option\_contract->contract\_type** (string) The type of this option contract. It is one of: put: for Put option contracts call: for Call option contracts **securities->option\_contract->expiration\_date** (string) The expiration date for this option contract, in ISO 8601 format. Format: date **securities->option\_contract->strike\_price** (number) The strike price for this option contract, per share of security. Format: double **securities->option\_contract->underlying\_security\_ticker** (string) The ticker of the underlying security for this option contract. **securities->fixed\_income** (nullable, object) Details about the fixed income security. **securities->fixed\_income->yield\_rate** (nullable, object) Details about a fixed income security's expected rate of return. **securities->fixed\_income->yield\_rate->percentage** (number) The fixed income security's expected rate of return. Format: double **securities->fixed\_income->yield\_rate->type** (nullable, string) The type of rate which indicates how the predicted yield was calculated. It is one of: coupon: the annualized interest rate for securities with a one-year term or longer, such as treasury notes and bonds. coupon\_equivalent: the calculated equivalent for the annualized interest rate factoring in the discount rate and time to maturity, for shorter term, non-interest-bearing securities such as treasury bills. discount: the rate at which the present value or cost is discounted from the future value upon maturity, also known as the face value. yield: the total predicted rate of return factoring in both the discount rate and the coupon rate, applicable to securities such as exchange-traded bonds which can both be interest-bearing as well as sold at a discount off its face value. Possible values: coupon, coupon\_equivalent, discount, yield, null **securities->fixed\_income->maturity\_date** (nullable, string) The maturity date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->issue\_date** (nullable, string) The issue date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->face\_value** (nullable, number) The face value that is paid upon maturity of the fixed income security, per unit of security. Format: double **is\_investments\_fallback\_item** (boolean) When true, this field indicates that the Item's portfolio was manually created with the Investments Fallback flow. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1", "balances": { "available": null, "current": 110.01, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "5555", "name": "Plaid IRA", "official_name": null, "subtype": "ira", "type": "investment" }, "holdings": [ { "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1", "cost_basis": 1, "institution_price": 1, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 0.01, "iso_currency_code": "USD", "quantity": 0.01, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "unofficial_currency_code": null }, { "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1", "cost_basis": 0.01, "institution_price": 0.011, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 110, "iso_currency_code": "USD", "quantity": 10000, "security_id": "8E4L9XLl6MudjEpwPAAgivmdZRdBPJuvMPlPb", "unofficial_currency_code": null } ], "securities": [ { "close_price": 0.011, "close_price_as_of": "2021-04-13", "cusip": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "name": "Nflx Feb 01'18 $355 Call", "proxy_security_id": null, "security_id": "8E4L9XLl6MudjEpwPAAgivmdZRdBPJuvMPlPb", "sedol": null, "ticker_symbol": "NFLX180201C00355000", "type": "derivative", "subtype": "option", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Technology Services", "industry": "Internet Software or Services", "option_contract": { "contract_type": "call", "expiration_date": "2018-02-01", "strike_price": 355, "underlying_security_ticker": "NFLX" }, "fixed_income": null }, { "close_price": 1, "close_price_as_of": null, "cusip": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": true, "isin": null, "iso_currency_code": "USD", "name": "U S Dollar", "proxy_security_id": null, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "sedol": null, "ticker_symbol": "USD", "type": "cash", "subtype": "cash", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": null, "sector": null, "industry": null, "option_contract": null, "fixed_income": null } ], "request_id": "24MxmGFZz89Xg2f", "is_investments_fallback_item": false } ``` \=\*=\*=\*= #### /processor/investments/transactions/get  #### Get investment transactions data  The [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) endpoint allows developers to retrieve up to 24 months of user-authorized transaction data for the investment account associated with the processor token. Transactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Due to the potentially large number of investment transactions associated with the account, results are paginated. Manipulate the count and offset parameters in conjunction with the `total_investment_transactions` response body field to fetch all available investment transactions. Note that Investments does not have a webhook to indicate when initial transaction data has loaded (unless you use the `async_update` option). Instead, if transactions data is not ready when [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) is first called, Plaid will wait for the data. For this reason, calling [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) immediately after Link may take up to one to two minutes to return. Data returned by the asynchronous investments extraction flow (when `async_update` is set to true) may not be immediately available to [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) . To be alerted when the data is ready to be fetched, listen for the `HISTORICAL_UPDATE` webhook. If no investments history is ready when [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) is called, it will return a `PRODUCT_NOT_READY` error. To receive Investments Transactions webhooks for a processor token, set its webhook URL via the [/processor/token/webhook/update](https://plaid.com/docs/api/processor-partners/index.html.md#processortokenwebhookupdate) endpoint. #### Request fields  **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. **options** (object) An optional object to filter /investments/transactions/get results. If provided, must be non-null. **options->account\_ids** (\[string\]) An array of account\_ids to retrieve for the Item. **options->count** (integer) The number of transactions to fetch. Default: 100 Minimum: 1 Maximum: 500 **options->offset** (integer) The number of transactions to skip when fetching transaction history Default: 0 Minimum: 0 **options->async\_update** (boolean) If the Item was not initialized with the investments product via the products, required\_if\_supported\_products, or optional\_products array when calling /link/token/create, and async\_update is set to true, the initial Investments extraction will happen asynchronously. Plaid will subsequently fire a HISTORICAL\_UPDATE webhook when the extraction completes. When false, Plaid will wait to return a response until extraction completion and no HISTORICAL\_UPDATE webhook will fire. Note that while the extraction is happening asynchronously, calls to /investments/transactions/get and /investments/refresh will return PRODUCT\_NOT\_READY errors until the extraction completes. Default: false **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. **start\_date** (required, string) The earliest date for which data should be returned. Dates should be formatted as YYYY-MM-DD. Format: date **end\_date** (required, string) The latest date for which data should be returned. Dates should be formatted as YYYY-MM-DD. Format: date /processor/investments/transactions/get Node▼ ```javascript const request: ProcessorInvestmentsTransactionsGetRequest = { processor_token: processorToken, }; const response = plaidClient.processorInvestmentsTransactionsGet(request); ``` #### Response fields  **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **investment\_transactions** (\[object\]) An array containing investment transactions from the account. Investments transactions are returned in reverse chronological order, with the most recent at the beginning of the array. The maximum number of transactions returned is determined by the count parameter. **investment\_transactions->investment\_transaction\_id** (string) The ID of the Investment transaction, unique across all Plaid transactions. Like all Plaid identifiers, the investment\_transaction\_id is case sensitive. **investment\_transactions->account\_id** (string) The account\_id of the account against which this transaction posted. **investment\_transactions->security\_id** (nullable, string) The security\_id to which this transaction is related. **investment\_transactions->date** (string) The ISO 8601 posting date for the transaction. This is typically the settlement date. Format: date **investment\_transactions->transaction\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) representing when the order type was initiated. This field is returned for select financial institutions and reflects the value provided by the institution. Format: date-time **investment\_transactions->name** (string) The institution’s description of the transaction. **investment\_transactions->quantity** (number) The number of units of the security involved in this transaction. Positive for buy transactions; negative for sell transactions. Format: double **investment\_transactions->amount** (number) The complete value of the transaction. Positive values when cash is debited, e.g. purchases of stock; negative values when cash is credited, e.g. sales of stock. Treatment remains the same for cash-only movements unassociated with securities. Format: double **investment\_transactions->price** (number) The price of the security at which this transaction occurred. Format: double **investment\_transactions->fees** (nullable, number) The combined value of all fees applied to this transaction Format: double **investment\_transactions->type** (string) Value is one of the following: buy: Buying an investment sell: Selling an investment cancel: A cancellation of a pending transaction cash: Activity that modifies a cash position fee: A fee on the account transfer: Activity which modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transfer For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: buy, sell, cancel, cash, fee, transfer **investment\_transactions->subtype** (string) For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: account fee, adjustment, assignment, buy, buy to cover, contribution, deposit, distribution, dividend, dividend reinvestment, exercise, expire, fund fee, interest, interest receivable, interest reinvestment, legal fee, loan payment, long-term capital gain, long-term capital gain reinvestment, management fee, margin expense, merger, miscellaneous fee, non-qualified dividend, non-resident tax, pending credit, pending debit, qualified dividend, rebalance, return of principal, request, sell, sell short, send, short-term capital gain, short-term capital gain reinvestment, spin off, split, stock distribution, tax, tax withheld, trade, transfer, transfer fee, trust fee, unqualified gain, withdrawal **investment\_transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **investment\_transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **securities** (\[object\]) All securities for which there is a corresponding transaction being fetched. **securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **securities->isin** (nullable, string) 12-character ISIN, a globally unique securities identifier. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->cusip** (nullable, string) 9-character CUSIP, an identifier assigned to North American securities. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->sedol** (deprecated, nullable, string) (Deprecated) 7-character SEDOL, an identifier assigned to securities in the UK. **securities->institution\_security\_id** (nullable, string) An identifier given to the security by the institution **securities->institution\_id** (nullable, string) If institution\_security\_id is present, this field indicates the Plaid institution\_id of the institution to whom the identifier belongs. **securities->proxy\_security\_id** (nullable, string) In certain cases, Plaid will provide the ID of another security whose performance resembles this security, typically when the original security has low volume, or when a private security can be modeled with a publicly traded security. **securities->name** (nullable, string) A descriptive name for the security, suitable for display. **securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **securities->is\_cash\_equivalent** (nullable, boolean) Indicates that a security is a highly liquid asset and can be treated like cash. **securities->type** (nullable, string) The security type of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security type. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **securities->subtype** (nullable, string) The security subtype of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security subtype. Possible values: asset backed security, bill, bond, bond with warrants, cash, cash management bill, common stock, convertible bond, convertible equity, cryptocurrency, depositary receipt, depositary receipt on debt, etf, float rating note, fund of funds, hedge fund, limited partnership unit, medium term note, money market debt, mortgage backed security, municipal bond, mutual fund, note, option, other, preferred convertible, preferred equity, private equity fund, real estate investment trust, structured equity product, treasury inflation protected securities, unit, warrant. **securities->close\_price** (nullable, number) Price of the security at the close of the previous trading session. Null for non-public securities. If the security is a foreign currency this field will be updated daily and will be priced in USD. If the security is a cryptocurrency, this field will be updated multiple times a day. As crypto prices can fluctuate quickly and data may become stale sooner than other asset classes, refer to update\_datetime with the time when the price was last updated. Format: double **securities->close\_price\_as\_of** (nullable, string) Date for which close\_price is accurate. Always null if close\_price is null. Format: date **securities->update\_datetime** (nullable, string) Date and time at which close\_price is accurate, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Always null if close\_price is null. Format: date-time **securities->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the price given. Always null if unofficial\_currency\_code is non-null. **securities->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the security. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **securities->market\_identifier\_code** (nullable, string) The ISO-10383 Market Identifier Code of the exchange or market in which the security is being traded. **securities->sector** (nullable, string) The sector classification of the security, such as Finance, Health Technology, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->industry** (nullable, string) The industry classification of the security, such as Biotechnology, Airlines, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->option\_contract** (nullable, object) Details about the option security. For the Sandbox environment, this data is currently only available if the Item is using a custom Sandbox user and the ticker field of the custom security follows the OCC Option Symbol standard with no spaces. For an example of simulating this in Sandbox, see the custom Sandbox GitHub. **securities->option\_contract->contract\_type** (string) The type of this option contract. It is one of: put: for Put option contracts call: for Call option contracts **securities->option\_contract->expiration\_date** (string) The expiration date for this option contract, in ISO 8601 format. Format: date **securities->option\_contract->strike\_price** (number) The strike price for this option contract, per share of security. Format: double **securities->option\_contract->underlying\_security\_ticker** (string) The ticker of the underlying security for this option contract. **securities->fixed\_income** (nullable, object) Details about the fixed income security. **securities->fixed\_income->yield\_rate** (nullable, object) Details about a fixed income security's expected rate of return. **securities->fixed\_income->yield\_rate->percentage** (number) The fixed income security's expected rate of return. Format: double **securities->fixed\_income->yield\_rate->type** (nullable, string) The type of rate which indicates how the predicted yield was calculated. It is one of: coupon: the annualized interest rate for securities with a one-year term or longer, such as treasury notes and bonds. coupon\_equivalent: the calculated equivalent for the annualized interest rate factoring in the discount rate and time to maturity, for shorter term, non-interest-bearing securities such as treasury bills. discount: the rate at which the present value or cost is discounted from the future value upon maturity, also known as the face value. yield: the total predicted rate of return factoring in both the discount rate and the coupon rate, applicable to securities such as exchange-traded bonds which can both be interest-bearing as well as sold at a discount off its face value. Possible values: coupon, coupon\_equivalent, discount, yield, null **securities->fixed\_income->maturity\_date** (nullable, string) The maturity date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->issue\_date** (nullable, string) The issue date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->face\_value** (nullable, number) The face value that is paid upon maturity of the fixed income security, per unit of security. Format: double **total\_investment\_transactions** (integer) The total number of transactions available within the date range specified. If total\_investment\_transactions is larger than the size of the transactions array, more transactions are available and can be fetched via manipulating the offset parameter. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **is\_investments\_fallback\_item** (boolean) When true, this field indicates that the Item's portfolio was manually created with the Investments Fallback flow. Response Object ```json { "account": { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "balances": { "available": null, "current": 23631.9805, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "6666", "name": "Plaid 401k", "official_name": null, "subtype": "401k", "type": "investment" }, "investment_transactions": [ { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "amount": -8.72, "cancel_transaction_id": null, "date": "2020-05-29", "transaction_datetime": null, "fees": 0, "investment_transaction_id": "oq99Pz97joHQem4BNjXECev1E4B6L6sRzwANW", "iso_currency_code": "USD", "name": "INCOME DIV DIVIDEND RECEIVED", "price": 0, "quantity": 0, "security_id": "eW4jmnjd6AtjxXVrjmj6SX1dNEdZp3Cy8RnRQ", "subtype": "dividend", "type": "cash", "unofficial_currency_code": null }, { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "amount": -1289.01, "cancel_transaction_id": null, "date": "2020-05-28", "transaction_datetime": "2020-05-28T15:10:09Z", "fees": 7.99, "investment_transaction_id": "pK99jB9e7mtwjA435GpVuMvmWQKVbVFLWme57", "iso_currency_code": "USD", "name": "SELL Matthews Pacific Tiger Fund Insti Class", "price": 27.53, "quantity": -47.74104242992852, "security_id": "JDdP7XPMklt5vwPmDN45t3KAoWAPmjtpaW7DP", "subtype": "sell", "type": "sell", "unofficial_currency_code": null } ], "request_id": "iv4q3ZlytOOthkv", "securities": [ { "close_price": 27, "close_price_as_of": null, "cusip": "577130834", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US5771308344", "iso_currency_code": "USD", "name": "Matthews Pacific Tiger Fund Insti Class", "proxy_security_id": null, "security_id": "JDdP7XPMklt5vwPmDN45t3KAoWAPmjtpaW7DP", "sedol": null, "ticker_symbol": "MIPTX", "type": "mutual fund", "subtype": "mutual fund", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Miscellaneous", "industry": "Investment Trusts or Mutual Funds", "option_contract": null, "fixed_income": null }, { "close_price": 34.73, "close_price_as_of": null, "cusip": "84470P109", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US84470P1093", "iso_currency_code": "USD", "name": "Southside Bancshares Inc.", "proxy_security_id": null, "security_id": "eW4jmnjd6AtjxXVrjmj6SX1dNEdZp3Cy8RnRQ", "sedol": null, "ticker_symbol": "SBSI", "type": "equity", "subtype": "common stock", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Finance", "industry": "Regional Banks", "option_contract": null, "fixed_income": null } ], "total_investment_transactions": 2 } ``` \=\*=\*=\*= #### /processor/signal/evaluate  #### Evaluate a planned ACH transaction  Use [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) to evaluate a planned ACH transaction to get a return risk assessment and additional risk signals. [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) is used with Rulesets that are configured on the end customer Dashboard can can be used with either the Signal Transaction Scores product or the Balance product. Which product is used will be determined by the `ruleset_key` that you provide. For more details, see [Signal Rules](https://plaid.com/docs/signal/signal-rules/index.html.md) . Note: This request may have higher latency if Signal Transaction Scores is being added to an existing Item for the first time, or when using a Balance-only ruleset. This is because Plaid must communicate directly with the institution to request data. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **client\_transaction\_id** (required, string) The unique ID that you would like to use to refer to this transaction. For your convenience mapping your internal data, you could use your internal ID/identifier for this transaction. The max length for this field is 36 characters. Min length: 1 Max length: 36 **amount** (required, number) The transaction amount, in USD (e.g. 102.05) Format: double **user\_present** (boolean) true if the end user is present while initiating the ACH transfer and the endpoint is being called; false otherwise (for example, when the ACH transfer is scheduled and the end user is not present, or you call this endpoint after the ACH transfer but before submitting the Nacha file for ACH processing). **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID is used to correlate requests by a user with multiple Items. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **is\_recurring** (boolean) true if the ACH transaction is a recurring transaction; false otherwise **default\_payment\_method** (string) The default ACH or non-ACH payment method to complete the transaction. SAME\_DAY\_ACH: Same Day ACH by Nacha. The debit transaction is processed and settled on the same day. STANDARD\_ACH: standard ACH by Nacha. MULTIPLE\_PAYMENT\_METHODS: if there is no default debit rail or there are multiple payment methods. Possible values: SAME\_DAY\_ACH, STANDARD\_ACH, MULTIPLE\_PAYMENT\_METHODS **user** (object) Details about the end user initiating the transaction (i.e., the account holder). These fields are optional, but strongly recommended to increase the accuracy of results when using Signal Transaction Scores. When using a Balance-only ruleset, if the Signal Addendum has been signed, these fields are ignored; if the Addendum has not been signed, using these fields will result in an error. **user->name** (object) The user's legal name **user->name->prefix** (string) The user's name prefix (e.g. "Mr.") **user->name->given\_name** (string) The user's given name. If the user has a one-word name, it should be provided in this field. **user->name->middle\_name** (string) The user's middle name **user->name->family\_name** (string) The user's family name / surname **user->name->suffix** (string) The user's name suffix (e.g. "II") **user->phone\_number** (string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14151234567" **user->email\_address** (string) The user's email address. **user->address** (object) Data about the components comprising an address. **user->address->city** (string) The full city name **user->address->region** (string) The region or state Example: "NC" **user->address->street** (string) The full street address Example: "564 Main Street, APT 15" **user->address->postal\_code** (string) The postal code **user->address->country** (string) The ISO 3166-1 alpha-2 country code **device** (object) Details about the end user's device. These fields are optional, but strongly recommended to increase the accuracy of results when using Signal Transaction Scores. When using a Balance-only Ruleset, these fields are ignored if the Signal Addendum has been signed; if it has not been signed, using these fields will result in an error. **device->ip\_address** (string) The IP address of the device that initiated the transaction **device->user\_agent** (string) The user agent of the device that initiated the transaction (e.g. "Mozilla/5.0") **ruleset\_key** (string) The key of the ruleset to use for this transaction. You can configure a ruleset using the Plaid Dashboard, under Signal->Rules. If not provided, for customers who began using Signal Transaction Scores before October 15, 2025, by default, no ruleset will be used; for customers who began using Signal Transaction Scores after that date, or for Balance customers, the default ruleset will be used. For more details, or to opt out of using a ruleset, see Signal Rules. /processor/signal/evaluate Node▼ ```javascript const eval_request = { processor_token: 'processor-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', client_transaction_id: 'txn12345', amount: 123.45, client_user_id: 'user1234', user: { name: { prefix: 'Ms.', given_name: 'Jane', middle_name: 'Leah', family_name: 'Doe', suffix: 'Jr.', }, phone_number: '+14152223333', email_address: 'jane.doe@example.com', address: { street: '2493 Leisure Lane', city: 'San Matias', region: 'CA', postal_code: '93405-2255', country: 'US', }, }, device: { ip_address: '198.30.2.2', user_agent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', }, user_present: true, }; try { const eval_response = await plaidClient.processorSignalEvaluate(eval_request); const core_attributes = eval_response.data.core_attributes; const scores = eval_response.data.scores; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **scores** (nullable, object) Risk scoring details broken down by risk category. When using a Balance-only ruleset, this object will not be returned. **scores->customer\_initiated\_return\_risk** (object) The object contains a risk score and a risk tier that evaluate the transaction return risk of an unauthorized debit. Common return codes in this category include: "R05", "R07", "R10", "R11", "R29". These returns typically have a return time frame of up to 60 calendar days. During this period, the customer of financial institutions can dispute a transaction as unauthorized. **scores->customer\_initiated\_return\_risk->score** (integer) A score from 1-99 that indicates the transaction return risk: a higher risk score suggests a higher return likelihood. Minimum: 1 Maximum: 99 **scores->bank\_initiated\_return\_risk** (object) The object contains a risk score and a risk tier that evaluate the transaction return risk because an account is overdrawn or because an ineligible account is used. Common return codes in this category include: "R01", "R02", "R03", "R04", "R06", "R08", "R09", "R13", "R16", "R17", "R20", "R23". These returns have a turnaround time of 2 banking days. **scores->bank\_initiated\_return\_risk->score** (integer) A score from 1-99 that indicates the transaction return risk: a higher risk score suggests a higher return likelihood. Minimum: 1 Maximum: 99 **core\_attributes** (object) The core attributes object contains additional data that can be used to assess the ACH return risk. If using a Balance-only ruleset, only available\_balance and current\_balance will be returned as core attributes. If using a Signal Transaction Scores ruleset, over 80 core attributes will be returned. Examples of attributes include: available\_balance and current\_balance: The balance in the ACH transaction funding account days\_since\_first\_plaid\_connection: The number of days since the first time the Item was connected to an application via Plaid plaid\_connections\_count\_7d: The number of times the Item has been connected to applications via Plaid over the past 7 days plaid\_connections\_count\_30d: The number of times the Item has been connected to applications via Plaid over the past 30 days total\_plaid\_connections\_count: The number of times the Item has been connected to applications via Plaid is\_savings\_or\_money\_market\_account: Indicates whether the ACH transaction funding account is a savings/money market account For the full list and detailed documentation of core attributes available, or to request that core attributes not be returned, contact Sales or your Plaid account manager. **ruleset** (nullable, object) Details about the transaction result after evaluation by the requested Ruleset. If a ruleset\_key is not provided, for customers who began using Signal Transaction Scores before October 15, 2025, by default, this field will be omitted. To learn more, see Signal Rules. **ruleset->ruleset\_key** (string) The key of the Ruleset used for this transaction. **ruleset->result** (string) The result of the rule that was triggered for this transaction. ACCEPT: Accept the transaction for processing. REROUTE: Reroute the transaction to a different payment method, as this transaction is too risky. REVIEW: Review the transaction before proceeding. Possible values: ACCEPT, REROUTE, REVIEW **ruleset->triggered\_rule\_details** (nullable, object) Rules are run in numerical order. The first rule with a logic match is triggered. These are the details of that rule. **ruleset->triggered\_rule\_details->internal\_note** (string) An optional message attached to the triggered rule, defined within the Dashboard, for your internal use. Useful for debugging, such as “Account appears to be closed.” **ruleset->triggered\_rule\_details->custom\_action\_key** (string) A string key, defined within the Dashboard, used to trigger programmatic behavior for a certain result. For instance, you could optionally choose to define a "3-day-hold" custom\_action\_key for an ACCEPT result. **warnings** (\[object\]) If bank information was not available to be used in the Signal Transaction Scores model, this array contains warnings describing why bank data is missing. If you want to receive an API error instead of scores in the case of missing bank data, file a support ticket or contact your Plaid account manager. **warnings->warning\_type** (string) A broad categorization of the warning. Safe for programmatic use. **warnings->warning\_code** (string) The warning code identifies a specific kind of warning that pertains to the error causing bank data to be missing. Safe for programmatic use. For more details on warning codes, please refer to Plaid standard error codes documentation. If you receive the ITEM\_LOGIN\_REQUIRED warning, we recommend re-authenticating your user by implementing Link's update mode. This will guide your user to fix their credentials, allowing Plaid to start fetching data again for future requests. **warnings->warning\_message** (string) A developer-friendly representation of the warning type. This may change over time and is not safe for programmatic use. Response Object ```json { "ruleset": { "result": "ACCEPT", "ruleset_key": "primary-ruleset", "triggered_rule_details": {} }, "scores": { "customer_initiated_return_risk": { "score": 9, "risk_tier": 1 }, "bank_initiated_return_risk": { "score": 72, "risk_tier": 7 } }, "core_attributes": { "available_balance": 2000, "current_balance": 2200 }, "warnings": [], "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /processor/liabilities/get  #### Retrieve Liabilities data  The [/processor/liabilities/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorliabilitiesget) endpoint returns various details about a loan or credit account. Liabilities data is available primarily for US financial institutions, with some limited coverage of Canadian institutions. Currently supported account types are account type `credit` with account subtype `credit card` or `paypal`, and account type `loan` with account subtype `student` or `mortgage`. The types of information returned by Liabilities can include balances and due dates, loan terms, and account details such as original loan amount and guarantor. Data is refreshed approximately once per day; the latest data can be retrieved by calling [/processor/liabilities/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorliabilitiesget) . Note: This request may take some time to complete if `liabilities` was not specified as an initial product when creating the processor token. This is because Plaid must communicate directly with the institution to retrieve the additional data. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- /processor/liabilities/get Node▼ ```javascript const request: ProcessorLiabilitiesGetRequest = { processor_token: processorToken, }; const response = plaidClient.processorLiabilitiesGet(request); ``` #### Response fields  **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **liabilities** (object) An object containing liability accounts **liabilities->credit** (nullable, \[object\]) The credit accounts returned. **liabilities->credit->account\_id** (nullable, string) The ID of the account that this liability belongs to. **liabilities->credit->aprs** (\[object\]) The various interest rates that apply to the account. APR information is not provided by all card issuers; if APR data is not available, this array will be empty. **liabilities->credit->aprs->apr\_percentage** (number) Annual Percentage Rate applied. Format: double **liabilities->credit->aprs->apr\_type** (string) The type of balance to which the APR applies. Possible values: balance\_transfer\_apr, cash\_apr, purchase\_apr, special **liabilities->credit->aprs->balance\_subject\_to\_apr** (nullable, number) Amount of money that is subjected to the APR if a balance was carried beyond payment due date. How it is calculated can vary by card issuer. It is often calculated as an average daily balance. Format: double **liabilities->credit->aprs->interest\_charge\_amount** (nullable, number) Amount of money charged due to interest from last statement. Format: double **liabilities->credit->is\_overdue** (nullable, boolean) true if a payment is currently overdue. Availability for this field is limited. **liabilities->credit->last\_payment\_amount** (nullable, number) The amount of the last payment. Format: double **liabilities->credit->last\_payment\_date** (nullable, string) The date of the last payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Availability for this field is limited. Format: date **liabilities->credit->last\_statement\_issue\_date** (nullable, string) The date of the last statement. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->credit->last\_statement\_balance** (nullable, number) The total amount owed as of the last statement issued Format: double **liabilities->credit->minimum\_payment\_amount** (nullable, number) The minimum payment due for the next billing cycle. Format: double **liabilities->credit->next\_payment\_due\_date** (nullable, string) The due date for the next payment. The due date is null if a payment is not expected. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage** (nullable, \[object\]) The mortgage accounts returned. **liabilities->mortgage->account\_id** (string) The ID of the account that this liability belongs to. **liabilities->mortgage->account\_number** (nullable, string) The account number of the loan. **liabilities->mortgage->current\_late\_fee** (nullable, number) The current outstanding amount charged for late payment. Format: double **liabilities->mortgage->escrow\_balance** (nullable, number) Total amount held in escrow to pay taxes and insurance on behalf of the borrower. Format: double **liabilities->mortgage->has\_pmi** (nullable, boolean) Indicates whether the borrower has private mortgage insurance in effect. **liabilities->mortgage->has\_prepayment\_penalty** (nullable, boolean) Indicates whether the borrower will pay a penalty for early payoff of mortgage. **liabilities->mortgage->interest\_rate** (object) Object containing metadata about the interest rate for the mortgage. **liabilities->mortgage->interest\_rate->percentage** (nullable, number) Percentage value (interest rate of current mortgage, not APR) of interest payable on a loan. Format: double **liabilities->mortgage->interest\_rate->type** (nullable, string) The type of interest charged (fixed or variable). **liabilities->mortgage->last\_payment\_amount** (nullable, number) The amount of the last payment. Format: double **liabilities->mortgage->last\_payment\_date** (nullable, string) The date of the last payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->loan\_type\_description** (nullable, string) Description of the type of loan, for example conventional, fixed, or variable. This field is provided directly from the loan servicer and does not have an enumerated set of possible values. **liabilities->mortgage->loan\_term** (nullable, string) Full duration of mortgage as at origination (e.g. 10 year). **liabilities->mortgage->maturity\_date** (nullable, string) Original date on which mortgage is due in full. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->next\_monthly\_payment** (nullable, number) The amount of the next payment. Format: double **liabilities->mortgage->next\_payment\_due\_date** (nullable, string) The due date for the next payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->origination\_date** (nullable, string) The date on which the loan was initially lent. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->origination\_principal\_amount** (nullable, number) The original principal balance of the mortgage. Format: double **liabilities->mortgage->past\_due\_amount** (nullable, number) Amount of loan (principal + interest) past due for payment. Format: double **liabilities->mortgage->property\_address** (object) Object containing fields describing property address. **liabilities->mortgage->property\_address->city** (nullable, string) The city name. **liabilities->mortgage->property\_address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **liabilities->mortgage->property\_address->postal\_code** (nullable, string) The five or nine digit postal code. **liabilities->mortgage->property\_address->region** (nullable, string) The region or state (example "NC"). **liabilities->mortgage->property\_address->street** (nullable, string) The full street address (example "564 Main Street, Apt 15"). **liabilities->mortgage->ytd\_interest\_paid** (nullable, number) The year to date (YTD) interest paid. Format: double **liabilities->mortgage->ytd\_principal\_paid** (nullable, number) The YTD principal paid. Format: double **liabilities->student** (nullable, \[object\]) The student loan accounts returned. **liabilities->student->account\_id** (nullable, string) The ID of the account that this liability belongs to. Each account can only contain one liability. **liabilities->student->account\_number** (nullable, string) The account number of the loan. For some institutions, this may be a masked version of the number (e.g., the last 4 digits instead of the entire number). **liabilities->student->disbursement\_dates** (nullable, \[string\]) The dates on which loaned funds were disbursed or will be disbursed. These are often in the past. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->expected\_payoff\_date** (nullable, string) The date when the student loan is expected to be paid off. Availability for this field is limited. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->guarantor** (nullable, string) The guarantor of the student loan. **liabilities->student->interest\_rate\_percentage** (number) The interest rate on the loan as a percentage. Format: double **liabilities->student->is\_overdue** (nullable, boolean) true if a payment is currently overdue. Availability for this field is limited. **liabilities->student->last\_payment\_amount** (nullable, number) The amount of the last payment. Format: double **liabilities->student->last\_payment\_date** (nullable, string) The date of the last payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->last\_statement\_balance** (nullable, number) The total amount owed as of the last statement issued Format: double **liabilities->student->last\_statement\_issue\_date** (nullable, string) The date of the last statement. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->loan\_name** (nullable, string) The type of loan, e.g., "Consolidation Loans". **liabilities->student->loan\_status** (object) An object representing the status of the student loan **liabilities->student->loan\_status->end\_date** (nullable, string) The date until which the loan will be in its current status. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->loan\_status->type** (nullable, string) The status type of the student loan Possible values: cancelled, charged off, claim, consolidated, deferment, delinquent, discharged, extension, forbearance, in grace, in military, in school, not fully disbursed, other, paid in full, refunded, repayment, transferred, pending idr **liabilities->student->minimum\_payment\_amount** (nullable, number) The minimum payment due for the next billing cycle. There are some exceptions: Some institutions require a minimum payment across all loans associated with an account number. Our API presents that same minimum payment amount on each loan. The institutions that do this are: Great Lakes ( ins\_116861), Firstmark (ins\_116295), Commonbond Firstmark Services (ins\_116950), Granite State (ins\_116308), and Oklahoma Student Loan Authority (ins\_116945). Firstmark (ins\_116295 ) and Navient (ins\_116248) will display as $0 if there is an autopay program in effect. Format: double **liabilities->student->next\_payment\_due\_date** (nullable, string) The due date for the next payment. The due date is null if a payment is not expected. A payment is not expected if loan\_status.type is deferment, in\_school, consolidated, paid in full, or transferred. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->origination\_date** (nullable, string) The date on which the loan was initially lent. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->origination\_principal\_amount** (nullable, number) The original principal balance of the loan. Format: double **liabilities->student->outstanding\_interest\_amount** (nullable, number) The total dollar amount of the accrued interest balance. For Sallie Mae ( ins\_116944), this amount is included in the current balance of the loan, so this field will return as null. Format: double **liabilities->student->payment\_reference\_number** (nullable, string) The relevant account number that should be used to reference this loan for payments. In the majority of cases, payment\_reference\_number will match account\_number, but in some institutions, such as Great Lakes (ins\_116861), it will be different. **liabilities->student->repayment\_plan** (object) An object representing the repayment plan for the student loan **liabilities->student->repayment\_plan->description** (nullable, string) The description of the repayment plan as provided by the servicer. **liabilities->student->repayment\_plan->type** (nullable, string) The type of the repayment plan. Possible values: extended graduated, extended standard, graduated, income-contingent repayment, income-based repayment, income-sensitive repayment, interest-only, other, pay as you earn, revised pay as you earn, standard, saving on a valuable education, null **liabilities->student->sequence\_number** (nullable, string) The sequence number of the student loan. Heartland ECSI (ins\_116948) does not make this field available. **liabilities->student->servicer\_address** (object) The address of the student loan servicer. This is generally the remittance address to which payments should be sent. **liabilities->student->servicer\_address->city** (nullable, string) The full city name **liabilities->student->servicer\_address->region** (nullable, string) The region or state Example: "NC" **liabilities->student->servicer\_address->street** (nullable, string) The full street address Example: "564 Main Street, APT 15" **liabilities->student->servicer\_address->postal\_code** (nullable, string) The postal code **liabilities->student->servicer\_address->country** (nullable, string) The ISO 3166-1 alpha-2 country code **liabilities->student->ytd\_interest\_paid** (nullable, number) The year to date (YTD) interest paid. Availability for this field is limited. Format: double **liabilities->student->ytd\_principal\_paid** (nullable, number) The year to date (YTD) principal paid. Availability for this field is limited. Format: double **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "balances": { "available": null, "current": 410, "iso_currency_code": "USD", "limit": 2000, "unofficial_currency_code": null }, "mask": "3333", "name": "Plaid Credit Card", "official_name": "Plaid Diamond 12.5% APR Interest Credit Card", "subtype": "credit card", "type": "credit" }, "liabilities": { "credit": [ { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "aprs": [ { "apr_percentage": 15.24, "apr_type": "balance_transfer_apr", "balance_subject_to_apr": 1562.32, "interest_charge_amount": 130.22 }, { "apr_percentage": 27.95, "apr_type": "cash_apr", "balance_subject_to_apr": 56.22, "interest_charge_amount": 14.81 }, { "apr_percentage": 12.5, "apr_type": "purchase_apr", "balance_subject_to_apr": 157.01, "interest_charge_amount": 25.66 }, { "apr_percentage": 0, "apr_type": "special", "balance_subject_to_apr": 1000, "interest_charge_amount": 0 } ], "is_overdue": false, "last_payment_amount": 168.25, "last_payment_date": "2019-05-22", "last_statement_issue_date": "2019-05-28", "last_statement_balance": 1708.77, "minimum_payment_amount": 20, "next_payment_due_date": "2020-05-28" } ], "mortgage": [], "student": [] }, "request_id": "dTnnm60WgKGLnKL" } ``` \=\*=\*=\*= #### /processor/signal/decision/report  #### Report whether you initiated an ACH transaction  After you call [/processor/signal/evaluate](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalevaluate) , Plaid will normally infer the outcome from your Signal Rules. However, if you are not using Signal Rules, if the Signal Rules outcome was `REVIEW`, or if you take a different action than the one determined by the Signal Rules, you will need to call [/processor/signal/decision/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignaldecisionreport) . This helps improve Signal Transaction Score accuracy for your account and is necessary for proper functioning of the rule performance and rule tuning capabilities in the Dashboard. If your effective decision changes after calling [/processor/signal/decision/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignaldecisionreport) (for example, you indicated that you accepted a transaction, but later on, your payment processor rejected it, so it was never initiated), call [/processor/signal/decision/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignaldecisionreport) again for the transaction to correct Plaid's records. If you are using Plaid Transfer as your payment processor, you also do not need to call [/processor/signal/decision/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignaldecisionreport) , as Plaid can infer outcomes from your Transfer activity. If using a Balance-only ruleset, this endpoint will not impact scores (Balance does not use scores), but is necessary to view accurate transaction outcomes and tune rule logic in the Dashboard. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **client\_transaction\_id** (required, string) Must be the same as the client\_transaction\_id supplied when calling /signal/evaluate Min length: 1 Max length: 36 **initiated** (required, boolean) true if the ACH transaction was initiated, false otherwise. This field must be returned as a boolean. If formatted incorrectly, this will result in an INVALID\_FIELD error. **days\_funds\_on\_hold** (integer) The actual number of days (hold time) since the ACH debit transaction that you wait before making funds available to your customers. The holding time could affect the ACH return rate. For example, use 0 if you make funds available to your customers instantly or the same day following the debit transaction, or 1 if you make funds available the next day following the debit initialization. Minimum: 0 **decision\_outcome** (string) The payment decision from the risk assessment. APPROVE: approve the transaction without requiring further actions from your customers. For example, use this field if you are placing a standard hold for all the approved transactions before making funds available to your customers. You should also use this field if you decide to accelerate the fund availability for your customers. REVIEW: the transaction requires manual review REJECT: reject the transaction TAKE\_OTHER\_RISK\_MEASURES: for example, placing a longer hold on funds than those approved transactions or introducing customer frictions such as step-up verification/authentication NOT\_EVALUATED: if only logging the results without using them Possible values: APPROVE, REVIEW, REJECT, TAKE\_OTHER\_RISK\_MEASURES, NOT\_EVALUATED **payment\_method** (string) The payment method to complete the transaction after the risk assessment. It may be different from the default payment method. SAME\_DAY\_ACH: Same Day ACH by Nacha. The debit transaction is processed and settled on the same day. STANDARD\_ACH: Standard ACH by Nacha. MULTIPLE\_PAYMENT\_METHODS: if there is no default debit rail or there are multiple payment methods. Possible values: SAME\_DAY\_ACH, STANDARD\_ACH, MULTIPLE\_PAYMENT\_METHODS **amount\_instantly\_available** (number) The amount (in USD) made available to your customers instantly following the debit transaction. It could be a partial amount of the requested transaction (example: 102.05). Format: double /processor/signal/decision/report Node▼ ```javascript const decision_report_request = { processor_token: 'processor-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', client_transaction_id: 'txn12345', initiated: true, days_funds_on_hold: 3, }; try { const decision_report_response = await plaidClient.processorSignalDecisionReport(decision_report_request); const decision_request_id = decision_report_response.data.request_id; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /processor/signal/return/report  #### Report a return for an ACH transaction  Call the [/processor/signal/return/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalreturnreport) endpoint to report a returned transaction that was previously sent to the [/processor/signal/evaluate](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalevaluate) endpoint. Your feedback will be used by the model to incorporate the latest risk trend in your portfolio. If you are using the [Plaid Transfer product](https://plaid.com/docs/transfer/index.html.md) to create transfers, it is not necessary to use this endpoint, as Plaid already knows whether the transfer was returned. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **client\_transaction\_id** (required, string) Must be the same as the client\_transaction\_id supplied when calling /processor/signal/evaluate Min length: 1 Max length: 36 **return\_code** (required, string) Must be a valid ACH return code (e.g. "R01") If formatted incorrectly, this will result in an INVALID\_FIELD error. **returned\_at** (string) Date and time when you receive the returns from your payment processors, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Format: date-time /processor/signal/return/report Node▼ ```javascript const return_report_request = { processor_token: 'processor-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', client_transaction_id: 'txn12345', return_code: 'R01', }; try { const return_report_response = await plaidClient.processorSignalReturnReport( return_report_request, ); const request_id = return_report_response.data.request_id; console.log(request_id); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /processor/signal/prepare  #### Opt-in a processor token to Signal  When a processor token is not initialized with `signal`, call [/processor/signal/prepare](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalprepare) to opt-in that processor token to the data collection process, which will improve the accuracy of the Signal Transaction Score. If this endpoint is called with a processor token that is already initialized with `signal`, it will return a 200 response and will not modify the processor token. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- /processor/signal/prepare Node▼ ```javascript const prepare_request = { processor_token: 'processor-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', }; try { const prepare_response = await plaidClient.processorSignalPrepare(prepare_request); const prepare_request_id = prepare_response.data.request_id; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /processor/token/webhook/update  #### Update a processor token's webhook URL  This endpoint allows you, the processor, to update the webhook URL associated with a processor token. This request triggers a `WEBHOOK_UPDATE_ACKNOWLEDGED` webhook to the newly specified webhook URL. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **webhook** (required, string) The new webhook URL to associate with the processor token. To remove a webhook from a processor token, set to null. Format: url /processor/token/webhook/update Node▼ ```javascript try { const request: ProcessorTokenWebhookUpdateRequest = { processor_token: processorToken, webhook: webhook, }; const response = await plaidClient.processorTokenWebhookUpdate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "vYK11LNTfRoAMbj" } ``` \=\*=\*=\*= #### /processor/transactions/sync  #### Get incremental transaction updates on a processor token  The [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) endpoint retrieves transactions associated with an Item and can fetch updates using a cursor to track which updates have already been seen. For important instructions on integrating with [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) , see the [Transactions integration overview](https://plaid.com/docs/transactions/index.html.md#integration-overview) . If you are migrating from an existing integration using [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) , see the [Transactions Sync migration guide](https://plaid.com/docs/transactions/sync-migration/index.html.md) . This endpoint supports `credit`, `depository`, and some `loan`\-type accounts (only those with account subtype `student`). For `investments` accounts, use [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) instead. When retrieving paginated updates, track both the `next_cursor` from the latest response and the original cursor from the first call in which `has_more` was `true`; if a call to [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) fails when retrieving a paginated update (e.g due to the [TRANSACTIONS\_SYNC\_MUTATION\_DURING\_PAGINATION](https://plaid.com/docs/errors/transactions/index.html.md#transactions_sync_mutation_during_pagination) error), the entire pagination request loop must be restarted beginning with the cursor for the first page of the update, rather than retrying only the single request that failed. If transactions data is not yet available for the Item, which can happen if the Item was not initialized with transactions during the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call or if [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) was called within a few seconds of Item creation, [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) will return empty transactions arrays. Plaid typically checks for new transactions data between one and four times per day, depending on the institution. To find out when transactions were last updated for an Item, use the [Item Debugger](https://plaid.com/docs/account/activity/index.html.md#troubleshooting-with-item-debugger) or call [/item/get](https://plaid.com/docs/api/items/index.html.md#itemget) ; the `item.status.transactions.last_successful_update` field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, use the [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) endpoint. To be alerted when new transactions are available, listen for the [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#sync_updates_available) webhook. To receive Transactions webhooks for a processor token, set its webhook URL via the [/processor/token/webhook/update](https://plaid.com/docs/api/processor-partners/index.html.md#processortokenwebhookupdate) endpoint. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. **cursor** (string) The cursor value represents the last update requested. Providing it will cause the response to only return changes after this update. If omitted, the entire history of updates will be returned, starting with the first-added transactions on the item. Note: The upper-bound length of this cursor is 256 characters of base64. **count** (integer) The number of transaction updates to fetch. Default: 100 Minimum: 1 Maximum: 500 Exclusive min: false **options** (object) An optional object to be used with the request. If specified, options must not be null. **options->include\_original\_description** (boolean) Include the raw unparsed transaction description from the financial institution. Default: false **options->personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **options->days\_requested** (integer) This field only applies to calls for Items where the Transactions product has not already been initialized (i.e., by specifying transactions in the products, required\_if\_supported\_products, or optional\_products array when calling /link/token/create or by making a previous call to /transactions/sync or /transactions/get). In those cases, the field controls the maximum number of days of transaction history that Plaid will request from the financial institution. The more transaction history is requested, the longer the historical update poll will take. If no value is specified, 90 days of history will be requested by default. If you are initializing your Items with transactions during the /link/token/create call (e.g. by including transactions in the /link/token/create products array), you must use the transactions.days\_requested field in the /link/token/create request instead of in the /transactions/sync request. If the Item has already been initialized with the Transactions product, this field will have no effect. The maximum amount of transaction history to request on an Item cannot be updated if Transactions has already been added to the Item. To request older transaction history on an Item where Transactions has already been added, you must delete the Item via /item/remove and send the user through Link to create a new Item. Customers using Recurring Transactions should request at least 180 days of history for optimal results. Minimum: 1 Maximum: 730 Default: 90 **options->account\_id** (string) If provided, the returned updates and cursor will only reflect the specified account's transactions. Omitting account\_id returns updates for all accounts under the Item. Note that specifying an account\_id effectively creates a separate incremental update stream—and therefore a separate cursor—for that account. If multiple accounts are queried this way, you will maintain multiple cursors, one per account\_id. If you decide to begin filtering by account\_id after using no account\_id, start fresh with a null cursor and maintain separate (account\_id, cursor) pairs going forward. Do not reuse any previously saved cursors, as this can cause pagination errors or incomplete data. Note: An error will be returned if a provided account\_id is not associated with the Item. /processor/transactions/sync Node▼ ```javascript // Provide a cursor from your database if you've previously // received one for the Item. Leave null if this is your // first sync call for this Item. The first request will // return a cursor. let cursor = database.getLatestCursorOrNull(itemId); // New transaction updates since "cursor" let added: Array = []; let modified: Array = []; // Removed transaction ids let removed: Array = []; let hasMore = true; // Iterate through each page of new transaction updates for item while (hasMore) { const request: ProcessorTransactionsSyncRequest = { processor_token: processorToken, cursor: cursor, }; const response = await client.processorTransactionsSync(request); const data = response.data; // Add this page of results added = added.concat(data.added); modified = modified.concat(data.modified); removed = removed.concat(data.removed); hasMore = data.has_more; // Update cursor to the next cursor cursor = data.next_cursor; } // Persist cursor and updated data database.applyUpdates(itemId, added, modified, removed, cursor); ``` #### Response fields  **transactions\_update\_status** (string) A description of the update status for transaction pulls of an Item. This field contains the same information provided by transactions webhooks, and may be helpful for webhook troubleshooting or when recovering from missed webhooks. TRANSACTIONS\_UPDATE\_STATUS\_UNKNOWN: Unable to fetch transactions update status for Item. NOT\_READY: The Item is pending transaction pull. INITIAL\_UPDATE\_COMPLETE: Initial pull for the Item is complete, historical pull is pending. HISTORICAL\_UPDATE\_COMPLETE: Both initial and historical pull for Item are complete. Possible values: TRANSACTIONS\_UPDATE\_STATUS\_UNKNOWN, NOT\_READY, INITIAL\_UPDATE\_COMPLETE, HISTORICAL\_UPDATE\_COMPLETE **account** (nullable, object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **added** (\[object\]) Transactions that have been added to the Item since cursor ordered by ascending last modified time. **added->account\_id** (string) The ID of the account in which this transaction occurred. **added->amount** (number) The settled value of the transaction, denominated in the transactions's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. For all products except Income: Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. For Income endpoints, values are positive when representing income. Format: double **added->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **added->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **added->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **added->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). To receive information about the date that a posted transaction was initiated, see the authorized\_date field. Format: date **added->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **added->location->address** (nullable, string) The street address where the transaction occurred. **added->location->city** (nullable, string) The city where the transaction occurred. **added->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **added->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **added->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **added->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **added->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **added->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **added->name** (deprecated, string) The merchant name or transaction description. Note: While Plaid does not currently plan to remove this field, it is a legacy field that is not actively maintained. Use merchant\_name instead for the merchant name. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, this field will always appear. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **added->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **added->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include\_original\_description to true. **added->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **added->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **added->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **added->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **added->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **added->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **added->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **added->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **added->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **added->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. Not all institutions provide pending transactions. **added->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. Not all institutions provide pending transactions. **added->account\_owner** (nullable, string) This field is not typically populated and only relevant when dealing with sub-accounts. A sub-account most commonly exists in cases where a single account is linked to multiple cards, each with its own card number and card holder name; each card will be considered a sub-account. If the account does have sub-accounts, this field will typically be some combination of the sub-account owner's name and/or the sub-account mask. The format of this field is not standardized and will vary based on institution. **added->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **added->transaction\_type** (deprecated, string) Please use the payment\_channel field, transaction\_type will be deprecated in the future. digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **added->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **added->website** (nullable, string) The website associated with this transaction, if available. **added->authorized\_date** (nullable, string) The date that the transaction was authorized. For posted transactions, the date field will indicate the posted date, but authorized\_date will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_date, when available, is generally preferable to use over the date field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **added->authorized\_datetime** (nullable, string) Date and time when a transaction was authorized in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For posted transactions, the datetime field will indicate the posted date, but authorized\_datetime will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_datetime, when available, is generally preferable to use over the datetime field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **added->datetime** (nullable, string) Date and time when a transaction was posted in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For the date that the transaction was initiated, rather than posted, see the authorized\_datetime field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **added->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. This field replaces the transaction\_type field. Possible values: online, in store, other **added->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **added->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **added->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **added->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **added->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **added->transaction\_code** (nullable, string) An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to null. adjustment: Bank adjustment atm: Cash deposit or withdrawal via an automated teller machine bank charge: Charge or fee levied by the institution bill payment: Payment of a bill cash: Cash deposit or withdrawal cashback: Cash withdrawal while making a debit card purchase cheque: Document ordering the payment of money to another person or organization direct debit: Automatic withdrawal of funds initiated by a third party at a regular interval interest: Interest earned or incurred purchase: Purchase made with a debit or credit card standing order: Payment instructed by the account holder to a third party at a regular interval transfer: Transfer of money between accounts Possible values: adjustment, atm, bank charge, bill payment, cash, cashback, cheque, direct debit, interest, purchase, standing order, transfer, null **added->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **added->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **added->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **added->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **added->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **added->counterparties->website** (nullable, string) The website associated with the counterparty. **added->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **added->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **added->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **added->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **added->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **added->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **added->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **added->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **added->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **added->merchant\_entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store. **modified** (\[object\]) Transactions that have been modified on the Item since cursor ordered by ascending last modified time. **modified->account\_id** (string) The ID of the account in which this transaction occurred. **modified->amount** (number) The settled value of the transaction, denominated in the transactions's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. For all products except Income: Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. For Income endpoints, values are positive when representing income. Format: double **modified->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **modified->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **modified->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **modified->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). To receive information about the date that a posted transaction was initiated, see the authorized\_date field. Format: date **modified->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **modified->location->address** (nullable, string) The street address where the transaction occurred. **modified->location->city** (nullable, string) The city where the transaction occurred. **modified->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **modified->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **modified->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **modified->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **modified->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **modified->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **modified->name** (deprecated, string) The merchant name or transaction description. Note: While Plaid does not currently plan to remove this field, it is a legacy field that is not actively maintained. Use merchant\_name instead for the merchant name. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, this field will always appear. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **modified->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **modified->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include\_original\_description to true. **modified->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **modified->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **modified->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **modified->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **modified->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **modified->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **modified->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **modified->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **modified->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **modified->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. Not all institutions provide pending transactions. **modified->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. Not all institutions provide pending transactions. **modified->account\_owner** (nullable, string) This field is not typically populated and only relevant when dealing with sub-accounts. A sub-account most commonly exists in cases where a single account is linked to multiple cards, each with its own card number and card holder name; each card will be considered a sub-account. If the account does have sub-accounts, this field will typically be some combination of the sub-account owner's name and/or the sub-account mask. The format of this field is not standardized and will vary based on institution. **modified->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **modified->transaction\_type** (deprecated, string) Please use the payment\_channel field, transaction\_type will be deprecated in the future. digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **modified->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **modified->website** (nullable, string) The website associated with this transaction, if available. **modified->authorized\_date** (nullable, string) The date that the transaction was authorized. For posted transactions, the date field will indicate the posted date, but authorized\_date will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_date, when available, is generally preferable to use over the date field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **modified->authorized\_datetime** (nullable, string) Date and time when a transaction was authorized in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For posted transactions, the datetime field will indicate the posted date, but authorized\_datetime will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_datetime, when available, is generally preferable to use over the datetime field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **modified->datetime** (nullable, string) Date and time when a transaction was posted in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For the date that the transaction was initiated, rather than posted, see the authorized\_datetime field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **modified->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. This field replaces the transaction\_type field. Possible values: online, in store, other **modified->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **modified->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **modified->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **modified->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **modified->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **modified->transaction\_code** (nullable, string) An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to null. adjustment: Bank adjustment atm: Cash deposit or withdrawal via an automated teller machine bank charge: Charge or fee levied by the institution bill payment: Payment of a bill cash: Cash deposit or withdrawal cashback: Cash withdrawal while making a debit card purchase cheque: Document ordering the payment of money to another person or organization direct debit: Automatic withdrawal of funds initiated by a third party at a regular interval interest: Interest earned or incurred purchase: Purchase made with a debit or credit card standing order: Payment instructed by the account holder to a third party at a regular interval transfer: Transfer of money between accounts Possible values: adjustment, atm, bank charge, bill payment, cash, cashback, cheque, direct debit, interest, purchase, standing order, transfer, null **modified->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **modified->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **modified->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **modified->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **modified->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **modified->counterparties->website** (nullable, string) The website associated with the counterparty. **modified->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **modified->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **modified->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **modified->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **modified->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **modified->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **modified->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **modified->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **modified->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **modified->merchant\_entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store. **removed** (\[object\]) Transactions that have been removed from the Item since cursor ordered by ascending last modified time. **removed->transaction\_id** (string) The ID of the removed transaction. **removed->account\_id** (string) The ID of the account of the removed transaction. **next\_cursor** (string) Cursor used for fetching any future updates after the latest update provided in this response. The cursor obtained after all pages have been pulled (indicated by has\_more being false) will be valid for at least 1 year. This cursor should be persisted for later calls. If transactions are not yet available, this will be an empty string. **has\_more** (boolean) Represents if more than requested count of transaction updates exist. If true, the additional updates can be fetched by making an additional request with cursor set to next\_cursor. If has\_more is true, it’s important to pull all available pages, to make it less likely for underlying data changes to conflict with pagination. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 110.94, "current": 110.94, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, "added": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 72.1, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "Walmart", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-24", "datetime": "2023-09-24T11:01:01Z", "authorized_date": "2023-09-22", "authorized_datetime": "2023-09-22T10:34:50Z", "location": { "address": "13425 Community Rd", "city": "Poway", "region": "CA", "postal_code": "92064", "country": "US", "lat": 32.959068, "lon": -117.037666, "store_number": "1700" }, "name": "PURCHASE WM SUPERCENTER #1700", "merchant_name": "Walmart", "merchant_entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "in store", "pending": false, "pending_transaction_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nc", "personal_finance_category": { "primary": "GENERAL_MERCHANDISE", "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_GENERAL_MERCHANDISE.png", "transaction_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "transaction_code": null, "transaction_type": "place" } ], "modified": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 28.34, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "DoorDash", "type": "marketplace", "logo_url": "https://plaid-counterparty-logos.plaid.com/doordash_1.png", "website": "doordash.com", "entity_id": "YNRJg5o2djJLv52nBA1Yn1KpL858egYVo4dpm", "confidence_level": "HIGH" }, { "name": "Burger King", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-28", "datetime": "2023-09-28T15:10:09Z", "authorized_date": "2023-09-27", "authorized_datetime": "2023-09-27T08:01:58Z", "location": { "address": null, "city": null, "region": null, "postal_code": null, "country": null, "lat": null, "lon": null, "store_number": null }, "name": "Dd Doordash Burgerkin", "merchant_name": "Burger King", "merchant_entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "online", "pending": true, "pending_transaction_id": null, "personal_finance_category": { "primary": "FOOD_AND_DRINK", "detailed": "FOOD_AND_DRINK_FAST_FOOD", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_FOOD_AND_DRINK.png", "transaction_id": "yhnUVvtcGGcCKU0bcz8PDQr5ZUxUXebUvbKC0", "transaction_code": null, "transaction_type": "digital" } ], "removed": [ { "transaction_id": "CmdQTNgems8BT1B7ibkoUXVPyAeehT3Tmzk0l", "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp" } ], "next_cursor": "tVUUL15lYQN5rBnfDIc1I8xudpGdIlw9nsgeXWvhOfkECvUeR663i3Dt1uf/94S8ASkitgLcIiOSqNwzzp+bh89kirazha5vuZHBb2ZA5NtCDkkV", "has_more": false, "request_id": "45QSn", "transactions_update_status": "HISTORICAL_UPDATE_COMPLETE" } ``` \=\*=\*=\*= #### /processor/transactions/get  #### Get transaction data  The [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) endpoint allows developers to receive user-authorized transaction data for credit, depository, and some loan-type accounts (only those with account subtype `student`; coverage may be limited). Transaction data is standardized across financial institutions, and in many cases transactions are linked to a clean name, entity type, location, and category. Similarly, account data is standardized and returned with a clean name, number, balance, and other meta information where available. Transactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Transactions are not immutable and can also be removed altogether by the institution; a removed transaction will no longer appear in [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) . For more details, see [Pending and posted transactions](https://plaid.com/docs/transactions/transactions-data/index.html.md#pending-and-posted-transactions) . Due to the potentially large number of transactions associated with a processor token, results are paginated. Manipulate the `count` and `offset` parameters in conjunction with the `total_transactions` response body field to fetch all available transactions. Data returned by [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) will be the data available for the processor token as of the most recent successful check for new transactions. Plaid typically checks for new data multiple times a day, but these checks may occur less frequently, such as once a day, depending on the institution. To force Plaid to check for new transactions, you can use the [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) endpoint. Note that data may not be immediately available to [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) . Plaid will begin to prepare transactions data upon Item link, if Link was initialized with `transactions`, or upon the first call to [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) , if it wasn't. If no transaction history is ready when [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) is called, it will return a `PRODUCT_NOT_READY` error. To receive Transactions webhooks for a processor token, set its webhook URL via the [/processor/token/webhook/update](https://plaid.com/docs/api/processor-partners/index.html.md#processortokenwebhookupdate) endpoint. #### Request fields  **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. **options** (object) An optional object to be used with the request. If specified, options must not be null. **options->count** (integer) The number of transactions to fetch. Default: 100 Minimum: 1 Maximum: 500 Exclusive min: false **options->offset** (integer) The number of transactions to skip. The default value is 0. Default: 0 Minimum: 0 **options->include\_original\_description** (boolean) Include the raw unparsed transaction description from the financial institution. Default: false **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. **start\_date** (required, string) The earliest date for which data should be returned. Dates should be formatted as YYYY-MM-DD. Format: date **end\_date** (required, string) The latest date for which data should be returned. Dates should be formatted as YYYY-MM-DD. Format: date /processor/transactions/get Node▼ ```javascript const request: ProcessorTransactionsGetRequest = { processor_token: processorToken, start_date: '2018-01-01', end_date: '2020-02-01' }; try { const response = await client.processorTransactionsGet(request); let transactions = response.data.transactions; const total_transactions = response.data.total_transactions; // Manipulate the offset parameter to paginate // transactions and retrieve all available data while (transactions.length < total_transactions) { const paginatedRequest: ProcessorTransactionsGetRequest = { processor_token: processorToken, start_date: '2018-01-01', end_date: '2020-02-01', options: { offset: transactions.length, }, }; const paginatedResponse = await client.processorTransactionsGet(paginatedRequest); transactions = transactions.concat( paginatedResponse.data.transactions, ); } } catch((err) => { // handle error } ``` #### Response fields  **account** (object) A single account at a financial institution. **account->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **account->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **account->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **account->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **account->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **account->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **account->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **account->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **account->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **account->name** (string) The name of the account, either assigned by the user or by the financial institution itself **account->official\_name** (nullable, string) The official name of the account as given by the financial institution **account->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **account->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **account->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **account->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **account->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **account->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **account->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **account->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **account->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **account->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **account->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **account->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **account->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **account->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **transactions** (\[object\]) An array containing transactions from the account. Transactions are returned in reverse chronological order, with the most recent at the beginning of the array. The maximum number of transactions returned is determined by the count parameter. **transactions->account\_id** (string) The ID of the account in which this transaction occurred. **transactions->amount** (number) The settled value of the transaction, denominated in the transactions's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. For all products except Income: Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. For Income endpoints, values are positive when representing income. Format: double **transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). To receive information about the date that a posted transaction was initiated, see the authorized\_date field. Format: date **transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **transactions->location->address** (nullable, string) The street address where the transaction occurred. **transactions->location->city** (nullable, string) The city where the transaction occurred. **transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **transactions->name** (deprecated, string) The merchant name or transaction description. Note: While Plaid does not currently plan to remove this field, it is a legacy field that is not actively maintained. Use merchant\_name instead for the merchant name. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, this field will always appear. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include\_original\_description to true. **transactions->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **transactions->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **transactions->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **transactions->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **transactions->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **transactions->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **transactions->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **transactions->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **transactions->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. Not all institutions provide pending transactions. **transactions->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. Not all institutions provide pending transactions. **transactions->account\_owner** (nullable, string) This field is not typically populated and only relevant when dealing with sub-accounts. A sub-account most commonly exists in cases where a single account is linked to multiple cards, each with its own card number and card holder name; each card will be considered a sub-account. If the account does have sub-accounts, this field will typically be some combination of the sub-account owner's name and/or the sub-account mask. The format of this field is not standardized and will vary based on institution. **transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **transactions->transaction\_type** (deprecated, string) Please use the payment\_channel field, transaction\_type will be deprecated in the future. digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **transactions->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **transactions->website** (nullable, string) The website associated with this transaction, if available. **transactions->authorized\_date** (nullable, string) The date that the transaction was authorized. For posted transactions, the date field will indicate the posted date, but authorized\_date will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_date, when available, is generally preferable to use over the date field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **transactions->authorized\_datetime** (nullable, string) Date and time when a transaction was authorized in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For posted transactions, the datetime field will indicate the posted date, but authorized\_datetime will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_datetime, when available, is generally preferable to use over the datetime field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **transactions->datetime** (nullable, string) Date and time when a transaction was posted in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For the date that the transaction was initiated, rather than posted, see the authorized\_datetime field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **transactions->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. This field replaces the transaction\_type field. Possible values: online, in store, other **transactions->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **transactions->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **transactions->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **transactions->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **transactions->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **transactions->transaction\_code** (nullable, string) An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to null. adjustment: Bank adjustment atm: Cash deposit or withdrawal via an automated teller machine bank charge: Charge or fee levied by the institution bill payment: Payment of a bill cash: Cash deposit or withdrawal cashback: Cash withdrawal while making a debit card purchase cheque: Document ordering the payment of money to another person or organization direct debit: Automatic withdrawal of funds initiated by a third party at a regular interval interest: Interest earned or incurred purchase: Purchase made with a debit or credit card standing order: Payment instructed by the account holder to a third party at a regular interval transfer: Transfer of money between accounts Possible values: adjustment, atm, bank charge, bill payment, cash, cashback, cheque, direct debit, interest, purchase, standing order, transfer, null **transactions->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **transactions->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **transactions->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **transactions->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **transactions->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **transactions->counterparties->website** (nullable, string) The website associated with the counterparty. **transactions->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **transactions->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **transactions->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **transactions->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **transactions->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **transactions->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **transactions->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **transactions->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **transactions->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **transactions->merchant\_entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store. **total\_transactions** (integer) The total number of transactions available within the date range specified. If total\_transactions is larger than the size of the transactions array, more transactions are available and can be fetched via manipulating the offset parameter. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "account": { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 110.94, "current": 110.94, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, "transactions": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 28.34, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "DoorDash", "type": "marketplace", "logo_url": "https://plaid-counterparty-logos.plaid.com/doordash_1.png", "website": "doordash.com", "entity_id": "YNRJg5o2djJLv52nBA1Yn1KpL858egYVo4dpm", "confidence_level": "HIGH" }, { "name": "Burger King", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-28", "datetime": "2023-09-28T15:10:09Z", "authorized_date": "2023-09-27", "authorized_datetime": "2023-09-27T08:01:58Z", "location": { "address": null, "city": null, "region": null, "postal_code": null, "country": null, "lat": null, "lon": null, "store_number": null }, "name": "Dd Doordash Burgerkin", "merchant_name": "Burger King", "merchant_entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "online", "pending": true, "pending_transaction_id": null, "personal_finance_category": { "primary": "FOOD_AND_DRINK", "detailed": "FOOD_AND_DRINK_FAST_FOOD", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_FOOD_AND_DRINK.png", "transaction_id": "yhnUVvtcGGcCKU0bcz8PDQr5ZUxUXebUvbKC0", "transaction_code": null, "transaction_type": "digital" }, { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 72.1, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "Walmart", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-24", "datetime": "2023-09-24T11:01:01Z", "authorized_date": "2023-09-22", "authorized_datetime": "2023-09-22T10:34:50Z", "location": { "address": "13425 Community Rd", "city": "Poway", "region": "CA", "postal_code": "92064", "country": "US", "lat": 32.959068, "lon": -117.037666, "store_number": "1700" }, "name": "PURCHASE WM SUPERCENTER #1700", "merchant_name": "Walmart", "merchant_entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "in store", "pending": false, "pending_transaction_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nc", "personal_finance_category": { "primary": "GENERAL_MERCHANDISE", "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_GENERAL_MERCHANDISE.png", "transaction_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "transaction_code": null, "transaction_type": "place" } ], "total_transactions": 1, "request_id": "Wvhy9PZHQLV8njG" } ``` \=\*=\*=\*= #### /processor/transactions/recurring/get  #### Fetch recurring transaction streams  The [/processor/transactions/recurring/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrecurringget) endpoint allows developers to receive a summary of the recurring outflow and inflow streams (expenses and deposits) from a user’s checking, savings or credit card accounts. Additionally, Plaid provides key insights about each recurring stream including the category, merchant, last amount, and more. Developers can use these insights to build tools and experiences that help their users better manage cash flow, monitor subscriptions, reduce spend, and stay on track with bill payments. This endpoint is offered as an add-on to Transactions. To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager. This endpoint can only be called on a processor token that has already been initialized with Transactions (either during Link, by specifying it in [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) ; or after Link, by calling [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) or [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) ). Once all historical transactions have been fetched, call [/processor/transactions/recurring/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrecurringget) to receive the Recurring Transactions streams and subscribe to the [RECURRING\_TRANSACTIONS\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#recurring_transactions_update) webhook. To know when historical transactions have been fetched, if you are using [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) listen for the [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#SyncUpdatesAvailableWebhook-historical-update-complete) webhook and check that the `historical_update_complete` field in the payload is `true`. If using [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) , listen for the [HISTORICAL\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#historical_update) webhook. After the initial call, you can call [/processor/transactions/recurring/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrecurringget) endpoint at any point in the future to retrieve the latest summary of recurring streams. Listen to the [RECURRING\_TRANSACTIONS\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#recurring_transactions_update) webhook to be notified when new updates are available. To receive Transactions webhooks for a processor token, set its webhook URL via the [/processor/token/webhook/update](https://plaid.com/docs/api/processor-partners/index.html.md#processortokenwebhookupdate) endpoint. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. **options** (object) An optional object to be used with the request. If specified, options must not be null. **options->personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 /processor/transactions/recurring/get Node▼ ```javascript const request: ProcessorTransactionsGetRequest = { processor_token: processorToken }; try { const response = await client.processorTransactionsRecurringGet(request); let inflowStreams = response.data.inflowStreams; let outflowStreams = response.data.outflowStreams; } } catch((err) => { // handle error } ``` #### Response fields  **inflow\_streams** (\[object\]) An array of depository transaction streams. **inflow\_streams->account\_id** (string) The ID of the account to which the stream belongs **inflow\_streams->stream\_id** (string) A unique id for the stream **inflow\_streams->description** (string) A description of the transaction stream. **inflow\_streams->merchant\_name** (nullable, string) The merchant associated with the transaction stream. **inflow\_streams->first\_date** (string) The posted date of the earliest transaction in the stream. Format: date **inflow\_streams->last\_date** (string) The posted date of the latest transaction in the stream. Format: date **inflow\_streams->predicted\_next\_date** (nullable, string) The predicted date of the next payment. This will only be set if the next payment date can be predicted. Format: date **inflow\_streams->frequency** (string) Describes the frequency of the transaction stream. WEEKLY: Assigned to a transaction stream that occurs approximately every week. BIWEEKLY: Assigned to a transaction stream that occurs approximately every 2 weeks. SEMI\_MONTHLY: Assigned to a transaction stream that occurs approximately twice per month. This frequency is typically seen for inflow transaction streams. MONTHLY: Assigned to a transaction stream that occurs approximately every month. ANNUALLY: Assigned to a transaction stream that occurs approximately every year. UNKNOWN: Assigned to a transaction stream that does not fit any of the pre-defined frequencies. Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, ANNUALLY **inflow\_streams->transaction\_ids** (\[string\]) An array of Plaid transaction IDs belonging to the stream, sorted by posted date. **inflow\_streams->average\_amount** (object) Object with data pertaining to an amount on the transaction stream. **inflow\_streams->average\_amount->amount** (number) Represents the numerical value of an amount. Format: double **inflow\_streams->average\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **inflow\_streams->average\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **inflow\_streams->last\_amount** (object) Object with data pertaining to an amount on the transaction stream. **inflow\_streams->last\_amount->amount** (number) Represents the numerical value of an amount. Format: double **inflow\_streams->last\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **inflow\_streams->last\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **inflow\_streams->is\_active** (boolean) Indicates whether the transaction stream is still live. **inflow\_streams->status** (string) The current status of the transaction stream. MATURE: A MATURE recurring stream should have at least 3 transactions and happen on a regular cadence (For Annual recurring stream, we will mark it MATURE after 2 instances). EARLY\_DETECTION: When a recurring transaction first appears in the transaction history and before it fulfills the requirement of a mature stream, the status will be EARLY\_DETECTION. TOMBSTONED: A stream that was previously in the EARLY\_DETECTION status will move to the TOMBSTONED status when no further transactions were found at the next expected date. UNKNOWN: A stream is assigned an UNKNOWN status when none of the other statuses are applicable. Possible values: UNKNOWN, MATURE, EARLY\_DETECTION, TOMBSTONED **inflow\_streams->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **inflow\_streams->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **inflow\_streams->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **inflow\_streams->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **inflow\_streams->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **inflow\_streams->is\_user\_modified** (deprecated, boolean) As the ability to modify transactions streams has been discontinued, this field will always be false. **outflow\_streams** (\[object\]) An array of expense transaction streams. **outflow\_streams->account\_id** (string) The ID of the account to which the stream belongs **outflow\_streams->stream\_id** (string) A unique id for the stream **outflow\_streams->description** (string) A description of the transaction stream. **outflow\_streams->merchant\_name** (nullable, string) The merchant associated with the transaction stream. **outflow\_streams->first\_date** (string) The posted date of the earliest transaction in the stream. Format: date **outflow\_streams->last\_date** (string) The posted date of the latest transaction in the stream. Format: date **outflow\_streams->predicted\_next\_date** (nullable, string) The predicted date of the next payment. This will only be set if the next payment date can be predicted. Format: date **outflow\_streams->frequency** (string) Describes the frequency of the transaction stream. WEEKLY: Assigned to a transaction stream that occurs approximately every week. BIWEEKLY: Assigned to a transaction stream that occurs approximately every 2 weeks. SEMI\_MONTHLY: Assigned to a transaction stream that occurs approximately twice per month. This frequency is typically seen for inflow transaction streams. MONTHLY: Assigned to a transaction stream that occurs approximately every month. ANNUALLY: Assigned to a transaction stream that occurs approximately every year. UNKNOWN: Assigned to a transaction stream that does not fit any of the pre-defined frequencies. Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, ANNUALLY **outflow\_streams->transaction\_ids** (\[string\]) An array of Plaid transaction IDs belonging to the stream, sorted by posted date. **outflow\_streams->average\_amount** (object) Object with data pertaining to an amount on the transaction stream. **outflow\_streams->average\_amount->amount** (number) Represents the numerical value of an amount. Format: double **outflow\_streams->average\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **outflow\_streams->average\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **outflow\_streams->last\_amount** (object) Object with data pertaining to an amount on the transaction stream. **outflow\_streams->last\_amount->amount** (number) Represents the numerical value of an amount. Format: double **outflow\_streams->last\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **outflow\_streams->last\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **outflow\_streams->is\_active** (boolean) Indicates whether the transaction stream is still live. **outflow\_streams->status** (string) The current status of the transaction stream. MATURE: A MATURE recurring stream should have at least 3 transactions and happen on a regular cadence (For Annual recurring stream, we will mark it MATURE after 2 instances). EARLY\_DETECTION: When a recurring transaction first appears in the transaction history and before it fulfills the requirement of a mature stream, the status will be EARLY\_DETECTION. TOMBSTONED: A stream that was previously in the EARLY\_DETECTION status will move to the TOMBSTONED status when no further transactions were found at the next expected date. UNKNOWN: A stream is assigned an UNKNOWN status when none of the other statuses are applicable. Possible values: UNKNOWN, MATURE, EARLY\_DETECTION, TOMBSTONED **outflow\_streams->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **outflow\_streams->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **outflow\_streams->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **outflow\_streams->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **outflow\_streams->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **outflow\_streams->is\_user\_modified** (deprecated, boolean) As the ability to modify transactions streams has been discontinued, this field will always be false. **updated\_datetime** (string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time transaction streams for the given account were updated on Format: date-time **personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "updated_datetime": "2022-05-01T00:00:00Z", "inflow_streams": [ { "account_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "stream_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nc", "category": null, "category_id": null, "description": "Platypus Payroll", "merchant_name": null, "personal_finance_category": { "primary": "INCOME", "detailed": "INCOME_WAGES", "confidence_level": "UNKNOWN" }, "first_date": "2022-02-28", "last_date": "2022-04-30", "predicted_next_date": "2022-05-15", "frequency": "SEMI_MONTHLY", "transaction_ids": [ "nkeaNrDGrhdo6c4qZWDA8ekuIPuJ4Avg5nKfw", "EfC5ekksdy30KuNzad2tQupW8WIPwvjXGbGHL", "ozfvj3FFgp6frbXKJGitsDzck5eWQH7zOJBYd", "QvdDE8AqVWo3bkBZ7WvCd7LskxVix8Q74iMoK", "uQozFPfMzibBouS9h9tz4CsyvFll17jKLdPAF" ], "average_amount": { "amount": -800, "iso_currency_code": "USD", "unofficial_currency_code": null }, "last_amount": { "amount": -1000, "iso_currency_code": "USD", "unofficial_currency_code": null }, "is_active": true, "status": "MATURE", "is_user_modified": false } ], "outflow_streams": [ { "account_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDff", "stream_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nd", "category": null, "category_id": null, "description": "ConEd Bill Payment", "merchant_name": "ConEd", "personal_finance_category": { "primary": "RENT_AND_UTILITIES", "detailed": "RENT_AND_UTILITIES_GAS_AND_ELECTRICITY", "confidence_level": "UNKNOWN" }, "first_date": "2022-02-04", "last_date": "2022-05-02", "predicted_next_date": "2022-06-02", "frequency": "MONTHLY", "transaction_ids": [ "yhnUVvtcGGcCKU0bcz8PDQr5ZUxUXebUvbKC0", "HPDnUVgI5Pa0YQSl0rxwYRwVXeLyJXTWDAvpR", "jEPoSfF8xzMClE9Ohj1he91QnvYoSdwg7IT8L", "CmdQTNgems8BT1B7ibkoUXVPyAeehT3Tmzk0l" ], "average_amount": { "amount": 85, "iso_currency_code": "USD", "unofficial_currency_code": null }, "last_amount": { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null }, "is_active": true, "status": "MATURE", "is_user_modified": false }, { "account_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDff", "stream_id": "SrBNJZDuUMweodmPmSOeOImwsWt53ZXfJQAfC", "category": null, "category_id": null, "description": "Costco Annual Membership", "merchant_name": "Costco", "personal_finance_category": { "primary": "GENERAL_MERCHANDISE", "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "confidence_level": "UNKNOWN" }, "first_date": "2022-01-23", "last_date": "2023-01-22", "predicted_next_date": "2024-01-22", "frequency": "ANNUALLY", "transaction_ids": [ "yqEBJ72cS4jFwcpxJcDuQr94oAQ1R1lMC33D4", "Kz5Hm3cZCgpn4tMEKUGAGD6kAcxMBsEZDSwJJ" ], "average_amount": { "amount": 120, "iso_currency_code": "USD", "unofficial_currency_code": null }, "last_amount": { "amount": 120, "iso_currency_code": "USD", "unofficial_currency_code": null }, "is_active": true, "status": "MATURE", "is_user_modified": false } ], "request_id": "tbFyCEqkU775ZGG" } ``` \=\*=\*=\*= #### /processor/transactions/refresh  #### Refresh transaction data  [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) is an optional endpoint for users of the Transactions product. It initiates an on-demand extraction to fetch the newest transactions for a processor token. This on-demand extraction takes place in addition to the periodic extractions that automatically occur one or more times per day for any Transactions-enabled processor token. If changes to transactions are discovered after calling [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) , Plaid will fire a webhook: for [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) users, [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#sync_updates_available) will be fired if there are any transactions updated, added, or removed. For users of both [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) and [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) , [TRANSACTIONS\_REMOVED](https://plaid.com/docs/api/products/transactions/index.html.md#transactions_removed) will be fired if any removed transactions are detected, and [DEFAULT\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#default_update) will be fired if any new transactions are detected. New transactions can be fetched by calling [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) or [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) . Note that the [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) endpoint is not supported for Capital One (`ins_128026`) non-depository accounts and will result in a `PRODUCTS_NOT_SUPPORTED` error if called on an Item that contains only non-depository accounts from that institution. As this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests. [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) is offered as an add-on to Transactions and has a separate [fee model](https://plaid.com/docs/account/billing/index.html.md#per-request-flat-fee) . To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **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. /processor/transactions/refresh Node▼ ```javascript const request: ProcessorTransactionsRefreshRequest = { processor_token: processorToken, }; try { await plaidClient.processorTransactionsRefresh(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "1vwmF5TBQwiqfwP" } ``` Processor webhooks  ------------------- \=\*=\*=\*= #### WEBHOOK\_UPDATE\_ACKNOWLEDGED  This webhook is only sent to [Plaid processor partners](https://plaid.com/docs/auth/partnerships/index.html.md) . Fired when a processor updates the webhook URL for a processor token via [/processor/token/webhook/update](https://plaid.com/docs/api/processor-partners/index.html.md#processortokenwebhookupdate) . #### Properties  **webhook\_type** (string) PROCESSOR\_TOKEN **webhook\_code** (string) WEBHOOK\_UPDATE\_ACKNOWLEDGED **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **account\_id** (string) The ID of the account. **new\_webhook\_url** (string) The new webhook URL. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "PROCESSOR_TOKEN", "webhook_code": "WEBHOOK_UPDATE_ACKNOWLEDGED", "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "new_webhook_url": "https://www.example.com", "error": null, "environment": "production" } ``` --- # API - Processor tokens | Plaid Docs Processor token endpoints  ========================== #### API reference for endpoints for use with Plaid partners  Processor token endpoints are used to create tokens that are then sent to a Plaid partner for use in a Plaid integration. For a full list of integrations, see the [Plaid Dashboard](https://dashboard.plaid.com/developers/integrations) . For specific information on Auth integrations, see [Auth payment partners](https://plaid.com/docs/auth/partnerships/index.html.md) . Are you a Plaid processor partner looking for API docs? The documentation on API endpoints for use by partners has moved to [Processor partner endpoints](https://plaid.com/docs/api/processor-partners/index.html.md) . | In this section | | | --- | --- | | [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) | Create a processor token | | [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) | Create a bank account token for use with Stripe | | [/processor/token/permissions/set](https://plaid.com/docs/api/processors/index.html.md#processortokenpermissionsset) | Set product permissions for a processor token | | [/processor/token/permissions/get](https://plaid.com/docs/api/processors/index.html.md#processortokenpermissionsget) | Get product permissions for a processor token | | See also | | | --- | --- | | [/sandbox/processor\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxprocessor_tokencreate) | Create a test Item and processor token (Sandbox only) | \=\*=\*=\*= #### /processor/token/create  #### Create processor token  Used to create a token suitable for sending to one of Plaid's partners to enable integrations. Note that Stripe partnerships use bank account tokens instead; see [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) for creating tokens for use with Stripe integrations. If using multiple processors, multiple different processor tokens can be created for a single access token. Once created, a processor token for a given Item can be modified by calling [/processor/token/permissions/set](https://plaid.com/docs/api/processors/index.html.md#processortokenpermissionsset) . To revoke the processor's access, the entire Item must be deleted by calling [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **account\_id** (required, string) The account\_id value obtained from the onSuccess callback in Link **processor** (required, string) The processor you are integrating with. Possible values: dwolla, galileo, modern\_treasury, ocrolus, vesta, drivewealth, vopay, achq, check, checkbook, circle, sila\_money, rize, svb\_api, unit, wyre, lithic, alpaca, astra, moov, treasury\_prime, marqeta, checkout, solid, highnote, gemini, apex\_clearing, gusto, adyen, atomic, i2c, wepay, riskified, utb, adp\_roll, fortress\_trust, bond, bakkt, teal, zero\_hash, taba\_pay, knot, sardine, alloy, finix, nuvei, layer, boom, paynote, stake, wedbush, esusu, ansa, scribeup, straddle, loanpro, bloom\_credit, sfox, brale, parafin, cardless, open\_ledger, valon, gainbridge, cardlytics, pinwheel, thread\_bank /processor/token/create Node▼ ```javascript const { Configuration, PlaidApi, PlaidEnvironments, ProcessorTokenCreateRequest, } = require('plaid'); // Change sandbox to development to test with live users; // Change to production when you're ready to go live! const configuration = new Configuration({ basePath: PlaidEnvironments.sandbox, baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, 'Plaid-Version': '2020-09-14', }, }, }); const plaidClient = new PlaidApi(configuration); try { // Exchange the public_token from Plaid Link for an access token. const tokenResponse = await plaidClient.itemPublicTokenExchange({ public_token: PUBLIC_TOKEN, }); const accessToken = tokenResponse.data.access_token; // Create a processor token for a specific account id. const request: ProcessorTokenCreateRequest = { access_token: accessToken, account_id: accountID, processor: 'dwolla', }; const processorTokenResponse = await plaidClient.processorTokenCreate( request, ); const processorToken = processorTokenResponse.data.processor_token; } catch (error) { // handle error } ``` #### Response fields  **processor\_token** (string) The processor\_token that can then be used by the Plaid partner to make API requests **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "processor_token": "processor-sandbox-0asd1-a92nc", "request_id": "xrQNYZ7Zoh6R7gV" } ``` \=\*=\*=\*= #### /processor/token/permissions/set  #### Control a processor's access to products  Used to control a processor's access to products on the given processor token. By default, a processor will have access to all available products on the corresponding item. To restrict access to a particular set of products, call this endpoint with the desired products. To restore access to all available products, call this endpoint with an empty list. This endpoint can be called multiple times as your needs and your processor's needs change. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- **products** (required, \[string\]) A list of products the processor token should have access to. An empty list will grant access to all products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank /processor/token/permissions/set Node▼ ```javascript try { const request: ProcessorTokenPermissionsSetRequest = { processor_token: processorToken, products: ['auth', 'balance', 'identity'], }; const response = await plaidClient.processorTokenPermissionsSet(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "xrQNYZ7Zoh6R7gV" } ``` \=\*=\*=\*= #### /processor/token/permissions/get  #### Get a processor token's product permissions  Used to get a processor token's product permissions. The `products` field will be an empty list if the processor can access all available products. #### Request fields  **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. **processor\_token** (required, string) The processor token obtained from the Plaid integration partner. Processor tokens are in the format: processor-- /processor/token/permissions/get Node▼ ```javascript try { const request: ProcessorTokenPermissionsGetRequest = { processor_token: processorToken, }; const response = await plaidClient.processorTokenPermissionsGet(request); const products = response.data.products; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **products** (\[string\]) A list of products the processor token should have access to. An empty list means that the processor has access to all available products, including future products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank Response Object ```json { "request_id": "xrQNYZ7Zoh6R7gV", "products": [ "auth", "balance", "identity" ] } ``` \=\*=\*=\*= #### /processor/stripe/bank\_account\_token/create  #### Create Stripe bank account token  Used to create a token suitable for sending to Stripe to enable Plaid-Stripe integrations. For a detailed guide on integrating Stripe, see [Add Stripe to your app](https://plaid.com/docs/auth/partnerships/stripe/index.html.md) . Note that the Stripe bank account token is a one-time use token. To store bank account information for later use, you can use a Stripe customer object and create an associated bank account from the token, or you can use a Stripe Custom account and create an associated external bank account from the token. This bank account information should work indefinitely, unless the user's bank account information changes or they revoke Plaid's permissions to access their account. Stripe bank account information cannot be modified once the bank account token has been created. If you ever need to change the bank account details used by Stripe for a specific customer, have the user go through Link again and create a new bank account token from the new `access_token`. To revoke a bank account token, the entire underlying access token must be revoked using [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **account\_id** (required, string) The account\_id value obtained from the onSuccess callback in Link /processor/stripe/bank\_account\_token/create Node▼ ```javascript // Change sandbox to development to test with live users and change // to production when you're ready to go live! const { Configuration, PlaidApi, PlaidEnvironments, ProcessorStripeBankAccountTokenCreateRequest, } = require('plaid'); const configuration = new Configuration({ basePath: PlaidEnvironments[process.env.PLAID_ENV], baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, 'Plaid-Version': '2020-09-14', }, }, }); const plaidClient = new PlaidApi(configuration); try { // Exchange the public_token from Plaid Link for an access token. const tokenResponse = await plaidClient.itemPublicTokenExchange({ public_token: PUBLIC_TOKEN, }); const accessToken = tokenResponse.data.access_token; // Generate a bank account token const request: ProcessorStripeBankAccountTokenCreateRequest = { access_token: accessToken, account_id: accountID, }; const stripeTokenResponse = await plaidClient.processorStripeBankAccountTokenCreate( request, ); const bankAccountToken = stripeTokenResponse.data.stripe_bank_account_token; } catch (error) { // handle error } ``` #### Response fields  **stripe\_bank\_account\_token** (string) A token that can be sent to Stripe for use in making API calls to Plaid **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "stripe_bank_account_token": "btok_5oEetfLzPklE1fwJZ7SG", "request_id": "xrQNYZ7Zoh6R7gV" } ``` --- # API - Assets | Plaid Docs Assets  ======= #### API reference for Assets endpoints and webhooks  Create, delete, retrieve and share Asset Reports with information about a user's assets and transactions. For how-to guidance on Asset Reports, see the [Assets documentation](https://plaid.com/docs/assets/index.html.md) . All the endpoints on this page are also compatible with [Financial Insights Reports (UK only)](https://plaid.com/docs/assets/index.html.md#financial-insights-reports-uk-only) and will automatically operate on Financial Insights Reports instead of Asset Reports if the Financial Insights Report add-on has been enabled. | Endpoints | | | --- | --- | | [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) | Create an Asset Report | | [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) | Get an Asset Report | | [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) | Get a PDF Asset Report | | [/asset\_report/refresh](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportrefresh) | Create an updated Asset Report | | [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) | Filter unneeded accounts from an Asset Report | | [/asset\_report/remove](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportremove) | Delete an asset report | | [/asset\_report/audit\_copy/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportaudit_copycreate) | Create an Audit Copy of an Asset Report for sharing | | [/asset\_report/audit\_copy/remove](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportaudit_copyremove) | Delete an Audit Copy of an Asset Report | | [/credit/relay/create](https://plaid.com/docs/api/products/assets/index.html.md#creditrelaycreate) | Create a relay token of an Asset Report for sharing (beta) | | [/credit/relay/get](https://plaid.com/docs/api/products/assets/index.html.md#creditrelayget) | Retrieve the report associated with a relay token (beta) | | [/credit/relay/refresh](https://plaid.com/docs/api/products/assets/index.html.md#creditrelayrefresh) | Refresh a report of a relay token (beta) | | [/credit/relay/remove](https://plaid.com/docs/api/products/assets/index.html.md#creditrelayremove) | Delete a relay token (beta) | | Webhooks | | | --- | --- | | [PRODUCT\_READY](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) | Asset Report generation has completed | | [ERROR](https://plaid.com/docs/api/products/assets/index.html.md#error) | Asset Report generation has failed | ### Endpoints  \=\*=\*=\*= #### /asset\_report/create  #### Create an Asset Report  The [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) endpoint initiates the process of creating an Asset Report, which can then be retrieved by passing the `asset_report_token` return value to the [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) or [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) endpoints. The Asset Report takes some time to be created and is not available immediately after calling [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) . The exact amount of time to create the report will vary depending on how many days of history are requested and will typically range from a few seconds to about one minute. When the Asset Report is ready to be retrieved using [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) or [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) , Plaid will fire a `PRODUCT_READY` webhook. For full details of the webhook schema, see [Asset Report webhooks](https://plaid.com/docs/api/products/assets/index.html.md#webhooks) . The [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) endpoint creates an Asset Report at a moment in time. Asset Reports are immutable. To get an updated Asset Report, use the [/asset\_report/refresh](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportrefresh) endpoint. #### Request fields  **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\_tokens** (\[string\]) An array of access tokens corresponding to the Items that will be included in the report. The assets product must have been initialized for the Items during link; the Assets product cannot be added after initialization. Min items: 1 Max items: 99 **days\_requested** (required, integer) The maximum integer number of days of history to include in the Asset Report. If using Fannie Mae Day 1 Certainty, days\_requested must be at least 61 for new originations or at least 31 for refinancings. An Asset Report requested with "Additional History" (that is, with more than 61 days of transaction history) will incur an Additional History fee. Maximum: 731 Minimum: 0 **options** (object) An optional object to filter /asset\_report/create results. If provided, must be non-null. The optional user object is required for the report to be eligible for Fannie Mae's Day 1 Certainty program. **options->client\_report\_id** (string) Client-generated identifier, which can be used by lenders to track loan applications. **options->webhook** (string) URL to which Plaid will send Assets webhooks, for example when the requested Asset Report is ready. Format: url **options->add\_ons** (\[string\]) A list of add-ons that should be included in the Asset Report. When Fast Assets is requested, Plaid will create two versions of the Asset Report: the Fast Asset Report, which will contain only Identity and Balance information, and the Full Asset Report, which will also contain Transactions information. A PRODUCT\_READY webhook will be fired for each Asset Report when it is ready, and the report\_type field will indicate whether the webhook is firing for the full or fast Asset Report. To retrieve the Fast Asset Report, call /asset\_report/get with fast\_report set to true. There is no additional charge for using Fast Assets. To create a Fast Asset Report, Plaid must successfully retrieve both Identity and Balance data; if Plaid encounters an error obtaining this data, the Fast Asset Report will not be created. However, as long as Plaid can obtain Transactions data, the Full Asset Report will still be available. When Investments is requested, investments must be specified in the optional\_products array when initializing Link. Possible values: investments, fast\_assets **options->user** (object) The user object allows you to provide additional information about the user to be appended to the Asset Report. All fields are optional. The first\_name, last\_name, and ssn fields are required if you would like the Report to be eligible for Fannie Mae’s Day 1 Certainty™ program. **options->user->client\_user\_id** (string) An identifier you determine and submit for the user. **options->user->first\_name** (string) The user's first name. Required for the Fannie Mae Day 1 Certainty™ program. **options->user->middle\_name** (string) The user's middle name **options->user->last\_name** (string) The user's last name. Required for the Fannie Mae Day 1 Certainty™ program. **options->user->ssn** (string) The user's Social Security Number. Required for the Fannie Mae Day 1 Certainty™ program. Format: "ddd-dd-dddd" **options->user->phone\_number** (string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14151234567". Phone numbers provided in other formats will be parsed on a best-effort basis. **options->user->email** (string) The user's email address. **options->require\_all\_items** (boolean) If set to false, only 1 item must be healthy at the time of report creation. The default value is true, which would require all items to be healthy at the time of report creation. Default: true /asset\_report/create Node▼ ```javascript const daysRequested = 90; const options = { client_report_id: '123', webhook: 'https://www.example.com', user: { client_user_id: '7f57eb3d2a9j6480121fx361', first_name: 'Jane', middle_name: 'Leah', last_name: 'Doe', ssn: '123-45-6789', phone_number: '(555) 123-4567', email: 'jane.doe@example.com', }, }; const request: AssetReportCreateRequest = { access_tokens: [accessToken], days_requested, options, }; // accessTokens is an array of Item access tokens. // Note that the assets product must be enabled for all Items. // All fields on the options object are optional. try { const response = await plaidClient.assetReportCreate(request); const assetReportId = response.data.asset_report_id; const assetReportToken = response.data.asset_report_token; } catch (error) { // handle error } ``` #### Response fields  **asset\_report\_token** (string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **asset\_report\_id** (string) A unique ID identifying an Asset Report. Like all Plaid identifiers, this ID is case sensitive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "asset_report_token": "assets-sandbox-6f12f5bb-22dd-4855-b918-f47ec439198a", "asset_report_id": "1f414183-220c-44f5-b0c8-bc0e6d4053bb", "request_id": "Iam3b" } ``` \=\*=\*=\*= #### /asset\_report/get  #### Retrieve an Asset Report  The [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) endpoint retrieves the Asset Report in JSON format. Before calling [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) , you must first create the Asset Report using [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) (or filter an Asset Report using [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) ) and then wait for the [PRODUCT\_READY](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) webhook to fire, indicating that the Report is ready to be retrieved. By default, an Asset Report includes transaction descriptions as returned by the bank, as opposed to parsed and categorized by Plaid. You can also receive cleaned and categorized transactions, as well as additional insights like merchant name or location information. We call this an Asset Report with Insights. An Asset Report with Insights provides transaction category, location, and merchant information in addition to the transaction strings provided in a standard Asset Report. To retrieve an Asset Report with Insights, call [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) endpoint with `include_insights` set to `true`. For latency-sensitive applications, you can optionally call [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) with `options.add_ons` set to `["fast_assets"]`. This will cause Plaid to create two versions of the Asset Report: one with only current and available balance and identity information, and then later on the complete Asset Report. You will receive separate webhooks for each version of the Asset Report. #### Request fields  **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. **asset\_report\_token** (string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **include\_insights** (boolean) true if you would like to retrieve the Asset Report with Insights, false otherwise. This field defaults to false if omitted. Default: false **fast\_report** (boolean) true to fetch "fast" version of asset report. Defaults to false if omitted. Can only be used if /asset\_report/create was called with options.add\_ons set to \["fast\_assets"\]. Default: false **options** (object) An optional object to filter or add data to /asset\_report/get results. If provided, must be non-null. **options->days\_to\_include** (integer) The maximum number of days of history to include in the Asset Report. Maximum: 731 Minimum: 0 /asset\_report/get Node▼ ```javascript const request: request = { asset_report_token: assetReportToken, include_insights: true, }; try { const response = await plaidClient.assetReportGet(request); const assetReportId = response.data.asset_report_id; } catch (error) { if (error.data.error_code == 'PRODUCT_NOT_READY') { // Asset report is not ready yet. Try again later } else { // handle error } } ``` #### Response fields  **report** (object) An object representing an Asset Report **report->asset\_report\_id** (string) A unique ID identifying an Asset Report. Like all Plaid identifiers, this ID is case sensitive. **report->insights** (nullable, object) This is a container object for all lending-related insights. This field will be returned only for European customers. **report->insights->risk** (nullable, object) Risk indicators focus on providing signal on the possibility of a borrower defaulting on their loan repayments by providing data points related to its payment behavior, debt, and other relevant financial information, helping lenders gauge the level of risk involved in a certain operation. **report->insights->risk->bank\_penalties** (nullable, object) Insights into bank penalties and fees, including overdraft fees, NSF fees, and other bank-imposed charges. **report->insights->risk->bank\_penalties->amount** (nullable, number) The total value of outflow transactions categorized as BANK\_PENALTIES, across all the accounts in the report within the requested time window. Format: double **report->insights->risk->bank\_penalties->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->bank\_penalties->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->bank\_penalties->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->insights->risk->bank\_penalties->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->risk->bank\_penalties->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->risk->bank\_penalties->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->risk->bank\_penalties->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->bank\_penalties->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->bank\_penalties->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->transactions\_count** (nullable, integer) The total number of transactions that fall into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->insights->risk->bank\_penalties->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->insights->risk->bank\_penalties->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->bank\_penalties->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->insights->risk->bank\_penalties->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into the BANK\_PENALTIES credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->insights->risk->gambling** (nullable, object) Insights into gambling-related transactions, including frequency, amounts, and top merchants. **report->insights->risk->gambling->amount** (nullable, number) The total value of transactions that fall into the GAMBLING credit category, across all the accounts in the report. Format: double **report->insights->risk->gambling->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->gambling->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->gambling->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->gambling->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->gambling->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->gambling->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->gambling->top\_merchants** (\[string\]) Up to 3 top merchants that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any merchants in the given time window, this list will be empty. **report->insights->risk->gambling->transactions\_count** (nullable, integer) The total number of transactions that fall into the GAMBLING credit category, across all the accounts in the report. **report->insights->risk->gambling->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. **report->insights->risk->gambling->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->gambling->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->gambling->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->gambling->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->gambling->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->gambling->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->gambling->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the GAMBLING category, across all the accounts in the report. **report->insights->risk->gambling->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the GAMBLING credit category. If there's no available income for the given time period, this field value will be -1 Format: double **report->insights->risk->loan\_disbursements** (nullable, object) Insights into loan disbursement transactions received by the user, tracking incoming funds from loan providers. **report->insights->risk->loan\_disbursements->amount** (nullable, number) The total value of inflow transactions categorized as LOAN\_DISBURSEMENTS, across all the accounts in the report within the requested time window. Format: double **report->insights->risk->loan\_disbursements->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_disbursements->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->risk->loan\_disbursements->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->risk->loan\_disbursements->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->risk->loan\_disbursements->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_disbursements->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_disbursements->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_disbursements->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_disbursements->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has received money from any provider in the given time window, this list will be empty. **report->insights->risk->loan\_disbursements->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_disbursements->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_DISBURSEMENTS category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_disbursements->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_disbursements->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_disbursements->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was received on transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_DISBURSEMENTS credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->insights->risk->loan\_payments** (nullable, object) Insights into loan payment transactions made by the user, tracking outgoing payments to loan providers. **report->insights->risk->loan\_payments->amount** (nullable, number) The total value of outflow transactions categorized as LOAN\_PAYMENTS, across all the accounts in the report within the requested time window. Format: double **report->insights->risk->loan\_payments->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_payments->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_payments->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_payments->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->risk->loan\_payments->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->risk->loan\_payments->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->risk->loan\_payments->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_payments->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_payments->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any provider in the given time window, this list will be empty. **report->insights->risk->loan\_payments->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_payments->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_payments->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_payments->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_payments->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_PAYMENTS credit category. If there's no available income for the giving time period, this field value will be -1 Format: double **report->insights->risk->negative\_balance** (nullable, object) Insights into negative balance occurrences, including frequency, duration, and minimum balance details. **report->insights->risk->negative\_balance->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that caused any account in the report to have a negative balance. This value is inclusive of the date of the last negative balance, meaning that if the last negative balance occurred today, this value will be 0. **report->insights->risk->negative\_balance->days\_with\_negative\_balance** (nullable, integer) The number of aggregated days that the accounts in the report has had a negative balance within the given time window. **report->insights->risk->negative\_balance->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->negative\_balance->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->negative\_balance->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->negative\_balance->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->negative\_balance->occurrences** (\[object\]) The summary of the negative balance occurrences for this account. If the user has not had a negative balance in the account in the given time window, this list will be empty. **report->insights->risk->negative\_balance->occurrences->start\_date** (nullable, string) The date of the first transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->negative\_balance->occurrences->end\_date** (nullable, string) The date of the last transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). This date is inclusive, meaning that this was the last date that the account had a negative balance. Format: date **report->insights->risk->negative\_balance->occurrences->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->negative\_balance->occurrences->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->negative\_balance->occurrences->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->negative\_balance->occurrences->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability** (nullable, object) Affordability insights focus on providing signal on the ability of a borrower to repay their loan without experiencing financial strain. It provides insights on factors such a user's monthly income and expenses, disposable income, average expenditure, etc., helping lenders gauge the level of affordability of a borrower. **report->insights->affordability->expenditure** (nullable, object) Comprehensive analysis of spending patterns, categorizing expenses into essential, non-essential, and other categories. **report->insights->affordability->expenditure->cash\_flow** (nullable, object) Net cash flow for the period (inflows minus outflows), including a monthly average. **report->insights->affordability->expenditure->cash\_flow->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->cash\_flow->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->cash\_flow->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->total\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->total\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->total\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->total\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->total\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->total\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->total\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->non\_essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->non\_essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->other->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->other->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->other->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->other->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->other->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->other->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->other->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->other->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->other->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->other->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->other->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->other->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->transfers\_out->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->transfers\_out->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->transfers\_out->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->transfers\_out->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->transfers\_out->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->transfers\_out->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->transfers\_out->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->transfers\_out->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->transfers\_out->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->transfers\_out->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->outlier\_transactions** (nullable, object) Insights into unusually large transactions that exceed typical spending patterns for the account. **report->insights->affordability->expenditure->outlier\_transactions->transactions\_count** (nullable, integer) The total number of transactions whose value is above the threshold of normal amounts for a given account. **report->insights->affordability->expenditure->outlier\_transactions->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->affordability->expenditure->outlier\_transactions->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->affordability->expenditure->outlier\_transactions->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->outlier\_transactions->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories** (\[object\]) Up to 3 top categories of expenses in this group. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->income** (nullable, object) Comprehensive income analysis including total income, income excluding transfers, and inbound transfer amounts. **report->insights->affordability->income->total\_income** (nullable, object) The total amount of all income transactions in the given time period. **report->insights->affordability->income->total\_income->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->affordability->income->total\_income->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->income->total\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->income->income\_excluding\_transfers** (nullable, object) Income excluding account transfer transactions for the period, including a monthly average. **report->insights->affordability->income->income\_excluding\_transfers->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->income->income\_excluding\_transfers->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->income->income\_excluding\_transfers->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->income->transfers\_in** (nullable, object) Sum of inbound transfer transactions for the period, including a monthly average. **report->insights->affordability->income->transfers\_in->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->income->transfers\_in->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->income->transfers\_in->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->client\_report\_id** (nullable, string) An identifier you determine and submit for the Asset Report. **report->date\_generated** (string) The date and time when the Asset Report was created, in ISO 8601 format (e.g. "2018-04-12T03:32:11Z"). Format: date-time **report->days\_requested** (number) The duration of transaction history you requested **report->user** (object) The user object allows you to provide additional information about the user to be appended to the Asset Report. All fields are optional. The first\_name, last\_name, and ssn fields are required if you would like the Report to be eligible for Fannie Mae’s Day 1 Certainty™ program. **report->user->client\_user\_id** (nullable, string) An identifier you determine and submit for the user. **report->user->first\_name** (nullable, string) The user's first name. Required for the Fannie Mae Day 1 Certainty™ program. **report->user->middle\_name** (nullable, string) The user's middle name **report->user->last\_name** (nullable, string) The user's last name. Required for the Fannie Mae Day 1 Certainty™ program. **report->user->ssn** (nullable, string) The user's Social Security Number. Required for the Fannie Mae Day 1 Certainty™ program. Format: "ddd-dd-dddd" **report->user->phone\_number** (nullable, string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14151234567". Phone numbers provided in other formats will be parsed on a best-effort basis. **report->user->email** (nullable, string) The user's email address. **report->items** (\[object\]) Data returned by Plaid about each of the Items included in the Asset Report. **report->items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **report->items->institution\_name** (string) The full financial institution name associated with the Item. **report->items->institution\_id** (string) The id of the financial institution associated with the Item. **report->items->date\_last\_updated** (string) The date and time when this Item’s data was last retrieved from the financial institution, in ISO 8601 format. Format: date-time **report->items->accounts** (\[object\]) Data about each of the accounts open on the Item. **report->items->accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->items->accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get. **report->items->accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get. If current is null this field is guaranteed not to be null. Format: double **report->items->accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **report->items->accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **report->items->accounts->balances->margin\_loan\_amount** (nullable, number) The total amount of borrowed funds in the account, as determined by the financial institution. For investment-type accounts, the margin balance is the total value of borrowed assets in the account, as presented by the institution. This is commonly referred to as margin or a loan. Format: double **report->items->accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only used and expected when the institution is ins\_128026 (Capital One) and the Item contains one or more accounts with a non-depository account type, in which case a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For Capital One depository accounts as well as all other account types on all other institutions, this field is ignored. See account type schema for a full list of account types. If the balance that is pulled is older than the given timestamp for Items with this field required, an INVALID\_REQUEST error with the code of LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned with the most recent timestamp for the requested account contained in the response. Format: date-time **report->items->accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **report->items->accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **report->items->accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **report->items->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **report->items->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **report->items->accounts->verification\_status** (string) The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. 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 micro-deposit. 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, manually\_verified, verification\_expired, verification\_failed, database\_matched **report->items->accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This is currently an opt-in field and only supported for Chase Items. **report->items->accounts->days\_available** (number) The duration of transaction history available within this report for this Item, typically defined as the time since the date of the earliest transaction in that account. **report->items->accounts->transactions** (\[object\]) Transaction history associated with the account. **report->items->accounts->transactions->account\_id** (string) The ID of the account in which this transaction occurred. **report->items->accounts->transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. Format: double **report->items->accounts->transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **report->items->accounts->transactions->category** (nullable, \[string\]) A hierarchical array of the categories to which this transaction belongs. For a full list of categories, see /categories/get. This field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->category\_id** (nullable, string) The ID of the category to which this transaction belongs. For a full list of categories, see /categories/get. This field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->credit\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for credit use cases, but not limited to such use cases. See the taxonomy csv file for a full list of credit categories. **report->items->accounts->transactions->credit\_category->primary** (string) A high level category that communicates the broad category of the transaction. **report->items->accounts->transactions->credit\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **report->items->accounts->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **report->items->accounts->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **report->items->accounts->transactions->date\_transacted** (nullable, string) The date on which the transaction took place, in IS0 8601 format. **report->items->accounts->transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **report->items->accounts->transactions->location->address** (nullable, string) The street address where the transaction occurred. **report->items->accounts->transactions->location->city** (nullable, string) The city where the transaction occurred. **report->items->accounts->transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **report->items->accounts->transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **report->items->accounts->transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **report->items->accounts->transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **report->items->accounts->transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **report->items->accounts->transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **report->items->accounts->transactions->name** (deprecated, string) The merchant name or transaction description. This is a legacy field that is no longer maintained. For merchant name, use the merchant\_name field. For description, use the original\_description field. This field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **report->items->accounts->transactions->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **report->items->accounts->transactions->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **report->items->accounts->transactions->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **report->items->accounts->transactions->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **report->items->accounts->transactions->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **report->items->accounts->transactions->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **report->items->accounts->transactions->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **report->items->accounts->transactions->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **report->items->accounts->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->items->accounts->transactions->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. **report->items->accounts->transactions->account\_owner** (nullable, string) The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts. **report->items->accounts->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->items->accounts->transactions->transaction\_type** (string) digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **report->items->accounts->investments** (object) A set of fields describing the investments data on an account. **report->items->accounts->investments->holdings** (\[object\]) Quantities and values of securities held in the investment account. Map to the securities array for security details. **report->items->accounts->investments->holdings->account\_id** (string) The Plaid account\_id associated with the holding. **report->items->accounts->investments->holdings->security\_id** (string) The Plaid security\_id associated with the holding. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data. The security\_id for the same security will typically be the same across different institutions, but this is not guaranteed. The security\_id does not typically change, but may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **report->items->accounts->investments->holdings->ticker\_symbol** (nullable, string) The holding's trading symbol for publicly traded holdings, and otherwise a short identifier if available. **report->items->accounts->investments->holdings->institution\_price** (number) The last price given by the institution for this security. Format: double **report->items->accounts->investments->holdings->institution\_price\_as\_of** (nullable, string) The date at which institution\_price was current. Format: date **report->items->accounts->investments->holdings->institution\_value** (number) The value of the holding, as reported by the institution. Format: double **report->items->accounts->investments->holdings->cost\_basis** (nullable, number) The original total value of the holding. This field is calculated by Plaid as the sum of the purchase price of all of the shares in the holding. Format: double **report->items->accounts->investments->holdings->quantity** (number) The total quantity of the asset held, as reported by the financial institution. If the security is an option, quantity will reflect the total number of options (typically the number of contracts multiplied by 100), not the number of contracts. Format: double **report->items->accounts->investments->holdings->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the holding. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->investments->holdings->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **report->items->accounts->investments->securities** (\[object\]) Details of specific securities held in on the investment account. **report->items->accounts->investments->securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **report->items->accounts->investments->securities->name** (nullable, string) A descriptive name for the security, suitable for display. **report->items->accounts->investments->securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **report->items->accounts->investments->securities->type** (nullable, string) The security type of the holding. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **report->items->accounts->investments->transactions** (\[object\]) Transaction history on the investment account. **report->items->accounts->investments->transactions->investment\_transaction\_id** (string) The ID of the Investment transaction, unique across all Plaid transactions. Like all Plaid identifiers, the investment\_transaction\_id is case sensitive. **report->items->accounts->investments->transactions->account\_id** (string) The account\_id of the account against which this transaction posted. **report->items->accounts->investments->transactions->security\_id** (nullable, string) The security\_id to which this transaction is related. **report->items->accounts->investments->transactions->date** (string) The ISO 8601 posting date for the transaction. Format: date **report->items->accounts->investments->transactions->name** (string) The institution’s description of the transaction. **report->items->accounts->investments->transactions->quantity** (number) The number of units of the security involved in this transaction. Positive for buy transactions; negative for sell transactions. Format: double **report->items->accounts->investments->transactions->vested\_quantity** (number) The total quantity of vested assets held, as reported by the financial institution. Vested assets are only associated with equities. Format: double **report->items->accounts->investments->transactions->vested\_value** (number) The value of the vested holdings as reported by the institution. Format: double **report->items->accounts->investments->transactions->amount** (number) The complete value of the transaction. Positive values when cash is debited, e.g. purchases of stock; negative values when cash is credited, e.g. sales of stock. Treatment remains the same for cash-only movements unassociated with securities. Format: double **report->items->accounts->investments->transactions->price** (number) The price of the security at which this transaction occurred. Format: double **report->items->accounts->investments->transactions->fees** (nullable, number) The combined value of all fees applied to this transaction Format: double **report->items->accounts->investments->transactions->type** (string) Value is one of the following: buy: Buying an investment sell: Selling an investment cancel: A cancellation of a pending transaction cash: Activity that modifies a cash position fee: A fee on the account transfer: Activity which modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transfer For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: buy, sell, cancel, cash, fee, transfer **report->items->accounts->investments->transactions->subtype** (string) For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: account fee, adjustment, assignment, buy, buy to cover, contribution, deposit, distribution, dividend, dividend reinvestment, exercise, expire, fund fee, interest, interest receivable, interest reinvestment, legal fee, loan payment, long-term capital gain, long-term capital gain reinvestment, management fee, margin expense, merger, miscellaneous fee, non-qualified dividend, non-resident tax, pending credit, pending debit, qualified dividend, rebalance, return of principal, request, sell, sell short, send, short-term capital gain, short-term capital gain reinvestment, spin off, split, stock distribution, tax, tax withheld, trade, transfer, transfer fee, trust fee, unqualified gain, withdrawal **report->items->accounts->investments->transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->investments->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **report->items->accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners.For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. In API versions 2018-05-22 and earlier, the owners object is not returned, and instead identity information is returned in the top level identity object. For more details, see Plaid API versioning **report->items->accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **report->items->accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->phone\_numbers->data** (string) The phone number. **report->items->accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **report->items->accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **report->items->accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->emails->data** (string) The email address. **report->items->accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **report->items->accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **report->items->accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->addresses->data** (object) Data about the components comprising an address. **report->items->accounts->owners->addresses->data->city** (nullable, string) The full city name **report->items->accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **report->items->accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **report->items->accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **report->items->accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **report->items->accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **report->items->accounts->ownership\_type** (nullable, string) How an asset is owned. association: Ownership by a corporation, partnership, or unincorporated association, including for-profit and not-for-profit organizations. individual: Ownership by an individual. joint: Joint ownership by multiple parties. trust: Ownership by a revocable or irrevocable trust. Possible values: null, individual, joint, association, trust **report->items->accounts->historical\_balances** (\[object\]) Calculated data about the historical balances on the account. Available for credit and depository type accounts. **report->items->accounts->historical\_balances->date** (string) The date of the calculated historical balance, in an ISO 8601 format (YYYY-MM-DD) Format: date **report->items->accounts->historical\_balances->current** (number) The total amount of funds in the account, calculated from the current balance in the balance object by subtracting inflows and adding back outflows according to the posted date of each transaction. If the account has any pending transactions, historical balance amounts on or after the date of the earliest pending transaction may differ if retrieved in subsequent Asset Reports as a result of those pending transactions posting. Format: double **report->items->accounts->historical\_balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->historical\_balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights** (nullable, object) This is a container object for all lending-related insights. This field will be returned only for European customers. **report->items->accounts->account\_insights->risk** (nullable, object) Risk indicators focus on providing signal on the possibility of a borrower defaulting on their loan repayments by providing data points related to its payment behavior, debt, and other relevant financial information, helping lenders gauge the level of risk involved in a certain operation. **report->items->accounts->account\_insights->risk->bank\_penalties** (nullable, object) Insights into bank penalties and fees, including overdraft fees, NSF fees, and other bank-imposed charges. **report->items->accounts->account\_insights->risk->bank\_penalties->amount** (nullable, number) The total value of outflow transactions categorized as BANK\_PENALTIES, across all the accounts in the report within the requested time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->transactions\_count** (nullable, integer) The total number of transactions that fall into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into the BANK\_PENALTIES credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->risk->gambling** (nullable, object) Insights into gambling-related transactions, including frequency, amounts, and top merchants. **report->items->accounts->account\_insights->risk->gambling->amount** (nullable, number) The total value of transactions that fall into the GAMBLING credit category, across all the accounts in the report. Format: double **report->items->accounts->account\_insights->risk->gambling->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->gambling->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->gambling->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->gambling->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->gambling->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->gambling->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->gambling->top\_merchants** (\[string\]) Up to 3 top merchants that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any merchants in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->gambling->transactions\_count** (nullable, integer) The total number of transactions that fall into the GAMBLING credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->gambling->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the GAMBLING category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->gambling->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the GAMBLING credit category. If there's no available income for the given time period, this field value will be -1 Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements** (nullable, object) Insights into loan disbursement transactions received by the user, tracking incoming funds from loan providers. **report->items->accounts->account\_insights->risk->loan\_disbursements->amount** (nullable, number) The total value of inflow transactions categorized as LOAN\_DISBURSEMENTS, across all the accounts in the report within the requested time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has received money from any provider in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->loan\_disbursements->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_DISBURSEMENTS category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was received on transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_DISBURSEMENTS credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->risk->loan\_payments** (nullable, object) Insights into loan payment transactions made by the user, tracking outgoing payments to loan providers. **report->items->accounts->account\_insights->risk->loan\_payments->amount** (nullable, number) The total value of outflow transactions categorized as LOAN\_PAYMENTS, across all the accounts in the report within the requested time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any provider in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->loan\_payments->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_PAYMENTS credit category. If there's no available income for the giving time period, this field value will be -1 Format: double **report->items->accounts->account\_insights->risk->negative\_balance** (nullable, object) Insights into negative balance occurrences, including frequency, duration, and minimum balance details. **report->items->accounts->account\_insights->risk->negative\_balance->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that caused any account in the report to have a negative balance. This value is inclusive of the date of the last negative balance, meaning that if the last negative balance occurred today, this value will be 0. **report->items->accounts->account\_insights->risk->negative\_balance->days\_with\_negative\_balance** (nullable, integer) The number of aggregated days that the accounts in the report has had a negative balance within the given time window. **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences** (\[object\]) The summary of the negative balance occurrences for this account. If the user has not had a negative balance in the account in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->start\_date** (nullable, string) The date of the first transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->end\_date** (nullable, string) The date of the last transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). This date is inclusive, meaning that this was the last date that the account had a negative balance. Format: date **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability** (nullable, object) Affordability insights focus on providing signal on the ability of a borrower to repay their loan without experiencing financial strain. It provides insights on factors such a user's monthly income and expenses, disposable income, average expenditure, etc., helping lenders gauge the level of affordability of a borrower. **report->items->accounts->account\_insights->affordability->expenditure** (nullable, object) Comprehensive analysis of spending patterns, categorizing expenses into essential, non-essential, and other categories. **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow** (nullable, object) Net cash flow for the period (inflows minus outflows), including a monthly average. **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->other->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->other->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions** (nullable, object) Insights into unusually large transactions that exceed typical spending patterns for the account. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->transactions\_count** (nullable, integer) The total number of transactions whose value is above the threshold of normal amounts for a given account. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories** (\[object\]) Up to 3 top categories of expenses in this group. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->income** (nullable, object) Comprehensive income analysis including total income, income excluding transfers, and inbound transfer amounts. **report->items->accounts->account\_insights->affordability->income->total\_income** (nullable, object) The total amount of all income transactions in the given time period. **report->items->accounts->account\_insights->affordability->income->total\_income->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->affordability->income->total\_income->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->income->total\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers** (nullable, object) Income excluding account transfer transactions for the period, including a monthly average. **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->income->transfers\_in** (nullable, object) Sum of inbound transfer transactions for the period, including a monthly average. **report->items->accounts->account\_insights->affordability->income->transfers\_in->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->income->transfers\_in->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->income->transfers\_in->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **warnings** (\[object\]) If the Asset Report generation was successful but identity information cannot be returned, this array will contain information about the errors causing identity information to be missing **warnings->warning\_type** (string) The warning type, which will always be ASSET\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. OWNERS\_UNAVAILABLE indicates that account-owner information is not available.INVESTMENTS\_UNAVAILABLE indicates that Investments specific information is not available. TRANSACTIONS\_UNAVAILABLE indicates that transactions information associated with Credit and Depository accounts are unavailable. Possible values: OWNERS\_UNAVAILABLE, INVESTMENTS\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "report": { "asset_report_id": "028e8404-a013-4a45-ac9e-002482f9cafc", "client_report_id": "client_report_id_1221", "date_generated": "2023-03-30T18:27:37Z", "days_requested": 90, "items": [ { "accounts": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "balances": { "available": 43200, "current": 43200, "limit": null, "margin_loan_amount": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "days_available": 90, "historical_balances": [ { "current": 49050, "date": "2023-03-29", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-28", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-27", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-26", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-25", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "4444", "name": "Plaid Money Market", "official_name": "Plaid Platinum Standard 1.85% Interest Money Market", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "region": "NY", "street": "2992 Cameron Road", "postal_code": "14236" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "region": "CA", "street": "2493 Leisure Lane", "postal_code": "93405-2255" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "money market", "transactions": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "amount": 5850, "date": "2023-03-30", "iso_currency_code": "USD", "original_description": "ACH Electronic CreditGUSTO PAY 123456", "pending": false, "transaction_id": "gGQgjoeyqBF89PND6K14Sow1wddZBmtLomJ78", "unofficial_currency_code": null } ], "type": "depository" }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "balances": { "available": 100, "current": 110, "limit": null, "margin_loan_amount": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "days_available": 90, "historical_balances": [ { "current": 110, "date": "2023-03-29", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -390, "date": "2023-03-28", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -373.67, "date": "2023-03-27", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -284.27, "date": "2023-03-26", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -284.27, "date": "2023-03-25", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "region": "NY", "street": "2992 Cameron Road", "postal_code": "14236" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "region": "CA", "street": "2493 Leisure Lane", "postal_code": "93405-2255" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "checking", "transactions": [ { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 89.4, "date": "2023-03-27", "iso_currency_code": "USD", "original_description": "SparkFun", "pending": false, "transaction_id": "4zBRq1Qem4uAPnoyKjJNTRQpQddM4ztlo1PLD", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 12, "date": "2023-03-28", "iso_currency_code": "USD", "original_description": "McDonalds #3322", "pending": false, "transaction_id": "dkjL41PnbKsPral79jpxhMWdW55gkPfBkWpRL", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 4.33, "date": "2023-03-28", "iso_currency_code": "USD", "original_description": "Starbucks", "pending": false, "transaction_id": "a84ZxQaWDAtDL3dRgmazT57K7jjN3WFkNWMDy", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": -500, "date": "2023-03-29", "iso_currency_code": "USD", "original_description": "United Airlines **** REFUND ****", "pending": false, "transaction_id": "xG9jbv3eMoFWepzB7wQLT3LoLggX5Duy1Gbe5", "unofficial_currency_code": null } ], "type": "depository" } ], "date_last_updated": "2023-03-30T18:25:26Z", "institution_id": "ins_109508", "institution_name": "First Platypus Bank", "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7" } ], "user": { "client_user_id": "uid_40332", "email": "abcharleston@example.com", "first_name": "Anna", "last_name": "Charleston", "middle_name": "B", "phone_number": "1-415-867-5309", "ssn": "111-22-1234" } }, "request_id": "GVzMdiDd8DDAQK4", "warnings": [] } ``` \=\*=\*=\*= #### /asset\_report/pdf/get  #### Retrieve a PDF Asset Report  The [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) endpoint retrieves the Asset Report in PDF format. Before calling [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) , you must first create the Asset Report using [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) (or filter an Asset Report using [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) ) and then wait for the [PRODUCT\_READY](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) webhook to fire, indicating that the Report is ready to be retrieved. The response to [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) is the PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header. [View a sample PDF Asset Report](https://plaid.com/documents/sample-asset-report.pdf) . #### Request fields  **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. **asset\_report\_token** (required, string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **options** (object) An optional object to filter or add data to /asset\_report/get results. If provided, must be non-null. **options->days\_to\_include** (integer) The maximum integer number of days of history to include in the Asset Report. Maximum: 731 Minimum: 0 /asset\_report/pdf/get Node▼ ```javascript try { const request: AssetReportPDFGetRequest = { asset_report_token: assetReportToken, }; const response = await plaidClient.assetReportPdfGet(request, { responseType: 'arraybuffer', }); const pdf = response.buffer.toString('base64'); } catch (error) { // handle error } ``` ##### Response  This endpoint returns binary PDF data. [View a sample Asset Report PDF](https://plaid.com/documents/sample-asset-report.pdf) . [View a sample Financial Insights Report (UK/EU only) PDF](https://plaid.com/documents/sample-financial-insights-report.pdf) . \=\*=\*=\*= #### /asset\_report/refresh  #### Refresh an Asset Report  An Asset Report is an immutable snapshot of a user's assets. In order to "refresh" an Asset Report you created previously, you can use the [/asset\_report/refresh](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportrefresh) endpoint to create a new Asset Report based on the old one, but with the most recent data available. The new Asset Report will contain the same Items as the original Report, as well as the same filters applied by any call to [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) . By default, the new Asset Report will also use the same parameters you submitted with your original [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) request, but the original `days_requested` value and the values of any parameters in the `options` object can be overridden with new values. To change these arguments, simply supply new values for them in your request to [/asset\_report/refresh](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportrefresh) . Submit an empty string ("") for any previously-populated fields you would like set as empty. #### Request fields  **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. **asset\_report\_token** (required, string) The asset\_report\_token returned by the original call to /asset\_report/create **days\_requested** (integer) The maximum number of days of history to include in the Asset Report. Must be an integer. If not specified, the value from the original call to /asset\_report/create will be used. Minimum: 0 Maximum: 731 **options** (object) An optional object to filter /asset\_report/refresh results. If provided, cannot be null. If not specified, the options from the original call to /asset\_report/create will be used. **options->client\_report\_id** (string) Client-generated identifier, which can be used by lenders to track loan applications. **options->webhook** (string) URL to which Plaid will send Assets webhooks, for example when the requested Asset Report is ready. Format: url **options->user** (object) The user object allows you to provide additional information about the user to be appended to the Asset Report. All fields are optional. The first\_name, last\_name, and ssn fields are required if you would like the Report to be eligible for Fannie Mae’s Day 1 Certainty™ program. **options->user->client\_user\_id** (string) An identifier you determine and submit for the user. **options->user->first\_name** (string) The user's first name. Required for the Fannie Mae Day 1 Certainty™ program. **options->user->middle\_name** (string) The user's middle name **options->user->last\_name** (string) The user's last name. Required for the Fannie Mae Day 1 Certainty™ program. **options->user->ssn** (string) The user's Social Security Number. Required for the Fannie Mae Day 1 Certainty™ program. Format: "ddd-dd-dddd" **options->user->phone\_number** (string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14151234567". Phone numbers provided in other formats will be parsed on a best-effort basis. **options->user->email** (string) The user's email address. /asset\_report/refresh Node▼ ```javascript const request: AssetReportRefreshRequest = { asset_report_token: assetReportToken, daysRequested: 90, options: { client_report_id: '123', webhook: 'https://www.example.com', user: { client_user_id: '7f57eb3d2a9j6480121fx361', first_name: 'Jane', middle_name: 'Leah', last_name: 'Doe', ssn: '123-45-6789', phone_number: '(555) 123-4567', email: 'jane.doe@example.com', }, }, }; try { const response = await plaidClient.assetReportRefresh(request); const assetReportId = response.data.asset_report_id; } catch (error) { // handle error } ``` #### Response fields  **asset\_report\_id** (string) A unique ID identifying an Asset Report. Like all Plaid identifiers, this ID is case sensitive. **asset\_report\_token** (string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "asset_report_id": "c33ebe8b-6a63-4d74-a83d-d39791231ac0", "asset_report_token": "assets-sandbox-8218d5f8-6d6d-403d-92f5-13a9afaa4398", "request_id": "NBZaq" } ``` \=\*=\*=\*= #### /asset\_report/filter  #### Filter Asset Report  By default, an Asset Report will contain all of the accounts on a given Item. In some cases, you may not want the Asset Report to contain all accounts. For example, you might have the end user choose which accounts are relevant in Link using the Account Select view, which you can enable in the dashboard. Or, you might always exclude certain account types or subtypes, which you can identify by using the [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) endpoint. To narrow an Asset Report to only a subset of accounts, use the [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) endpoint. To exclude certain Accounts from an Asset Report, first use the [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) endpoint to create the report, then send the `asset_report_token` along with a list of `account_ids` to exclude to the [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) endpoint, to create a new Asset Report which contains only a subset of the original Asset Report's data. Because Asset Reports are immutable, calling [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) does not alter the original Asset Report in any way; rather, [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) creates a new Asset Report with a new token and id. Asset Reports created via [/asset\_report/filter](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportfilter) do not contain new Asset data, and are not billed. Plaid will fire a [PRODUCT\_READY](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) webhook once generation of the filtered Asset Report has completed. #### Request fields  **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. **asset\_report\_token** (required, string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **account\_ids\_to\_exclude** (required, \[string\]) The accounts to exclude from the Asset Report, identified by account\_id. /asset\_report/filter Node▼ ```javascript const request: AssetReportFilterRequest = { asset_report_token: assetReportToken, account_ids_to_exclude: ['JJGWd5wKDgHbw6yyzL3MsqBAvPyDlqtdyk419'], }; try { const response = await plaidClient.assetReportFilter(request); const assetReportId = response.data.asset_report_id; } catch (error) { // handle error } ``` #### Response fields  **asset\_report\_token** (string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **asset\_report\_id** (string) A unique ID identifying an Asset Report. Like all Plaid identifiers, this ID is case sensitive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "asset_report_token": "assets-sandbox-bc410c6a-4653-4c75-985c-e757c3497c5c", "asset_report_id": "fdc09207-0cef-4d88-b5eb-0d970758ebd9", "request_id": "qEg07" } ``` \=\*=\*=\*= #### /asset\_report/remove  #### Delete an Asset Report  The [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) endpoint allows you to invalidate an `access_token`, meaning you will not be able to create new Asset Reports with it. Removing an Item does not affect any Asset Reports or Audit Copies you have already created, which will remain accessible until you remove them specifically. The [/asset\_report/remove](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportremove) endpoint allows you to remove access to an Asset Report. Removing an Asset Report invalidates its `asset_report_token`, meaning you will no longer be able to use it to access Report data or create new Audit Copies. Removing an Asset Report does not affect the underlying Items, but does invalidate any `audit_copy_tokens` associated with the Asset Report. #### Request fields  **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. **asset\_report\_token** (required, string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. /asset\_report/remove Node▼ ```javascript const request: AssetReportRemoveRequest = { asset_report_token: assetReportToken, }; try { const response = await plaidClient.assetReportRemove(request); const removed = response.data.removed; } catch (error) { // handle error } ``` #### Response fields  **removed** (boolean) true if the Asset Report was successfully removed. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "removed": true, "request_id": "I6zHN" } ``` \=\*=\*=\*= #### /asset\_report/audit\_copy/create  #### Create Asset Report Audit Copy  Plaid can provide an Audit Copy of any Asset Report directly to a participating third party on your behalf. For example, Plaid can supply an Audit Copy directly to Fannie Mae on your behalf if you participate in the Day 1 Certainty™ program. An Audit Copy contains the same underlying data as the Asset Report. To grant access to an Audit Copy, use the [/asset\_report/audit\_copy/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportaudit_copycreate) endpoint to create an `audit_copy_token` and then pass that token to the third party who needs access. Each third party has its own `auditor_id`, for example `fannie_mae`. You’ll need to create a separate Audit Copy for each third party to whom you want to grant access to the Report. #### Request fields  **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. **asset\_report\_token** (required, string) A token that can be provided to endpoints such as /asset\_report/get or /asset\_report/pdf/get to fetch or update an Asset Report. **auditor\_id** (string) The auditor\_id of the third party with whom you would like to share the Asset Report. /asset\_report/audit\_copy/create Node▼ ```javascript // The auditor ID corresponds to the third party with which you want to share // the asset report. For example, Fannie Mae's auditor ID is 'fannie_mae'. const request: AssetReportAuditCopyCreateRequest = { asset_report_token: createResponse.data.asset_report_token, auditor_id: 'fannie_mae', }; try { const response = await plaidClient.assetReportAuditCopyCreate(request); const auditCopyToken = response.data.audit_copy_token; } catch (error) { // handle error } ``` #### Response fields  **audit\_copy\_token** (string) A token that can be shared with a third party auditor to allow them to obtain access to the Asset Report. This token should be stored securely. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "audit_copy_token": "a-sandbox-3TAU2CWVYBDVRHUCAAAI27ULU4", "request_id": "Iam3b" } ``` \=\*=\*=\*= #### /asset\_report/audit\_copy/remove  #### Remove Asset Report Audit Copy  The [/asset\_report/audit\_copy/remove](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportaudit_copyremove) endpoint allows you to remove an Audit Copy. Removing an Audit Copy invalidates the `audit_copy_token` associated with it, meaning both you and any third parties holding the token will no longer be able to use it to access Report data. Items associated with the Asset Report, the Asset Report itself and other Audit Copies of it are not affected and will remain accessible after removing the given Audit Copy. #### Request fields  **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. **audit\_copy\_token** (required, string) The audit\_copy\_token granting access to the Audit Copy you would like to revoke. Node▼ ```javascript // auditCopyToken is the token from the createAuditCopy response. const request: AssetReportAuditCopyRemoveRequest = { audit_copy_token: auditCopyToken, }; try { const response = await plaidClient.assetReportAuditCopyRemove(request); const removed = response.data.removed; } catch (error) { // handle error } ``` #### Response fields  **removed** (boolean) true if the Audit Copy was successfully removed. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "removed": true, "request_id": "m8MDnv9okwxFNBV" } ``` \=\*=\*=\*= #### /credit/relay/create  #### Create a relay token to share an Asset Report with a partner client  Plaid can share an Asset Report directly with a participating third party on your behalf. The shared Asset Report is the exact same Asset Report originally created in [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) . To grant a third party access to an Asset Report, use the [/credit/relay/create](https://plaid.com/docs/api/products/assets/index.html.md#creditrelaycreate) endpoint to create a `relay_token` and then pass that token to your third party. Each third party has its own `secondary_client_id`; for example, `ce5bd328dcd34123456`. You'll need to create a separate `relay_token` for each third party that needs access to the report on your behalf. #### Request fields  **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. **report\_tokens** (required, \[string\]) List of report token strings, with at most one token of each report type. Currently only Asset Report token is supported. **secondary\_client\_id** (required, string) The secondary\_client\_id is the client id of the third party with whom you would like to share the relay token. **webhook** (string) URL to which Plaid will send webhooks when the Secondary Client successfully retrieves an Asset Report by calling /credit/relay/get. Format: url Node▼ ```javascript const request: CreditRelayCreateRequest = { report_tokens: [createResponse.data.asset_report_token], secondary_client_id: clientIdFromPartner }; try { const response = await plaidClient.creditRelayCreate(request); const relayToken = response.data.relay_token; } catch (error) { // handle error } ``` #### Response fields  **relay\_token** (string) A token that can be shared with a third party to allow them to access the Asset Report. This token should be stored securely. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "relay_token": "credit-relay-production-3TAU2CWVYBDVRHUCAAAI27ULU4", "request_id": "Iam3b" } ``` \=\*=\*=\*= #### /credit/relay/get  #### Retrieve the reports associated with a relay token that was shared with you  [/credit/relay/get](https://plaid.com/docs/api/products/assets/index.html.md#creditrelayget) allows third parties to receive a report that was shared with them, using a `relay_token` that was created by the report owner. #### Request fields  **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. **relay\_token** (required, string) The relay\_token granting access to the report you would like to get. **report\_type** (required, string) The report type. It can be asset. Income report types are not yet supported. Possible values: asset **include\_insights** (boolean) true if you would like to retrieve the Asset Report with Insights, false otherwise. This field defaults to false if omitted. Default: false Node▼ ```javascript const request: CreditRelayGetRequest = { relay_token: createResponse.data.relay_token, report_type: 'assets', }; try { const response = await plaidClient.creditRelayGet(request); } catch (error) { // handle error } ``` #### Response fields  **report** (object) An object representing an Asset Report **report->asset\_report\_id** (string) A unique ID identifying an Asset Report. Like all Plaid identifiers, this ID is case sensitive. **report->insights** (nullable, object) This is a container object for all lending-related insights. This field will be returned only for European customers. **report->insights->risk** (nullable, object) Risk indicators focus on providing signal on the possibility of a borrower defaulting on their loan repayments by providing data points related to its payment behavior, debt, and other relevant financial information, helping lenders gauge the level of risk involved in a certain operation. **report->insights->risk->bank\_penalties** (nullable, object) Insights into bank penalties and fees, including overdraft fees, NSF fees, and other bank-imposed charges. **report->insights->risk->bank\_penalties->amount** (nullable, number) The total value of outflow transactions categorized as BANK\_PENALTIES, across all the accounts in the report within the requested time window. Format: double **report->insights->risk->bank\_penalties->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->bank\_penalties->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->bank\_penalties->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->insights->risk->bank\_penalties->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->risk->bank\_penalties->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->risk->bank\_penalties->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->risk->bank\_penalties->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->bank\_penalties->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->bank\_penalties->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->transactions\_count** (nullable, integer) The total number of transactions that fall into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->insights->risk->bank\_penalties->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->insights->risk->bank\_penalties->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->bank\_penalties->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->bank\_penalties->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->bank\_penalties->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->insights->risk->bank\_penalties->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into the BANK\_PENALTIES credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->insights->risk->gambling** (nullable, object) Insights into gambling-related transactions, including frequency, amounts, and top merchants. **report->insights->risk->gambling->amount** (nullable, number) The total value of transactions that fall into the GAMBLING credit category, across all the accounts in the report. Format: double **report->insights->risk->gambling->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->gambling->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->gambling->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->gambling->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->gambling->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->gambling->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->gambling->top\_merchants** (\[string\]) Up to 3 top merchants that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any merchants in the given time window, this list will be empty. **report->insights->risk->gambling->transactions\_count** (nullable, integer) The total number of transactions that fall into the GAMBLING credit category, across all the accounts in the report. **report->insights->risk->gambling->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. **report->insights->risk->gambling->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->gambling->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->gambling->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->gambling->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->gambling->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->gambling->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->gambling->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the GAMBLING category, across all the accounts in the report. **report->insights->risk->gambling->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the GAMBLING credit category. If there's no available income for the given time period, this field value will be -1 Format: double **report->insights->risk->loan\_disbursements** (nullable, object) Insights into loan disbursement transactions received by the user, tracking incoming funds from loan providers. **report->insights->risk->loan\_disbursements->amount** (nullable, number) The total value of inflow transactions categorized as LOAN\_DISBURSEMENTS, across all the accounts in the report within the requested time window. Format: double **report->insights->risk->loan\_disbursements->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_disbursements->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->risk->loan\_disbursements->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->risk->loan\_disbursements->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->risk->loan\_disbursements->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_disbursements->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_disbursements->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_disbursements->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_disbursements->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has received money from any provider in the given time window, this list will be empty. **report->insights->risk->loan\_disbursements->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_disbursements->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_DISBURSEMENTS category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_disbursements->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_disbursements->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_disbursements->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_disbursements->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was received on transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_DISBURSEMENTS credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->insights->risk->loan\_payments** (nullable, object) Insights into loan payment transactions made by the user, tracking outgoing payments to loan providers. **report->insights->risk->loan\_payments->amount** (nullable, number) The total value of outflow transactions categorized as LOAN\_PAYMENTS, across all the accounts in the report within the requested time window. Format: double **report->insights->risk->loan\_payments->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_payments->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_payments->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_payments->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->risk->loan\_payments->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->risk->loan\_payments->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->risk->loan\_payments->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->risk->loan\_payments->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->risk->loan\_payments->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any provider in the given time window, this list will be empty. **report->insights->risk->loan\_payments->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_payments->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->insights->risk->loan\_payments->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_payments->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->loan\_payments->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->loan\_payments->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->insights->risk->loan\_payments->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_PAYMENTS credit category. If there's no available income for the giving time period, this field value will be -1 Format: double **report->insights->risk->negative\_balance** (nullable, object) Insights into negative balance occurrences, including frequency, duration, and minimum balance details. **report->insights->risk->negative\_balance->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that caused any account in the report to have a negative balance. This value is inclusive of the date of the last negative balance, meaning that if the last negative balance occurred today, this value will be 0. **report->insights->risk->negative\_balance->days\_with\_negative\_balance** (nullable, integer) The number of aggregated days that the accounts in the report has had a negative balance within the given time window. **report->insights->risk->negative\_balance->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->negative\_balance->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->negative\_balance->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->negative\_balance->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->risk->negative\_balance->occurrences** (\[object\]) The summary of the negative balance occurrences for this account. If the user has not had a negative balance in the account in the given time window, this list will be empty. **report->insights->risk->negative\_balance->occurrences->start\_date** (nullable, string) The date of the first transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->insights->risk->negative\_balance->occurrences->end\_date** (nullable, string) The date of the last transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). This date is inclusive, meaning that this was the last date that the account had a negative balance. Format: date **report->insights->risk->negative\_balance->occurrences->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->risk->negative\_balance->occurrences->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->risk->negative\_balance->occurrences->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->risk->negative\_balance->occurrences->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability** (nullable, object) Affordability insights focus on providing signal on the ability of a borrower to repay their loan without experiencing financial strain. It provides insights on factors such a user's monthly income and expenses, disposable income, average expenditure, etc., helping lenders gauge the level of affordability of a borrower. **report->insights->affordability->expenditure** (nullable, object) Comprehensive analysis of spending patterns, categorizing expenses into essential, non-essential, and other categories. **report->insights->affordability->expenditure->cash\_flow** (nullable, object) Net cash flow for the period (inflows minus outflows), including a monthly average. **report->insights->affordability->expenditure->cash\_flow->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->cash\_flow->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->cash\_flow->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->total\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->total\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->total\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->total\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->total\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->total\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->total\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->non\_essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->non\_essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->other->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->other->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->other->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->other->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->other->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->other->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->other->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->other->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->other->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->other->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->other->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->other->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->other->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->other->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->insights->affordability->expenditure->transfers\_out->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->insights->affordability->expenditure->transfers\_out->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->transfers\_out->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->transfers\_out->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->insights->affordability->expenditure->transfers\_out->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->insights->affordability->expenditure->transfers\_out->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->transfers\_out->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->transfers\_out->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->transfers\_out->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->transfers\_out->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->outlier\_transactions** (nullable, object) Insights into unusually large transactions that exceed typical spending patterns for the account. **report->insights->affordability->expenditure->outlier\_transactions->transactions\_count** (nullable, integer) The total number of transactions whose value is above the threshold of normal amounts for a given account. **report->insights->affordability->expenditure->outlier\_transactions->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->insights->affordability->expenditure->outlier\_transactions->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->affordability->expenditure->outlier\_transactions->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->outlier\_transactions->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories** (\[object\]) Up to 3 top categories of expenses in this group. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->income** (nullable, object) Comprehensive income analysis including total income, income excluding transfers, and inbound transfer amounts. **report->insights->affordability->income->total\_income** (nullable, object) The total amount of all income transactions in the given time period. **report->insights->affordability->income->total\_income->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->insights->affordability->income->total\_income->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->income->total\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->income->income\_excluding\_transfers** (nullable, object) Income excluding account transfer transactions for the period, including a monthly average. **report->insights->affordability->income->income\_excluding\_transfers->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->income->income\_excluding\_transfers->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->income->income\_excluding\_transfers->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->insights->affordability->income->transfers\_in** (nullable, object) Sum of inbound transfer transactions for the period, including a monthly average. **report->insights->affordability->income->transfers\_in->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->insights->affordability->income->transfers\_in->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->insights->affordability->income->transfers\_in->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->client\_report\_id** (nullable, string) An identifier you determine and submit for the Asset Report. **report->date\_generated** (string) The date and time when the Asset Report was created, in ISO 8601 format (e.g. "2018-04-12T03:32:11Z"). Format: date-time **report->days\_requested** (number) The duration of transaction history you requested **report->user** (object) The user object allows you to provide additional information about the user to be appended to the Asset Report. All fields are optional. The first\_name, last\_name, and ssn fields are required if you would like the Report to be eligible for Fannie Mae’s Day 1 Certainty™ program. **report->user->client\_user\_id** (nullable, string) An identifier you determine and submit for the user. **report->user->first\_name** (nullable, string) The user's first name. Required for the Fannie Mae Day 1 Certainty™ program. **report->user->middle\_name** (nullable, string) The user's middle name **report->user->last\_name** (nullable, string) The user's last name. Required for the Fannie Mae Day 1 Certainty™ program. **report->user->ssn** (nullable, string) The user's Social Security Number. Required for the Fannie Mae Day 1 Certainty™ program. Format: "ddd-dd-dddd" **report->user->phone\_number** (nullable, string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14151234567". Phone numbers provided in other formats will be parsed on a best-effort basis. **report->user->email** (nullable, string) The user's email address. **report->items** (\[object\]) Data returned by Plaid about each of the Items included in the Asset Report. **report->items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **report->items->institution\_name** (string) The full financial institution name associated with the Item. **report->items->institution\_id** (string) The id of the financial institution associated with the Item. **report->items->date\_last\_updated** (string) The date and time when this Item’s data was last retrieved from the financial institution, in ISO 8601 format. Format: date-time **report->items->accounts** (\[object\]) Data about each of the accounts open on the Item. **report->items->accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->items->accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get. **report->items->accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get. If current is null this field is guaranteed not to be null. Format: double **report->items->accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **report->items->accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **report->items->accounts->balances->margin\_loan\_amount** (nullable, number) The total amount of borrowed funds in the account, as determined by the financial institution. For investment-type accounts, the margin balance is the total value of borrowed assets in the account, as presented by the institution. This is commonly referred to as margin or a loan. Format: double **report->items->accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only used and expected when the institution is ins\_128026 (Capital One) and the Item contains one or more accounts with a non-depository account type, in which case a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For Capital One depository accounts as well as all other account types on all other institutions, this field is ignored. See account type schema for a full list of account types. If the balance that is pulled is older than the given timestamp for Items with this field required, an INVALID\_REQUEST error with the code of LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned with the most recent timestamp for the requested account contained in the response. Format: date-time **report->items->accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **report->items->accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **report->items->accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **report->items->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **report->items->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **report->items->accounts->verification\_status** (string) The current verification status of an Auth Item initiated through Automated or Manual micro-deposits. Returned for Auth Items only. 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 micro-deposit. 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, manually\_verified, verification\_expired, verification\_failed, database\_matched **report->items->accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This is currently an opt-in field and only supported for Chase Items. **report->items->accounts->days\_available** (number) The duration of transaction history available within this report for this Item, typically defined as the time since the date of the earliest transaction in that account. **report->items->accounts->transactions** (\[object\]) Transaction history associated with the account. **report->items->accounts->transactions->account\_id** (string) The ID of the account in which this transaction occurred. **report->items->accounts->transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. Format: double **report->items->accounts->transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **report->items->accounts->transactions->category** (nullable, \[string\]) A hierarchical array of the categories to which this transaction belongs. For a full list of categories, see /categories/get. This field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->category\_id** (nullable, string) The ID of the category to which this transaction belongs. For a full list of categories, see /categories/get. This field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->credit\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for credit use cases, but not limited to such use cases. See the taxonomy csv file for a full list of credit categories. **report->items->accounts->transactions->credit\_category->primary** (string) A high level category that communicates the broad category of the transaction. **report->items->accounts->transactions->credit\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **report->items->accounts->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **report->items->accounts->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **report->items->accounts->transactions->date\_transacted** (nullable, string) The date on which the transaction took place, in IS0 8601 format. **report->items->accounts->transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **report->items->accounts->transactions->location->address** (nullable, string) The street address where the transaction occurred. **report->items->accounts->transactions->location->city** (nullable, string) The city where the transaction occurred. **report->items->accounts->transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **report->items->accounts->transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **report->items->accounts->transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **report->items->accounts->transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **report->items->accounts->transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **report->items->accounts->transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **report->items->accounts->transactions->name** (deprecated, string) The merchant name or transaction description. This is a legacy field that is no longer maintained. For merchant name, use the merchant\_name field. For description, use the original\_description field. This field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **report->items->accounts->transactions->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **report->items->accounts->transactions->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **report->items->accounts->transactions->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **report->items->accounts->transactions->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **report->items->accounts->transactions->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **report->items->accounts->transactions->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **report->items->accounts->transactions->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **report->items->accounts->transactions->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **report->items->accounts->transactions->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **report->items->accounts->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->items->accounts->transactions->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. **report->items->accounts->transactions->account\_owner** (nullable, string) The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts. **report->items->accounts->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->items->accounts->transactions->transaction\_type** (string) digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **report->items->accounts->investments** (object) A set of fields describing the investments data on an account. **report->items->accounts->investments->holdings** (\[object\]) Quantities and values of securities held in the investment account. Map to the securities array for security details. **report->items->accounts->investments->holdings->account\_id** (string) The Plaid account\_id associated with the holding. **report->items->accounts->investments->holdings->security\_id** (string) The Plaid security\_id associated with the holding. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data. The security\_id for the same security will typically be the same across different institutions, but this is not guaranteed. The security\_id does not typically change, but may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **report->items->accounts->investments->holdings->ticker\_symbol** (nullable, string) The holding's trading symbol for publicly traded holdings, and otherwise a short identifier if available. **report->items->accounts->investments->holdings->institution\_price** (number) The last price given by the institution for this security. Format: double **report->items->accounts->investments->holdings->institution\_price\_as\_of** (nullable, string) The date at which institution\_price was current. Format: date **report->items->accounts->investments->holdings->institution\_value** (number) The value of the holding, as reported by the institution. Format: double **report->items->accounts->investments->holdings->cost\_basis** (nullable, number) The original total value of the holding. This field is calculated by Plaid as the sum of the purchase price of all of the shares in the holding. Format: double **report->items->accounts->investments->holdings->quantity** (number) The total quantity of the asset held, as reported by the financial institution. If the security is an option, quantity will reflect the total number of options (typically the number of contracts multiplied by 100), not the number of contracts. Format: double **report->items->accounts->investments->holdings->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the holding. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->investments->holdings->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **report->items->accounts->investments->securities** (\[object\]) Details of specific securities held in on the investment account. **report->items->accounts->investments->securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **report->items->accounts->investments->securities->name** (nullable, string) A descriptive name for the security, suitable for display. **report->items->accounts->investments->securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **report->items->accounts->investments->securities->type** (nullable, string) The security type of the holding. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **report->items->accounts->investments->transactions** (\[object\]) Transaction history on the investment account. **report->items->accounts->investments->transactions->investment\_transaction\_id** (string) The ID of the Investment transaction, unique across all Plaid transactions. Like all Plaid identifiers, the investment\_transaction\_id is case sensitive. **report->items->accounts->investments->transactions->account\_id** (string) The account\_id of the account against which this transaction posted. **report->items->accounts->investments->transactions->security\_id** (nullable, string) The security\_id to which this transaction is related. **report->items->accounts->investments->transactions->date** (string) The ISO 8601 posting date for the transaction. Format: date **report->items->accounts->investments->transactions->name** (string) The institution’s description of the transaction. **report->items->accounts->investments->transactions->quantity** (number) The number of units of the security involved in this transaction. Positive for buy transactions; negative for sell transactions. Format: double **report->items->accounts->investments->transactions->vested\_quantity** (number) The total quantity of vested assets held, as reported by the financial institution. Vested assets are only associated with equities. Format: double **report->items->accounts->investments->transactions->vested\_value** (number) The value of the vested holdings as reported by the institution. Format: double **report->items->accounts->investments->transactions->amount** (number) The complete value of the transaction. Positive values when cash is debited, e.g. purchases of stock; negative values when cash is credited, e.g. sales of stock. Treatment remains the same for cash-only movements unassociated with securities. Format: double **report->items->accounts->investments->transactions->price** (number) The price of the security at which this transaction occurred. Format: double **report->items->accounts->investments->transactions->fees** (nullable, number) The combined value of all fees applied to this transaction Format: double **report->items->accounts->investments->transactions->type** (string) Value is one of the following: buy: Buying an investment sell: Selling an investment cancel: A cancellation of a pending transaction cash: Activity that modifies a cash position fee: A fee on the account transfer: Activity which modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transfer For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: buy, sell, cancel, cash, fee, transfer **report->items->accounts->investments->transactions->subtype** (string) For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: account fee, adjustment, assignment, buy, buy to cover, contribution, deposit, distribution, dividend, dividend reinvestment, exercise, expire, fund fee, interest, interest receivable, interest reinvestment, legal fee, loan payment, long-term capital gain, long-term capital gain reinvestment, management fee, margin expense, merger, miscellaneous fee, non-qualified dividend, non-resident tax, pending credit, pending debit, qualified dividend, rebalance, return of principal, request, sell, sell short, send, short-term capital gain, short-term capital gain reinvestment, spin off, split, stock distribution, tax, tax withheld, trade, transfer, transfer fee, trust fee, unqualified gain, withdrawal **report->items->accounts->investments->transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->investments->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **report->items->accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners.For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. In API versions 2018-05-22 and earlier, the owners object is not returned, and instead identity information is returned in the top level identity object. For more details, see Plaid API versioning **report->items->accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **report->items->accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->phone\_numbers->data** (string) The phone number. **report->items->accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **report->items->accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **report->items->accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->emails->data** (string) The email address. **report->items->accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **report->items->accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **report->items->accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->addresses->data** (object) Data about the components comprising an address. **report->items->accounts->owners->addresses->data->city** (nullable, string) The full city name **report->items->accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **report->items->accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **report->items->accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **report->items->accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **report->items->accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **report->items->accounts->ownership\_type** (nullable, string) How an asset is owned. association: Ownership by a corporation, partnership, or unincorporated association, including for-profit and not-for-profit organizations. individual: Ownership by an individual. joint: Joint ownership by multiple parties. trust: Ownership by a revocable or irrevocable trust. Possible values: null, individual, joint, association, trust **report->items->accounts->historical\_balances** (\[object\]) Calculated data about the historical balances on the account. Available for credit and depository type accounts. **report->items->accounts->historical\_balances->date** (string) The date of the calculated historical balance, in an ISO 8601 format (YYYY-MM-DD) Format: date **report->items->accounts->historical\_balances->current** (number) The total amount of funds in the account, calculated from the current balance in the balance object by subtracting inflows and adding back outflows according to the posted date of each transaction. If the account has any pending transactions, historical balance amounts on or after the date of the earliest pending transaction may differ if retrieved in subsequent Asset Reports as a result of those pending transactions posting. Format: double **report->items->accounts->historical\_balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->historical\_balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights** (nullable, object) This is a container object for all lending-related insights. This field will be returned only for European customers. **report->items->accounts->account\_insights->risk** (nullable, object) Risk indicators focus on providing signal on the possibility of a borrower defaulting on their loan repayments by providing data points related to its payment behavior, debt, and other relevant financial information, helping lenders gauge the level of risk involved in a certain operation. **report->items->accounts->account\_insights->risk->bank\_penalties** (nullable, object) Insights into bank penalties and fees, including overdraft fees, NSF fees, and other bank-imposed charges. **report->items->accounts->account\_insights->risk->bank\_penalties->amount** (nullable, number) The total value of outflow transactions categorized as BANK\_PENALTIES, across all the accounts in the report within the requested time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->transactions\_count** (nullable, integer) The total number of transactions that fall into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->bank\_penalties->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->bank\_penalties->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the BANK\_PENALTIES credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->bank\_penalties->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the BANK\_PENALTIES credit category within the given time window, across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into the BANK\_PENALTIES credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->risk->gambling** (nullable, object) Insights into gambling-related transactions, including frequency, amounts, and top merchants. **report->items->accounts->account\_insights->risk->gambling->amount** (nullable, number) The total value of transactions that fall into the GAMBLING credit category, across all the accounts in the report. Format: double **report->items->accounts->account\_insights->risk->gambling->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->gambling->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->gambling->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->gambling->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->gambling->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->gambling->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->gambling->top\_merchants** (\[string\]) Up to 3 top merchants that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any merchants in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->gambling->transactions\_count** (nullable, integer) The total number of transactions that fall into the GAMBLING credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->gambling->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->gambling->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the GAMBLING category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->gambling->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the GAMBLING category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the GAMBLING credit category. If there's no available income for the given time period, this field value will be -1 Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements** (nullable, object) Insights into loan disbursement transactions received by the user, tracking incoming funds from loan providers. **report->items->accounts->account\_insights->risk->loan\_disbursements->amount** (nullable, number) The total value of inflow transactions categorized as LOAN\_DISBURSEMENTS, across all the accounts in the report within the requested time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has received money from any provider in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->loan\_disbursements->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_DISBURSEMENTS category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_disbursements->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_disbursements->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_DISBURSEMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_disbursements->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was received on transactions that fall into the LOAN\_DISBURSEMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_DISBURSEMENTS credit category. If there's no available income for the given time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->risk->loan\_payments** (nullable, object) Insights into loan payment transactions made by the user, tracking outgoing payments to loan providers. **report->items->accounts->account\_insights->risk->loan\_payments->amount** (nullable, number) The total value of outflow transactions categorized as LOAN\_PAYMENTS, across all the accounts in the report within the requested time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details** (\[object\]) Detailed categories view of all the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->category\_details->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->top\_providers** (\[string\]) Up to 3 top service providers that the user had the most transactions for in the given time window, in descending order of total spend. If the user has not spent money on any provider in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->loan\_payments->transactions\_count** (nullable, integer) The total number of transactions that fall into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries** (\[object\]) The monthly summaries of the transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->start\_date** (nullable, string) The start date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->end\_date** (nullable, string) The end date of the month for the given report time window. Will be provided in ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->loan\_payments->monthly\_summaries->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->loan\_payments->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that falls into the LOAN\_PAYMENTS credit category, across all the accounts in the report. **report->items->accounts->account\_insights->risk->loan\_payments->percentage\_of\_income** (nullable, number) The percentage of the user's monthly inflows that was spent on transactions that fall into the LOAN\_PAYMENTS credit category within the given time window, across all the accounts in the report. For example, a value of 100 indicates that 100% of the inflows were spent on transactions that fall into the LOAN\_PAYMENTS credit category. If there's no available income for the giving time period, this field value will be -1 Format: double **report->items->accounts->account\_insights->risk->negative\_balance** (nullable, object) Insights into negative balance occurrences, including frequency, duration, and minimum balance details. **report->items->accounts->account\_insights->risk->negative\_balance->days\_since\_last\_occurrence** (nullable, integer) The number of days since the last transaction that caused any account in the report to have a negative balance. This value is inclusive of the date of the last negative balance, meaning that if the last negative balance occurred today, this value will be 0. **report->items->accounts->account\_insights->risk->negative\_balance->days\_with\_negative\_balance** (nullable, integer) The number of aggregated days that the accounts in the report has had a negative balance within the given time window. **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->negative\_balance->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences** (\[object\]) The summary of the negative balance occurrences for this account. If the user has not had a negative balance in the account in the given time window, this list will be empty. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->start\_date** (nullable, string) The date of the first transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->end\_date** (nullable, string) The date of the last transaction that caused the account to have a negative balance. The date will be returned in an ISO 8601 format (YYYY-MM-DD). This date is inclusive, meaning that this was the last date that the account had a negative balance. Format: date **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->risk->negative\_balance->occurrences->minimum\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability** (nullable, object) Affordability insights focus on providing signal on the ability of a borrower to repay their loan without experiencing financial strain. It provides insights on factors such a user's monthly income and expenses, disposable income, average expenditure, etc., helping lenders gauge the level of affordability of a borrower. **report->items->accounts->account\_insights->affordability->expenditure** (nullable, object) Comprehensive analysis of spending patterns, categorizing expenses into essential, non-essential, and other categories. **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow** (nullable, object) Net cash flow for the period (inflows minus outflows), including a monthly average. **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->cash\_flow->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->total\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->non\_essential\_expenditure->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->other->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->other->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->other->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out** (nullable, object) Summary statistics for a specific expenditure category, including total amount, monthly average, and percentage of income. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->amount** (nullable, number) The total value of all the aggregated transactions in this expenditure category. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->transactions\_count** (nullable, integer) The total number of outflow transactions in this expenses group, within the given time window across all the accounts in the report. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->percentage\_of\_income** (nullable, number) The percentage of the total inflows that was spent in this expenses group, within the given time window across all the accounts in the report. For example, a value of 100 represents that 100% of the inflows were spent on transactions that fall into this expenditure group. If there's no available income for the giving time period, this field value will be -1. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories** (\[object\]) The primary credit categories of the expenses within the given time window, across all the accounts in the report. The categories are sorted in descending order by the total value spent. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->transfers\_out->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions** (nullable, object) Insights into unusually large transactions that exceed typical spending patterns for the account. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->transactions\_count** (nullable, integer) The total number of transactions whose value is above the threshold of normal amounts for a given account. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount** (nullable, object) A monetary amount with its associated currency information, supporting both official and unofficial currency codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories** (\[object\]) Up to 3 top categories of expenses in this group. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->id** (string) The ID of the credit category. See the category taxonomy for a full listing of category IDs. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->transactions\_count** (nullable, integer) The total number of transactions that fall into this credit category within the given time window. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->amount** (nullable, number) The total value for all the transactions that fall into this category within the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average** (nullable, object) The monthly average amount calculated by dividing the total by the number of calendar months in the time period. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->expenditure->outlier\_transactions->top\_categories->monthly\_average->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->income** (nullable, object) Comprehensive income analysis including total income, income excluding transfers, and inbound transfer amounts. **report->items->accounts->account\_insights->affordability->income->total\_income** (nullable, object) The total amount of all income transactions in the given time period. **report->items->accounts->account\_insights->affordability->income->total\_income->amount** (nullable, number) If the parent object represents a category of transactions, such as total\_amount, transfers\_in, total\_income, etc. the amount represents the sum of all of the transactions in the group. If the parent object is cash\_flow, the amount represents the total value of all the inflows minus all the outflows across all the accounts in the report in the given time window. If the parent object is minimum\_balance, the amount represents the lowest balance of the account during the given time window. Format: double **report->items->accounts->account\_insights->affordability->income->total\_income->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->income->total\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers** (nullable, object) Income excluding account transfer transactions for the period, including a monthly average. **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->income->income\_excluding\_transfers->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->account\_insights->affordability->income->transfers\_in** (nullable, object) Sum of inbound transfer transactions for the period, including a monthly average. **report->items->accounts->account\_insights->affordability->income->transfers\_in->amount** (nullable, number) The monthly average amount of all the aggregated transactions of the given category, across all the accounts for the given time window. The average is calculated by dividing the total amount of the transactions by the number of calendar months in the given time window. Format: double **report->items->accounts->account\_insights->affordability->income->transfers\_in->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->account\_insights->affordability->income->transfers\_in->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **warnings** (\[object\]) If the Asset Report generation was successful but identity information cannot be returned, this array will contain information about the errors causing identity information to be missing **warnings->warning\_type** (string) The warning type, which will always be ASSET\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. OWNERS\_UNAVAILABLE indicates that account-owner information is not available.INVESTMENTS\_UNAVAILABLE indicates that Investments specific information is not available. TRANSACTIONS\_UNAVAILABLE indicates that transactions information associated with Credit and Depository accounts are unavailable. Possible values: OWNERS\_UNAVAILABLE, INVESTMENTS\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "report": { "asset_report_id": "028e8404-a013-4a45-ac9e-002482f9cafc", "client_report_id": "client_report_id_1221", "date_generated": "2023-03-30T18:27:37Z", "days_requested": 90, "items": [ { "accounts": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "balances": { "available": 43200, "current": 43200, "limit": null, "margin_loan_amount": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "days_available": 90, "historical_balances": [ { "current": 49050, "date": "2023-03-29", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-28", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-27", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-26", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 49050, "date": "2023-03-25", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "4444", "name": "Plaid Money Market", "official_name": "Plaid Platinum Standard 1.85% Interest Money Market", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "region": "NY", "street": "2992 Cameron Road", "postal_code": "14236" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "region": "CA", "street": "2493 Leisure Lane", "postal_code": "93405-2255" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "money market", "transactions": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "amount": 5850, "date": "2023-03-30", "iso_currency_code": "USD", "original_description": "ACH Electronic CreditGUSTO PAY 123456", "pending": false, "transaction_id": "gGQgjoeyqBF89PND6K14Sow1wddZBmtLomJ78", "unofficial_currency_code": null } ], "type": "depository" }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "balances": { "available": 100, "current": 110, "limit": null, "margin_loan_amount": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "days_available": 90, "historical_balances": [ { "current": 110, "date": "2023-03-29", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -390, "date": "2023-03-28", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -373.67, "date": "2023-03-27", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -284.27, "date": "2023-03-26", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": -284.27, "date": "2023-03-25", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "region": "NY", "street": "2992 Cameron Road", "postal_code": "14236" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "region": "CA", "street": "2493 Leisure Lane", "postal_code": "93405-2255" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "checking", "transactions": [ { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 89.4, "date": "2023-03-27", "iso_currency_code": "USD", "original_description": "SparkFun", "pending": false, "transaction_id": "4zBRq1Qem4uAPnoyKjJNTRQpQddM4ztlo1PLD", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 12, "date": "2023-03-28", "iso_currency_code": "USD", "original_description": "McDonalds #3322", "pending": false, "transaction_id": "dkjL41PnbKsPral79jpxhMWdW55gkPfBkWpRL", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 4.33, "date": "2023-03-28", "iso_currency_code": "USD", "original_description": "Starbucks", "pending": false, "transaction_id": "a84ZxQaWDAtDL3dRgmazT57K7jjN3WFkNWMDy", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": -500, "date": "2023-03-29", "iso_currency_code": "USD", "original_description": "United Airlines **** REFUND ****", "pending": false, "transaction_id": "xG9jbv3eMoFWepzB7wQLT3LoLggX5Duy1Gbe5", "unofficial_currency_code": null } ], "type": "depository" } ], "date_last_updated": "2023-03-30T18:25:26Z", "institution_id": "ins_109508", "institution_name": "First Platypus Bank", "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7" } ], "user": { "client_user_id": "uid_40332", "email": "abcharleston@example.com", "first_name": "Anna", "last_name": "Charleston", "middle_name": "B", "phone_number": "1-415-867-5309", "ssn": "111-22-1234" } }, "request_id": "GVzMdiDd8DDAQK4", "warnings": [] } ``` \=\*=\*=\*= #### /credit/relay/refresh  #### Refresh a report of a relay token  The [/credit/relay/refresh](https://plaid.com/docs/api/products/assets/index.html.md#creditrelayrefresh) endpoint allows third parties to refresh a report that was relayed to them, using a `relay_token` that was created by the report owner. A new report will be created with the original report parameters, but with the most recent data available based on the `days_requested` value of the original report. #### Request fields  **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. **relay\_token** (required, string) The relay\_token granting access to the report you would like to refresh. **report\_type** (required, string) The report type. It can be asset. Income report types are not yet supported. Possible values: asset **webhook** (string) The URL registered to receive webhooks when the report of a relay token has been refreshed. Format: url /credit/relay/refresh Node▼ ```javascript const request: CreditRelayRefreshRequest = { relay_token: createResponse.data.relay_token, report_type: 'assets', }; try { const response = await plaidClient.CreditRelayRefresh(request); } catch (error) { // handle error } ``` #### Response fields  string **asset\_report\_id** (string) A unique ID identifying an Asset Report. Like all Plaid identifiers, this ID is case sensitive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "relay_token": "credit-relay-sandbox-8218d5f8-6d6d-403d-92f5-13a9afaa4398", "request_id": "NBZaq", "asset_report_id": "bf3a0490-344c-4620-a219-2693162e4b1d" } ``` \=\*=\*=\*= #### /credit/relay/remove  #### Remove relay token  The [/credit/relay/remove](https://plaid.com/docs/api/products/assets/index.html.md#creditrelayremove) endpoint allows you to invalidate a `relay_token`. The third party holding the token will no longer be able to access or refresh the reports which the `relay_token` gives access to. The original report, associated Items, and other relay tokens that provide access to the same report are not affected and will remain accessible after removing the given `relay_token`. #### Request fields  **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. **relay\_token** (required, string) The relay\_token you would like to revoke. /credit/relay/remove Node▼ ```javascript const request: CreditRelayRemoveRequest = { relay_token: createResponse.data.relay_token, }; try { const response = await plaidClient.creditRelayRemove(request); } catch (error) { // handle error } ``` #### Response fields  **removed** (boolean) true if the relay token was successfully removed. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "removed": true, "request_id": "m8MDnv9okwxFNBV" } ``` ### Webhooks  \=\*=\*=\*= #### PRODUCT\_READY  Fired when the Asset Report has been generated and [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) is ready to be called. If you attempt to retrieve an Asset Report before this webhook has fired, you’ll receive a response with the HTTP status code 400 and a Plaid error code of `PRODUCT_NOT_READY`. #### Properties  **webhook\_type** (string) ASSETS **webhook\_code** (string) PRODUCT\_READY **asset\_report\_id** (string) The asset\_report\_id corresponding to the Asset Report the webhook has fired for. **user\_id** (string) The user\_id corresponding to the User ID the webhook has fired for. **report\_type** (string) Indicates either a Fast Asset Report, which will contain only current identity and balance information, or a Full Asset Report, which will also contain historical balance information and transaction data. Possible values: FULL, FAST **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ASSETS", "webhook_code": "PRODUCT_READY", "asset_report_id": "47dfc92b-bba3-4583-809e-ce871b321f05", "report_type": "FULL" } ``` \=\*=\*=\*= #### ERROR  Fired when Asset Report generation has failed. The resulting `error` will have an `error_type` of `ASSET_REPORT_ERROR`. #### Properties  **webhook\_type** (string) ASSETS **webhook\_code** (string) ERROR **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **asset\_report\_id** (string) The ID associated with the Asset Report. **user\_id** (string) The user\_id corresponding to the User ID the webhook has fired for. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ASSETS", "webhook_code": "ERROR", "asset_report_id": "47dfc92b-bba3-4583-809e-ce871b321f05", "error": { "display_message": null, "error_code": "PRODUCT_NOT_ENABLED", "error_message": "the 'assets' product is not enabled for the following access tokens: access-sandbox-fb88b20c-7b74-4197-8d01-0ab122dad0bc. please ensure that 'assets' is included in the 'product' array when initializing Link and create the Item(s) again.", "error_type": "ASSET_REPORT_ERROR", "request_id": "m8MDnv9okwxFNBV" } } ``` --- # API - Auth | Plaid Docs Auth  ===== #### API reference for Auth endpoints and webhooks  Retrieve bank account information to set up electronic funds transfers, such as ACH payments in the US, EFT payments in Canada, BACS payments in the UK, and IBAN / SIC payments in the EU. For how-to guidance, see the [Auth documentation](https://plaid.com/docs/auth/index.html.md) . | Endpoints | | | --- | --- | | [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) | Fetch account information | | [/bank\_transfer/event/list](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventlist) | Search for updates on micro-deposit verification statuses based on filter criteria | | [/bank\_transfer/event/sync](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventsync) | Get updates on micro-deposit verification statuses using a cursor | | See also | | | --- | --- | | [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) | Create a token for using Auth with a processing partner | | [/sandbox/processor\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxprocessor_tokencreate) | Create a token for testing Auth with a processing partner | | [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) | Create a token for using Auth with Stripe as a processing partner | | [/sandbox/item/set\_verification\_status](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemset_verification_status) | Change a Sandbox Item's micro-deposit verification status | | Webhooks | | | --- | --- | | [DEFAULT\_UPDATE](https://plaid.com/docs/api/products/auth/index.html.md#default_update) | Item has account(s) with updated Auth data | | [AUTOMATICALLY\_VERIFIED](https://plaid.com/docs/api/products/auth/index.html.md#automatically_verified) | Item has been verified | | [VERIFICATION\_EXPIRED](https://plaid.com/docs/api/products/auth/index.html.md#verification_expired) | Item verification has failed | | [BANK\_TRANSFERS\_EVENTS\_UPDATE](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfers_events_update) | New micro-deposit verification events available | | [SMS\_MICRODEPOSITS\_VERIFICATION](https://plaid.com/docs/api/products/auth/index.html.md#sms_microdeposits_verification) | Text message verification status has changed | ### Endpoints  \=\*=\*=\*= #### /auth/get  #### Retrieve auth data  The [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) endpoint returns the bank account and bank identification numbers (such as routing numbers, for US accounts) associated with an Item's checking, savings, and cash management accounts, along with high-level account data and balances when available. Versioning note: In API version 2017-03-08, the schema of the `numbers` object returned by this endpoint is substantially different. For details, see [Plaid API versioning](https://plaid.com/docs/api/versioning/index.html.md#version-2018-05-22) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /auth/get results. **options->account\_ids** (\[string\]) A list of account\_ids to retrieve for the Item. Note: An error will be returned if a provided account\_id is not associated with the Item. /auth/get Node▼ ```javascript const request: AuthGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.authGet(request); const accountData = response.data.accounts; const numbers = response.data.numbers; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) The accounts for which numbers are being retrieved. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **numbers** (object) An object containing identifying numbers used for making electronic transfers to and from the accounts. The identifying number type (ACH, EFT, IBAN, or BACS) used will depend on the country of the account. An account may have more than one number type. If a particular identifying number type is not used by any accounts for which data has been requested, the array for that type will be empty. **numbers->ach** (\[object\]) An array of ACH numbers identifying accounts. **numbers->ach->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->ach->account** (string) The ACH account number for the account. At certain institutions, including Chase, PNC, and (coming May 2025) US Bank, you will receive "tokenized" routing and account numbers, which are not the user's actual account and routing numbers. For important details on how this may impact your integration and on how to avoid fraud, user confusion, and ACH returns, see Tokenized account numbers. **numbers->ach->is\_tokenized\_account\_number** (boolean) Indicates whether the account number is tokenized by the institution. For important details on how tokenized account numbers may impact your integration, see Tokenized account numbers. **numbers->ach->routing** (string) The ACH routing number for the account. This may be a tokenized routing number. For more information, see Tokenized account numbers. **numbers->ach->wire\_routing** (nullable, string) The wire transfer routing number for the account. This field is only populated if the institution is known to use a separate wire transfer routing number. Many institutions do not have a separate wire routing number and use the ACH routing number for wires instead. It is recommended to have the end user manually confirm their wire routing number before sending any wires to their account, especially if this field is null. **numbers->eft** (\[object\]) An array of EFT numbers identifying accounts. **numbers->eft->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->eft->account** (string) The EFT account number for the account **numbers->eft->institution** (string) The EFT institution number for the account **numbers->eft->branch** (string) The EFT branch number for the account **numbers->international** (\[object\]) An array of IBAN numbers identifying accounts. **numbers->international->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->international->iban** (string) The International Bank Account Number (IBAN) for the account **numbers->international->bic** (string) The Bank Identifier Code (BIC) for the account **numbers->bacs** (\[object\]) An array of BACS numbers identifying accounts. **numbers->bacs->account\_id** (string) The Plaid account ID associated with the account numbers **numbers->bacs->account** (string) The BACS account number for the account **numbers->bacs->sort\_code** (string) The BACS sort code for the account **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { "available": 100, "current": 110, "limit": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "mask": "9606", "name": "Plaid Checking", "official_name": "Plaid Gold Checking", "subtype": "checking", "type": "depository" } ], "numbers": { "ach": [ { "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021", "is_tokenized_account_number": false } ], "eft": [ { "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" } ], "international": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "bic": "NWBKGB21", "iban": "GB29NWBK60161331926819" } ], "bacs": [ { "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" } ] }, "item": { "available_products": [ "balance", "identity", "payment_initiation", "transactions" ], "billed_products": [ "assets", "auth" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_117650", "institution_name": "Royal Bank of Plaid", "item_id": "DWVAAPWq4RHGlEaNyGKRTAnPLaEmo8Cvq7na6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "m8MDnv9okwxFNBV" } ``` \=\*=\*=\*= #### /bank\_transfer/event/list  #### List bank transfer events  Use the [/bank\_transfer/event/list](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventlist) endpoint to get a list of Plaid-initiated ACH or bank transfer events based on specified filter criteria. When using Auth with micro-deposit verification enabled, this endpoint can be used to fetch status updates on ACH micro-deposits. For more details, see [micro-deposit events](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) . #### Request fields  **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. **start\_date** (string) The start datetime of bank transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **end\_date** (string) The end datetime of bank transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **bank\_transfer\_id** (string) Plaid’s unique identifier for a bank transfer. **account\_id** (string) The account ID to get events for all transactions to/from an account. **bank\_transfer\_type** (string) The type of bank transfer. This will be either debit or credit. A debit indicates a transfer of money into your origination account; a credit indicates a transfer of money out of your origination account. Possible values: debit, credit, null **event\_types** (\[string\]) Filter events by event type. Possible values: pending, cancelled, failed, posted, reversed **count** (integer) The maximum number of bank transfer events to return. If the number of events matching the above parameters is greater than count, the most recent events will be returned. Default: 25 Maximum: 25 Minimum: 1 **offset** (integer) The offset into the list of bank transfer events. When count=25 and offset=0, the first 25 events will be returned. When count=25 and offset=25, the next 25 bank transfer events will be returned. Default: 0 Minimum: 0 **origination\_account\_id** (string) The origination account ID to get events for transfers from a specific origination account. **direction** (string) Indicates the direction of the transfer: outbound: for API-initiated transfers inbound: for payments received by the FBO account. Possible values: inbound, outbound, null /bank\_transfer/event/list Node▼ ```javascript const request: BankTransferEventListRequest = { start_date: start_date, end_date: end_date, bank_transfer_id: bank_transfer_id, account_id: account_id, bank_transfer_type: bank_transfer_type, event_types: event_types, count: count, offset: offset, origination_account_id: origination_account_id, direction: direction, }; try { const response = await plaidClient.bankTransferEventList(request); const events = response.data.bank_transfer_events; for (const event of events) { // iterate through events } } catch (error) { // handle error } ``` #### Response fields  integer **bank\_transfer\_events** (\[object\]) Plaid’s unique identifier for this event. IDs are sequential unsigned 64-bit integers. Minimum: 0 **bank\_transfer\_events->timestamp** (string) The datetime when this event occurred. This will be of the form 2006-01-02T15:04:05Z. Format: date-time **bank\_transfer\_events->event\_type** (string) The type of event that this bank transfer represents. pending: A new transfer was created; it is in the pending state. cancelled: The transfer was cancelled by the client. failed: The transfer failed, no funds were moved. posted: The transfer has been successfully submitted to the payment network. reversed: A posted transfer was reversed. Possible values: pending, cancelled, failed, posted, reversed **bank\_transfer\_events->account\_id** (string) The account ID associated with the bank transfer. **bank\_transfer\_events->bank\_transfer\_id** (string) Plaid’s unique identifier for a bank transfer. **bank\_transfer\_events->origination\_account\_id** (nullable, string) The ID of the origination account that this balance belongs to. **bank\_transfer\_events->bank\_transfer\_type** (string) The type of bank transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **bank\_transfer\_events->bank\_transfer\_amount** (string) The bank transfer amount. **bank\_transfer\_events->bank\_transfer\_iso\_currency\_code** (string) The currency of the bank transfer amount. **bank\_transfer\_events->failure\_reason** (nullable, object) The failure reason if the type of this transfer is "failed" or "reversed". Null value otherwise. **bank\_transfer\_events->failure\_reason->ach\_return\_code** (nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is reversed. For a full listing of ACH return codes, see Bank Transfers errors. **bank\_transfer\_events->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **bank\_transfer\_events->direction** (nullable, string) Indicates the direction of the transfer: outbound for API-initiated transfers, or inbound for payments received by the FBO account. Possible values: outbound, inbound, null **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "bank_transfer_events": [ { "account_id": "6qL6lWoQkAfNE3mB8Kk5tAnvpX81qefrvvl7B", "bank_transfer_amount": "12.34", "bank_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "bank_transfer_iso_currency_code": "USD", "bank_transfer_type": "credit", "direction": "outbound", "event_id": 1, "event_type": "pending", "failure_reason": null, "origination_account_id": "", "timestamp": "2020-08-06T17:27:15Z" } ], "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /bank\_transfer/event/sync  #### Sync bank transfer events  [/bank\_transfer/event/sync](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventsync) allows you to request up to the next 25 Plaid-initiated bank transfer events that happened after a specific `event_id`. When using Auth with micro-deposit verification enabled, this endpoint can be used to fetch status updates on ACH micro-deposits. For more details, see [micro-deposit events](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) . #### Request fields  **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. **after\_id** (required, integer) The latest (largest) event\_id fetched via the sync endpoint, or 0 initially. Minimum: 0 **count** (integer) The maximum number of bank transfer events to return. Default: 25 Minimum: 1 Maximum: 25 /bank\_transfer/event/sync Node▼ ```javascript const request: BankTransferEventListRequest = { after_id: afterID, count: 25, }; try { const response = await plaidClient.bankTransferEventSync(request); const events = response.data.bank_transfer_events; for (const event of events) { // iterate through events } } catch (error) { // handle error } ``` #### Response fields  integer **bank\_transfer\_events** (\[object\]) Plaid’s unique identifier for this event. IDs are sequential unsigned 64-bit integers. Minimum: 0 **bank\_transfer\_events->timestamp** (string) The datetime when this event occurred. This will be of the form 2006-01-02T15:04:05Z. Format: date-time **bank\_transfer\_events->event\_type** (string) The type of event that this bank transfer represents. pending: A new transfer was created; it is in the pending state. cancelled: The transfer was cancelled by the client. failed: The transfer failed, no funds were moved. posted: The transfer has been successfully submitted to the payment network. reversed: A posted transfer was reversed. Possible values: pending, cancelled, failed, posted, reversed **bank\_transfer\_events->account\_id** (string) The account ID associated with the bank transfer. **bank\_transfer\_events->bank\_transfer\_id** (string) Plaid’s unique identifier for a bank transfer. **bank\_transfer\_events->origination\_account\_id** (nullable, string) The ID of the origination account that this balance belongs to. **bank\_transfer\_events->bank\_transfer\_type** (string) The type of bank transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **bank\_transfer\_events->bank\_transfer\_amount** (string) The bank transfer amount. **bank\_transfer\_events->bank\_transfer\_iso\_currency\_code** (string) The currency of the bank transfer amount. **bank\_transfer\_events->failure\_reason** (nullable, object) The failure reason if the type of this transfer is "failed" or "reversed". Null value otherwise. **bank\_transfer\_events->failure\_reason->ach\_return\_code** (nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is reversed. For a full listing of ACH return codes, see Bank Transfers errors. **bank\_transfer\_events->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **bank\_transfer\_events->direction** (nullable, string) Indicates the direction of the transfer: outbound for API-initiated transfers, or inbound for payments received by the FBO account. Possible values: outbound, inbound, null **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "bank_transfer_events": [ { "account_id": "6qL6lWoQkAfNE3mB8Kk5tAnvpX81qefrvvl7B", "bank_transfer_amount": "12.34", "bank_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "bank_transfer_iso_currency_code": "USD", "bank_transfer_type": "credit", "direction": "outbound", "event_id": 1, "event_type": "pending", "failure_reason": null, "origination_account_id": "", "timestamp": "2020-08-06T17:27:15Z" } ], "request_id": "mdqfuVxeoza6mhu" } ``` ### Webhooks  Updates are sent for Items that are linked using micro-deposits (excluding Instant Micro-deposits). When an automated micro-deposit is created, Plaid sends a webhook upon successful verification. If verification does not succeed after seven days for an automated micro-deposit, Plaid sends a `VERIFICATION_EXPIRED` webhook. If you attempt to retrieve an automated micro-deposit Item before verification succeeds, you’ll receive a response with the HTTP status code 400 and a Plaid error code of `PRODUCT_NOT_READY`. For Same-Day micro-deposits, Plaid does not send `AUTOMATICALLY_VERIFIED` or `VERIFICATION_EXPIRED` webhooks, but you may instead use the `BANK_TRANSFERS_EVENTS_UPDATE` webhook to [access the underlying ACH events](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) of micro-deposits. Plaid will trigger a `DEFAULT_UPDATE` webhook for Items that undergo a change in Auth data. This is generally caused by data partners notifying Plaid of a change in their account numbering system or to their routing numbers. To avoid returned transactions, customers that receive a `DEFAULT_UPDATE` webhook with the `account_ids_with_updated_auth` object populated should immediately discontinue all usages of existing Auth data for those accounts and call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) or [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) to obtain updated account and routing numbers. \=\*=\*=\*= #### DEFAULT\_UPDATE  Plaid will trigger a `DEFAULT_UPDATE` webhook for Items that undergo a change in Auth data. This is generally caused by data partners notifying Plaid of a change in their account numbering system or to their routing numbers. To avoid returned transactions, customers that receive a `DEFAULT_UPDATE` webhook with the `account_ids_with_updated_auth` object populated should immediately discontinue all usages of existing Auth data for those accounts and call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) or [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) to obtain updated account and routing numbers. #### Properties  **webhook\_type** (string) AUTH **webhook\_code** (string) DEFAULT\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **account\_ids\_with\_new\_auth** (\[string\]) An array of account\_id's for accounts that contain new auth. **account\_ids\_with\_updated\_auth** (object) An object with keys of account\_id's that are mapped to their respective auth attributes that changed. ACCOUNT\_NUMBER and ROUTING\_NUMBER are the two potential values that can be flagged as updated. Example: { "XMBvvyMGQ1UoLbKByoMqH3nXMj84ALSdE5B58": \["ACCOUNT\_NUMBER"\] } **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "AUTH", "webhook_code": "DEFAULT_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "account_ids_with_updated_auth": { "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp": [ "ACCOUNT_NUMBER" ] }, "error": null, "environment": "production" } ``` \=\*=\*=\*= #### AUTOMATICALLY\_VERIFIED  Fired when an Item is verified via automated micro-deposits. We recommend communicating to your users when this event is received to notify them that their account is verified and ready for use. #### Properties  **webhook\_type** (string) AUTH **webhook\_code** (string) AUTOMATICALLY\_VERIFIED **account\_id** (string) The account\_id of the account associated with the webhook **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error API Object ```json { "webhook_type": "AUTH", "webhook_code": "AUTOMATICALLY_VERIFIED", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "environment": "production", "error": null } ``` \=\*=\*=\*= #### VERIFICATION\_EXPIRED  Fired when an Item was not verified via automated micro-deposits after seven days since the automated micro-deposit was made. #### Properties  **webhook\_type** (string) AUTH **webhook\_code** (string) VERIFICATION\_EXPIRED **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **account\_id** (string) The account\_id of the account associated with the webhook **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error API Object ```json { "webhook_type": "AUTH", "webhook_code": "VERIFICATION_EXPIRED", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "environment": "production", "error": null } ``` \=\*=\*=\*= #### BANK\_TRANSFERS\_EVENTS\_UPDATE  Fired when new ACH events are available. To begin receiving this webhook, you must first register your webhook listener endpoint via the [webhooks page in the Dashboard](https://dashboard.plaid.com/team/webhooks) . The `BANK_TRANSFERS_EVENTS_UPDATE` webhook can be used to track the progress of ACH transfers used in [micro-deposit verification](https://plaid.comhttps:///docs/auth/coverage/microdeposit-events/index.html.md) . Receiving this webhook indicates you should fetch the new events from [/bank\_transfer/event/sync](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventsync) . Note that [Transfer](https://plaid.com/docs/transfer/index.html.md) customers should use Transfer webhooks instead of using `BANK_TRANSFERS_EVENTS_UPDATE`; see [micro-deposit events documentation](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) for more details. #### Properties  **webhook\_type** (string) BANK\_TRANSFERS **webhook\_code** (string) BANK\_TRANSFERS\_EVENTS\_UPDATE **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "BANK_TRANSFERS", "webhook_code": "BANK_TRANSFERS_EVENTS_UPDATE", "environment": "production" } ``` \=\*=\*=\*= #### SMS\_MICRODEPOSITS\_VERIFICATION  Contains the state of a SMS same-day microdeposits verification session. #### Properties  **webhook\_type** (string) AUTH **webhook\_code** (string) SMS\_MICRODEPOSITS\_VERIFICATION **status** (string) The final status of the same-day microdeposits verification. Will always be MANUALLY\_VERIFIED or VERIFICATION\_FAILED. **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **account\_id** (string) The external account ID of the affected account **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "AUTH", "webhook_code": "SMS_MICRODEPOSITS_VERIFICATION", "status": "MANUALLY_VERIFIED", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "environment": "sandbox" } ``` --- # API | Plaid Docs Balance  ======== #### API reference for Balance endpoints and webhooks  Verify real-time account balances and assess the risk of insufficient balance ACH returns. For how-to guidance, see the [Balance documentation](https://plaid.com/docs/balance/index.html.md) . | Endpoints | | | --- | --- | | [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) | Fetch real-time balances | | [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) | Fetch real-time balances and assess a proposed transaction for ACH return risk | ### Endpoints  \=\*=\*=\*= #### /accounts/balance/get  #### Retrieve real-time balance data  The [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) endpoint returns the real-time balance for each of an Item's accounts. While other endpoints, such as [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) , return a balance object, [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) forces the available and current balance fields to be refreshed rather than cached. This endpoint can be used for existing Items that were added via any of Plaid’s other products. This endpoint can be used as long as Link has been initialized with any other product, `balance` itself is not a product that can be used to initialize Link. As this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests. Note: If you are getting real-time balance for the purpose of assessing the return risk of a proposed ACH transaction, it is recommended to use [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) instead of [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) . [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) returns the same real-time balance information and also provides access to Signal Rules, which provides no-code transaction business logic configuration, backtesting and recommendations for tuning your transaction acceptance logic, and the ability to easily switch between Balance and Signal Transaction Scores as needed for ultra-low-latency, ML-powered risk assessments. For more details, see the [Balance documentation](https://plaid.com/docs/balance/index.html.md#balance-integration-options) . #### Request fields  **access\_token** (required, string) The access token associated with the Item data is being requested for. **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\_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. **options** (object) Optional parameters to /accounts/balance/get. **options->account\_ids** (\[string\]) A list of account\_ids to retrieve for the Item. The default value is null. Note: An error will be returned if a provided account\_id is not associated with the Item. **options->min\_last\_updated\_datetime** (string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only necessary when the institution is ins\_128026 (Capital One), and one or more account types being requested is a non-depository account (such as a credit card) as Capital One does not provide real-time balance for non-depository accounts. In this case, a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For all other institutions, as well as for depository accounts at Capital One (including all checking and savings accounts) this field is ignored and real-time balance information will be fetched. If this field is not ignored, and no acceptable balance is available, an INVALID\_RESULT error with the code LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned. Format: date-time /accounts/balance/get Node▼ ```javascript // Pull real-time balance information for each account associated // with the Item const request: AccountsGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.accountsBalanceGet(request); const accounts = response.data.accounts; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) An array of financial institution accounts associated with the Item. If /accounts/balance/get was called, each account will include real-time balance information. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "holder_category": "personal", "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "balances": { "available": null, "current": 410, "iso_currency_code": "USD", "limit": 2000, "unofficial_currency_code": null }, "mask": "3333", "name": "Plaid Credit Card", "official_name": "Plaid Diamond 12.5% APR Interest Credit Card", "subtype": "credit card", "type": "credit" }, { "account_id": "Pp1Vpkl9w8sajvK6oEEKtr7vZxBnGpf7LxxLE", "balances": { "available": null, "current": 65262, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "7777", "name": "Plaid Student Loan", "official_name": null, "subtype": "student", "type": "loan" } ], "item": { "available_products": [ "balance", "identity", "investments" ], "billed_products": [ "assets", "auth", "liabilities", "transactions" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "qk5Bxes3gDfv4F2" } ``` --- # API - Beacon (beta) | Plaid Docs Beacon  ======= #### API reference for Beacon endpoints and webhooks  Add and report users on the Plaid Beacon network. | Endpoints | | | --- | --- | | [/beacon/user/create](https://plaid.com/docs/api/products/beacon/index.html.md#beaconusercreate) | Create and scan a Beacon User against a Beacon Program | | [/beacon/user/get](https://plaid.com/docs/api/products/beacon/index.html.md#beaconuserget) | Fetch a Beacon User | | [/beacon/user/update](https://plaid.com/docs/api/products/beacon/index.html.md#beaconuserupdate) | Update and rescan a Beacon User | | [/beacon/user/account\_insights/get](https://plaid.com/docs/api/products/beacon/index.html.md#beaconuseraccount_insightsget) | Fetch a Beacon User's account insights | | [/beacon/user/history/list](https://plaid.com/docs/api/products/beacon/index.html.md#beaconuserhistorylist) | List a Beacon User's history | | [/beacon/report/create](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreportcreate) | Create a fraud report for a given Beacon User | | [/beacon/report/get](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreportget) | Fetch a Beacon Report | | [/beacon/report/list](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreportlist) | List Beacon Reports for a given Beacon User | | [/beacon/report\_syndication/get](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreport_syndicationget) | Fetch a Beacon Report Syndication | | [/beacon/report\_syndication/list](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreport_syndicationlist) | List Beacon Report Syndications for a given Beacon User | | [/beacon/duplicate/get](https://plaid.com/docs/api/products/beacon/index.html.md#beaconduplicateget) | Fetch a Beacon duplicate | | See also | | | --- | --- | | [/dashboard\_user/get](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userget) | Retrieve information about a dashboard user | | [/dashboard\_user/list](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userlist) | List dashboard users | | Webhooks | | | --- | --- | | [USER\_STATUS\_UPDATED](https://plaid.com/docs/api/products/beacon/index.html.md#user_status_updated) | Beacon User status has changed | | [REPORT\_CREATED](https://plaid.com/docs/api/products/beacon/index.html.md#report_created) | Beacon Report has been created | | [REPORT\_UPDATED](https://plaid.com/docs/api/products/beacon/index.html.md#report_updated) | Beacon Report has been updated | | [REPORT\_SYNDICATION\_CREATED](https://plaid.com/docs/api/products/beacon/index.html.md#report_syndication_created) | New Network Report matches one of your Users | | [DUPLICATE\_DETECTED](https://plaid.com/docs/api/products/beacon/index.html.md#duplicate_detected) | Duplicate Beacon User was created | \=\*=\*=\*= #### /beacon/user/create  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Create a Beacon User  Create and scan a Beacon User against your Beacon Program, according to your program's settings. When you submit a new user to [/beacon/user/create](https://plaid.com/docs/api/products/beacon/index.html.md#beaconusercreate) , several checks are performed immediately: \- The user's PII (provided within the `user` object) is searched against all other users within the Beacon Program you specified. If a match is found that violates your program's "Duplicate Information Filtering" settings, the user will be returned with a status of `pending_review`. \- The user's PII is also searched against all fraud reports created by your organization across all of your Beacon Programs. If the user's data matches a fraud report that your team created, the user will be returned with a status of `rejected`. \- Finally, the user's PII is searched against all fraud report shared with the Beacon Network by other companies. If a matching fraud report is found, the user will be returned with a `pending_review` status if your program has enabled automatic flagging based on network fraud. #### Request fields  **program\_id** (required, string) ID of the associated Beacon Program. **client\_user\_id** (required, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **user** (required, object) A Beacon User's data which is used to check against duplicate records and the Beacon Fraud Network. In order to create a Beacon User, in addition to the name, either the date\_of\_birth or the depository\_accounts field must be provided. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (required, object) The full name for a given Beacon User. **user->name->given\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Home address for the associated user. For more context on this field, see Input Validation by Country. **user->address->street** (required, string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (required, string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->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. **user->address->country** (required, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (string) A phone number in E.164 format. **user->id\_number** (object) The ID number associated with a Beacon User. **user->id\_number->value** (required, string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (required, string) 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 **user->ip\_address** (string) An IPv4 or IPV6 address. **user->depository\_accounts** (\[object\]) Provide a list of bank accounts that are associated with this Beacon User. These accounts will be scanned across the Beacon Network and used to find duplicate records. Note: These accounts will not have Bank Account Insights. To receive Bank Account Insights please supply access\_tokens. **user->depository\_accounts->account\_number** (required, string) Must be a valid US Bank Account Number **user->depository\_accounts->routing\_number** (required, string) The routing number of the account. **access\_tokens** (\[string\]) Send this array of access tokens to link accounts to the Beacon User and have them evaluated for Account Insights. A maximum of 50 accounts total can be added to a single Beacon User. **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. /beacon/user/create Node▼ ```javascript const request: BeaconUserCreateRequest = { program_id: 'becprg_11111111111111', client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', access_tokens: [access_token], user: { email_address: 'user@example.com', date_of_birth: '1975-01-18', name: { given_name: 'Leslie', family_name: 'Knope', }, address: { street: '123 Main St.', street2: 'Unit 42', city: 'Pawnee', region: 'IN', postal_code: '46001', country: 'US', }, }, }; try { const response = await plaidClient.beaconUserCreate(request); console.log(response.status.value); } catch (error) { // handle error } ``` #### Response fields  **item\_ids** (\[string\]) An array of Plaid Item IDs corresponding to the Accounts associated with this Beacon User. **id** (string) ID of the associated Beacon User. **version** (integer) The version field begins with 1 and increments each time the user is updated. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **updated\_at** (string) An ISO8601 formatted timestamp. This field indicates the last time the resource was modified. Format: date-time **status** (string) A status of a Beacon User. rejected: The Beacon User has been rejected for fraud. Users can be automatically or manually rejected. pending\_review: The Beacon User has been marked for review. cleared: The Beacon User has been cleared of fraud. Possible values: rejected, pending\_review, cleared **program\_id** (string) ID of the associated Beacon Program. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **user** (object) A Beacon User's data and resulting analysis when checked against duplicate records and the Beacon Fraud Network. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (object) The full name for a given Beacon User. **user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include a postal code **user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (nullable, string) A phone number in E.164 format. **user->id\_number** (nullable, object) The ID number associated with a Beacon User. **user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (string) 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 **user->ip\_address** (nullable, string) An IPv4 or IPV6 address. string **user->depository\_accounts** (\[object\]) The last 2-4 numeric characters of this account’s account number. **user->depository\_accounts->routing\_number** (string) The routing number of the account. **user->depository\_accounts->added\_at** (string) An ISO8601 formatted timestamp. Format: date-time **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "item_ids": [ "515cd85321d3649aecddc015" ], "id": "becusr_42cF1MNo42r9Xj", "version": 1, "created_at": "2020-07-24T03:26:02Z", "updated_at": "2020-07-24T03:26:02Z", "status": "cleared", "program_id": "becprg_11111111111111", "client_user_id": "your-db-id-3b24110", "user": { "date_of_birth": "1990-05-29", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "email_address": "user@example.com", "phone_number": "+19876543212", "id_number": { "value": "123456789", "type": "us_ssn" }, "ip_address": "192.0.2.42", "depository_accounts": [ { "account_mask": "4000", "routing_number": "021000021", "added_at": "2020-07-24T03:26:02Z" } ] }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/user/get  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Get a Beacon User  Fetch a Beacon User. The Beacon User is returned with all of their associated information and a `status` based on the Beacon Network duplicate record and fraud checks. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **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. /beacon/user/get Node▼ ```javascript const request: BeaconUserGetRequest = { beacon_user_id: 'becusr_11111111111111', }; try { const response = await plaidClient.beaconUserGet(request); } catch (error) { // handle error } ``` #### Response fields  **item\_ids** (\[string\]) An array of Plaid Item IDs corresponding to the Accounts associated with this Beacon User. **id** (string) ID of the associated Beacon User. **version** (integer) The version field begins with 1 and increments each time the user is updated. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **updated\_at** (string) An ISO8601 formatted timestamp. This field indicates the last time the resource was modified. Format: date-time **status** (string) A status of a Beacon User. rejected: The Beacon User has been rejected for fraud. Users can be automatically or manually rejected. pending\_review: The Beacon User has been marked for review. cleared: The Beacon User has been cleared of fraud. Possible values: rejected, pending\_review, cleared **program\_id** (string) ID of the associated Beacon Program. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **user** (object) A Beacon User's data and resulting analysis when checked against duplicate records and the Beacon Fraud Network. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (object) The full name for a given Beacon User. **user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include a postal code **user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (nullable, string) A phone number in E.164 format. **user->id\_number** (nullable, object) The ID number associated with a Beacon User. **user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (string) 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 **user->ip\_address** (nullable, string) An IPv4 or IPV6 address. string **user->depository\_accounts** (\[object\]) The last 2-4 numeric characters of this account’s account number. **user->depository\_accounts->routing\_number** (string) The routing number of the account. **user->depository\_accounts->added\_at** (string) An ISO8601 formatted timestamp. Format: date-time **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "item_ids": [ "515cd85321d3649aecddc015" ], "id": "becusr_42cF1MNo42r9Xj", "version": 1, "created_at": "2020-07-24T03:26:02Z", "updated_at": "2020-07-24T03:26:02Z", "status": "cleared", "program_id": "becprg_11111111111111", "client_user_id": "your-db-id-3b24110", "user": { "date_of_birth": "1990-05-29", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "email_address": "user@example.com", "phone_number": "+19876543212", "id_number": { "value": "123456789", "type": "us_ssn" }, "ip_address": "192.0.2.42", "depository_accounts": [ { "account_mask": "4000", "routing_number": "021000021", "added_at": "2020-07-24T03:26:02Z" } ] }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/user/update  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Update the identity data of a Beacon User  Update the identity data for a Beacon User in your Beacon Program or add new accounts to the Beacon User. Similar to [/beacon/user/create](https://plaid.com/docs/api/products/beacon/index.html.md#beaconusercreate) , several checks are performed immediately when you submit an identity data change to [/beacon/user/update](https://plaid.com/docs/api/products/beacon/index.html.md#beaconuserupdate) : \- The user's updated PII is searched against all other users within the Beacon Program you specified. If a match is found that violates your program's "Duplicate Information Filtering" settings, the user will be returned with a status of `pending_review`. \- The user's updated PII is also searched against all fraud reports created by your organization across all of your Beacon Programs. If the user's data matches a fraud report that your team created, the user will be returned with a status of `rejected`. \- Finally, the user's PII is searched against all fraud report shared with the Beacon Network by other companies. If a matching fraud report is found, the user will be returned with a `pending_review` status if your program has enabled automatic flagging based on network fraud. Plaid maintains a version history for each Beacon User, so the Beacon User's identity data before and after the update is retained as separate versions. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **user** (object) A subset of a Beacon User's data which is used to patch the existing identity data associated with a Beacon User. At least one field must be provided. If left unset or null, user data will not be patched. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (object) The full name for a given Beacon User. **user->name->given\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Home address for the associated user. For more context on this field, see Input Validation by Country. **user->address->street** (required, string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (required, string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->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. **user->address->country** (required, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (string) A phone number in E.164 format. **user->id\_number** (object) The ID number associated with a Beacon User. **user->id\_number->value** (required, string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (required, string) 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 **user->ip\_address** (string) An IPv4 or IPV6 address. required, string **user->depository\_accounts** (\[object\]) Must be a valid US Bank Account Number **user->depository\_accounts->routing\_number** (required, string) The routing number of the account. **access\_tokens** (\[string\]) Send this array of access tokens to add accounts to this user for evaluation. This will add accounts to this Beacon User. If left null only existing accounts will be returned in response. A maximum of 50 accounts total can be added to a Beacon User. **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. /beacon/user/update Node▼ ```javascript const request: BeaconUserUpdateRequest = { beacon_user_id: 'becusr_11111111111111', user: { email_address: 'user@example.com', date_of_birth: '1975-01-18', name: { given_name: 'Leslie', family_name: 'Knope', }, address: { street: '123 Main St.', street2: 'Unit 42', city: 'Pawnee', region: 'IN', postal_code: '46001', country: 'US', }, }, }; try { const response = await plaidClient.beaconUserUpdate(request); console.log(response.status.value); } catch (error) { // handle error } ``` #### Response fields  **item\_ids** (\[string\]) An array of Plaid Item IDs corresponding to the Accounts associated with this Beacon User. **id** (string) ID of the associated Beacon User. **version** (integer) The version field begins with 1 and increments each time the user is updated. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **updated\_at** (string) An ISO8601 formatted timestamp. This field indicates the last time the resource was modified. Format: date-time **status** (string) A status of a Beacon User. rejected: The Beacon User has been rejected for fraud. Users can be automatically or manually rejected. pending\_review: The Beacon User has been marked for review. cleared: The Beacon User has been cleared of fraud. Possible values: rejected, pending\_review, cleared **program\_id** (string) ID of the associated Beacon Program. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **user** (object) A Beacon User's data and resulting analysis when checked against duplicate records and the Beacon Fraud Network. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (object) The full name for a given Beacon User. **user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include a postal code **user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (nullable, string) A phone number in E.164 format. **user->id\_number** (nullable, object) The ID number associated with a Beacon User. **user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (string) 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 **user->ip\_address** (nullable, string) An IPv4 or IPV6 address. string **user->depository\_accounts** (\[object\]) The last 2-4 numeric characters of this account’s account number. **user->depository\_accounts->routing\_number** (string) The routing number of the account. **user->depository\_accounts->added\_at** (string) An ISO8601 formatted timestamp. Format: date-time **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "item_ids": [ "515cd85321d3649aecddc015" ], "id": "becusr_42cF1MNo42r9Xj", "version": 1, "created_at": "2020-07-24T03:26:02Z", "updated_at": "2020-07-24T03:26:02Z", "status": "cleared", "program_id": "becprg_11111111111111", "client_user_id": "your-db-id-3b24110", "user": { "date_of_birth": "1990-05-29", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "email_address": "user@example.com", "phone_number": "+19876543212", "id_number": { "value": "123456789", "type": "us_ssn" }, "ip_address": "192.0.2.42", "depository_accounts": [ { "account_mask": "4000", "routing_number": "021000021", "added_at": "2020-07-24T03:26:02Z" } ] }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/user/account\_insights/get  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Get Account Insights for a Beacon User  Get Account Insights for all Accounts linked to this Beacon User. The insights for each account are computed based on the information that was last retrieved from the financial institution. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. /beacon/user/account\_insights/get Node▼ ```javascript const request: BeaconUserAccountInsightsGetRequest = { beacon_user_id: 'becusr_11111111111111', access_token: 'access-sandbox-12345678', client_id: process.env.PLAID_CLIENT_ID, secret: process.env.PLAID_SECRET, }; try { const response = await plaidClient.beaconUserAccountInsightsGet(request); console.log(response.status.value); } catch (error) { // handle error } ``` #### Response fields  **beacon\_user\_id** (string) ID of the associated Beacon User. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **updated\_at** (string) An ISO8601 formatted timestamp. This field indicates the last time the resource was modified. Format: date-time **bank\_account\_insights** (object) A collection of Bank Accounts linked to an Item that is associated with this Beacon User. **bank\_account\_insights->item\_id** (string) The Plaid Item ID the Bank Accounts belong to. string **bank\_account\_insights->accounts** (\[object\]) The Plaid account\_id **bank\_account\_insights->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **bank\_account\_insights->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **bank\_account\_insights->accounts->attributes** (object) The attributes object contains data that can be used to assess account risk. Examples of data include: days\_since\_first\_plaid\_connection: The number of days since the first time the Item was connected to an application via Plaid plaid\_connections\_count\_7d: The number of times the Item has been connected to applications via Plaid over the past 7 days plaid\_connections\_count\_30d: The number of times the Item has been connected to applications via Plaid over the past 30 days total\_plaid\_connections\_count: The number of times the Item has been connected to applications via Plaid For the full list and detailed documentation of core attributes available, or to request that core attributes not be returned, contact Sales or your Plaid account manager **bank\_account\_insights->accounts->attributes->days\_since\_first\_plaid\_connection** (nullable, integer) The number of days since the first time the Item was connected to an application via Plaid **bank\_account\_insights->accounts->attributes->is\_account\_closed** (nullable, boolean) Indicates if the account has been closed by the financial institution or the consumer, or is at risk of being closed **bank\_account\_insights->accounts->attributes->is\_account\_frozen\_or\_restricted** (nullable, boolean) Indicates whether the account has withdrawals and transfers disabled or if access to the account is restricted. This could be due to a freeze by the credit issuer, legal restrictions (e.g., sanctions), or regulatory requirements limiting monthly withdrawals, among other reasons **bank\_account\_insights->accounts->attributes->total\_plaid\_connections\_count** (nullable, integer) The total number of times the item has been connected to applications via Plaid **bank\_account\_insights->accounts->attributes->plaid\_connections\_count\_7d** (nullable, integer) The number of times the Item has been connected to applications via Plaid over the past 7 days **bank\_account\_insights->accounts->attributes->plaid\_connections\_count\_30d** (nullable, integer) The number of times the Item has been connected to applications via Plaid over the past 30 days **bank\_account\_insights->accounts->attributes->failed\_plaid\_non\_oauth\_authentication\_attempts\_count\_3d** (nullable, integer) The number of failed non-OAuth authentication attempts via Plaid for this bank account over the past 3 days **bank\_account\_insights->accounts->attributes->plaid\_non\_oauth\_authentication\_attempts\_count\_3d** (nullable, integer) The number of non-OAuth authentication attempts via Plaid for this bank account over the past 3 days **bank\_account\_insights->accounts->attributes->failed\_plaid\_non\_oauth\_authentication\_attempts\_count\_7d** (nullable, integer) The number of failed non-OAuth authentication attempts via Plaid for this bank account over the past 7 days **bank\_account\_insights->accounts->attributes->plaid\_non\_oauth\_authentication\_attempts\_count\_7d** (nullable, integer) The number of non-OAuth authentication attempts via Plaid for this bank account over the past 7 days **bank\_account\_insights->accounts->attributes->failed\_plaid\_non\_oauth\_authentication\_attempts\_count\_30d** (nullable, integer) The number of failed non-OAuth authentication attempts via Plaid for this bank account over the past 30 days **bank\_account\_insights->accounts->attributes->plaid\_non\_oauth\_authentication\_attempts\_count\_30d** (nullable, integer) The number of non-OAuth authentication attempts via Plaid for this bank account over the past 30 days **bank\_account\_insights->accounts->attributes->distinct\_ip\_addresses\_count\_3d** (nullable, integer) The number of distinct IP addresses linked to the same bank account during Plaid authentication in the last 3 days **bank\_account\_insights->accounts->attributes->distinct\_ip\_addresses\_count\_7d** (nullable, integer) The number of distinct IP addresses linked to the same bank account during Plaid authentication in the last 7 days **bank\_account\_insights->accounts->attributes->distinct\_ip\_addresses\_count\_30d** (nullable, integer) The number of distinct IP addresses linked to the same bank account during Plaid authentication in the last 30 days **bank\_account\_insights->accounts->attributes->distinct\_ip\_addresses\_count\_90d** (nullable, integer) The number of distinct IP addresses linked to the same bank account during Plaid authentication in the last 90 days **bank\_account\_insights->accounts->attributes->distinct\_user\_agents\_count\_3d** (nullable, integer) The number of distinct user agents linked to the same bank account during Plaid authentication in the last 3 days **bank\_account\_insights->accounts->attributes->distinct\_user\_agents\_count\_7d** (nullable, integer) The number of distinct user agents linked to the same bank account during Plaid authentication in the last 7 days **bank\_account\_insights->accounts->attributes->distinct\_user\_agents\_count\_30d** (nullable, integer) The number of distinct user agents linked to the same bank account during Plaid authentication in the last 30 days **bank\_account\_insights->accounts->attributes->distinct\_user\_agents\_count\_90d** (nullable, integer) The number of distinct user agents linked to the same bank account during Plaid authentication in the last 90 days **bank\_account\_insights->accounts->attributes->address\_change\_count\_28d** (nullable, integer) The number of times the account's addresses on file have changed over the past 28 days **bank\_account\_insights->accounts->attributes->email\_change\_count\_28d** (nullable, integer) The number of times the account's email addresses on file have changed over the past 28 days **bank\_account\_insights->accounts->attributes->phone\_change\_count\_28d** (nullable, integer) The number of times the account's phone numbers on file have changed over the past 28 days **bank\_account\_insights->accounts->attributes->address\_change\_count\_90d** (nullable, integer) The number of times the account's addresses on file have changed over the past 90 days **bank\_account\_insights->accounts->attributes->email\_change\_count\_90d** (nullable, integer) The number of times the account's email addresses on file have changed over the past 90 days **bank\_account\_insights->accounts->attributes->phone\_change\_count\_90d** (nullable, integer) The number of times the account's phone numbers on file have changed over the past 90 days **bank\_account\_insights->accounts->attributes->days\_since\_account\_opening** (nullable, integer) The number of days since the bank account was opened, as reported by the financial institution **bank\_account\_insights->accounts->attributes->days\_since\_first\_observed\_transaction** (nullable, integer) The number of days since the oldest transaction available to Plaid for this account. This measure, combined with Plaid connection history, can be used to infer the age of the account **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "beacon_user_id": "becusr_42cF1MNo42r9Xj", "created_at": "2020-07-24T03:26:02Z", "updated_at": "2020-07-24T03:26:02Z", "bank_account_insights": { "item_id": "515cd85321d3649aecddc015", "accounts": [ { "account_id": "blgvvBlXw3cq5GMPwqB6s6q4dLKB9WcVqGDGo", "type": "depository", "subtype": "checking", "attributes": { "days_since_first_plaid_connection": 1, "is_account_closed": false, "is_account_frozen_or_restricted": false, "total_plaid_connections_count": 1, "plaid_connections_count_7d": 1, "plaid_connections_count_30d": 1, "failed_plaid_non_oauth_authentication_attempts_count_3d": 1, "plaid_non_oauth_authentication_attempts_count_3d": 1, "failed_plaid_non_oauth_authentication_attempts_count_7d": 1, "plaid_non_oauth_authentication_attempts_count_7d": 1, "failed_plaid_non_oauth_authentication_attempts_count_30d": 1, "plaid_non_oauth_authentication_attempts_count_30d": 1, "distinct_ip_addresses_count_3d": 1, "distinct_ip_addresses_count_7d": 1, "distinct_ip_addresses_count_30d": 1, "distinct_ip_addresses_count_90d": 1, "distinct_user_agents_count_3d": 1, "distinct_user_agents_count_7d": 1, "distinct_user_agents_count_30d": 1, "distinct_user_agents_count_90d": 1, "address_change_count_28d": 1, "email_change_count_28d": 2, "phone_change_count_28d": 1, "address_change_count_90d": 3, "email_change_count_90d": 4, "phone_change_count_90d": 2, "days_since_account_opening": 365, "days_since_first_observed_transaction": 180 } } ] }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/user/history/list  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### List a Beacon User's history  List all changes to the Beacon User in reverse-chronological order. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **cursor** (string) An identifier that determines which page of results you receive. **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. /beacon/user/history/list Node▼ ```javascript const request: BeaconUserHistoryListRequest = { beacon_user_id: 'becusr_11111111111111', }; try { const response = await plaidClient.beaconUserHistoryList(request); } catch (error) { // handle error } ``` #### Response fields  \[string\] **beacon\_users** (\[object\]) An array of Plaid Item IDs corresponding to the Accounts associated with this Beacon User. **beacon\_users->id** (string) ID of the associated Beacon User. **beacon\_users->version** (integer) The version field begins with 1 and increments each time the user is updated. **beacon\_users->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **beacon\_users->updated\_at** (string) An ISO8601 formatted timestamp. This field indicates the last time the resource was modified. Format: date-time **beacon\_users->status** (string) A status of a Beacon User. rejected: The Beacon User has been rejected for fraud. Users can be automatically or manually rejected. pending\_review: The Beacon User has been marked for review. cleared: The Beacon User has been cleared of fraud. Possible values: rejected, pending\_review, cleared **beacon\_users->program\_id** (string) ID of the associated Beacon Program. **beacon\_users->client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **beacon\_users->user** (object) A Beacon User's data and resulting analysis when checked against duplicate records and the Beacon Fraud Network. **beacon\_users->user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **beacon\_users->user->name** (object) The full name for a given Beacon User. **beacon\_users->user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **beacon\_users->user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **beacon\_users->user->address** (object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include a postal code **beacon\_users->user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **beacon\_users->user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **beacon\_users->user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **beacon\_users->user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **beacon\_users->user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **beacon\_users->user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **beacon\_users->user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **beacon\_users->user->phone\_number** (nullable, string) A phone number in E.164 format. **beacon\_users->user->id\_number** (nullable, object) The ID number associated with a Beacon User. **beacon\_users->user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **beacon\_users->user->id\_number->type** (string) 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 **beacon\_users->user->ip\_address** (nullable, string) An IPv4 or IPV6 address. string **beacon\_users->user->depository\_accounts** (\[object\]) The last 2-4 numeric characters of this account’s account number. **beacon\_users->user->depository\_accounts->routing\_number** (string) The routing number of the account. **beacon\_users->user->depository\_accounts->added\_at** (string) An ISO8601 formatted timestamp. Format: date-time **beacon\_users->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **beacon\_users->audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **beacon\_users->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **beacon\_users->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "beacon_users": [ { "item_ids": [ "515cd85321d3649aecddc015" ], "id": "becusr_42cF1MNo42r9Xj", "version": 1, "created_at": "2020-07-24T03:26:02Z", "updated_at": "2020-07-24T03:26:02Z", "status": "cleared", "program_id": "becprg_11111111111111", "client_user_id": "your-db-id-3b24110", "user": { "date_of_birth": "1990-05-29", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "email_address": "user@example.com", "phone_number": "+19876543212", "id_number": { "value": "123456789", "type": "us_ssn" }, "ip_address": "192.0.2.42", "depository_accounts": [ { "account_mask": "4000", "routing_number": "021000021", "added_at": "2020-07-24T03:26:02Z" } ] }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/report/create  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Create a Beacon Report  Create a fraud report for a given Beacon User. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **type** (required, string) The type of Beacon Report. first\_party: If this is the same individual as the one who submitted the KYC. stolen: If this is a different individual from the one who submitted the KYC. synthetic: If this is an individual using fabricated information. account\_takeover: If this individual's account was compromised. unknown: If you aren't sure who committed the fraud. Possible values: first\_party, stolen, synthetic, account\_takeover, unknown **fraud\_date** (required, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **fraud\_amount** (object) The amount and currency of the fraud or attempted fraud. fraud\_amount should be omitted to indicate an unknown fraud amount. **fraud\_amount->iso\_currency\_code** (required, string) An ISO-4217 currency code. Possible values: USD **fraud\_amount->value** (required, number) The amount value. This value can be 0 to indicate no money was lost. Must not contain more than two digits of precision (e.g., 1.23). Format: double **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. /beacon/report/create Node▼ ```javascript const request: BeaconReportCreateRequest = { beacon_user_id: 'becusr_11111111111111', type: 'first_party', fraud_date: '1975-01-18', }; try { const response = await plaidClient.beaconReportCreate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Beacon Report. **beacon\_user\_id** (string) ID of the associated Beacon User. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **type** (string) The type of Beacon Report. first\_party: If this is the same individual as the one who submitted the KYC. stolen: If this is a different individual from the one who submitted the KYC. synthetic: If this is an individual using fabricated information. account\_takeover: If this individual's account was compromised. data\_breach: If this individual's data was compromised in a breach. unknown: If you aren't sure who committed the fraud. Possible values: first\_party, stolen, synthetic, account\_takeover, data\_breach, unknown **fraud\_date** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **event\_date** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **fraud\_amount** (nullable, object) The amount and currency of the fraud or attempted fraud. fraud\_amount should be omitted to indicate an unknown fraud amount. **fraud\_amount->iso\_currency\_code** (string) An ISO-4217 currency code. Possible values: USD **fraud\_amount->value** (number) The amount value. This value can be 0 to indicate no money was lost. Must not contain more than two digits of precision (e.g., 1.23). Format: double **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "becrpt_11111111111111", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "created_at": "2020-07-24T03:26:02Z", "type": "first_party", "fraud_date": "1990-05-29", "event_date": "1990-05-29", "fraud_amount": { "iso_currency_code": "USD", "value": 100 }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/report/get  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Get a Beacon Report  Returns a Beacon report for a given Beacon report id. #### Request fields  **beacon\_report\_id** (required, string) ID of the associated Beacon Report. **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. /beacon/report/get Node▼ ```javascript const request: BeaconReportGetRequest = { beacon_report_id: 'becrpt_11111111111111', }; try { const response = await plaidClient.beaconReportGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Beacon Report. **beacon\_user\_id** (string) ID of the associated Beacon User. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **type** (string) The type of Beacon Report. first\_party: If this is the same individual as the one who submitted the KYC. stolen: If this is a different individual from the one who submitted the KYC. synthetic: If this is an individual using fabricated information. account\_takeover: If this individual's account was compromised. data\_breach: If this individual's data was compromised in a breach. unknown: If you aren't sure who committed the fraud. Possible values: first\_party, stolen, synthetic, account\_takeover, data\_breach, unknown **fraud\_date** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **event\_date** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **fraud\_amount** (nullable, object) The amount and currency of the fraud or attempted fraud. fraud\_amount should be omitted to indicate an unknown fraud amount. **fraud\_amount->iso\_currency\_code** (string) An ISO-4217 currency code. Possible values: USD **fraud\_amount->value** (number) The amount value. This value can be 0 to indicate no money was lost. Must not contain more than two digits of precision (e.g., 1.23). Format: double **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "becrpt_11111111111111", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "created_at": "2020-07-24T03:26:02Z", "type": "first_party", "fraud_date": "1990-05-29", "event_date": "1990-05-29", "fraud_amount": { "iso_currency_code": "USD", "value": 100 }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/report/list  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### List Beacon Reports for a Beacon User  Use the [/beacon/report/list](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreportlist) endpoint to view all Beacon Reports you created for a specific Beacon User. The reports returned by this endpoint are exclusively reports you created for a specific user. A Beacon User can only have one active report at a time, but a new report can be created if a previous report has been deleted. The results from this endpoint are paginated; the `next_cursor` field will be populated if there is another page of results that can be retrieved. To fetch the next page, pass the `next_cursor` value as the `cursor` parameter in the next request. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **cursor** (string) An identifier that determines which page of results you receive. **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. /beacon/report/list Node▼ ```javascript const request: BeaconReportListRequest = { beacon_user_id: 'becusr_11111111111111', }; try { const response = await plaidClient.beaconReportList(request); } catch (error) { // handle error } ``` #### Response fields  string **beacon\_reports** (\[object\]) ID of the associated Beacon Report. **beacon\_reports->beacon\_user\_id** (string) ID of the associated Beacon User. **beacon\_reports->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **beacon\_reports->type** (string) The type of Beacon Report. first\_party: If this is the same individual as the one who submitted the KYC. stolen: If this is a different individual from the one who submitted the KYC. synthetic: If this is an individual using fabricated information. account\_takeover: If this individual's account was compromised. data\_breach: If this individual's data was compromised in a breach. unknown: If you aren't sure who committed the fraud. Possible values: first\_party, stolen, synthetic, account\_takeover, data\_breach, unknown **beacon\_reports->fraud\_date** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **beacon\_reports->event\_date** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **beacon\_reports->fraud\_amount** (nullable, object) The amount and currency of the fraud or attempted fraud. fraud\_amount should be omitted to indicate an unknown fraud amount. **beacon\_reports->fraud\_amount->iso\_currency\_code** (string) An ISO-4217 currency code. Possible values: USD **beacon\_reports->fraud\_amount->value** (number) The amount value. This value can be 0 to indicate no money was lost. Must not contain more than two digits of precision (e.g., 1.23). Format: double **beacon\_reports->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **beacon\_reports->audit\_trail->source** (string) A type indicating what caused a resource to be changed or updated. dashboard - The resource was created or updated by a member of your team via the Plaid dashboard. api - The resource was created or updated via the Plaid API. system - The resource was created or updated automatically by a part of the Plaid Beacon system. For example, if another business using Plaid Beacon created a fraud report that matched one of your users, your matching user's status would automatically be updated and the audit trail source would be system. bulk\_import - The resource was created or updated as part of a bulk import process. For example, if your company provided a CSV of user data as part of your initial onboarding, the audit trail source would be bulk\_import. Possible values: dashboard, api, system, bulk\_import **beacon\_reports->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **beacon\_reports->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "beacon_reports": [ { "id": "becrpt_11111111111111", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "created_at": "2020-07-24T03:26:02Z", "type": "first_party", "fraud_date": "1990-05-29", "event_date": "1990-05-29", "fraud_amount": { "iso_currency_code": "USD", "value": 100 }, "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/report\_syndication/get  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Get a Beacon Report Syndication  Returns a Beacon Report Syndication for a given Beacon Report Syndication id. #### Request fields  **beacon\_report\_syndication\_id** (required, string) ID of the associated Beacon Report Syndication. **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. /beacon/report\_syndication/get Node▼ ```javascript const request: BeaconReportSyndicationGetRequest = { beacon_report_syndication_id: 'becrsn_11111111111111', }; try { const response = await plaidClient.beaconReportSyndicationGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Beacon Report Syndication. **beacon\_user\_id** (string) ID of the associated Beacon User. **report** (object) A subset of information from a Beacon Report that has been syndicated to a matching Beacon User in your program. The id field in the response is the ID of the original report that was syndicated. If the original report was created by your organization, the field will be filled with the ID of the report. Otherwise, the field will be null indicating that the original report was created by another Beacon customer. **report->id** (nullable, string) ID of the associated Beacon Report. **report->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **report->type** (string) The type of Beacon Report. first\_party: If this is the same individual as the one who submitted the KYC. stolen: If this is a different individual from the one who submitted the KYC. synthetic: If this is an individual using fabricated information. account\_takeover: If this individual's account was compromised. data\_breach: If this individual's data was compromised in a breach. unknown: If you aren't sure who committed the fraud. Possible values: first\_party, stolen, synthetic, account\_takeover, data\_breach, unknown **report->fraud\_date** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **report->event\_date** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **analysis** (object) Analysis of which fields matched between the originally reported Beacon User and the Beacon User that the report was syndicated to. **analysis->address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->date\_of\_birth** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->email\_address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->name** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->id\_number** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->ip\_address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->phone\_number** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data string **analysis->depository\_accounts** (\[object\]) The last 2-4 numeric characters of this account’s account number. **analysis->depository\_accounts->routing\_number** (string) The routing number of the account. **analysis->depository\_accounts->match\_status** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "becrsn_11111111111111", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "report": { "id": "becrpt_11111111111111", "created_at": "2020-07-24T03:26:02Z", "type": "first_party", "fraud_date": "1990-05-29", "event_date": "1990-05-29" }, "analysis": { "address": "match", "date_of_birth": "match", "email_address": "match", "name": "match", "id_number": "match", "ip_address": "match", "phone_number": "match", "depository_accounts": [ { "account_mask": "4000", "routing_number": "021000021", "match_status": "match" } ] }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/report\_syndication/list  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### List Beacon Report Syndications for a Beacon User  Use the [/beacon/report\_syndication/list](https://plaid.com/docs/api/products/beacon/index.html.md#beaconreport_syndicationlist) endpoint to view all Beacon Reports that have been syndicated to a specific Beacon User. This endpoint returns Beacon Report Syndications which are references to Beacon Reports created either by you, or another Beacon customer, that matched the specified Beacon User. A Beacon User can have multiple active Beacon Report Syndications at once. The results from this endpoint are paginated; the `next_cursor` field will be populated if there is another page of results that can be retrieved. To fetch the next page, pass the `next_cursor` value as the `cursor` parameter in the next request. #### Request fields  **beacon\_user\_id** (required, string) ID of the associated Beacon User. **cursor** (string) An identifier that determines which page of results you receive. **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. /beacon/report\_syndication/list Node▼ ```javascript const request: BeaconReportSyndicationListRequest = { beacon_user_id: 'becusr_11111111111111', }; try { const response = await plaidClient.beaconReportSyndicationList(request); } catch (error) { // handle error } ``` #### Response fields  string **beacon\_report\_syndications** (\[object\]) ID of the associated Beacon Report Syndication. **beacon\_report\_syndications->beacon\_user\_id** (string) ID of the associated Beacon User. **beacon\_report\_syndications->report** (object) A subset of information from a Beacon Report that has been syndicated to a matching Beacon User in your program. The id field in the response is the ID of the original report that was syndicated. If the original report was created by your organization, the field will be filled with the ID of the report. Otherwise, the field will be null indicating that the original report was created by another Beacon customer. **beacon\_report\_syndications->report->id** (nullable, string) ID of the associated Beacon Report. **beacon\_report\_syndications->report->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **beacon\_report\_syndications->report->type** (string) The type of Beacon Report. first\_party: If this is the same individual as the one who submitted the KYC. stolen: If this is a different individual from the one who submitted the KYC. synthetic: If this is an individual using fabricated information. account\_takeover: If this individual's account was compromised. data\_breach: If this individual's data was compromised in a breach. unknown: If you aren't sure who committed the fraud. Possible values: first\_party, stolen, synthetic, account\_takeover, data\_breach, unknown **beacon\_report\_syndications->report->fraud\_date** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **beacon\_report\_syndications->report->event\_date** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **beacon\_report\_syndications->analysis** (object) Analysis of which fields matched between the originally reported Beacon User and the Beacon User that the report was syndicated to. **beacon\_report\_syndications->analysis->address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **beacon\_report\_syndications->analysis->date\_of\_birth** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **beacon\_report\_syndications->analysis->email\_address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **beacon\_report\_syndications->analysis->name** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **beacon\_report\_syndications->analysis->id\_number** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **beacon\_report\_syndications->analysis->ip\_address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **beacon\_report\_syndications->analysis->phone\_number** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data string **beacon\_report\_syndications->analysis->depository\_accounts** (\[object\]) The last 2-4 numeric characters of this account’s account number. **beacon\_report\_syndications->analysis->depository\_accounts->routing\_number** (string) The routing number of the account. **beacon\_report\_syndications->analysis->depository\_accounts->match\_status** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "beacon_report_syndications": [ { "id": "becrsn_11111111111111", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "report": { "id": "becrpt_11111111111111", "created_at": "2020-07-24T03:26:02Z", "type": "first_party", "fraud_date": "1990-05-29", "event_date": "1990-05-29" }, "analysis": { "address": "match", "date_of_birth": "match", "email_address": "match", "name": "match", "id_number": "match", "ip_address": "match", "phone_number": "match", "depository_accounts": [ { "account_mask": "4000", "routing_number": "021000021", "match_status": "match" } ] } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /beacon/duplicate/get  This feature is in currently in beta; Your account must be enabled for this feature in order to test it in Sandbox. To enable this feature or check your status, contact your account manager or [submit a product access Support ticket](https://dashboard.plaid.com/support/new/product-and-development/product-troubleshooting/request-product-access) . #### Get a Beacon Duplicate  Returns a Beacon Duplicate for a given Beacon Duplicate id. A Beacon Duplicate represents a pair of similar Beacon Users within your organization. Two Beacon User revisions are returned for each Duplicate record in either the `beacon_user1` or `beacon_user2` response fields. The `analysis` field in the response indicates which fields matched between `beacon_user1` and `beacon_user2`. #### Request fields  **beacon\_duplicate\_id** (required, string) ID of the associated Beacon Duplicate. **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. /beacon/duplicate/get Node▼ ```javascript const request: BeaconDuplicateGetRequest = { beacon_duplicate_id: 'becdup_11111111111111', }; try { const response = await plaidClient.beaconDuplicateGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Beacon Duplicate. **beacon\_user1** (object) A Beacon User Revision identifies a Beacon User at some point in its revision history. **beacon\_user1->id** (string) ID of the associated Beacon User. **beacon\_user1->version** (integer) The version field begins with 1 and increments with each subsequent revision. **beacon\_user2** (object) A Beacon User Revision identifies a Beacon User at some point in its revision history. **beacon\_user2->id** (string) ID of the associated Beacon User. **beacon\_user2->version** (integer) The version field begins with 1 and increments with each subsequent revision. **analysis** (object) Analysis of which fields matched between one Beacon User and another. **analysis->address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->date\_of\_birth** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->email\_address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->name** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->id\_number** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->ip\_address** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **analysis->phone\_number** (string) An enum indicating the match type between two Beacon Users. match indicates that the provided input data was a strong match against the other Beacon User. partial\_match indicates the data approximately matched the other Beacon User. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to compare this field against the other Beacon User and it did not match the provided input data. no\_data indicates that Plaid was unable to compare this field against the original Beacon User because the field was not present in one of the Beacon Users. Possible values: match, partial\_match, no\_match, no\_data **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "becdup_11111111111111", "beacon_user1": { "id": "becusr_42cF1MNo42r9Xj", "version": 1 }, "beacon_user2": { "id": "becusr_42cF1MNo42r9Xj", "version": 1 }, "analysis": { "address": "match", "date_of_birth": "match", "email_address": "match", "name": "match", "id_number": "match", "ip_address": "match", "phone_number": "match" }, "request_id": "saKrIBuEB9qJZng" } ``` ### Webhooks  A user in `cleared` status may change to a `pending_review` status after a Beacon Report Syndication is received, which would trigger both a `USER_STATUS_UPDATED` as well as a `REPORT_SYNDICATION_CREATED` webhook. New Beacon Users may also be flagged as duplicates of another user, which triggers a `DUPLICATE_DETECTED` webhook. Beacon Reports created and managed by your account will trigger `REPORT_CREATED` and `REPORT_UPDATED` webhooks, and may also result in a `USER_STATUS_UPDATED` if the user status is changed from `cleared` to `rejected` at that time. \=\*=\*=\*= #### USER\_STATUS\_UPDATED  Fired when a Beacon User status has changed, which can occur manually via the dashboard or when information is reported to the Beacon network. #### Properties  **webhook\_type** (string) BEACON **webhook\_code** (string) USER\_STATUS\_UPDATED **beacon\_user\_id** (string) The ID of the associated Beacon user. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "BEACON", "webhook_code": "USER_STATUS_UPDATED", "beacon_user_id": "becusr_4WciCrtbxF76T8", "environment": "production" } ``` \=\*=\*=\*= #### REPORT\_CREATED  Fired when one of your Beacon Users is first reported to the Beacon network. #### Properties  **webhook\_type** (string) BEACON **webhook\_code** (string) REPORT\_CREATED **beacon\_report\_id** (string) The ID of the associated Beacon Report. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "BEACON", "webhook_code": "REPORT_CREATED", "beacon_report_id": "becrpt_2zugxV6hWQZG91", "environment": "production" } ``` \=\*=\*=\*= #### REPORT\_UPDATED  Fired when one of your existing Beacon Reports has been modified or removed from the Beacon Network. #### Properties  **webhook\_type** (string) BEACON **webhook\_code** (string) REPORT\_UPDATED **beacon\_report\_id** (string) The ID of the associated Beacon Report. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "BEACON", "webhook_code": "REPORT_UPDATED", "beacon_report_id": "becrpt_2zugxV6hWQZG91", "environment": "production" } ``` \=\*=\*=\*= #### REPORT\_SYNDICATION\_CREATED  Fired when a report created on the Beacon Network matches with one of your Beacon Users. #### Properties  **webhook\_type** (string) BEACON **webhook\_code** (string) REPORT\_SYNDICATION\_CREATED **beacon\_report\_syndication\_id** (string) The ID of the associated Beacon Report Syndication. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "BEACON", "webhook_code": "REPORT_SYNDICATION_CREATED", "beacon_report_syndication_id": "becrsn_eZPgiiv3JH8rfT", "environment": "production" } ``` \=\*=\*=\*= #### DUPLICATE\_DETECTED  Fired when a Beacon User created within your organization matches one of your existing users. #### Properties  **webhook\_type** (string) BEACON **webhook\_code** (string) DUPLICATE\_DETECTED **beacon\_duplicate\_id** (string) The ID of the associated Beacon Duplicate. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "BEACON", "webhook_code": "DUPLICATE_DETECTED", "beacon_duplicate_id": "becdup_erJcFn97r9sugZ", "environment": "production" } ``` --- # API - Consumer Report (by Plaid Check) | Plaid Docs Plaid Check  ============ #### API reference for Plaid Check endpoints and webhooks  | Endpoints | | | --- | --- | | [/cra/check\_report/base\_report/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportbase_reportget) | Retrieve the base Consumer Report for your user | | [/cra/check\_report/income\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportincome_insightsget) | Retrieve cash flow insights from your user's banks | | [/cra/check\_report/network\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportnetwork_insightsget) | Retrieve connection insights from the Plaid network (beta) | | [/cra/check\_report/partner\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportpartner_insightsget) | Retrieve cash flow insights from our partners | | [/cra/check\_report/pdf/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportpdfget) | Retrieve Consumer Reports in PDF format | | [/cra/check\_report/cashflow\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcashflow_insightsget) | Retrieve Cash Flow Insights report | | [/cra/check\_report/lend\_score/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportlend_scoreget) | Retrieve a Plaid LendScore generated from your user's banking data | | [/cra/check\_report/verification/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportverificationget) | Retrieve Verification Reports (VOA, Employment Refresh) for your user | | [/cra/check\_report/verification/pdf/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportverificationpdfget) | Retrieve Verification Reports in PDF format | | [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) | Generate a new Consumer Report for your user with the latest data | | [/cra/monitoring\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsget) | Get Cash Flow Updates (beta) | | [/cra/monitoring\_insights/subscribe](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightssubscribe) | Subscribe to Cash Flow Updates (beta) | | [/cra/monitoring\_insights/unsubscribe](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsunsubscribe) | Unsubscribe from Cash Flow Updates (beta) | | See also | | | --- | --- | | [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) | Create a token for initializing a Link session with Plaid Check | | [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) | Create a user ID and token for use with Plaid Check | | [/user/update](https://plaid.com/docs/api/users/index.html.md#userupdate) | Update an existing user token to work with Plaid Check, or change user details | | [/user/remove](https://plaid.com/docs/api/users/index.html.md#userremove) | Removes the user and their relevant data | | [/user/items/get](https://plaid.com/docs/api/users/index.html.md#useritemsget) | Returns Items associated with a user along with their corresponding statuses | | [/sandbox/cra/cashflow\_updates/update](https://plaid.com/docs/api/sandbox/index.html.md#sandboxcracashflow_updatesupdate) | Manually trigger a cashflow insights update for a user (Sandbox only) | | Webhooks | | | --- | --- | | [CHECK\_REPORT\_READY](https://plaid.com/docs/api/products/check/index.html.md#check_report_ready) | A Consumer Report is ready to be retrieved | | [CHECK\_REPORT\_FAILED](https://plaid.com/docs/api/products/check/index.html.md#check_report_failed) | Plaid Check failed to create a report | | Cash Flow Updates (beta) webhooks | | | --- | --- | | [INSIGHTS\_UPDATED](https://plaid.com/docs/api/products/check/index.html.md#insights_updated) | Insights have been refreshed | | [LARGE\_DEPOSIT\_DETECTED](https://plaid.com/docs/api/products/check/index.html.md#large_deposit_detected) | A large deposit over $5000 has been detected | | [LOW\_BALANCE\_DETECTED](https://plaid.com/docs/api/products/check/index.html.md#low_balance_detected) | Current balance has crossed below $100 | | [NEW\_LOAN\_PAYMENT\_DETECTED](https://plaid.com/docs/api/products/check/index.html.md#new_loan_payment_detected) | A new loan payment has been detected | | [NSF\_OVERDRAFT\_DETECTED](https://plaid.com/docs/api/products/check/index.html.md#nsf_overdraft_detected) | An overdraft transaction has been detected | \=\*=\*=\*= #### /cra/check\_report/base\_report/get  #### Retrieve a Base Report  This endpoint allows you to retrieve the Base Report for your user, allowing you to receive comprehensive bank account and cash flow data. You should call this endpoint after you've received a `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn't have sufficient data to generate the base report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. /cra/check\_report/base\_report/get Node▼ ```javascript try { const response = await client.craCheckReportBaseReportGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) An object representing a Base Report **report->report\_id** (string) A unique ID identifying an Base Report. Like all Plaid identifiers, this ID is case sensitive. **report->date\_generated** (string) The date and time when the Base Report was created, in ISO 8601 format (e.g. "2018-04-12T03:32:11Z"). Format: date-time **report->days\_requested** (number) The number of days of transaction history requested. **report->client\_report\_id** (nullable, string) Client-generated identifier, which can be used by lenders to track loan applications. **report->items** (\[object\]) Data returned by Plaid about each of the Items included in the Base Report. **report->items->institution\_name** (string) The full financial institution name associated with the Item. **report->items->institution\_id** (string) The id of the financial institution associated with the Item. **report->items->date\_last\_updated** (string) The date and time when this Item’s data was last retrieved from the financial institution, in ISO 8601 format. Format: date-time **report->items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **report->items->accounts** (\[object\]) Data about each of the accounts open on the Item. **report->items->accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->items->accounts->balances** (object) Information about an account's balances. **report->items->accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get. If current is null this field is guaranteed not to be null. Format: double **report->items->accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **report->items->accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **report->items->accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only used and expected when the institution is ins\_128026 (Capital One) and the Item contains one or more accounts with a non-depository account type, in which case a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For Capital One depository accounts as well as all other account types on all other institutions, this field is ignored. See account type schema for a full list of account types. If the balance that is pulled is older than the given timestamp for Items with this field required, an INVALID\_REQUEST error with the code of LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned with the most recent timestamp for the requested account contained in the response. Format: date-time **report->items->accounts->balances->average\_balance** (nullable, number) The average historical balance for the entire report Format: double **report->items->accounts->balances->average\_monthly\_balances** (\[object\]) The average historical balance of each calendar month **report->items->accounts->balances->average\_monthly\_balances->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). **report->items->accounts->balances->average\_monthly\_balances->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). **report->items->accounts->balances->average\_monthly\_balances->average\_balance** (object) This contains an amount, denominated in the currency specified by either iso\_currency\_code or unofficial\_currency\_code **report->items->accounts->balances->average\_monthly\_balances->average\_balance->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->balances->average\_monthly\_balances->average\_balance->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->balances->average\_monthly\_balances->average\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->balances->most\_recent\_thirty\_day\_average\_balance** (nullable, number) The average historical balance from the most recent 30 days Format: double **report->items->accounts->consumer\_disputes** (\[object\]) The information about previously submitted valid dispute statements by the consumer **report->items->accounts->consumer\_disputes->consumer\_dispute\_id** (deprecated, string) (Deprecated) A unique identifier (UUID) of the consumer dispute that can be used for troubleshooting **report->items->accounts->consumer\_disputes->dispute\_field\_create\_date** (string) Date of the disputed field (e.g. transaction date), in an ISO 8601 format (YYYY-MM-DD) Format: date **report->items->accounts->consumer\_disputes->category** (string) Type of data being disputed by the consumer Possible values: TRANSACTION, BALANCE, IDENTITY, OTHER **report->items->accounts->consumer\_disputes->statement** (string) Text content of dispute **report->items->accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **report->items->accounts->metadata** (object) Metadata about the extracted account. **report->items->accounts->metadata->start\_date** (nullable, string) The beginning of the range of the financial institution provided data for the account, in ISO 8601 format ("yyyy-mm-dd"). Format: date **report->items->accounts->metadata->end\_date** (nullable, string) The end of the range of the financial institution provided data for the account, in ISO 8601 format ("yyyy-mm-dd"). Format: date **report->items->accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **report->items->accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **report->items->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **report->items->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **report->items->accounts->days\_available** (number) The duration of transaction history available within this report for this Item, typically defined as the time since the date of the earliest transaction in that account. **report->items->accounts->transactions** (\[object\]) Transaction history associated with the account. Transaction history returned by endpoints such as /transactions/get or /investments/transactions/get will be returned in the top-level transactions field instead. Some transactions may have their details masked in accordance to FCRA. **report->items->accounts->transactions->account\_id** (string) The ID of the account in which this transaction occurred. **report->items->accounts->transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. Format: double **report->items->accounts->transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->items->accounts->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->items->accounts->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **report->items->accounts->transactions->credit\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for credit use cases, but not limited to such use cases. See the taxonomy csv file for a full list of credit categories. **report->items->accounts->transactions->credit\_category->primary** (string) A high level category that communicates the broad category of the transaction. **report->items->accounts->transactions->credit\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **report->items->accounts->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **report->items->accounts->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **report->items->accounts->transactions->date\_transacted** (nullable, string) The date on which the transaction took place, in IS0 8601 format. **report->items->accounts->transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **report->items->accounts->transactions->location->address** (nullable, string) The street address where the transaction occurred. **report->items->accounts->transactions->location->city** (nullable, string) The city where the transaction occurred. **report->items->accounts->transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **report->items->accounts->transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **report->items->accounts->transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **report->items->accounts->transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **report->items->accounts->transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **report->items->accounts->transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **report->items->accounts->transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **report->items->accounts->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->items->accounts->transactions->account\_owner** (nullable, string) The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts. **report->items->accounts->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->items->accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. This array can also be empty if no owners are found. **report->items->accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **report->items->accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->phone\_numbers->data** (string) The phone number. **report->items->accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **report->items->accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **report->items->accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->emails->data** (string) The email address. **report->items->accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **report->items->accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **report->items->accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->items->accounts->owners->addresses->data** (object) Data about the components comprising an address. **report->items->accounts->owners->addresses->data->city** (nullable, string) The full city name **report->items->accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **report->items->accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **report->items->accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **report->items->accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **report->items->accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **report->items->accounts->ownership\_type** (nullable, string) How an asset is owned. association: Ownership by a corporation, partnership, or unincorporated association, including for-profit and not-for-profit organizations. individual: Ownership by an individual. joint: Joint ownership by multiple parties. trust: Ownership by a revocable or irrevocable trust. Possible values: null, individual, joint, association, trust **report->items->accounts->account\_insights** (deprecated, object) Calculated insights derived from transaction-level data. This field has been deprecated in favor of Base Report attributes aggregated across accounts and will be removed in a future release. **report->items->accounts->account\_insights->oldest\_transaction\_date** (nullable, string) Date of the earliest transaction for the account. Format: date **report->items->accounts->account\_insights->most\_recent\_transaction\_date** (nullable, string) Date of the most recent transaction for the account. Format: date **report->items->accounts->account\_insights->days\_available** (integer) Number of days days available for the account. **report->items->accounts->account\_insights->average\_days\_between\_transactions** (number) Average number of days between sequential transactions **report->items->accounts->account\_insights->longest\_gaps\_between\_transactions** (\[object\]) Longest gap between sequential transactions in a time period. This array can include multiple time periods. **report->items->accounts->account\_insights->longest\_gaps\_between\_transactions->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->longest\_gaps\_between\_transactions->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->longest\_gaps\_between\_transactions->days** (nullable, integer) Largest number of days between sequential transactions for this time period. **report->items->accounts->account\_insights->number\_of\_inflows** (\[object\]) The number of debits into the account. This array will be empty for non-depository accounts. **report->items->accounts->account\_insights->number\_of\_inflows->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->number\_of\_inflows->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->number\_of\_inflows->count** (integer) The number of credits or debits out of the account for this time period. **report->items->accounts->account\_insights->average\_inflow\_amounts** (\[object\]) Average amount of debit transactions into the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->account\_insights->average\_inflow\_amounts->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->average\_inflow\_amounts->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->average\_inflow\_amounts->total\_amount** (object) This contains an amount, denominated in the currency specified by either iso\_currency\_code or unofficial\_currency\_code **report->items->accounts->account\_insights->average\_inflow\_amounts->total\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->account\_insights->average\_inflow\_amounts->total\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->account\_insights->average\_inflow\_amounts->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->account\_insights->number\_of\_outflows** (\[object\]) The number of outflows from the account. This array will be empty for non-depository accounts. **report->items->accounts->account\_insights->number\_of\_outflows->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->number\_of\_outflows->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->number\_of\_outflows->count** (integer) The number of credits or debits out of the account for this time period. **report->items->accounts->account\_insights->average\_outflow\_amounts** (\[object\]) Average amount of transactions out of the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->account\_insights->average\_outflow\_amounts->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->average\_outflow\_amounts->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->accounts->account\_insights->average\_outflow\_amounts->total\_amount** (object) This contains an amount, denominated in the currency specified by either iso\_currency\_code or unofficial\_currency\_code **report->items->accounts->account\_insights->average\_outflow\_amounts->total\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->account\_insights->average\_outflow\_amounts->total\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->account\_insights->average\_outflow\_amounts->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->account\_insights->number\_of\_days\_no\_transactions** (integer) Number of days with no transactions **report->items->accounts->attributes** (object) Calculated attributes derived from transaction-level data. **report->items->accounts->attributes->is\_primary\_account** (nullable, boolean) Prediction indicator of whether the account is a primary account. Only one account per account type across the items connected will have a value of true. **report->items->accounts->attributes->primary\_account\_score** (nullable, number) Value ranging from 0-1. The higher the score, the more confident we are of the account being the primary account. **report->items->accounts->attributes->nsf\_overdraft\_transactions\_count** (integer) The number of net NSF fee transactions for a given account within the report time range (not counting any fees that were reversed within the time range). **report->items->accounts->attributes->nsf\_overdraft\_transactions\_count\_30d** (integer) The number of net NSF fee transactions within the last 30 days for a given account (not counting any fees that were reversed within the time range). **report->items->accounts->attributes->nsf\_overdraft\_transactions\_count\_60d** (integer) The number of net NSF fee transactions within the last 60 days for a given account (not counting any fees that were reversed within the time range). **report->items->accounts->attributes->nsf\_overdraft\_transactions\_count\_90d** (integer) The number of net NSF fee transactions within the last 90 days for a given account (not counting any fees that were reversed within the time range). **report->items->accounts->attributes->total\_inflow\_amount** (nullable, object) Total amount of debit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_inflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_inflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_inflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_inflow\_amount\_30d** (nullable, object) Total amount of debit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_inflow\_amount\_30d->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_inflow\_amount\_30d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_inflow\_amount\_30d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_inflow\_amount\_60d** (nullable, object) Total amount of debit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_inflow\_amount\_60d->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_inflow\_amount\_60d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_inflow\_amount\_60d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_inflow\_amount\_90d** (nullable, object) Total amount of debit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_inflow\_amount\_90d->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_inflow\_amount\_90d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_inflow\_amount\_90d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_outflow\_amount** (nullable, object) Total amount of credit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_outflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_outflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_outflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_outflow\_amount\_30d** (nullable, object) Total amount of credit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_outflow\_amount\_30d->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_outflow\_amount\_30d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_outflow\_amount\_30d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_outflow\_amount\_60d** (nullable, object) Total amount of credit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_outflow\_amount\_60d->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_outflow\_amount\_60d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_outflow\_amount\_60d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->accounts->attributes->total\_outflow\_amount\_90d** (nullable, object) Total amount of credit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **report->items->accounts->attributes->total\_outflow\_amount\_90d->amount** (number) Value of amount with up to 2 decimal places. **report->items->accounts->attributes->total\_outflow\_amount\_90d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->accounts->attributes->total\_outflow\_amount\_90d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes** (object) Calculated attributes derived from transaction-level data, aggregated across accounts. **report->attributes->nsf\_overdraft\_transactions\_count** (integer) The number of net NSF fee transactions in the time range for the report (not counting any fees that were reversed within that time range). **report->attributes->nsf\_overdraft\_transactions\_count\_30d** (integer) The number of net NSF fee transactions in the last 30 days in the report (not counting any fees that were reversed within that time range). **report->attributes->nsf\_overdraft\_transactions\_count\_60d** (integer) The number of net NSF fee transactions in the last 60 days in the report (not counting any fees that were reversed within that time range). **report->attributes->nsf\_overdraft\_transactions\_count\_90d** (integer) The number of net NSF fee transactions in the last 90 days in the report (not counting any fees that were reversed within that time range). **report->attributes->total\_inflow\_amount** (nullable, object) Total amount of debit transactions into the report's accounts in the time period of the report. This field only takes into account USD transactions from the accounts. **report->attributes->total\_inflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_inflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_inflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_inflow\_amount\_30d** (nullable, object) Total amount of debit transactions into the report's accounts in the last 30 days. This field only takes into account USD transactions from the accounts. **report->attributes->total\_inflow\_amount\_30d->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_inflow\_amount\_30d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_inflow\_amount\_30d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_inflow\_amount\_60d** (nullable, object) Total amount of debit transactions into the report's accounts in the last 60 days. This field only takes into account USD transactions from the accounts. **report->attributes->total\_inflow\_amount\_60d->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_inflow\_amount\_60d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_inflow\_amount\_60d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_inflow\_amount\_90d** (nullable, object) Total amount of debit transactions into the report's account in the last 90 days. This field only takes into account USD transactions from the accounts. **report->attributes->total\_inflow\_amount\_90d->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_inflow\_amount\_90d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_inflow\_amount\_90d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_outflow\_amount** (nullable, object) Total amount of credit transactions into the report's accounts in the time period of the report. This field only takes into account USD transactions from the accounts. **report->attributes->total\_outflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_outflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_outflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_outflow\_amount\_30d** (nullable, object) Total amount of credit transactions into the report's accounts in the last 30 days. This field only takes into account USD transactions from the accounts. **report->attributes->total\_outflow\_amount\_30d->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_outflow\_amount\_30d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_outflow\_amount\_30d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_outflow\_amount\_60d** (nullable, object) Total amount of credit transactions into the report's accounts in the last 60 days. This field only takes into account USD transactions from the accounts. **report->attributes->total\_outflow\_amount\_60d->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_outflow\_amount\_60d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_outflow\_amount\_60d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->attributes->total\_outflow\_amount\_90d** (nullable, object) Total amount of credit transactions into the report's accounts in the last 90 days. This field only takes into account USD transactions from the accounts. **report->attributes->total\_outflow\_amount\_90d->amount** (number) Value of amount with up to 2 decimal places. **report->attributes->total\_outflow\_amount\_90d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->attributes->total\_outflow\_amount\_90d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **warnings** (\[object\]) This array contains any information about errors or alerts related to the Base Report that did not block generation of the report. **warnings->warning\_type** (string) The warning type, which will always be BASE\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The User has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Note: when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "report": { "date_generated": "2024-07-16T01:52:42.912331716Z", "days_requested": 365, "attributes": { "total_inflow_amount": { "amount": -2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_inflow_amount_30d": { "amount": -1000, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_inflow_amount_60d": { "amount": -2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_inflow_amount_90d": { "amount": -2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount": { "amount": 2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount_30d": { "amount": 1000, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount_60d": { "amount": 2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount_90d": { "amount": 2500, "iso_currency_code": "USD", "unofficial_currency_code": null } }, "items": [ { "accounts": [ { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_insights": { "average_days_between_transactions": 0.15, "average_inflow_amount": [ { "end_date": "2024-07-31", "start_date": "2024-07-01", "total_amount": { "amount": 1077.93, "iso_currency_code": "USD", "unofficial_currency_code": null } } ], "average_inflow_amounts": [ { "end_date": "2024-07-31", "start_date": "2024-07-01", "total_amount": { "amount": 1077.93, "iso_currency_code": "USD", "unofficial_currency_code": null } }, { "end_date": "2024-08-31", "start_date": "2024-08-01", "total_amount": { "amount": 1076.93, "iso_currency_code": "USD", "unofficial_currency_code": null } } ], "average_outflow_amount": [ { "end_date": "2024-07-31", "start_date": "2024-07-01", "total_amount": { "amount": 34.95, "iso_currency_code": "USD", "unofficial_currency_code": null } } ], "average_outflow_amounts": [ { "end_date": "2024-07-31", "start_date": "2024-07-01", "total_amount": { "amount": 34.95, "iso_currency_code": "USD", "unofficial_currency_code": null } }, { "end_date": "2024-08-31", "start_date": "2024-08-01", "total_amount": { "amount": 0, "iso_currency_code": "USD", "unofficial_currency_code": null } } ], "days_available": 365, "longest_gap_between_transactions": [ { "days": 1, "end_date": "2024-07-31", "start_date": "2024-07-01" } ], "longest_gaps_between_transactions": [ { "days": 1, "end_date": "2024-07-31", "start_date": "2024-07-01" }, { "days": 2, "end_date": "2024-08-31", "start_date": "2024-08-01" } ], "most_recent_transaction_date": "2024-07-16", "number_of_days_no_transactions": 0, "number_of_inflows": [ { "count": 1, "end_date": "2024-07-31", "start_date": "2024-07-01" } ], "number_of_outflows": [ { "count": 27, "end_date": "2024-07-31", "start_date": "2024-07-01" } ], "oldest_transaction_date": "2024-07-12" }, "balances": { "available": 5000, "average_balance": 4956.12, "average_monthly_balances": [ { "average_balance": { "amount": 4956.12, "iso_currency_code": "USD", "unofficial_currency_code": null }, "end_date": "2024-07-31", "start_date": "2024-07-01" } ], "current": 5000, "iso_currency_code": "USD", "limit": null, "most_recent_thirty_day_average_balance": 4956.125, "unofficial_currency_code": null }, "consumer_disputes": [], "days_available": 365, "mask": "1208", "metadata": { "start_date": "2024-01-01", "end_date": "2024-07-16" }, "name": "Checking", "official_name": "Plaid checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "checking", "transactions": [ { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 37.07, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "XA7ZLy8rXzt7D3j9B6LMIgv5VxyQkAhbKjzmp", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 51.61, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Domino's", "original_description": "DOMINO's XXXX 111-222-3333", "pending": false, "transaction_id": "VEPeMbWqRluPVZLQX4MDUkKRw41Ljzf9gyLBW", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 7.55, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_FURNITURE_AND_HARDWARE", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": "Chicago", "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "IKEA", "original_description": "IKEA CHICAGO", "pending": false, "transaction_id": "6GQZARgvroCAE1eW5wpQT7w3oB6nvzi8DKMBa", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 12.87, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_SPORTING_GOODS", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": "Redlands", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Nike", "original_description": "NIKE REDLANDS CA", "pending": false, "transaction_id": "DkbmlP8BZxibzADqNplKTeL8aZJVQ1c3WR95z", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 44.21, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "POKE BROS * POKE BRO IL", "pending": false, "transaction_id": "RpdN7W8GmRSdjZB9Jm7ATj4M86vdnktapkrgL", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 36.82, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_DISCOUNT_STORES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Family Dollar", "original_description": "FAMILY DOLLAR", "pending": false, "transaction_id": "5AeQWvo5KLtAD9wNL68PTdAgPE7VNWf5Kye1G", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 13.27, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Instacart", "original_description": "INSTACART HTTPSINSTACAR CA", "pending": false, "transaction_id": "Jjlr3MEVg1HlKbdkZj39ij5a7eg9MqtB6MWDo", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 36.03, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "POKE BROS * POKE BRO IL", "pending": false, "transaction_id": "kN9KV7yAZJUMPn93KDXqsG9MrpjlyLUL6Dgl8", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 54.74, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "lPvrweZAMqHDar43vwWKs547kLZVEzfpogGVJ", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 37.5, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": "1627 N 24th St", "city": "Phoenix", "country": null, "lat": null, "lon": null, "postal_code": "85008", "region": "AZ", "state": "AZ", "store_number": null, "zip": "85008" }, "merchant_name": "Taqueria El Guerrerense", "original_description": "TAQUERIA EL GUERRERO PHOENIX AZ", "pending": false, "transaction_id": "wka74WKqngiyJ3pj7dl5SbpLGQBZqyCPZRDbP", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 41.42, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "BBGnV4RkerHjn8WVavGyiJbQ95VNDaC4M56bJ", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": -1077.93, "check_number": null, "credit_category": { "detailed": "INCOME_OTHER", "primary": "INCOME" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Lyft", "original_description": "LYFT TRANSFER", "pending": false, "transaction_id": "3Ej78yKJlQu1Abw7xzo4U4JR6pmwzntZlbKDK", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 47.17, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "rMzaBpJw8jSZRJQBabKdteQBwd5EaWc7J9qem", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 12.37, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "zWPZjkmzynTyel89ZjExS59DV6WAaZflNBJ56", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 44.18, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": "Portland", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "OR", "state": "OR", "store_number": "1111", "zip": null }, "merchant_name": "Safeway", "original_description": "SAFEWAY #1111 PORTLAND OR 111111", "pending": false, "transaction_id": "K7qzx1nP8ptqgwaRMbxyI86XrqADMluRpkWx5", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 45.37, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Uber Eats", "original_description": "UBER EATS", "pending": false, "transaction_id": "qZrdzLRAgNHo5peMdD9xIzELl3a1NvcgrPAzL", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 15.22, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "NZzx4oRPkAHzyRekpG4PTZkWnBPqEyiy6pB1M", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 26.33, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Domino's", "original_description": "DOMINO's XXXX 111-222-3333", "pending": false, "transaction_id": "x84eNArKbESz8Woden6LT3nvyogeJXc64Pp35", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 39.8, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_DISCOUNT_STORES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Family Dollar", "original_description": "FAMILY DOLLAR", "pending": false, "transaction_id": "dzWnyxwZ4GHlZPGgrNyxiMG7qd5jDgCJEz5jL", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 45.06, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Instacart", "original_description": "INSTACART HTTPSINSTACAR CA", "pending": false, "transaction_id": "4W7eE9rZqMToDArbPeLNIREoKpdgBMcJbVNQD", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 34.91, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "j4yqDjb7QwS7woGzqrgDIEG1NaQVZwf6Wmz3D", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 49.78, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": "Portland", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "OR", "state": "OR", "store_number": "1111", "zip": null }, "merchant_name": "Safeway", "original_description": "SAFEWAY #1111 PORTLAND OR 111111", "pending": false, "transaction_id": "aqgWnze7xoHd6DQwLPnzT5dgPKjB1NfZ5JlBy", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 54.24, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": "Portland", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "OR", "state": "OR", "store_number": "1111", "zip": null }, "merchant_name": "Safeway", "original_description": "SAFEWAY #1111 PORTLAND OR 111111", "pending": false, "transaction_id": "P13aP8b7nmS3WQoxg1PMsdvMK679RNfo65B4G", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 41.79, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "7nZMG6pXz8SADylMqzx7TraE4qjJm7udJyAGm", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 33.86, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Instacart", "original_description": "INSTACART HTTPSINSTACAR CA", "pending": false, "transaction_id": "MQr3ap7PWEIrQG7bLdaNsxyBV7g1KqCL6pwoy", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 27.08, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "POKE BROS * POKE BRO IL", "pending": false, "transaction_id": "eBAk9dvwNbHPZpr8W69dU3rekJz47Kcr9BRwl", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 25.94, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_FURNITURE_AND_HARDWARE", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "The Home Depot", "original_description": "THE HOME DEPOT", "pending": false, "transaction_id": "QLx4jEJZb9SxRm7aWbjAio3LrgZ5vPswm64dE", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 27.57, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_OTHER_GENERAL_MERCHANDISE", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "The Press Club", "pending": false, "transaction_id": "ZnQ1ovqBldSQ6GzRbroAHLdQP68BrKceqmAjX", "unofficial_currency_code": null } ], "type": "depository" } ], "date_last_updated": "2024-07-16T01:52:42.912331716Z", "institution_id": "ins_109512", "institution_name": "Houndstooth Bank", "item_id": "NZzx4oRPkAHzyRekpG4PTZkDNkQW93tWnyGeA" } ], "report_id": "f3bb434f-1c9b-4ef2-b76c-3d1fd08156ec" }, "warnings": [], "request_id": "FibfL8t3s71KJnj" } ``` \=\*=\*=\*= #### /cra/check\_report/income\_insights/get  #### Retrieve cash flow information from your user's banks  This endpoint allows you to retrieve the Income Insights report for your user. You should call this endpoint after you've received a `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn’t have sufficient data to generate the base report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. /cra/check\_report/income\_insights/get Node▼ ```javascript try { const response = await client.craCheckReportIncomeInsightsGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) The Check Income Insights Report for an end user. **report->report\_id** (string) The unique identifier associated with the Check Income Insights Report. **report->generated\_time** (string) The time when the Check Income Insights Report was generated. Format: date-time **report->days\_requested** (integer) The number of days requested by the customer for the Check Income Insights Report. **report->client\_report\_id** (nullable, string) Client-generated identifier, which can be used by lenders to track loan applications. **report->items** (\[object\]) The list of Items in the report along with the associated metadata about the Item. **report->items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **report->items->bank\_income\_accounts** (\[object\]) The Item's accounts that have bank income data. **report->items->bank\_income\_accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->items->bank\_income\_accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **report->items->bank\_income\_accounts->metadata** (object) An object containing metadata about the extracted account. **report->items->bank\_income\_accounts->metadata->start\_date** (nullable, string) The date of the earliest extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). Format: date **report->items->bank\_income\_accounts->metadata->end\_date** (nullable, string) The date of the most recent extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). Format: date **report->items->bank\_income\_accounts->name** (string) The name of the bank account. **report->items->bank\_income\_accounts->official\_name** (nullable, string) The official name of the bank account. **report->items->bank\_income\_accounts->subtype** (string) Valid account subtypes for depository accounts. For a list containing descriptions of each subtype, see Account schemas. Possible values: checking, savings, hsa, cd, money market, paypal, prepaid, cash management, ebt, all **report->items->bank\_income\_accounts->type** (string) The account type. This will always be depository. Possible values: depository **report->items->bank\_income\_sources** (\[object\]) The income sources for this Item. Each entry in the array is a single income source. **report->items->bank\_income\_sources->account\_id** (string) The account ID with which this income source is associated. **report->items->bank\_income\_sources->income\_source\_id** (string) A unique identifier for an income source. If the report is regenerated and a new report\_id is created, the new report will have a new set of income\_source\_ids. **report->items->bank\_income\_sources->income\_description** (string) The most common name or original description for the underlying income transactions. **report->items->bank\_income\_sources->income\_category** (string) The income category. BANK\_INTEREST: Interest earned from a bank account. BENEFIT\_OTHER: Government benefits other than retirement, unemployment, child support, or disability. Currently used only in the UK, to represent benefits such as Cost of Living Payments. CASH: Deprecated and used only for existing legacy implementations. Has been replaced by CASH\_DEPOSIT and TRANSFER\_FROM\_APPLICATION. CASH\_DEPOSIT: A cash or check deposit. CHILD\_SUPPORT: Child support payments received. GIG\_ECONOMY: Income earned as a gig economy worker, e.g. driving for Uber, Lyft, Postmates, DoorDash, etc. LONG\_TERM\_DISABILITY: Disability payments, including Social Security disability benefits. OTHER: Income that could not be categorized as any other income category. MILITARY: Veterans benefits. Income earned as salary for serving in the military (e.g. through DFAS) will be classified as SALARY rather than MILITARY. RENTAL: Income earned from a rental property. Income may be identified as rental when the payment is received through a rental platform, e.g. Airbnb; rent paid directly by the tenant to the property owner (e.g. via cash, check, or ACH) will typically not be classified as rental income. RETIREMENT: Payments from private retirement systems, pensions, and government retirement programs, including Social Security retirement benefits. SALARY: Payment from an employer to an earner or other form of permanent employment. TAX\_REFUND: A tax refund. TRANSFER\_FROM\_APPLICATION: Deposits from a money transfer app, such as Venmo, Cash App, or Zelle. UNEMPLOYMENT: Unemployment benefits. In the UK, includes certain low-income benefits such as the Universal Credit. Possible values: SALARY, UNEMPLOYMENT, CASH, GIG\_ECONOMY, RENTAL, CHILD\_SUPPORT, MILITARY, RETIREMENT, LONG\_TERM\_DISABILITY, BANK\_INTEREST, CASH\_DEPOSIT, TRANSFER\_FROM\_APPLICATION, TAX\_REFUND, BENEFIT\_OTHER, OTHER **report->items->bank\_income\_sources->start\_date** (string) Minimum of all dates within the specific income sources in the user's bank account for days requested by the client. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->bank\_income\_sources->end\_date** (string) Maximum of all dates within the specific income sources in the user’s bank account for days requested by the client. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->bank\_income\_sources->pay\_frequency** (string) The income pay frequency. Possible values: WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, DAILY, UNKNOWN **report->items->bank\_income\_sources->total\_amount** (number) Total amount of earnings in the user’s bank account for the specific income source for days requested by the client. **report->items->bank\_income\_sources->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->bank\_income\_sources->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->bank\_income\_sources->transaction\_count** (integer) Number of transactions for the income source within the start and end date. **report->items->bank\_income\_sources->next\_payment\_date** (nullable, string) The expected date of the end user’s next paycheck for the income source. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->bank\_income\_sources->status** (string) The status of the income sources. ACTIVE: The income source is active. INACTIVE: The income source is inactive. UNKNOWN: The income source status is unknown. Possible values: ACTIVE, INACTIVE, UNKNOWN **report->items->bank\_income\_sources->historical\_average\_monthly\_gross\_income** (nullable, number) An estimate of the average gross monthly income based on the historical net amount and income category for the income source(s). **report->items->bank\_income\_sources->historical\_average\_monthly\_income** (nullable, number) The average monthly net income amount estimated based on the historical data for the income source(s). **report->items->bank\_income\_sources->forecasted\_average\_monthly\_income** (nullable, number) The predicted average monthly net income amount for the income source(s). **report->items->bank\_income\_sources->forecasted\_average\_monthly\_income\_prediction\_intervals** (\[object\]) The prediction interval(s) for the forecasted average monthly income. **report->items->bank\_income\_sources->forecasted\_average\_monthly\_income\_prediction\_intervals->lower\_bound** (nullable, number) The lower bound of the predicted attribute for the given probability. **report->items->bank\_income\_sources->forecasted\_average\_monthly\_income\_prediction\_intervals->upper\_bound** (nullable, number) The upper bound of the predicted attribute for the given probability. **report->items->bank\_income\_sources->forecasted\_average\_monthly\_income\_prediction\_intervals->probability** (nullable, number) The probability of the actual value of the attribute falling within the upper and lower bound. This is a percentage represented as a value between 0 and 1. **report->items->bank\_income\_sources->employer** (object) The object containing employer data. **report->items->bank\_income\_sources->employer->name** (nullable, string) The name of the employer. **report->items->bank\_income\_sources->income\_provider** (nullable, object) The object containing data about the income provider. **report->items->bank\_income\_sources->income\_provider->name** (string) The name of the income provider. **report->items->bank\_income\_sources->income\_provider->is\_normalized** (boolean) Indicates whether the income provider name is normalized by comparing it against a canonical set of known providers. **report->items->bank\_income\_sources->historical\_summary** (\[object\]) Total amount of earnings for the income source(s) of the user for the month in the summary. This can contain multiple amounts, with each amount denominated in one unique currency. number **report->items->bank\_income\_sources->historical\_summary->total\_amounts** (\[object\]) Value of amount with up to 2 decimal places. **report->items->bank\_income\_sources->historical\_summary->total\_amounts->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->bank\_income\_sources->historical\_summary->total\_amounts->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->bank\_income\_sources->historical\_summary->start\_date** (string) The start date of the period covered in this monthly summary. This date will be the first day of the month, unless the month being covered is a partial month because it is the first month included in the summary and the date range being requested does not begin with the first day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->bank\_income\_sources->historical\_summary->end\_date** (string) The end date of the period included in this monthly summary. This date will be the last day of the month, unless the month being covered is a partial month because it is the last month included in the summary and the date range being requested does not end with the last day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date string **report->items->bank\_income\_sources->historical\_summary->transactions** (\[object\]) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->items->bank\_income\_sources->historical\_summary->transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, credit card purchases are positive; credit card payment, direct deposits, and refunds are negative. **report->items->bank\_income\_sources->historical\_summary->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->items->bank\_income\_sources->historical\_summary->transactions->name** (deprecated, string) The merchant name or transaction description. This is a legacy field that is no longer maintained. For merchant name, use the merchant\_name field; for description, use the original\_description field. **report->items->bank\_income\_sources->historical\_summary->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **report->items->bank\_income\_sources->historical\_summary->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->items->bank\_income\_sources->historical\_summary->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **report->items->bank\_income\_sources->historical\_summary->transactions->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->items->bank\_income\_sources->historical\_summary->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->items->bank\_income\_sources->historical\_summary->transactions->bonus\_type** (nullable, string) The type of bonus that this transaction represents, if it is a bonus. BONUS\_INCLUDED: Bonus is included in this transaction along with the normal pay BONUS\_ONLY: This transaction is a standalone bonus Possible values: BONUS\_INCLUDED, BONUS\_ONLY, null **report->items->last\_updated\_time** (string) The time when this Item's data was last retrieved from the financial institution. Format: date-time **report->items->institution\_id** (string) The unique identifier of the institution associated with the Item. **report->items->institution\_name** (string) The name of the institution associated with the Item. **report->bank\_income\_summary** (object) Summary for income across all income sources and items (max history of 730 days). **report->bank\_income\_summary->total\_amounts** (\[object\]) Total amount of earnings across all the income sources in the end user's Items for the days requested by the client. This can contain multiple amounts, with each amount denominated in one unique currency. **report->bank\_income\_summary->total\_amounts->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->total\_amounts->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->total\_amounts->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->start\_date** (string) The earliest date within the days requested in which all income sources identified by Plaid appear in a user's account. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->bank\_income\_summary->end\_date** (string) The latest date in which all income sources identified by Plaid appear in the user's account. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->bank\_income\_summary->income\_sources\_count** (integer) Number of income sources per end user. **report->bank\_income\_summary->income\_categories\_count** (integer) Number of income categories per end user. **report->bank\_income\_summary->income\_transactions\_count** (integer) Number of income transactions per end user. **report->bank\_income\_summary->historical\_average\_monthly\_gross\_income** (\[object\]) An estimate of the average gross monthly income based on the historical net amount and income category for the income source(s). The average monthly income is calculated based on the lifetime of the income stream, rather than the entire historical period included in the scope of the report. **report->bank\_income\_summary->historical\_average\_monthly\_gross\_income->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->historical\_average\_monthly\_gross\_income->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->historical\_average\_monthly\_gross\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->historical\_average\_monthly\_income** (\[object\]) The average monthly income amount estimated based on the historical data for the income source(s). The average monthly income is calculated based on the lifetime of the income stream, rather than the entire historical period included in the scope of the report. **report->bank\_income\_summary->historical\_average\_monthly\_income->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->historical\_average\_monthly\_income->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->historical\_average\_monthly\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->forecasted\_average\_monthly\_income** (\[object\]) The predicted average monthly income amount for the income source(s). **report->bank\_income\_summary->forecasted\_average\_monthly\_income->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->forecasted\_average\_monthly\_income->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->forecasted\_average\_monthly\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->historical\_annual\_gross\_income** (\[object\]) An estimate of the annual gross income for the income source, calculated by multiplying the historical\_average\_monthly\_gross\_income by 12. **report->bank\_income\_summary->historical\_annual\_gross\_income->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->historical\_annual\_gross\_income->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->historical\_annual\_gross\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->historical\_annual\_income** (\[object\]) An estimate of the annual net income for the income source, calculated by multiplying the historical\_average\_monthly\_income by 12. **report->bank\_income\_summary->historical\_annual\_income->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->historical\_annual\_income->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->historical\_annual\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->forecasted\_annual\_income** (\[object\]) The predicted average annual income amount for the income source(s). **report->bank\_income\_summary->forecasted\_annual\_income->amount** (number) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->forecasted\_annual\_income->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->forecasted\_annual\_income->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->historical\_summary** (\[object\]) Total amount of earnings for the income source(s) of the user for the month in the summary. This can contain multiple amounts, with each amount denominated in one unique currency. number **report->bank\_income\_summary->historical\_summary->total\_amounts** (\[object\]) Value of amount with up to 2 decimal places. **report->bank\_income\_summary->historical\_summary->total\_amounts->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->historical\_summary->total\_amounts->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->historical\_summary->start\_date** (string) The start date of the period covered in this monthly summary. This date will be the first day of the month, unless the month being covered is a partial month because it is the first month included in the summary and the date range being requested does not begin with the first day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->bank\_income\_summary->historical\_summary->end\_date** (string) The end date of the period included in this monthly summary. This date will be the last day of the month, unless the month being covered is a partial month because it is the last month included in the summary and the date range being requested does not end with the last day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date string **report->bank\_income\_summary->historical\_summary->transactions** (\[object\]) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->bank\_income\_summary->historical\_summary->transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, credit card purchases are positive; credit card payment, direct deposits, and refunds are negative. **report->bank\_income\_summary->historical\_summary->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **report->bank\_income\_summary->historical\_summary->transactions->name** (deprecated, string) The merchant name or transaction description. This is a legacy field that is no longer maintained. For merchant name, use the merchant\_name field; for description, use the original\_description field. **report->bank\_income\_summary->historical\_summary->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **report->bank\_income\_summary->historical\_summary->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->bank\_income\_summary->historical\_summary->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **report->bank\_income\_summary->historical\_summary->transactions->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->bank\_income\_summary->historical\_summary->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->bank\_income\_summary->historical\_summary->transactions->bonus\_type** (nullable, string) The type of bonus that this transaction represents, if it is a bonus. BONUS\_INCLUDED: Bonus is included in this transaction along with the normal pay BONUS\_ONLY: This transaction is a standalone bonus Possible values: BONUS\_INCLUDED, BONUS\_ONLY, null **report->warnings** (\[object\]) If data from the report was unable to be retrieved, the warnings object will contain information about the error that caused the data to be incomplete. **report->warnings->warning\_type** (string) The warning type which will always be BANK\_INCOME\_WARNING. Possible values: BANK\_INCOME\_WARNING **report->warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Unable to extract identity for the Item TRANSACTIONS\_UNAVAILABLE: Unable to extract transactions for the Item REPORT\_DELETED: Report deleted due to customer or consumer request DATA\_UNAVAILABLE: No relevant data was found for the Item Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, REPORT\_DELETED, DATA\_UNAVAILABLE **report->warnings->cause** (object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **report->warnings->cause->error\_type** (string) A broad categorization of the error. Safe for programmatic use. Possible values: INTERNAL\_SERVER\_ERROR, INSUFFICIENT\_CREDENTIALS, ITEM\_LOCKED, USER\_SETUP\_REQUIRED, COUNTRY\_NOT\_SUPPORTED, INSTITUTION\_DOWN, INSTITUTION\_NO\_LONGER\_SUPPORTED, INSTITUTION\_NOT\_RESPONDING, INVALID\_CREDENTIALS, INVALID\_MFA, INVALID\_SEND\_METHOD, ITEM\_LOGIN\_REQUIRED, MFA\_NOT\_SUPPORTED, NO\_ACCOUNTS, ITEM\_NOT\_SUPPORTED, ACCESS\_NOT\_GRANTED **report->warnings->cause->error\_code** (string) 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. Error fields will be null if no error has occurred. **report->warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **report->warnings->cause->display\_message** (string) 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 identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **warnings** (\[object\]) If the Income Insights generation was successful but a subset of data could not be retrieved, this array will contain information about the errors causing information to be missing **warnings->warning\_type** (string) The warning type, which will always be CHECK\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The user has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Please note that when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error Response Object ```json { "request_id": "LhQf0THi8SH1yJm", "report": { "report_id": "bbfc5174-5433-4648-8d93-9fec6a0c0966", "generated_time": "2022-01-31T22:47:53Z", "days_requested": 365, "items": [ { "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7", "last_updated_time": "2022-01-31T22:47:53Z", "institution_id": "ins_0", "institution_name": "Plaid Bank", "bank_income_accounts": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "mask": "8888", "metadata": { "start_date": "2024-01-01", "end_date": "2024-07-16" }, "name": "Plaid Checking Account", "official_name": "Plaid Checking Account", "type": "depository", "subtype": "checking", "owners": [] } ], "bank_income_sources": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "income_source_id": "f17efbdd-caab-4278-8ece-963511cd3d51", "income_description": "PLAID_INC_DIRECT_DEP_PPD", "income_category": "SALARY", "start_date": "2021-11-15", "end_date": "2022-01-15", "pay_frequency": "MONTHLY", "total_amount": 300, "iso_currency_code": "USD", "unofficial_currency_code": null, "transaction_count": 1, "next_payment_date": "2022-12-15", "income_status": "ACTIVE", "historical_average_monthly_gross_income": 390, "historical_average_monthly_income": 300, "forecasted_average_monthly_income": 300, "forecasted_average_monthly_income_prediction_intervals": [ { "lower_bound": 200, "upper_bound": 400, "probability": 0.8 } ], "employer": { "name": "Plaid Inc" }, "income_provider": { "name": "Plaid Inc", "is_normalized": true }, "historical_summary": [ { "start_date": "2021-11-02", "end_date": "2021-11-30", "total_amounts": [ { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "transaction_id": "aH5klwqG3B19OMT7D6F24Syv8pdnJXmtZoKQ5", "amount": 100, "bonus_type": null, "date": "2021-11-15", "name": "PLAID_INC_DIRECT_DEP_PPD", "original_description": "PLAID_INC_DIRECT_DEP_PPD 123A", "pending": false, "check_number": null, "iso_currency_code": "USD", "unofficial_currency_code": null } ] }, { "start_date": "2021-12-01", "end_date": "2021-12-31", "total_amounts": [ { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "transaction_id": "mN3rQ5iH8BC41T6UjKL9oD2vWJpZqXFomGwY1", "amount": 100, "bonus_type": null, "date": "2021-12-15", "name": "PLAID_INC_DIRECT_DEP_PPD", "original_description": "PLAID_INC_DIRECT_DEP_PPD 123B", "pending": false, "check_number": null, "iso_currency_code": "USD", "unofficial_currency_code": null } ] }, { "start_date": "2022-01-01", "end_date": "2022-01-31", "total_amounts": [ { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "transaction_id": "zK9lDoR8uBH51PNQ3W4T6Mjy2VFXpGtJwsL4", "amount": 100, "bonus_type": null, "date": "2022-01-31", "name": "PLAID_INC_DIRECT_DEP_PPD", "original_description": "PLAID_INC_DIRECT_DEP_PPD 123C", "pending": false, "check_number": null, "iso_currency_code": "USD", "unofficial_currency_code": null } ] } ] } ] } ], "bank_income_summary": { "total_amounts": [ { "amount": 300, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "start_date": "2021-11-15", "end_date": "2022-01-15", "income_sources_count": 1, "income_categories_count": 1, "income_transactions_count": 1, "historical_average_monthly_gross_income": [ { "amount": 390, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "historical_average_monthly_income": [ { "amount": 300, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "forecasted_average_monthly_income": [ { "amount": 300, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "historical_annual_gross_income": [ { "amount": 4680, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "historical_annual_income": [ { "amount": 3600, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "forecasted_annual_income": [ { "amount": 3600, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "historical_summary": [ { "start_date": "2021-11-02", "end_date": "2021-11-30", "total_amounts": [ { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "transaction_id": "aH5klwqG3B19OMT7D6F24Syv8pdnJXmtZoKQ5", "amount": 100, "bonus_type": null, "date": "2021-11-15", "name": "PLAID_INC_DIRECT_DEP_PPD", "original_description": "PLAID_INC_DIRECT_DEP_PPD 123A", "pending": false, "check_number": null, "iso_currency_code": "USD", "unofficial_currency_code": null } ] }, { "start_date": "2021-12-01", "end_date": "2021-12-31", "total_amounts": [ { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "transaction_id": "mN3rQ5iH8BC41T6UjKL9oD2vWJpZqXFomGwY1", "amount": 100, "bonus_type": null, "date": "2021-12-15", "name": "PLAID_INC_DIRECT_DEP_PPD", "original_description": "PLAID_INC_DIRECT_DEP_PPD 123B", "pending": false, "check_number": null, "iso_currency_code": "USD", "unofficial_currency_code": null } ] }, { "start_date": "2022-01-01", "end_date": "2022-01-31", "total_amounts": [ { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "transaction_id": "zK9lDoR8uBH51PNQ3W4T6Mjy2VFXpGtJwsL4", "amount": 100, "bonus_type": null, "date": "2022-01-31", "name": "PLAID_INC_DIRECT_DEP_PPD", "original_description": "PLAID_INC_DIRECT_DEP_PPD 123C", "pending": false, "check_number": null, "iso_currency_code": "USD", "unofficial_currency_code": null } ] } ], "warnings": [] } } } ``` \=\*=\*=\*= #### /cra/check\_report/network\_insights/get  #### Retrieve network attributes for the user  This endpoint allows you to retrieve the Network Insights product for your user. You should call this endpoint after you've received the `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn’t have sufficient data to generate the report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If you did not initialize Link with the `cra_network_attributes` product or have generated a report using [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) , Plaid will generate the attributes when you call this endpoint. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **options** (object) Defines configuration options to generate Network Insights **options->network\_insights\_version** (string) The version of network insights Possible values: NI1 /cra/check\_report/network\_insights/get Node▼ ```javascript try { const response = await client.craCheckReportNetworkInsightsGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) Contains data for the CRA Network Attributes Report. **report->report\_id** (string) The unique identifier associated with the report object. **report->generated\_time** (string) The time when the report was generated. Format: date-time **report->network\_attributes** (object) A map of network attributes, where the key is a string, and the value is a float, int, or boolean. For a full list of attributes, contact your account manager. **report->items** (\[object\]) The Items the end user connected in Link. **report->items->institution\_id** (string) The ID for the institution the user linked. **report->items->institution\_name** (string) The name of the institution the user linked. **report->items->item\_id** (string) The identifier for the Item. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **warnings** (\[object\]) If the Network Insights generation was successful but a subset of data could not be retrieved, this array will contain information about the errors causing information to be missing **warnings->warning\_type** (string) The warning type, which will always be CHECK\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The user has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Please note that when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error Response Object ```json { "request_id": "LhQf0THi8SH1yJm", "report": { "report_id": "ee093cb0-e3f2-42d1-9dbc-8d8408964194", "generated_time": "2022-01-31T22:47:53Z", "network_attributes": { "plaid_conn_user_lifetime_lending_count": 5, "plaid_conn_user_lifetime_personal_lending_flag": 1, "plaid_conn_user_lifetime_cash_advance_primary_count": 0 }, "items": [ { "institution_id": "ins_0", "institution_name": "Plaid Bank", "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7" } ] } } ``` \=\*=\*=\*= #### /cra/check\_report/partner\_insights/get  #### Retrieve cash flow insights from partners  This endpoint allows you to retrieve the Partner Insights report for your user. You should call this endpoint after you've received the `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn’t have sufficient data to generate the base report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If you did not initialize Link with the `credit_partner_insights` product or have generated a report using [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) , we will call our partners to generate the insights when you call this endpoint. In this case, you may optionally provide parameters under `options` to configure which insights you want to receive. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **partner\_insights** (object) Defines configuration to generate Partner Insights **partner\_insights->prism\_versions** (object) The versions of Prism products to evaluate **partner\_insights->prism\_versions->firstdetect** (string) The version of Prism FirstDetect. If not specified, will default to v3. Possible values: 3, null **partner\_insights->prism\_versions->detect** (string) The version of Prism Detect Possible values: 4, null **partner\_insights->prism\_versions->cashscore** (string) The version of Prism CashScore. If not specified, will default to v3. Possible values: 4, 3, null **partner\_insights->prism\_versions->extend** (string) The version of Prism Extend Possible values: 4, null **partner\_insights->prism\_versions->insights** (string) The version of Prism Insights. If not specified, will default to v3. Possible values: 4, 3, null /cra/check\_report/partner\_insights/get Node▼ ```javascript try { const response = await client.craCheckReportPartnerInsightsGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) The Partner Insights report of the bank data for an end user. **report->report\_id** (string) A unique identifier associated with the Partner Insights object. **report->generated\_time** (string) The time when the Partner Insights report was generated. Format: date-time **report->client\_report\_id** (nullable, string) Client-generated identifier, which can be used by lenders to track loan applications. **report->prism** (object) The Prism Data insights for the user. **report->prism->insights** (nullable, object) The data from the Insights product returned by Prism Data. **report->prism->insights->version** (integer) The version of Prism Data's insights model used. **report->prism->insights->result** (object) The Insights Result object is a map of cash flow attributes, where the key is a string, and the value is a float or string. For a full list of attributes, contact your account manager. The attributes may vary depending on the Prism version used. **report->prism->insights->error\_reason** (string) The error returned by Prism for this product. **report->prism->cash\_score** (nullable, object) The data from the CashScore® product returned by Prism Data. **report->prism->cash\_score->version** (deprecated, integer) The version of Prism Data's cash score model used. This field is deprecated in favor of model\_version. **report->prism->cash\_score->model\_version** (string) The version of Prism Data's cash score model used. **report->prism->cash\_score->score** (nullable, integer) The score returned by Prism Data. Ranges from 1-999, with higher score indicating lower risk. **report->prism->cash\_score->reason\_codes** (\[string\]) The reasons for an individual having risk according to the cash score. **report->prism->cash\_score->metadata** (object) An object containing metadata about the provided transactions. **report->prism->cash\_score->metadata->max\_age** (nullable, integer) Number of days since the oldest transaction. **report->prism->cash\_score->metadata->min\_age** (nullable, integer) Number of days since the latest transaction. **report->prism->cash\_score->metadata->min\_age\_credit** (nullable, integer) Number of days since the latest credit transaction. **report->prism->cash\_score->metadata->min\_age\_debit** (nullable, integer) Number of days since the latest debit transaction. **report->prism->cash\_score->metadata->max\_age\_debit** (nullable, integer) Number of days since the oldest debit transaction. **report->prism->cash\_score->metadata->max\_age\_credit** (nullable, integer) Number of days since the oldest credit transaction. **report->prism->cash\_score->metadata->num\_trxn\_credit** (nullable, integer) Number of credit transactions. **report->prism->cash\_score->metadata->num\_trxn\_debit** (nullable, integer) Number of debit transactions. **report->prism->cash\_score->metadata->l1m\_credit\_value\_cnt** (nullable, integer) Number of credit transactions in the last 30 days. **report->prism->cash\_score->metadata->l1m\_debit\_value\_cnt** (nullable, integer) Number of debit transactions in the last 30 days. **report->prism->cash\_score->error\_reason** (string) The error returned by Prism for this product. **report->prism->extend** (nullable, object) The data from the CashScore® Extend product returned by Prism Data. **report->prism->extend->model\_version** (string) The version of Prism Data's CashScore® Extend model used. **report->prism->extend->score** (nullable, integer) The score returned by Prism Data. Ranges from 1-999, with higher score indicating lower risk. **report->prism->extend->reason\_codes** (\[string\]) The reasons for an individual having risk according to the CashScore® Extend score. **report->prism->extend->metadata** (object) An object containing metadata about the provided transactions. **report->prism->extend->metadata->max\_age** (nullable, integer) Number of days since the oldest transaction. **report->prism->extend->metadata->min\_age** (nullable, integer) Number of days since the latest transaction. **report->prism->extend->metadata->min\_age\_credit** (nullable, integer) Number of days since the latest credit transaction. **report->prism->extend->metadata->min\_age\_debit** (nullable, integer) Number of days since the latest debit transaction. **report->prism->extend->metadata->max\_age\_debit** (nullable, integer) Number of days since the oldest debit transaction. **report->prism->extend->metadata->max\_age\_credit** (nullable, integer) Number of days since the oldest credit transaction. **report->prism->extend->metadata->num\_trxn\_credit** (nullable, integer) Number of credit transactions. **report->prism->extend->metadata->num\_trxn\_debit** (nullable, integer) Number of debit transactions. **report->prism->extend->metadata->l1m\_credit\_value\_cnt** (nullable, integer) Number of credit transactions in the last 30 days. **report->prism->extend->metadata->l1m\_debit\_value\_cnt** (nullable, integer) Number of debit transactions in the last 30 days. **report->prism->extend->error\_reason** (string) The error returned by Prism for this product. **report->prism->first\_detect** (nullable, object) The data from the FirstDetect product returned by Prism Data. **report->prism->first\_detect->version** (deprecated, integer) The version of Prism Data's FirstDetect model used. This field is deprecated in favor of model\_version. **report->prism->first\_detect->model\_version** (string) The version of Prism Data's FirstDetect model used. **report->prism->first\_detect->score** (nullable, integer) The score returned by Prism Data. Ranges from 1-999, with higher score indicating lower risk. **report->prism->first\_detect->reason\_codes** (\[string\]) The reasons for an individual having risk according to the FirstDetect score. **report->prism->first\_detect->metadata** (object) An object containing metadata about the provided transactions. **report->prism->first\_detect->metadata->max\_age** (nullable, integer) Number of days since the oldest transaction. **report->prism->first\_detect->metadata->min\_age** (nullable, integer) Number of days since the latest transaction. **report->prism->first\_detect->metadata->min\_age\_credit** (nullable, integer) Number of days since the latest credit transaction. **report->prism->first\_detect->metadata->min\_age\_debit** (nullable, integer) Number of days since the latest debit transaction. **report->prism->first\_detect->metadata->max\_age\_debit** (nullable, integer) Number of days since the oldest debit transaction. **report->prism->first\_detect->metadata->max\_age\_credit** (nullable, integer) Number of days since the oldest credit transaction. **report->prism->first\_detect->metadata->num\_trxn\_credit** (nullable, integer) Number of credit transactions. **report->prism->first\_detect->metadata->num\_trxn\_debit** (nullable, integer) Number of debit transactions. **report->prism->first\_detect->metadata->l1m\_credit\_value\_cnt** (nullable, integer) Number of credit transactions in the last 30 days. **report->prism->first\_detect->metadata->l1m\_debit\_value\_cnt** (nullable, integer) Number of debit transactions in the last 30 days. **report->prism->first\_detect->error\_reason** (string) The error returned by Prism for this product. **report->prism->detect** (nullable, object) The data from the CashScore® Detect product returned by Prism Data. **report->prism->detect->model\_version** (string) The version of Prism Data's CashScore® Detect model used. **report->prism->detect->score** (nullable, integer) The score returned by Prism Data. Ranges from 1-999, with higher score indicating lower risk. **report->prism->detect->reason\_codes** (\[string\]) The reasons for an individual having risk according to the CashScore® Detect score. **report->prism->detect->metadata** (object) An object containing metadata about the provided transactions. **report->prism->detect->metadata->max\_age** (nullable, integer) Number of days since the oldest transaction. **report->prism->detect->metadata->min\_age** (nullable, integer) Number of days since the latest transaction. **report->prism->detect->metadata->min\_age\_credit** (nullable, integer) Number of days since the latest credit transaction. **report->prism->detect->metadata->min\_age\_debit** (nullable, integer) Number of days since the latest debit transaction. **report->prism->detect->metadata->max\_age\_debit** (nullable, integer) Number of days since the oldest debit transaction. **report->prism->detect->metadata->max\_age\_credit** (nullable, integer) Number of days since the oldest credit transaction. **report->prism->detect->metadata->num\_trxn\_credit** (nullable, integer) Number of credit transactions. **report->prism->detect->metadata->num\_trxn\_debit** (nullable, integer) Number of debit transactions. **report->prism->detect->metadata->l1m\_credit\_value\_cnt** (nullable, integer) Number of credit transactions in the last 30 days. **report->prism->detect->metadata->l1m\_debit\_value\_cnt** (nullable, integer) Number of debit transactions in the last 30 days. **report->prism->detect->error\_reason** (string) The error returned by Prism for this product. **report->prism->status** (string) Details on whether the Prism Data attributes succeeded or failed to be generated. **report->items** (\[object\]) The list of Items used in the report along with the associated metadata about the Item. **report->items->institution\_id** (string) The ID for the institution that the user linked. **report->items->institution\_name** (string) The name of the institution the user linked. **report->items->item\_id** (string) The identifier for the item. **report->items->accounts** (\[object\]) A list of accounts in the item **report->items->accounts->account\_id** (string) Plaid's unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->items->accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **report->items->accounts->metadata** (object) An object containing metadata about the extracted account. **report->items->accounts->metadata->start\_date** (nullable, string) The date of the earliest extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). Format: date **report->items->accounts->metadata->end\_date** (nullable, string) The date of the most recent extracted transaction, in ISO 8601 format ("yyyy-mm-dd"). Format: date **report->items->accounts->name** (string) The name of the account **report->items->accounts->official\_name** (nullable, string) The official name of the bank account. **report->items->accounts->subtype** (string) Valid account subtypes for depository accounts. For a list containing descriptions of each subtype, see Account schemas. Possible values: checking, savings, hsa, cd, money market, paypal, prepaid, cash management, ebt, all **report->items->accounts->type** (string) The account type. This will always be depository. Possible values: depository **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **warnings** (\[object\]) If the Partner Insights generation was successful but a subset of data could not be retrieved, this array will contain information about the errors causing information to be missing **warnings->warning\_type** (string) The warning type, which will always be CHECK\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The user has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Please note that when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error Response Object ```json { "request_id": "LhQf0THi8SH1yJm", "report": { "report_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "client_report_id": "client_report_id_1221", "generated_time": "2022-01-31T22:47:53Z", "items": [ { "institution_id": "ins_109508", "institution_name": "Plaid Bank", "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "accounts": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "mask": "8888", "metadata": { "start_date": "2022-01-01", "end_date": "2022-01-31" }, "name": "Plaid Checking Account", "official_name": "Plaid Checking Account", "type": "depository", "subtype": "checking", "owners": [] } ] } ], "prism": { "insights": { "version": 3, "result": { "l6m_cumbal_acc": 1 } }, "cash_score": { "version": 3, "model_version": "3", "score": 900, "reason_codes": [ "CS03038" ], "metadata": { "max_age": 20, "min_age": 1, "min_age_credit": 0, "min_age_debit": 1, "max_age_debit": 20, "max_age_credit": 0, "num_trxn_credit": 0, "num_trxn_debit": 40, "l1m_credit_value_cnt": 0, "l1m_debit_value_cnt": 40 } }, "first_detect": { "version": 3, "model_version": "3", "score": 900, "reason_codes": [ "CS03038" ], "metadata": { "max_age": 20, "min_age": 1, "min_age_credit": 0, "min_age_debit": 1, "max_age_debit": 20, "max_age_credit": 0, "num_trxn_credit": 0, "num_trxn_debit": 40, "l1m_credit_value_cnt": 0, "l1m_debit_value_cnt": 40 } }, "status": "SUCCESS" } } } ``` \=\*=\*=\*= #### /cra/check\_report/pdf/get  #### Retrieve Consumer Reports as a PDF  [/cra/check\_report/pdf/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportpdfget) retrieves the most recent Consumer Report in PDF format. By default, the most recent Base Report (if it exists) for the user will be returned. To request that the most recent Income Insights report be included in the PDF as well, use the `add-ons` field. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **add\_ons** (\[string\]) Use this field to include other reports in the PDF. Possible values: cra\_income\_insights, cra\_partner\_insights /cra/check\_report/pdf/get Node▼ ```javascript try { const response = await client.craCheckReportPDFGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); const pdf = response.buffer.toString('base64'); } catch (error) { // handle error } ``` ##### Response  This endpoint returns binary PDF data. [View a sample Check Report PDF.](https://plaid.com/documents/sample-check-report.pdf) [View a sample Check Report PDF containing Income Insights.](https://plaid.com/documents/sample-check-report-with-income.pdf) \=\*=\*=\*= #### /cra/check\_report/cashflow\_insights/get  #### Retrieve cash flow insights from your user's banking data  This endpoint allows you to retrieve the Cashflow Insights report for your user. You should call this endpoint after you've received the `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn’t have sufficient data to generate the insights, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If you did not initialize Link with the `cra_cashflow_insights` product or have generated a report using [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) , we will generate the insights when you call this endpoint. In this case, you may optionally provide parameters under `options` to configure which insights you want to receive. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **options** (object) Defines configuration options to generate Cashflow Insights **options->attributes\_version** (string) The version of cashflow attributes Possible values: CFI1 /cra/check\_report/cashflow\_insights/get Node▼ ```javascript try { const response = await client.craCheckReportCashflowInsightsGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) Contains data for the CRA Cashflow Insights Report. **report->report\_id** (string) The unique identifier associated with the report object. **report->generated\_time** (string) The time when the report was generated. Format: date-time **report->attributes** (object) A map of cash flow attributes, where the key is a string, and the value is a float, int, or boolean. The specific list of attributes will depend on the cash flow attributes version used. For a full list of attributes, contact your account manager. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **warnings** (\[object\]) If the Cashflow Insights generation was successful but a subset of data could not be retrieved, this array will contain information about the errors causing information to be missing **warnings->warning\_type** (string) The warning type, which will always be CHECK\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The user has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Please note that when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error Response Object ```json { "request_id": "LhQf0THi8SH1yJm", "report": { "report_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "generated_time": "2022-01-31T22:47:53Z", "attributes": { "cash_reliance_atm_withdrawal_amt_cv_90d": 180.1 } } } ``` \=\*=\*=\*= #### /cra/check\_report/lend\_score/get  #### Retrieve the LendScore from your user's banking data  This endpoint allows you to retrieve the LendScore report for your user. You should call this endpoint after you've received the `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn’t have sufficient data to generate the insights, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If you did not initialize Link with the `cra_lend_score` product or call [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) with the `cra_lend_score` product, Plaid will generate the insights when you call this endpoint. In this case, you may optionally provide parameters under `options` to configure which insights you want to receive. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **options** (object) Defines configuration options to generate the LendScore **options->lend\_score\_version** (string) The version of the LendScore Possible values: LS1 /cra/check\_report/lend\_score/get Node▼ ```javascript try { const response = await client.craCheckReportLendScoreGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) Contains data for the CRA LendScore Report. **report->report\_id** (string) The unique identifier associated with the report object. **report->generated\_time** (string) The time when the report was generated. Format: date-time **report->lend\_score** (nullable, object) The results of the LendScore **report->lend\_score->score** (nullable, integer) The score returned by the LendScore model. Will be an integer in the range 1 to 99. Higher scores indicate lower credit risk. **report->lend\_score->reason\_codes** (\[string\]) The reasons for an individual having risk according to the LendScore. For a full list of possible reason codes, contact your Plaid Account Manager. Different LendScore versions will use different sets of reason codes. **report->lend\_score->error\_reason** (nullable, string) Human-readable description of why the LendScore could not be computed. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **warnings** (\[object\]) If the LendScore generation was successful but a subset of data could not be retrieved, this array will contain information about the errors causing information to be missing **warnings->warning\_type** (string) The warning type, which will always be CHECK\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The user has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Please note that when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error Response Object ```json { "request_id": "LhQf0THi8SH1yJm", "report": { "report_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "generated_time": "2022-01-31T22:47:53Z", "lend_score": { "score": 80, "reason_codes": [ "Bank Balance Volatility" ] } } } ``` \=\*=\*=\*= #### /cra/check\_report/verification/get  #### Retrieve various verification reports for a user.  This endpoint allows you to retrieve verification reports for a user. To obtain a VoA or Employment Refresh report, you need to make sure that `cra_base_report` is included in the `products` parameter when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) or [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . You should call this endpoint after you've received a `CHECK_REPORT_READY` webhook, either after the Link session for the user or after calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) . If the most recent consumer report for the user doesn’t have sufficient data to generate the report, or the consumer report has expired, you will receive an error indicating that you should create a new consumer report by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) ." #### Request fields  **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. **reports\_requested** (required, \[string\]) Specifies which types of verification reports are expected in the response Possible values: VOA, EMPLOYMENT\_REFRESH **employment\_refresh\_options** (object) Defines configuration options for the Employment Refresh Report. **employment\_refresh\_options->days\_requested** (required, integer) The number of days of data to request for the report. This field is required if an Employment Refresh Report is requested. Maximum is 731. Maximum: 731 **user\_token** (string) The user token associated with the User data is being requested for. /cra/check\_report/verification/get Node▼ ```javascript try { const response = await client.craCheckReportVerificationGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', reports_requested: ['VOA', 'EMPLOYMENT_REFRESH'], employment_refresh_options: { days_requested: 60, }, }); } catch (error) { // handle error } ``` #### Response fields  **report** (object) Contains data for the CRA Verification Report. **report->report\_id** (string) The unique identifier associated with the Verification Report object. This ID will be the same as the Base Report ID. **report->client\_report\_id** (nullable, string) Client-generated identifier, which can be used by lenders to track loan applications. **report->voa** (nullable, object) An object representing a VOA report. **report->voa->generated\_time** (string) The date and time when the VOA Report was created, in ISO 8601 format (e.g. "2018-04-12T03:32:11Z"). Format: date-time **report->voa->days\_requested** (number) The number of days of transaction history that the VOA report covers. **report->voa->items** (\[object\]) Data returned by Plaid about each of the Items included in the Base Report. **report->voa->items->accounts** (\[object\]) Data about each of the accounts open on the Item. **report->voa->items->accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->voa->items->accounts->balances** (object) VOA Report information about an account's balances. **report->voa->items->accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get. If current is null this field is guaranteed not to be null. Format: double **report->voa->items->accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **report->voa->items->accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->voa->items->accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->voa->items->accounts->balances->historical\_balances** (\[object\]) Calculated data about the historical balances on the account. Available for credit and depository type accounts. **report->voa->items->accounts->balances->historical\_balances->current** (number) The total amount of funds in the account, calculated from the current balance in the balance object by subtracting inflows and adding back outflows according to the posted date of each transaction. Format: double **report->voa->items->accounts->balances->historical\_balances->date** (string) The date of the calculated historical balance, in an ISO 8601 format (YYYY-MM-DD). Format: date **report->voa->items->accounts->balances->historical\_balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **report->voa->items->accounts->balances->historical\_balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->voa->items->accounts->balances->average\_balance\_30\_days** (nullable, number) The average balance in the account over the last 30 days. Calculated using the derived historical balances. Format: double **report->voa->items->accounts->balances->average\_balance\_60\_days** (nullable, number) The average balance in the account over the last 60 days. Calculated using the derived historical balances. Format: double **report->voa->items->accounts->balances->nsf\_overdraft\_transactions\_count** (number) The number of net NSF fee transactions in the time range for the report in the given account (not counting any fees that were reversed within the time range). **report->voa->items->accounts->consumer\_disputes** (\[object\]) The information about previously submitted valid dispute statements by the consumer **report->voa->items->accounts->consumer\_disputes->consumer\_dispute\_id** (deprecated, string) (Deprecated) A unique identifier (UUID) of the consumer dispute that can be used for troubleshooting **report->voa->items->accounts->consumer\_disputes->dispute\_field\_create\_date** (string) Date of the disputed field (e.g. transaction date), in an ISO 8601 format (YYYY-MM-DD) Format: date **report->voa->items->accounts->consumer\_disputes->category** (string) Type of data being disputed by the consumer Possible values: TRANSACTION, BALANCE, IDENTITY, OTHER **report->voa->items->accounts->consumer\_disputes->statement** (string) Text content of dispute **report->voa->items->accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **report->voa->items->accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself. **report->voa->items->accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution. **report->voa->items->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **report->voa->items->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **report->voa->items->accounts->days\_available** (number) The duration of transaction history available within this report for this Item, typically defined as the time since the date of the earliest transaction in that account. **report->voa->items->accounts->transactions\_insights** (object) Transaction data associated with the account. **report->voa->items->accounts->transactions\_insights->all\_transactions** (\[object\]) Transaction history associated with the account. **report->voa->items->accounts->transactions\_insights->all\_transactions->account\_id** (string) The ID of the account in which this transaction occurred. **report->voa->items->accounts->transactions\_insights->all\_transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. Format: double **report->voa->items->accounts->transactions\_insights->all\_transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->voa->items->accounts->transactions\_insights->all\_transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **report->voa->items->accounts->transactions\_insights->all\_transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **report->voa->items->accounts->transactions\_insights->all\_transactions->credit\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for credit use cases, but not limited to such use cases. See the taxonomy csv file for a full list of credit categories. **report->voa->items->accounts->transactions\_insights->all\_transactions->credit\_category->primary** (string) A high level category that communicates the broad category of the transaction. **report->voa->items->accounts->transactions\_insights->all\_transactions->credit\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **report->voa->items->accounts->transactions\_insights->all\_transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **report->voa->items->accounts->transactions\_insights->all\_transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **report->voa->items->accounts->transactions\_insights->all\_transactions->date\_transacted** (nullable, string) The date on which the transaction took place, in IS0 8601 format. **report->voa->items->accounts->transactions\_insights->all\_transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **report->voa->items->accounts->transactions\_insights->all\_transactions->location->address** (nullable, string) The street address where the transaction occurred. **report->voa->items->accounts->transactions\_insights->all\_transactions->location->city** (nullable, string) The city where the transaction occurred. **report->voa->items->accounts->transactions\_insights->all\_transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **report->voa->items->accounts->transactions\_insights->all\_transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **report->voa->items->accounts->transactions\_insights->all\_transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **report->voa->items->accounts->transactions\_insights->all\_transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **report->voa->items->accounts->transactions\_insights->all\_transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **report->voa->items->accounts->transactions\_insights->all\_transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **report->voa->items->accounts->transactions\_insights->all\_transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **report->voa->items->accounts->transactions\_insights->all\_transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->voa->items->accounts->transactions\_insights->all\_transactions->account\_owner** (nullable, string) The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts. **report->voa->items->accounts->transactions\_insights->all\_transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->voa->items->accounts->transactions\_insights->end\_date** (nullable, string) The latest timeframe provided by the FI, in an ISO 8601 format (YYYY-MM-DD). Format: date **report->voa->items->accounts->transactions\_insights->start\_date** (nullable, string) The earliest timeframe provided by the FI, in an ISO 8601 format (YYYY-MM-DD). Format: date **report->voa->items->accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. **report->voa->items->accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **report->voa->items->accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->voa->items->accounts->owners->phone\_numbers->data** (string) The phone number. **report->voa->items->accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **report->voa->items->accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **report->voa->items->accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->voa->items->accounts->owners->emails->data** (string) The email address. **report->voa->items->accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **report->voa->items->accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **report->voa->items->accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **report->voa->items->accounts->owners->addresses->data** (object) Data about the components comprising an address. **report->voa->items->accounts->owners->addresses->data->city** (nullable, string) The full city name **report->voa->items->accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **report->voa->items->accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **report->voa->items->accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **report->voa->items->accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **report->voa->items->accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **report->voa->items->accounts->ownership\_type** (nullable, string) How an asset is owned. association: Ownership by a corporation, partnership, or unincorporated association, including for-profit and not-for-profit organizations. individual: Ownership by an individual. joint: Joint ownership by multiple parties. trust: Ownership by a revocable or irrevocable trust. Possible values: null, individual, joint, association, trust **report->voa->items->accounts->investments** (nullable, object) A set of fields describing the investments data on an account. **report->voa->items->accounts->investments->holdings** (\[object\]) Quantities and values of securities held in the investment account. Map to the securities array for security details. **report->voa->items->accounts->investments->holdings->account\_id** (string) The Plaid account\_id associated with the holding. **report->voa->items->accounts->investments->holdings->security\_id** (string) The Plaid security\_id associated with the holding. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data. The security\_id for the same security will typically be the same across different institutions, but this is not guaranteed. The security\_id does not typically change, but may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **report->voa->items->accounts->investments->holdings->institution\_price** (number) The last price given by the institution for this security. Format: double **report->voa->items->accounts->investments->holdings->institution\_price\_as\_of** (nullable, string) The date at which institution\_price was current. Format: date **report->voa->items->accounts->investments->holdings->institution\_value** (number) The value of the holding, as reported by the institution. Format: double **report->voa->items->accounts->investments->holdings->cost\_basis** (nullable, number) The original total value of the holding. This field is calculated by Plaid as the sum of the purchase price of all of the shares in the holding. Format: double **report->voa->items->accounts->investments->holdings->quantity** (number) The total quantity of the asset held, as reported by the financial institution. If the security is an option, quantity will reflect the total number of options (typically the number of contracts multiplied by 100), not the number of contracts. Format: double **report->voa->items->accounts->investments->holdings->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the holding. Always null if unofficial\_currency\_code is non-null. **report->voa->items->accounts->investments->holdings->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **report->voa->items->accounts->investments->securities** (\[object\]) Details of specific securities held in the investment account. **report->voa->items->accounts->investments->securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **report->voa->items->accounts->investments->securities->name** (nullable, string) A descriptive name for the security, suitable for display. **report->voa->items->accounts->investments->securities->isin** (nullable, string) 12-character ISIN, a globally unique securities identifier. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **report->voa->items->accounts->investments->securities->cusip** (nullable, string) 9-character CUSIP, an identifier assigned to North American securities. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **report->voa->items->accounts->investments->securities->institution\_security\_id** (nullable, string) An identifier given to the security by the institution. **report->voa->items->accounts->investments->securities->institution\_id** (nullable, string) If institution\_security\_id is present, this field indicates the Plaid institution\_id of the institution to whom the identifier belongs. **report->voa->items->accounts->investments->securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **report->voa->items->accounts->investments->securities->type** (nullable, string) The security type of the holding. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **report->voa->items->accounts->investments->investment\_transactions** (\[object\]) Transaction history on the investment account. **report->voa->items->accounts->investments->investment\_transactions->investment\_transaction\_id** (string) The ID of the Investment transaction, unique across all Plaid transactions. Like all Plaid identifiers, the investment\_transaction\_id is case sensitive. **report->voa->items->accounts->investments->investment\_transactions->account\_id** (string) The account\_id of the account against which this transaction posted. **report->voa->items->accounts->investments->investment\_transactions->security\_id** (nullable, string) The security\_id to which this transaction is related. **report->voa->items->accounts->investments->investment\_transactions->date** (string) The ISO 8601 posting date for the transaction. Format: date **report->voa->items->accounts->investments->investment\_transactions->name** (string) The institution’s description of the transaction. **report->voa->items->accounts->investments->investment\_transactions->quantity** (number) The number of units of the security involved in this transaction. Positive for buy transactions; negative for sell transactions. Format: double **report->voa->items->accounts->investments->investment\_transactions->amount** (number) The complete value of the transaction. Positive values when cash is debited, e.g. purchases of stock; negative values when cash is credited, e.g. sales of stock. Treatment remains the same for cash-only movements unassociated with securities. Format: double **report->voa->items->accounts->investments->investment\_transactions->price** (number) The price of the security at which this transaction occurred. Format: double **report->voa->items->accounts->investments->investment\_transactions->fees** (nullable, number) The combined value of all fees applied to this transaction Format: double **report->voa->items->accounts->investments->investment\_transactions->type** (string) Value is one of the following: buy: Buying an investment sell: Selling an investment cancel: A cancellation of a pending transaction cash: Activity that modifies a cash position fee: A fee on the account transfer: Activity which modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transfer For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: buy, sell, cancel, cash, fee, transfer **report->voa->items->accounts->investments->investment\_transactions->subtype** (string) For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: account fee, adjustment, assignment, buy, buy to cover, contribution, deposit, distribution, dividend, dividend reinvestment, exercise, expire, fund fee, interest, interest receivable, interest reinvestment, legal fee, loan payment, long-term capital gain, long-term capital gain reinvestment, management fee, margin expense, merger, miscellaneous fee, non-qualified dividend, non-resident tax, pending credit, pending debit, qualified dividend, rebalance, return of principal, request, sell, sell short, send, short-term capital gain, short-term capital gain reinvestment, spin off, split, stock distribution, tax, tax withheld, trade, transfer, transfer fee, trust fee, unqualified gain, withdrawal **report->voa->items->accounts->investments->investment\_transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **report->voa->items->accounts->investments->investment\_transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **report->voa->items->institution\_name** (string) The full financial institution name associated with the Item. **report->voa->items->institution\_id** (string) The id of the financial institution associated with the Item. **report->voa->items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **report->voa->items->last\_update\_time** (string) The date and time when this Item’s data was last retrieved from the financial institution, in ISO 8601 format. Format: date-time **report->voa->attributes** (object) Attributes for the VOA report. **report->voa->attributes->total\_inflow\_amount** (nullable, object) Total amount of debit transactions into the report's accounts in the time period of the report. This field only takes into account USD transactions from the accounts. **report->voa->attributes->total\_inflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->voa->attributes->total\_inflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->voa->attributes->total\_inflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->voa->attributes->total\_outflow\_amount** (nullable, object) Total amount of credit transactions into the report's accounts in the time period of the report. This field only takes into account USD transactions from the accounts. **report->voa->attributes->total\_outflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **report->voa->attributes->total\_outflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **report->voa->attributes->total\_outflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **report->employment\_refresh** (nullable, object) An object representing an Employment Refresh Report. **report->employment\_refresh->generated\_time** (string) The date and time when the Employment Refresh Report was created, in ISO 8601 format (e.g. "2018-04-12T03:32:11Z"). Format: date-time **report->employment\_refresh->days\_requested** (number) The number of days of transaction history that the Employment Refresh Report covers. **report->employment\_refresh->items** (\[object\]) Data returned by Plaid about each of the Items included in the Employment Refresh Report. **report->employment\_refresh->items->accounts** (\[object\]) Data about each of the accounts open on the Item. **report->employment\_refresh->items->accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **report->employment\_refresh->items->accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself. **report->employment\_refresh->items->accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution. **report->employment\_refresh->items->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **report->employment\_refresh->items->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **report->employment\_refresh->items->accounts->transactions** (\[object\]) Transaction history associated with the account for the Employment Refresh Report. Note that this transaction differs from a Base Report transaction in that it will only be deposits, and the amounts will be omitted. **report->employment\_refresh->items->accounts->transactions->account\_id** (string) The ID of the account in which this transaction occurred. **report->employment\_refresh->items->accounts->transactions->original\_description** (string) The string returned by the financial institution to describe the transaction. **report->employment\_refresh->items->accounts->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **report->employment\_refresh->items->accounts->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **report->employment\_refresh->items->accounts->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **report->employment\_refresh->items->institution\_name** (string) The full financial institution name associated with the Item. **report->employment\_refresh->items->institution\_id** (string) The id of the financial institution associated with the Item. **report->employment\_refresh->items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **report->employment\_refresh->items->last\_update\_time** (string) The date and time when this Item’s data was last retrieved from the financial institution, in ISO 8601 format. 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. **warnings** (\[object\]) If the verification report generation was successful but a subset of data could not be retrieved, this array will contain information about the errors causing information to be missing. **warnings->warning\_type** (string) The warning type, which will always be CHECK\_REPORT\_WARNING **warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Account-owner information is not available. TRANSACTIONS\_UNAVAILABLE: Transactions information associated with Credit and Depository accounts are unavailable. USER\_FRAUD\_ALERT: The user has placed a fraud alert on their Plaid Check consumer report due to suspected fraud. Please note that when a fraud alert is in place, the recipient of the consumer report has an obligation to verify the consumer’s identity. Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, USER\_FRAUD\_ALERT **warnings->cause** (nullable, object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **warnings->cause->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **warnings->cause->error\_code** (string) The particular error code. Safe for programmatic use. **warnings->cause->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **warnings->cause->display\_message** (nullable, string) 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. **warnings->cause->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. **warnings->cause->causes** (array) 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. **warnings->cause->status** (nullable, integer) 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. **warnings->cause->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **warnings->cause->suggested\_action** (nullable, string) Suggested steps for resolving the error **warnings->cause->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error Response Object ```json { "request_id": "LhQf0THi8SH1yJm", "report": { "report_id": "028e8404-a013-4a45-ac9e-002482f9cafc", "client_report_id": "client_report_id_1221", "voa": { "generated_time": "2023-03-30T18:27:37Z", "days_requested": 90, "attributes": { "total_inflow_amount": { "amount": -345.12, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount": { "amount": 235.12, "iso_currency_code": "USD", "unofficial_currency_code": null } }, "items": [ { "accounts": [ { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "unofficial_currency_code": null, "historical_balances": [ { "current": 110, "date": "2023-03-29", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 125.55, "date": "2023-03-28", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 80.13, "date": "2023-03-27", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 246.11, "date": "2023-03-26", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 182.71, "date": "2023-03-25", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "average_balance_30_days": 200, "average_balance_60_days": 150, "average_balance_90_days": 125, "nsf_overdraft_transactions_count": 0 }, "consumer_disputes": [], "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "type": "depository", "subtype": "checking", "days_available": 90, "transactions_insights": { "all_transactions": [ { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 89.4, "date": "2023-03-27", "iso_currency_code": "USD", "original_description": "SparkFun", "pending": false, "transaction_id": "4zBRq1Qem4uAPnoyKjJNTRQpQddM4ztlo1PLD", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 12, "date": "2023-03-28", "iso_currency_code": "USD", "original_description": "McDonalds #3322", "pending": false, "transaction_id": "dkjL41PnbKsPral79jpxhMWdW55gkPfBkWpRL", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": 4.33, "date": "2023-03-28", "iso_currency_code": "USD", "original_description": "Starbucks", "pending": false, "transaction_id": "a84ZxQaWDAtDL3dRgmazT57K7jjN3WFkNWMDy", "unofficial_currency_code": null }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "amount": -500, "date": "2023-03-29", "iso_currency_code": "USD", "original_description": "United Airlines **** REFUND ****", "pending": false, "transaction_id": "xG9jbv3eMoFWepzB7wQLT3LoLggX5Duy1Gbe5", "unofficial_currency_code": null } ], "end_date": "2024-07-31", "start_date": "2024-07-01" }, "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "region": "NY", "street": "2992 Cameron Road", "postal_code": "14236" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "region": "CA", "street": "2493 Leisure Lane", "postal_code": "93405-2255" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null } ], "institution_name": "First Platypus Bank", "institution_id": "ins_109508", "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7", "last_update_time": "2023-03-30T18:25:26Z" } ] }, "employment_refresh": { "generated_time": "2023-03-30T18:27:37Z", "days_requested": 60, "items": [ { "accounts": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "name": "Plaid Money Market", "official_name": "Plaid Platinum Standard 1.85% Interest Money Market", "type": "depository", "subtype": "money market", "transactions": [ { "account_id": "1qKRXQjk8xUWDJojNwPXTj8gEmR48piqRNye8", "original_description": "ACH Electronic CreditGUSTO PAY 123456", "date": "2023-03-30", "pending": false, "transaction_id": "gGQgjoeyqBF89PND6K14Sow1wddZBmtLomJ78" } ] }, { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "type": "depository", "subtype": "checking", "transactions": [ { "account_id": "eG7pNLjknrFpWvP7Dkbdf3Pq6GVBPKTaQJK5v", "original_description": "United Airlines **** REFUND ****", "date": "2023-03-29", "pending": false, "transaction_id": "xG9jbv3eMoFWepzB7wQLT3LoLggX5Duy1Gbe5" } ] } ], "institution_name": "First Platypus Bank", "institution_id": "ins_109508", "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7", "last_update_time": "2023-03-30T18:25:26Z" } ] } }, "warnings": [] } ``` \=\*=\*=\*= #### /cra/check\_report/verification/pdf/get  #### Retrieve Consumer Reports as a Verification PDF  The [/cra/check\_report/verification/pdf/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportverificationpdfget) endpoint retrieves the most recent Consumer Report in PDF format, specifically formatted for Home Lending verification use cases. Before calling this endpoint, ensure that you've created a VOA report through Link or the [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) endpoint, and have received the `CHECK_REPORT_READY` webhook. The response to [/cra/check\_report/verification/pdf/get](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportverificationpdfget) is the PDF binary data. The `request_id` is returned in the `Plaid-Request-ID` header. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **report\_type** (required, string) The type of verification PDF report to fetch. Possible values: voa, employment\_refresh /cra/check\_report/verification/pdf/get Node▼ ```javascript try { const response = await client.craCheckReportVerificationPDFGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', report_type: 'VOA', }); const pdf = response.buffer.toString('base64'); } catch (error) { // handle error } ``` ##### Response  This endpoint returns binary PDF data. View a sample [VOA](https://plaid.com/documents/sample-mortgage-verification-voa.pdf) or [Employment Refresh](https://plaid.com/documents/sample-mortgage-verification-voe.pdf) report. \=\*=\*=\*= #### /cra/check\_report/create  #### Refresh or create a Consumer Report  The primary purpose of [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) is to refresh data in an existing report. A Consumer Report will last for 24 hours before expiring; you should call any `/get` endpoints on the report before it expires. If a report expires, you can call [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) again to re-generate it and refresh the data in the report. [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) can also be used to create a new report if `consumer_report_permissible_purpose` was omitted during Link token creation. However, using the endpoint in this way is not recommended. Instead, `consumer_report_permissible_purpose` should always be specified when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) for Plaid CRA products; this will reduce latency and simplify the integration process. If you provide a `consumer_report_permissible_purpose` during Link token creation, then Plaid Check will automatically begin creating a Consumer Report once the user completes the Link process, and it is not necessary to call [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) before retrieving the report. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **webhook** (required, string) The destination URL to which webhooks will be sent Format: url **days\_requested** (required, integer) The number of days of data to request for the report. Default value is 365; maximum is 731; minimum is 180. If a value lower than 180 is provided, a minimum of 180 days of history will be requested. Maximum: 731 **days\_required** (integer) The minimum number of days of data required for the report to be successfully generated. Maximum: 184 **client\_report\_id** (string) Client-generated identifier, which can be used by lenders to track loan applications. **products** (\[string\]) Specifies a list of products that will be eagerly generated when creating the report (in addition to the Base Report, which is always eagerly generated). These products will be made available before a success webhook is sent. Use this option to minimize response latency for product /get endpoints. Note that specifying cra\_partner\_insights in this field will trigger a billable event. Other products are not billed until the respective reports are fetched via product-specific /get endpoints. Min items: 1 Possible values: cra\_income\_insights, cra\_cashflow\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_lend\_score **base\_report** (object) Defines configuration options to generate a Base Report **base\_report->client\_report\_id** (deprecated, string) Client-generated identifier, which can be used by lenders to track loan applications. This field is deprecated. Use the client\_report\_id field at the top level of the request instead. **base\_report->gse\_options** (object) Specifies options for creating reports that can be shared with GSEs for mortgage verification. **base\_report->gse\_options->report\_types** (required, \[string\]) Specifies which types of reports should be made available to GSEs. Possible values: VOA, EMPLOYMENT\_REFRESH **base\_report->require\_identity** (boolean) Indicates that the report must include identity information. If identity information is not available, the report will fail. **cashflow\_insights** (object) Defines configuration options to generate Cashflow Insights **cashflow\_insights->attributes\_version** (string) The version of cashflow attributes Possible values: CFI1 **partner\_insights** (object) Defines configuration to generate Partner Insights. **partner\_insights->prism\_products** (deprecated, \[string\]) The specific Prism Data products to return. If none are passed in, then all products will be returned. Possible values: insights, scores **partner\_insights->prism\_versions** (object) The versions of Prism products to evaluate **partner\_insights->prism\_versions->firstdetect** (string) The version of Prism FirstDetect. If not specified, will default to v3. Possible values: 3, null **partner\_insights->prism\_versions->detect** (string) The version of Prism Detect Possible values: 4, null **partner\_insights->prism\_versions->cashscore** (string) The version of Prism CashScore. If not specified, will default to v3. Possible values: 4, 3, null **partner\_insights->prism\_versions->extend** (string) The version of Prism Extend Possible values: 4, null **partner\_insights->prism\_versions->insights** (string) The version of Prism Insights. If not specified, will default to v3. Possible values: 4, 3, null **lend\_score** (object) Defines configuration options to generate the LendScore **lend\_score->lend\_score\_version** (string) The version of the LendScore Possible values: LS1 **network\_insights** (object) Defines configuration options to generate Network Insights **network\_insights->network\_insights\_version** (string) The version of network insights Possible values: NI1 **include\_investments** (boolean) Indicates that investment data should be extracted from the linked account(s). **consumer\_report\_permissible\_purpose** (required, string) Describes the reason you are generating a Consumer Report for this user. ACCOUNT\_REVIEW\_CREDIT: In connection with a consumer credit transaction for the review or collection of an account pursuant to FCRA Section 604(a)(3)(A). ACCOUNT\_REVIEW\_NON\_CREDIT: For a legitimate business need of the information to review a non-credit account provided primarily for personal, family, or household purposes to determine whether the consumer continues to meet the terms of the account pursuant to FCRA Section 604(a)(3)(F)(2). EXTENSION\_OF\_CREDIT: In connection with a credit transaction initiated by and involving the consumer pursuant to FCRA Section 604(a)(3)(A). LEGITIMATE\_BUSINESS\_NEED\_TENANT\_SCREENING: For a legitimate business need in connection with a business transaction initiated by the consumer primarily for personal, family, or household purposes in connection with a property rental assessment pursuant to FCRA Section 604(a)(3)(F)(i). LEGITIMATE\_BUSINESS\_NEED\_OTHER: For a legitimate business need in connection with a business transaction made primarily for personal, family, or household initiated by the consumer pursuant to FCRA Section 604(a)(3)(F)(i). WRITTEN\_INSTRUCTION\_PREQUALIFICATION: In accordance with the written instructions of the consumer pursuant to FCRA Section 604(a)(2), to evaluate an application’s profile to make an offer to the consumer. WRITTEN\_INSTRUCTION\_OTHER: In accordance with the written instructions of the consumer pursuant to FCRA Section 604(a)(2), such as when an individual agrees to act as a guarantor or assumes personal liability for a consumer, business, or commercial loan. Possible values: ACCOUNT\_REVIEW\_CREDIT, ACCOUNT\_REVIEW\_NON\_CREDIT, EXTENSION\_OF\_CREDIT, LEGITIMATE\_BUSINESS\_NEED\_TENANT\_SCREENING, LEGITIMATE\_BUSINESS\_NEED\_OTHER, WRITTEN\_INSTRUCTION\_PREQUALIFICATION, WRITTEN\_INSTRUCTION\_OTHER /cra/check\_report/create Node▼ ```javascript try { const response = await client.craCheckReportCreate({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', webhook: 'https://sample-web-hook.com', days_requested: 365, consumer_report_permissible_purpose: 'LEGITIMATE_BUSINESS_NEED_OTHER', }); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "LhQf0THi8SH1yJm" } ``` \=\*=\*=\*= #### /cra/monitoring\_insights/get  #### Retrieve a Monitoring Insights Report  This endpoint allows you to retrieve a Cash Flow Updates report by passing in the `user_token` referred to in the webhook you received. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **consumer\_report\_permissible\_purpose** (required, string) Describes the reason you are generating a Consumer Report for this user. ACCOUNT\_REVIEW\_CREDIT: In connection with a consumer credit transaction for the review or collection of an account pursuant to FCRA Section 604(a)(3)(A). WRITTEN\_INSTRUCTION\_OTHER: In accordance with the written instructions of the consumer pursuant to FCRA Section 604(a)(2), such as when an individual agrees to act as a guarantor or assumes personal liability for a consumer, business, or commercial loan. Possible values: ACCOUNT\_REVIEW\_CREDIT, WRITTEN\_INSTRUCTION\_OTHER /cra/monitoring\_insights/get Node▼ ```javascript try { const response = await client.craMonitoringInsightsGet({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', consumer_report_permissible_purpose: 'EXTENSION_OF_CREDIT', }); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **user\_insights\_id** (string) A unique ID identifying a User Monitoring Insights Report. Like all Plaid identifiers, this ID is case sensitive. **items** (\[object\]) An array of Monitoring Insights Items associated with the user. **items->date\_generated** (string) The date and time when the specific insights were generated (per-item), in ISO 8601 format (e.g. "2018-04-12T03:32:11Z"). Format: date-time **items->item\_id** (string) The item\_id of the Item associated with the insights **items->institution\_id** (string) The id of the financial institution associated with the Item. **items->institution\_name** (string) The full financial institution name associated with the Item. **items->status** (object) An object with details of the Monitoring Insights Item's status. **items->status->status\_code** (string) Enum for the status of the Item's insights Possible values: AVAILABLE, FAILED, PENDING **items->status->reason** (nullable, string) A reason for why a Monitoring Insights Report is not available. This field will only be populated when the status\_code is not AVAILABLE **items->insights** (nullable, object) An object representing the Monitoring Insights for the given Item **items->insights->income** (object) An object representing the income subcategory of the report **items->insights->income->total\_monthly\_income** (object) Details about about the total monthly income **items->insights->income->total\_monthly\_income->current\_amount** (number) The aggregated income of the last 30 days **items->insights->income->income\_sources\_counts** (object) Details about the number of income sources **items->insights->income->income\_sources\_counts->current\_count** (number) The number of income sources currently detected **items->insights->income->forecasted\_monthly\_income** (object) An object representing the predicted average monthly net income amount. This amount reflects the funds deposited into the account and may not include any withheld income such as taxes or other payroll deductions **items->insights->income->forecasted\_monthly\_income->current\_amount** (number) The current forecasted monthly income **items->insights->income->historical\_annual\_income** (object) An object representing the historical annual income amount. **items->insights->income->historical\_annual\_income->current\_amount** (number) The current historical annual income **items->insights->income->income\_sources** (\[object\]) The income sources for this Item. Each entry in the array is a single income source **items->insights->income->income\_sources->income\_source\_id** (string) A unique identifier for an income source **items->insights->income->income\_sources->income\_description** (string) The most common name or original description for the underlying income transactions **items->insights->income->income\_sources->income\_category** (string) The income category. BANK\_INTEREST: Interest earned from a bank account. BENEFIT\_OTHER: Government benefits other than retirement, unemployment, child support, or disability. Currently used only in the UK, to represent benefits such as Cost of Living Payments. CASH: Deprecated and used only for existing legacy implementations. Has been replaced by CASH\_DEPOSIT and TRANSFER\_FROM\_APPLICATION. CASH\_DEPOSIT: A cash or check deposit. CHILD\_SUPPORT: Child support payments received. GIG\_ECONOMY: Income earned as a gig economy worker, e.g. driving for Uber, Lyft, Postmates, DoorDash, etc. LONG\_TERM\_DISABILITY: Disability payments, including Social Security disability benefits. OTHER: Income that could not be categorized as any other income category. MILITARY: Veterans benefits. Income earned as salary for serving in the military (e.g. through DFAS) will be classified as SALARY rather than MILITARY. RENTAL: Income earned from a rental property. Income may be identified as rental when the payment is received through a rental platform, e.g. Airbnb; rent paid directly by the tenant to the property owner (e.g. via cash, check, or ACH) will typically not be classified as rental income. RETIREMENT: Payments from private retirement systems, pensions, and government retirement programs, including Social Security retirement benefits. SALARY: Payment from an employer to an earner or other form of permanent employment. TAX\_REFUND: A tax refund. TRANSFER\_FROM\_APPLICATION: Deposits from a money transfer app, such as Venmo, Cash App, or Zelle. UNEMPLOYMENT: Unemployment benefits. In the UK, includes certain low-income benefits such as the Universal Credit. Possible values: SALARY, UNEMPLOYMENT, CASH, GIG\_ECONOMY, RENTAL, CHILD\_SUPPORT, MILITARY, RETIREMENT, LONG\_TERM\_DISABILITY, BANK\_INTEREST, CASH\_DEPOSIT, TRANSFER\_FROM\_APPLICATION, TAX\_REFUND, BENEFIT\_OTHER, OTHER **items->insights->income->income\_sources->last\_transaction\_date** (string) The last detected transaction date for this income source Format: date **items->insights->loans** (object) An object representing the loan exposure subcategory of the report **items->insights->loans->loan\_payments\_counts** (object) Details regarding the number of loan payments **items->insights->loans->loan\_payments\_counts->current\_count** (number) The current number of loan payments made in the last 30 days **items->insights->loans->loan\_disbursements\_count** (number) The number of loan disbursements detected in the last 30 days **items->insights->loans->loan\_payment\_merchants\_counts** (object) Details regarding the number of unique loan payment merchants **items->insights->loans->loan\_payment\_merchants\_counts->current\_count** (number) The current number of unique loan payment merchants detected in the last 30 days **items->accounts** (\[object\]) Data about each of the accounts open on the Item. **items->accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. Like all Plaid identifiers, the account\_id is case sensitive. **items->accounts->balances** (object) Information about an account's balances. **items->accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get. If current is null this field is guaranteed not to be null. Format: double **items->accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **items->accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **items->accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **items->accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **items->accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only used and expected when the institution is ins\_128026 (Capital One) and the Item contains one or more accounts with a non-depository account type, in which case a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For Capital One depository accounts as well as all other account types on all other institutions, this field is ignored. See account type schema for a full list of account types. If the balance that is pulled is older than the given timestamp for Items with this field required, an INVALID\_REQUEST error with the code of LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned with the most recent timestamp for the requested account contained in the response. Format: date-time **items->accounts->balances->average\_balance** (nullable, number) The average historical balance for the entire report Format: double **items->accounts->balances->average\_monthly\_balances** (\[object\]) The average historical balance of each calendar month **items->accounts->balances->average\_monthly\_balances->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). **items->accounts->balances->average\_monthly\_balances->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). **items->accounts->balances->average\_monthly\_balances->average\_balance** (object) This contains an amount, denominated in the currency specified by either iso\_currency\_code or unofficial\_currency\_code **items->accounts->balances->average\_monthly\_balances->average\_balance->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->balances->average\_monthly\_balances->average\_balance->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->balances->average\_monthly\_balances->average\_balance->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->balances->most\_recent\_thirty\_day\_average\_balance** (nullable, number) The average historical balance from the most recent 30 days Format: double **items->accounts->consumer\_disputes** (\[object\]) The information about previously submitted valid dispute statements by the consumer **items->accounts->consumer\_disputes->consumer\_dispute\_id** (deprecated, string) (Deprecated) A unique identifier (UUID) of the consumer dispute that can be used for troubleshooting **items->accounts->consumer\_disputes->dispute\_field\_create\_date** (string) Date of the disputed field (e.g. transaction date), in an ISO 8601 format (YYYY-MM-DD) Format: date **items->accounts->consumer\_disputes->category** (string) Type of data being disputed by the consumer Possible values: TRANSACTION, BALANCE, IDENTITY, OTHER **items->accounts->consumer\_disputes->statement** (string) Text content of dispute **items->accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **items->accounts->metadata** (object) Metadata about the extracted account. **items->accounts->metadata->start\_date** (nullable, string) The beginning of the range of the financial institution provided data for the account, in ISO 8601 format ("yyyy-mm-dd"). Format: date **items->accounts->metadata->end\_date** (nullable, string) The end of the range of the financial institution provided data for the account, in ISO 8601 format ("yyyy-mm-dd"). Format: date **items->accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **items->accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **items->accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **items->accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **items->accounts->days\_available** (number) The duration of transaction history available within this report for this Item, typically defined as the time since the date of the earliest transaction in that account. **items->accounts->transactions** (\[object\]) Transaction history associated with the account. Transaction history returned by endpoints such as /transactions/get or /investments/transactions/get will be returned in the top-level transactions field instead. Some transactions may have their details masked in accordance to FCRA. **items->accounts->transactions->account\_id** (string) The ID of the account in which this transaction occurred. **items->accounts->transactions->amount** (number) The settled value of the transaction, denominated in the transaction's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. Format: double **items->accounts->transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **items->accounts->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **items->accounts->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **items->accounts->transactions->credit\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for credit use cases, but not limited to such use cases. See the taxonomy csv file for a full list of credit categories. **items->accounts->transactions->credit\_category->primary** (string) A high level category that communicates the broad category of the transaction. **items->accounts->transactions->credit\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **items->accounts->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **items->accounts->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **items->accounts->transactions->date\_transacted** (nullable, string) The date on which the transaction took place, in IS0 8601 format. **items->accounts->transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **items->accounts->transactions->location->address** (nullable, string) The street address where the transaction occurred. **items->accounts->transactions->location->city** (nullable, string) The city where the transaction occurred. **items->accounts->transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **items->accounts->transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **items->accounts->transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **items->accounts->transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **items->accounts->transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **items->accounts->transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **items->accounts->transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **items->accounts->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **items->accounts->transactions->account\_owner** (nullable, string) The name of the account owner. This field is not typically populated and only relevant when dealing with sub-accounts. **items->accounts->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **items->accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. This array can also be empty if no owners are found. **items->accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **items->accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **items->accounts->owners->phone\_numbers->data** (string) The phone number. **items->accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **items->accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **items->accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **items->accounts->owners->emails->data** (string) The email address. **items->accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **items->accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **items->accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **items->accounts->owners->addresses->data** (object) Data about the components comprising an address. **items->accounts->owners->addresses->data->city** (nullable, string) The full city name **items->accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **items->accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **items->accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **items->accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **items->accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **items->accounts->ownership\_type** (nullable, string) How an asset is owned. association: Ownership by a corporation, partnership, or unincorporated association, including for-profit and not-for-profit organizations. individual: Ownership by an individual. joint: Joint ownership by multiple parties. trust: Ownership by a revocable or irrevocable trust. Possible values: null, individual, joint, association, trust **items->accounts->account\_insights** (deprecated, object) Calculated insights derived from transaction-level data. This field has been deprecated in favor of Base Report attributes aggregated across accounts and will be removed in a future release. **items->accounts->account\_insights->oldest\_transaction\_date** (nullable, string) Date of the earliest transaction for the account. Format: date **items->accounts->account\_insights->most\_recent\_transaction\_date** (nullable, string) Date of the most recent transaction for the account. Format: date **items->accounts->account\_insights->days\_available** (integer) Number of days days available for the account. **items->accounts->account\_insights->average\_days\_between\_transactions** (number) Average number of days between sequential transactions **items->accounts->account\_insights->longest\_gaps\_between\_transactions** (\[object\]) Longest gap between sequential transactions in a time period. This array can include multiple time periods. **items->accounts->account\_insights->longest\_gaps\_between\_transactions->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->longest\_gaps\_between\_transactions->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->longest\_gaps\_between\_transactions->days** (nullable, integer) Largest number of days between sequential transactions for this time period. **items->accounts->account\_insights->number\_of\_inflows** (\[object\]) The number of debits into the account. This array will be empty for non-depository accounts. **items->accounts->account\_insights->number\_of\_inflows->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->number\_of\_inflows->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->number\_of\_inflows->count** (integer) The number of credits or debits out of the account for this time period. **items->accounts->account\_insights->average\_inflow\_amounts** (\[object\]) Average amount of debit transactions into the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->account\_insights->average\_inflow\_amounts->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->average\_inflow\_amounts->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->average\_inflow\_amounts->total\_amount** (object) This contains an amount, denominated in the currency specified by either iso\_currency\_code or unofficial\_currency\_code **items->accounts->account\_insights->average\_inflow\_amounts->total\_amount->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->account\_insights->average\_inflow\_amounts->total\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->account\_insights->average\_inflow\_amounts->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->account\_insights->number\_of\_outflows** (\[object\]) The number of outflows from the account. This array will be empty for non-depository accounts. **items->accounts->account\_insights->number\_of\_outflows->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->number\_of\_outflows->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->number\_of\_outflows->count** (integer) The number of credits or debits out of the account for this time period. **items->accounts->account\_insights->average\_outflow\_amounts** (\[object\]) Average amount of transactions out of the account in a time period. This array will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->account\_insights->average\_outflow\_amounts->start\_date** (string) The start date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->average\_outflow\_amounts->end\_date** (string) The end date of this time period. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **items->accounts->account\_insights->average\_outflow\_amounts->total\_amount** (object) This contains an amount, denominated in the currency specified by either iso\_currency\_code or unofficial\_currency\_code **items->accounts->account\_insights->average\_outflow\_amounts->total\_amount->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->account\_insights->average\_outflow\_amounts->total\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->account\_insights->average\_outflow\_amounts->total\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->account\_insights->number\_of\_days\_no\_transactions** (integer) Number of days with no transactions **items->accounts->attributes** (object) Calculated attributes derived from transaction-level data. **items->accounts->attributes->is\_primary\_account** (nullable, boolean) Prediction indicator of whether the account is a primary account. Only one account per account type across the items connected will have a value of true. **items->accounts->attributes->primary\_account\_score** (nullable, number) Value ranging from 0-1. The higher the score, the more confident we are of the account being the primary account. **items->accounts->attributes->nsf\_overdraft\_transactions\_count** (integer) The number of net NSF fee transactions for a given account within the report time range (not counting any fees that were reversed within the time range). **items->accounts->attributes->nsf\_overdraft\_transactions\_count\_30d** (integer) The number of net NSF fee transactions within the last 30 days for a given account (not counting any fees that were reversed within the time range). **items->accounts->attributes->nsf\_overdraft\_transactions\_count\_60d** (integer) The number of net NSF fee transactions within the last 60 days for a given account (not counting any fees that were reversed within the time range). **items->accounts->attributes->nsf\_overdraft\_transactions\_count\_90d** (integer) The number of net NSF fee transactions within the last 90 days for a given account (not counting any fees that were reversed within the time range). **items->accounts->attributes->total\_inflow\_amount** (nullable, object) Total amount of debit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_inflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_inflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_inflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_inflow\_amount\_30d** (nullable, object) Total amount of debit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_inflow\_amount\_30d->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_inflow\_amount\_30d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_inflow\_amount\_30d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_inflow\_amount\_60d** (nullable, object) Total amount of debit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_inflow\_amount\_60d->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_inflow\_amount\_60d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_inflow\_amount\_60d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_inflow\_amount\_90d** (nullable, object) Total amount of debit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_inflow\_amount\_90d->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_inflow\_amount\_90d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_inflow\_amount\_90d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_outflow\_amount** (nullable, object) Total amount of credit transactions into the account in the time period of the report. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_outflow\_amount->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_outflow\_amount->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_outflow\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_outflow\_amount\_30d** (nullable, object) Total amount of credit transactions into the account in the last 30 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_outflow\_amount\_30d->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_outflow\_amount\_30d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_outflow\_amount\_30d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_outflow\_amount\_60d** (nullable, object) Total amount of credit transactions into the account in the last 60 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_outflow\_amount\_60d->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_outflow\_amount\_60d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_outflow\_amount\_60d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **items->accounts->attributes->total\_outflow\_amount\_90d** (nullable, object) Total amount of credit transactions into the account in the last 90 days. This field will be empty for non-depository accounts. This field only takes into account USD transactions from the account. **items->accounts->attributes->total\_outflow\_amount\_90d->amount** (number) Value of amount with up to 2 decimal places. **items->accounts->attributes->total\_outflow\_amount\_90d->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **items->accounts->attributes->total\_outflow\_amount\_90d->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. Response Object ```json { "user_insights_id": "028e8404-a013-4a45-ac9e-002482f9cafc", "items": [ { "date_generated": "2023-03-30T18:27:37Z", "item_id": "AZMP7JrGXgtPd3AQMeg7hwMKgk5E8qU1V5ME7", "institution_id": "ins_0", "institution_name": "Plaid Bank", "status": { "status_code": "AVAILABLE" }, "insights": { "income": { "income_sources": [ { "income_source_id": "f17efbdd-caab-4278-8ece-963511cd3d51", "income_description": "PLAID_INC_DIRECT_DEP_PPD", "income_category": "SALARY", "last_transaction_date": "2023-03-30" } ], "forecasted_monthly_income": { "current_amount": 12000 }, "total_monthly_income": { "current_amount": 20000.31 }, "historical_annual_income": { "current_amount": 144000 }, "income_sources_counts": { "current_count": 1 } }, "loans": { "loan_payments_counts": { "current_count": 1 }, "loan_payment_merchants_counts": { "current_count": 1 }, "loan_disbursements_count": 1 } }, "accounts": [ { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "attributes": { "total_inflow_amount": { "amount": -2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_inflow_amount_30d": { "amount": -1000, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_inflow_amount_60d": { "amount": -2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_inflow_amount_90d": { "amount": -2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount": { "amount": 2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount_30d": { "amount": 1000, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount_60d": { "amount": 2500, "iso_currency_code": "USD", "unofficial_currency_code": null }, "total_outflow_amount_90d": { "amount": 2500, "iso_currency_code": "USD", "unofficial_currency_code": null } }, "balances": { "available": 5000, "average_balance": 4956.12, "average_monthly_balances": [ { "average_balance": { "amount": 4956.12, "iso_currency_code": "USD", "unofficial_currency_code": null }, "end_date": "2024-07-31", "start_date": "2024-07-01" } ], "current": 5000, "iso_currency_code": "USD", "limit": null, "most_recent_thirty_day_average_balance": 4956.125, "unofficial_currency_code": null }, "consumer_disputes": [], "days_available": 365, "mask": "1208", "metadata": { "start_date": "2024-01-01", "end_date": "2024-07-16" }, "name": "Checking", "official_name": "Plaid checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "+1 111-555-3333", "primary": false, "type": "home" }, { "data": "+1 111-555-4444", "primary": false, "type": "work" }, { "data": "+1 111-555-5555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "checking", "transactions": [ { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 37.07, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "XA7ZLy8rXzt7D3j9B6LMIgv5VxyQkAhbKjzmp", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 51.61, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Domino's", "original_description": "DOMINO's XXXX 111-222-3333", "pending": false, "transaction_id": "VEPeMbWqRluPVZLQX4MDUkKRw41Ljzf9gyLBW", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 7.55, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_FURNITURE_AND_HARDWARE", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": "Chicago", "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "IKEA", "original_description": "IKEA CHICAGO", "pending": false, "transaction_id": "6GQZARgvroCAE1eW5wpQT7w3oB6nvzi8DKMBa", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 12.87, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_SPORTING_GOODS", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": "Redlands", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Nike", "original_description": "NIKE REDLANDS CA", "pending": false, "transaction_id": "DkbmlP8BZxibzADqNplKTeL8aZJVQ1c3WR95z", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 44.21, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-12", "date_posted": "2024-07-12T00:00:00Z", "date_transacted": "2024-07-12", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "POKE BROS * POKE BRO IL", "pending": false, "transaction_id": "RpdN7W8GmRSdjZB9Jm7ATj4M86vdnktapkrgL", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 36.82, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_DISCOUNT_STORES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Family Dollar", "original_description": "FAMILY DOLLAR", "pending": false, "transaction_id": "5AeQWvo5KLtAD9wNL68PTdAgPE7VNWf5Kye1G", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 13.27, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Instacart", "original_description": "INSTACART HTTPSINSTACAR CA", "pending": false, "transaction_id": "Jjlr3MEVg1HlKbdkZj39ij5a7eg9MqtB6MWDo", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 36.03, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "POKE BROS * POKE BRO IL", "pending": false, "transaction_id": "kN9KV7yAZJUMPn93KDXqsG9MrpjlyLUL6Dgl8", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 54.74, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "lPvrweZAMqHDar43vwWKs547kLZVEzfpogGVJ", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 37.5, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-13", "date_posted": "2024-07-13T00:00:00Z", "date_transacted": "2024-07-13", "iso_currency_code": "USD", "location": { "address": "1627 N 24th St", "city": "Phoenix", "country": null, "lat": null, "lon": null, "postal_code": "85008", "region": "AZ", "state": "AZ", "store_number": null, "zip": "85008" }, "merchant_name": "Taqueria El Guerrerense", "original_description": "TAQUERIA EL GUERRERO PHOENIX AZ", "pending": false, "transaction_id": "wka74WKqngiyJ3pj7dl5SbpLGQBZqyCPZRDbP", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 41.42, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "BBGnV4RkerHjn8WVavGyiJbQ95VNDaC4M56bJ", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": -1077.93, "check_number": null, "credit_category": { "detailed": "INCOME_OTHER", "primary": "INCOME" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Lyft", "original_description": "LYFT TRANSFER", "pending": false, "transaction_id": "3Ej78yKJlQu1Abw7xzo4U4JR6pmwzntZlbKDK", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 47.17, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "rMzaBpJw8jSZRJQBabKdteQBwd5EaWc7J9qem", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 12.37, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "zWPZjkmzynTyel89ZjExS59DV6WAaZflNBJ56", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 44.18, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": "Portland", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "OR", "state": "OR", "store_number": "1111", "zip": null }, "merchant_name": "Safeway", "original_description": "SAFEWAY #1111 PORTLAND OR 111111", "pending": false, "transaction_id": "K7qzx1nP8ptqgwaRMbxyI86XrqADMluRpkWx5", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 45.37, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-14", "date_posted": "2024-07-14T00:00:00Z", "date_transacted": "2024-07-14", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Uber Eats", "original_description": "UBER EATS", "pending": false, "transaction_id": "qZrdzLRAgNHo5peMdD9xIzELl3a1NvcgrPAzL", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 15.22, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "NZzx4oRPkAHzyRekpG4PTZkWnBPqEyiy6pB1M", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 26.33, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Domino's", "original_description": "DOMINO's XXXX 111-222-3333", "pending": false, "transaction_id": "x84eNArKbESz8Woden6LT3nvyogeJXc64Pp35", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 39.8, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_DISCOUNT_STORES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Family Dollar", "original_description": "FAMILY DOLLAR", "pending": false, "transaction_id": "dzWnyxwZ4GHlZPGgrNyxiMG7qd5jDgCJEz5jL", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 45.06, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Instacart", "original_description": "INSTACART HTTPSINSTACAR CA", "pending": false, "transaction_id": "4W7eE9rZqMToDArbPeLNIREoKpdgBMcJbVNQD", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 34.91, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": "Whittier", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "CA", "state": "CA", "store_number": null, "zip": null }, "merchant_name": "Smart & Final", "original_description": "POS SMART AND FINAL 111 WHITTIER CA", "pending": false, "transaction_id": "j4yqDjb7QwS7woGzqrgDIEG1NaQVZwf6Wmz3D", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 49.78, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": "Portland", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "OR", "state": "OR", "store_number": "1111", "zip": null }, "merchant_name": "Safeway", "original_description": "SAFEWAY #1111 PORTLAND OR 111111", "pending": false, "transaction_id": "aqgWnze7xoHd6DQwLPnzT5dgPKjB1NfZ5JlBy", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 54.24, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-15", "date_posted": "2024-07-15T00:00:00Z", "date_transacted": "2024-07-15", "iso_currency_code": "USD", "location": { "address": null, "city": "Portland", "country": null, "lat": null, "lon": null, "postal_code": null, "region": "OR", "state": "OR", "store_number": "1111", "zip": null }, "merchant_name": "Safeway", "original_description": "SAFEWAY #1111 PORTLAND OR 111111", "pending": false, "transaction_id": "P13aP8b7nmS3WQoxg1PMsdvMK679RNfo65B4G", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 41.79, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_ONLINE_MARKETPLACES", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Amazon", "original_description": "AMZN Mktp US*11111111 Amzn.com/bill WA AM", "pending": false, "transaction_id": "7nZMG6pXz8SADylMqzx7TraE4qjJm7udJyAGm", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 33.86, "check_number": null, "credit_category": { "detailed": "FOOD_RETAIL_GROCERIES", "primary": "FOOD_RETAIL" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "Instacart", "original_description": "INSTACART HTTPSINSTACAR CA", "pending": false, "transaction_id": "MQr3ap7PWEIrQG7bLdaNsxyBV7g1KqCL6pwoy", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 27.08, "check_number": null, "credit_category": { "detailed": "DINING_DINING", "primary": "DINING" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "POKE BROS * POKE BRO IL", "pending": false, "transaction_id": "eBAk9dvwNbHPZpr8W69dU3rekJz47Kcr9BRwl", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 25.94, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_FURNITURE_AND_HARDWARE", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": "The Home Depot", "original_description": "THE HOME DEPOT", "pending": false, "transaction_id": "QLx4jEJZb9SxRm7aWbjAio3LrgZ5vPswm64dE", "unofficial_currency_code": null }, { "account_id": "NZzx4oRPkAHzyRekpG4PTZkoGpNAR4uypaj1E", "account_owner": null, "amount": 27.57, "check_number": null, "credit_category": { "detailed": "GENERAL_MERCHANDISE_OTHER_GENERAL_MERCHANDISE", "primary": "GENERAL_MERCHANDISE" }, "date": "2024-07-16", "date_posted": "2024-07-16T00:00:00Z", "date_transacted": "2024-07-16", "iso_currency_code": "USD", "location": { "address": null, "city": null, "country": null, "lat": null, "lon": null, "postal_code": null, "region": null, "state": null, "store_number": null, "zip": null }, "merchant_name": null, "original_description": "The Press Club", "pending": false, "transaction_id": "ZnQ1ovqBldSQ6GzRbroAHLdQP68BrKceqmAjX", "unofficial_currency_code": null } ], "type": "depository" } ] } ], "request_id": "m8MDnv9okwxFNBV" } ``` \=\*=\*=\*= #### /cra/monitoring\_insights/subscribe  #### Subscribe to Monitoring Insights  This endpoint allows you to subscribe to insights for a user's linked CRA items, which are updated between one and four times per day (best-effort). #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **item\_id** (string) The item ID to subscribe for Cash Flow Updates. **webhook** (required, string) URL to which Plaid will send Cash Flow Updates webhooks, for example when the requested Cash Flow Updates report is ready. Format: url **income\_categories** (\[string\]) Income categories to include in Cash Flow Updates. If empty or null, this field will default to including all possible categories. Possible values: SALARY, UNEMPLOYMENT, CASH, GIG\_ECONOMY, RENTAL, CHILD\_SUPPORT, MILITARY, RETIREMENT, LONG\_TERM\_DISABILITY, BANK\_INTEREST, CASH\_DEPOSIT, TRANSFER\_FROM\_APPLICATION, TAX\_REFUND, BENEFIT\_OTHER, OTHER /cra/monitoring\_insights/subscribe Node▼ ```javascript try { const response = await client.craMonitoringInsightsSubscribe({ user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', item_id: 'eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6', webhook: 'https://example.com/webhook', income_categories: [CreditBankIncomeCategory.Salary], }); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **subscription\_id** (string) A unique identifier for the subscription. Response Object ```json { "subscription_id": "f17efbdd-caab-4278-8ece-963511cd3d51", "request_id": "GVzMdiDd8DDAQK4" } ``` \=\*=\*=\*= #### /cra/monitoring\_insights/unsubscribe  #### Unsubscribe from Monitoring Insights  This endpoint allows you to unsubscribe from previously subscribed Monitoring Insights. #### Request fields  **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. **subscription\_id** (required, string) A unique identifier for the subscription. /cra/monitoring\_insights/unsubscribe Node▼ ```javascript try { const response = await client.craMonitoringInsightsUnsubscribe({ subscription_id: '"f17efbdd-caab-4278-8ece-963511cd3d51"', }); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "GVzMdiDd8DDAQK4" } ``` ### Webhooks  When you create a new report, either by creating a Link token with a Plaid Check product, or by calling [/cra/check\_report/create](https://plaid.com/docs/api/products/check/index.html.md#cracheck_reportcreate) , Plaid Check will start generating a report for you. When the report has been created (or the report creation fails), Plaid Check will let you know by sending you either a `CHECK_REPORT: CHECK_REPORT_READY` or `CHECK_REPORT: CHECK_REPORT_FAILED` webhook. \=\*=\*=\*= #### CHECK\_REPORT\_READY  Fired when the Check Report are ready to be retrieved. Once this webhook has fired, the report will be available to retrieve for 24 hours. #### Properties  **webhook\_type** (string) CHECK\_REPORT **webhook\_code** (string) CHECK\_REPORT\_READY **user\_id** (string) The user\_id corresponding to the user the webhook has fired for. **successful\_products** (\[string\]) Specifies a list of products that have successfully been generated for the report. Possible values: cra\_base\_report, cra\_income\_insights, cra\_cashflow\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_monitoring, cra\_lend\_score **failed\_products** (\[string\]) Specifies a list of products that have failed to generate for the report. Additional detail on what caused the failure can be found by calling the product /get endpoint. Possible values: cra\_base\_report, cra\_income\_insights, cra\_cashflow\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_monitoring, cra\_lend\_score **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CHECK_REPORT", "webhook_code": "CHECK_REPORT_READY", "user_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "successful_products": [ "cra_base_report" ], "environment": "production" } ``` \=\*=\*=\*= #### CHECK\_REPORT\_FAILED  Fired when a Check Report has failed to generate #### Properties  **webhook\_type** (string) CHECK\_REPORT **webhook\_code** (string) CHECK\_REPORT\_FAILED **user\_id** (string) The user\_id corresponding to the user the webhook has fired for. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CHECK_REPORT", "webhook_code": "CHECK_REPORT_FAILED", "user_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "environment": "production" } ``` ### Cash flow updates webhooks  These webhooks are specific to the Cash Flow Updates (beta) product. \=\*=\*=\*= #### INSIGHTS\_UPDATED  For each user's Item enabled for Cash Flow Updates, this webhook will fire between one and four times a day with information on the status of the update. This webhook will not fire immediately upon enrollment in Cash Flow Updates. Upon receiving the webhook, call [/cra/monitoring\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsget) to retrieve the updated insights. At approximately the same time as the `INSIGHTS_UPDATED` webhook, any event-driven `CASH_FLOW_UPDATES` webhooks (e.g. `LOW_BALANCE_DETECTED`, `LARGE_DEPOSIT_DETECTED`) that were triggered by the update will also fire. #### Properties  **webhook\_type** (string) CASH\_FLOW\_UPDATES **webhook\_code** (string) INSIGHTS\_UPDATED **status** (string) Enum for the status of the insights Possible values: AVAILABLE, FAILED **user\_id** (string) The user\_id that the report is associated with **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CASH_FLOW_UPDATES", "webhook_code": "INSIGHTS_UPDATED", "status": "AVAILABLE", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "environment": "production" } ``` \=\*=\*=\*= #### LARGE\_DEPOSIT\_DETECTED  For each user's item enabled for Cash Flow Updates, this webhook will fire when an update detects a deposit over $5,000. Upon receiving the webhook, call [/cra/monitoring\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsget) to retrieve the updated insights. #### Properties  **webhook\_type** (string) CASH\_FLOW\_UPDATES **webhook\_code** (string) LARGE\_DEPOSIT\_DETECTED **status** (string) Enum for the status of the insights Possible values: AVAILABLE, FAILED **user\_id** (string) The user\_id that the report is associated with **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CASH_FLOW_UPDATES", "webhook_code": "LARGE_DEPOSIT_DETECTED", "status": "AVAILABLE", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "environment": "production" } ``` \=\*=\*=\*= #### LOW\_BALANCE\_DETECTED  For each user's item enabled for Cash Flow Updates, this webhook will fire when an update detects a balance below $100. Upon receiving the webhook, call [/cra/monitoring\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsget) to retrieve the updated insights. #### Properties  **webhook\_type** (string) CASH\_FLOW\_UPDATES **webhook\_code** (string) LOW\_BALANCE\_DETECTED **status** (string) Enum for the status of the insights Possible values: AVAILABLE, FAILED **user\_id** (string) The user\_id that the report is associated with **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CASH_FLOW_UPDATES", "webhook_code": "LOW_BALANCE_DETECTED", "status": "AVAILABLE", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "environment": "production" } ``` \=\*=\*=\*= #### NEW\_LOAN\_PAYMENT\_DETECTED  For each user's item enabled for Cash Flow Updates, this webhook will fire when an update detects a new loan payment. Upon receiving the webhook, call [/cra/monitoring\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsget) to retrieve the updated insights. #### Properties  **webhook\_type** (string) CASH\_FLOW\_UPDATES **webhook\_code** (string) NEW\_LOAN\_PAYMENT\_DETECTED **status** (string) Enum for the status of the insights Possible values: AVAILABLE, FAILED **user\_id** (string) The user\_id that the report is associated with **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CASH_FLOW_UPDATES", "webhook_code": "NEW_LOAN_PAYMENT_DETECTED", "status": "AVAILABLE", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "environment": "production" } ``` \=\*=\*=\*= #### NSF\_OVERDRAFT\_DETECTED  For each user's item enabled for Cash Flow Updates, this webhook will fire when an update includes an NSF overdraft transaction. Upon receiving the webhook, call [/cra/monitoring\_insights/get](https://plaid.com/docs/api/products/check/index.html.md#cramonitoring_insightsget) to retrieve the updated insights. #### Properties  **webhook\_type** (string) CASH\_FLOW\_UPDATES **webhook\_code** (string) NSF\_OVERDRAFT\_DETECTED **status** (string) Enum for the status of the insights Possible values: AVAILABLE, FAILED **user\_id** (string) The user\_id that the report is associated with **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "CASH_FLOW_UPDATES", "webhook_code": "NSF_OVERDRAFT_DETECTED", "status": "AVAILABLE", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "environment": "production" } ``` --- # API - Enrich | Plaid Docs Enrich  ======= #### API reference for Enrich endpoint  For how-to guidance, see the [Enrich documentation](https://plaid.com/docs/enrich/index.html.md) . | Endpoints | | | --- | --- | | [/transactions/enrich](https://plaid.com/docs/api/products/enrich/index.html.md#transactionsenrich) | Send transaction data and retrieve enrichments | \=\*=\*=\*= #### /transactions/enrich  #### Enrich locally-held transaction data  The [/transactions/enrich](https://plaid.com/docs/api/products/enrich/index.html.md#transactionsenrich) endpoint enriches raw transaction data generated by your own banking products or retrieved from other non-Plaid sources. #### Request fields  **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. **account\_type** (required, string) The account type for the requested transactions (either depository or credit). **transactions** (required, \[object\]) An array of transaction objects to be enriched by Plaid. Maximum of 100 transactions per request. **transactions->id** (required, string) A unique ID for the transaction used to help you tie data back to your systems. **transactions->description** (required, string) The raw description of the transaction. If you have location data in available an unstructured format, it may be appended to the description field. **transactions->amount** (required, number) The absolute value of the transaction (>= 0). When testing Enrich, note that amount data should be realistic. Unrealistic or inaccurate amount data may result in reduced quality output. Format: double **transactions->direction** (required, string) The direction of the transaction from the perspective of the account holder: OUTFLOW - Includes outgoing transfers, purchases, and fees. (Typically represented as a negative value on checking accounts and debit cards and a positive value on credit cards.) INFLOW - Includes incoming transfers, refunds, and income. (Typically represented as a positive value on checking accounts and debit cards and a negative value on credit cards.) Possible values: INFLOW, OUTFLOW **transactions->iso\_currency\_code** (required, string) The ISO-4217 currency code of the transaction e.g. USD. **transactions->location** (object) A representation of where a transaction took place. Use this field to pass in structured location information you may have about your transactions. Providing location data is optional but can increase result quality. If you have unstructured location information, it may be appended to the description field. **transactions->location->country** (string) The country where the transaction occurred. **transactions->location->region** (string) The region or state where the transaction occurred. **transactions->location->city** (string) The city where the transaction occurred. **transactions->location->address** (string) The street address where the transaction occurred. **transactions->location->postal\_code** (string) The postal code where the transaction occurred. **transactions->mcc** (string) Merchant category codes (MCCs) are four-digit numbers that describe a merchant's primary business activities. **transactions->date\_posted** (string) The date the transaction posted, in ISO 8601 (YYYY-MM-DD) format. Format: date **options** (object) An optional object to be used with the request. **options->include\_legacy\_category** (boolean) Include legacy\_category and legacy\_category\_id in the response (in addition to the default personal\_finance\_category). Categories are based on Plaid's legacy taxonomy. For a full list of legacy categories, see /categories/get. Default: false **options->personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 /transactions/enrich Node▼ ```javascript const transactionsToEnrich: Array = [ { id: '1', description: 'PURCHASE WM SUPERCENTER #1700', amount: 72.1, iso_currency_code: 'USD', location: { city: 'Poway', region: 'CA', }, direction: EnrichTransactionDirection.Outflow, }, { id: '2', description: 'DD DOORDASH BURGERKIN 855-123-4567 CA', amount: 28.34, iso_currency_code: 'USD', direction: EnrichTransactionDirection.Outflow, }, ]; const request: TransactionsEnrichRequest = { account_type: 'depository', transactions: transactionsToEnrich, }; const response = await client.transactionsEnrich(request); const enrichedTransactions = response.data.enriched_transactions; ``` #### Response fields  **enriched\_transactions** (\[object\]) A list of enriched transactions. **enriched\_transactions->id** (string) The unique ID for the transaction as provided by you in the request. **enriched\_transactions->description** (string) The raw description of the transaction. **enriched\_transactions->amount** (number) The absolute value of the transaction (>= 0) Format: double **enriched\_transactions->direction** (string) The direction of the transaction from the perspective of the account holder: OUTFLOW - Includes outgoing transfers, purchases, and fees. (Typically represented as a negative value on checking accounts and debit cards and a positive value on credit cards.) INFLOW - Includes incoming transfers, refunds, and income. (Typically represented as a positive value on checking accounts and debit cards and a negative value on credit cards.) Possible values: INFLOW, OUTFLOW **enriched\_transactions->iso\_currency\_code** (string) The ISO-4217 currency code of the transaction e.g. USD. **enriched\_transactions->enrichments** (object) A grouping of the Plaid produced transaction enrichment fields. **enriched\_transactions->enrichments->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **enriched\_transactions->enrichments->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **enriched\_transactions->enrichments->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **enriched\_transactions->enrichments->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **enriched\_transactions->enrichments->counterparties->website** (nullable, string) The website associated with the counterparty. **enriched\_transactions->enrichments->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **enriched\_transactions->enrichments->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **enriched\_transactions->enrichments->counterparties->phone\_number** (nullable, string) The phone number associated with the counterparty in E. 164 format. If there is a location match (i.e. a street address is returned in the location object), the phone number will be location specific. **enriched\_transactions->enrichments->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **enriched\_transactions->enrichments->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **enriched\_transactions->enrichments->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **enriched\_transactions->enrichments->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **enriched\_transactions->enrichments->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **enriched\_transactions->enrichments->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **enriched\_transactions->enrichments->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **enriched\_transactions->enrichments->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the primary counterparty. **enriched\_transactions->enrichments->legacy\_category\_id** (deprecated, nullable, string) The ID of the legacy category to which this transaction belongs. For a full list of legacy categories, see /categories/get. We recommend using the personal\_finance\_category for transaction categorization to obtain the best results. **enriched\_transactions->enrichments->legacy\_category** (deprecated, nullable, \[string\]) A hierarchical array of the legacy categories to which this transaction belongs. For a full list of legacy categories, see /categories/get. We recommend using the personal\_finance\_category for transaction categorization to obtain the best results. **enriched\_transactions->enrichments->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **enriched\_transactions->enrichments->location->address** (nullable, string) The street address where the transaction occurred. **enriched\_transactions->enrichments->location->city** (nullable, string) The city where the transaction occurred. **enriched\_transactions->enrichments->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **enriched\_transactions->enrichments->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **enriched\_transactions->enrichments->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **enriched\_transactions->enrichments->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **enriched\_transactions->enrichments->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **enriched\_transactions->enrichments->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **enriched\_transactions->enrichments->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **enriched\_transactions->enrichments->merchant\_name** (nullable, string) The name of the primary counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **enriched\_transactions->enrichments->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. Possible values: online, in store, other **enriched\_transactions->enrichments->phone\_number** (nullable, string) The phone number associated with the counterparty in E. 164 format. If there is a location match (i.e. a street address is returned in the location object), the phone number will be location specific. **enriched\_transactions->enrichments->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **enriched\_transactions->enrichments->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **enriched\_transactions->enrichments->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **enriched\_transactions->enrichments->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **enriched\_transactions->enrichments->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **enriched\_transactions->enrichments->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **enriched\_transactions->enrichments->website** (nullable, string) The website associated with this transaction. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "enriched_transactions": [ { "id": "6135818adda16500147e7c1d", "description": "PURCHASE WM SUPERCENTER #1700", "amount": 72.1, "direction": "OUTFLOW", "iso_currency_code": "USD", "enrichments": { "counterparties": [ { "name": "Walmart", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "confidence_level": "VERY_HIGH", "phone_number": "+18009256278" } ], "entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "location": { "address": "13425 Community Rd", "city": "Poway", "region": "CA", "postal_code": "92064", "country": "US", "store_number": "1700", "lat": 32.959068, "lon": -117.037666 }, "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "merchant_name": "Walmart", "payment_channel": "in store", "personal_finance_category": { "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "primary": "GENERAL_MERCHANDISE", "confidence_level": "VERY_HIGH" }, "phone_number": "+18009256278", "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_GENERAL_MERCHANDISE.png", "website": "walmart.com" } }, { "id": "3958434bhde9384bcmeo3401", "description": "DD DOORDASH BURGERKIN 855-123-4567 CA", "amount": 28.34, "direction": "OUTFLOW", "iso_currency_code": "USD", "enrichments": { "counterparties": [ { "name": "DoorDash", "type": "marketplace", "logo_url": "https://plaid-counterparty-logos.plaid.com/doordash_1.png", "website": "doordash.com", "entity_id": "YNRJg5o2djJLv52nBA1Yn1KpL858egYVo4dpm", "confidence_level": "VERY_HIGH", "phone_number": "+18001234567" }, { "name": "Burger King", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "confidence_level": "VERY_HIGH", "phone_number": null } ], "location": { "address": null, "city": null, "region": null, "postal_code": null, "country": null, "store_number": null, "lat": null, "lon": null }, "entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "merchant_name": "Burger King", "payment_channel": "online", "personal_finance_category": { "detailed": "FOOD_AND_DRINK_FAST_FOOD", "primary": "FOOD_AND_DRINK", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_FOOD_AND_DRINK.png", "phone_number": null, "website": "burgerking.com" } } ], "request_id": "Wvhy9PZHQLV8njG" } ``` --- # API - Identity Verification | Plaid Docs Identity Verification  ====================== #### API reference for Identity Verification endpoints and webhooks  For how-to guidance, see the [Identity Verification documentation](https://plaid.com/docs/identity-verification/index.html.md) . | Endpoints | | | --- | --- | | [/identity\_verification/create](https://plaid.com/docs/api/products/identity-verification/index.html.md#identity_verificationcreate) | Create a new identity verification | | [/identity\_verification/get](https://plaid.com/docs/api/products/identity-verification/index.html.md#identity_verificationget) | Retrieve a previously created identity verification | | [/identity\_verification/list](https://plaid.com/docs/api/products/identity-verification/index.html.md#identity_verificationlist) | Filter and list identity verifications | | [/identity\_verification/retry](https://plaid.com/docs/api/products/identity-verification/index.html.md#identity_verificationretry) | Allow a user to retry an identity verification | | See also | | | --- | --- | | [/dashboard\_user/get](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userget) | Retrieve information about a dashboard user | | [/dashboard\_user/list](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userlist) | List dashboard users | | Webhooks | | | --- | --- | | [STATUS\_UPDATED](https://plaid.com/docs/api/products/identity-verification/index.html.md#status_updated) | The status of an identity verification has been updated | | [STEP\_UPDATED](https://plaid.com/docs/api/products/identity-verification/index.html.md#step_updated) | A step in the identity verification process has been completed | | [RETRIED](https://plaid.com/docs/api/products/identity-verification/index.html.md#retried) | An identity verification has been retried | ### Endpoints  \=\*=\*=\*= #### /identity\_verification/create  #### Create a new Identity Verification  Create a new Identity Verification for the user specified by the `client_user_id` and/or `user_id` field. At least one of these two fields must be provided. The requirements and behavior of the verification are determined by the `template_id` provided. If `user_id` is provided, there must be an associated user otherwise an error will be returned. If you don't know whether an active Identity Verification exists for a given `client_user_id` and/or `user_id`, you can specify `"is_idempotent": true` in the request body. With idempotency enabled, a new Identity Verification will only be created if one does not already exist for the associated `client_user_id` and/or `user_id`, and `template_id`. If an Identity Verification is found, it will be returned unmodified with a `200 OK` HTTP status code. If `user_id` is not provided, you can also use this endpoint to supply information you already have collected about the user; if any of these fields are specified, the screens prompting the user to enter them will be skipped during the Link flow. If `user_id` is provided, user information can not be included in the request body. Please use the [/user/update](https://plaid.com/docs/api/users/index.html.md#userupdate) endpoint to update user data instead. #### Request fields  **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **user\_id** (string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. **is\_shareable** (required, boolean) A flag specifying whether you would like Plaid to expose a shareable URL for the verification being created. **template\_id** (required, string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **gave\_consent** (required, 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 **user** (object) User information collected outside of Link, most likely via your own onboarding process. Each of the following identity fields are optional: email\_address phone\_number date\_of\_birth name address id\_number Specifically, these fields are optional in that they can either be fully provided (satisfying every required field in their subschema) or omitted from the request entirely by not providing the key or value. Providing these fields via the API will result in Link skipping the data collection process for the associated user. All verification steps enabled in the associated Identity Verification Template will still be run. Verification steps will either be run immediately, or once the user completes the accept\_tos step, depending on the value provided to the gave\_consent field. If you are not using the shareable URL feature, you can optionally provide these fields via /link/token/create instead; both /identity\_verification/create and /link/token/create are valid ways to provide this information. Note that if you provide a non-null user data object via /identity\_verification/create, any user data fields entered via /link/token/create for the same client\_user\_id will be ignored when prefilling Link. **user->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (string) A valid phone number in E.164 format. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (object) You can use this field to pre-populate the user's legal name; if it is provided here, they will not be prompted to enter their name in the identity verification attempt. **user->name->given\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Home address for the user. Supported values are: not provided, address with only country code or full address. For more context on this field, see Input Validation by Country. **user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->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. **user->address->country** (required, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->id\_number** (object) ID number submitted by the user, currently used only for the Identity Verification product. If the user has not submitted this data yet, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->id\_number->value** (required, string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (required, string) 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 **user->client\_user\_id** (deprecated, string) Specifying user.client\_user\_id is deprecated. Please provide client\_user\_id at the root level instead. **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. **is\_idempotent** (boolean) An optional flag specifying how you would like Plaid to handle attempts to create an Identity Verification when an Identity Verification already exists for the provided client\_user\_id and template\_id. If idempotency is enabled, Plaid will return the existing Identity Verification. If idempotency is disabled, Plaid will reject the request with a 400 Bad Request status code if an Identity Verification already exists for the supplied client\_user\_id and template\_id. /identity\_verification/create Node▼ ```javascript const request: IdentityVerificationCreateRequest = { client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', is_shareable: true, template_id: 'idvtmp_52xR9LKo77r1Np', gave_consent: true, user: { email_address: 'acharleston@email.com', phone_number: '+12345678909', date_of_birth: '1975-01-18', name: { given_name: 'Anna', family_name: 'Charleston', }, address: { street: '100 Market Street', street2: 'Apt 1A', city: 'San Francisco', region: 'CA', postal_code: '94103', country: 'US', }, id_number: { value: '123456789', type: 'us_ssn', }, }, }; try { const response = await client.identityVerificationCreate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Identity Verification attempt. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **completed\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **previous\_attempt\_id** (nullable, string) The ID for the Identity Verification preceding this session. This field will only be filled if the current Identity Verification is a retry of a previous attempt. **shareable\_url** (nullable, string) A shareable URL that can be sent directly to the user to complete verification **template** (object) The resource ID and version number of the template configuring the behavior of a given Identity Verification. **template->id** (string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **template->version** (integer) Version of the associated Identity Verification template. **user** (object) The identity data that was either collected from the user or provided via API in order to perform an Identity Verification. **user->phone\_number** (nullable, string) A valid phone number in E.164 format. **user->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->ip\_address** (nullable, string) An IPv4 or IPV6 address. **user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->name** (nullable, object) The full name provided by the user. If the user has not submitted their name, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (nullable, object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code **user->address->street** (nullable, string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (nullable, string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->id\_number** (nullable, object) ID number submitted by the user, currently used only for the Identity Verification product. If the user has not submitted this data yet, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (string) 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 **status** (string) The status of this Identity Verification attempt. active - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed. success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification template failed - The user failed one or more steps in the session and was told to contact support. expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future. canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. Possible values: active, success, failed, expired, canceled, pending\_review **steps** (object) Each step will be one of the following values: active - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point. success - The Identity Verification attempt has completed this step. failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session. waiting\_for\_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback. not\_applicable - This step will not be run for this session. skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped. expired - This step had not yet been completed when the Identity Verification attempt as a whole expired. canceled - The Identity Verification attempt was canceled before the user completed this step. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. manually\_approved - The step was manually overridden to pass by a team member in the dashboard. manually\_rejected - The step was manually overridden to fail by a team member in the dashboard. **steps->accept\_tos** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->verify\_sms** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->kyc\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->documentary\_verification** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->selfie\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->watchlist\_screening** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->risk\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **documentary\_verification** (nullable, object) Data, images, analysis, and results from the documentary\_verification step. This field will be null unless steps.documentary\_verification has reached a terminal state of either success or failed. **documentary\_verification->status** (string) The outcome status for the associated Identity Verification attempt's documentary\_verification step. This field will always have the same value as steps.documentary\_verification. **documentary\_verification->documents** (\[object\]) An array of documents submitted to the documentary\_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type. Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within documents. If the overall documentary\_verification is failed, the user has exhausted their retry attempts. **documentary\_verification->documents->status** (string) An outcome status for this specific document submission. Distinct from the overall documentary\_verification.status that summarizes the verification outcome from one or more documents. Possible values: success, failed, manually\_approved **documentary\_verification->documents->attempt** (integer) The attempt field begins with 1 and increments with each subsequent document upload. **documentary\_verification->documents->images** (object) URLs for downloading original and cropped images for this document submission. The URLs are designed to only allow downloading, not hot linking, so the URL will only serve the document image for 60 seconds before expiring. The expiration time is 60 seconds after the GET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires. **documentary\_verification->documents->images->original\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading the uncropped original image of the front of the document. **documentary\_verification->documents->images->original\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading the original image of the back of the document. Might be null if the back of the document was not collected. **documentary\_verification->documents->images->cropped\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the front of the document. **documentary\_verification->documents->images->cropped\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the back of the document. Might be null if the back of the document was not collected. **documentary\_verification->documents->images->face** (nullable, string) Temporary URL that expires after 60 seconds for downloading a crop of just the user's face from the document image. Might be null if the document does not contain a face photo. **documentary\_verification->documents->extracted\_data** (nullable, object) Data extracted from a user-submitted document. **documentary\_verification->documents->extracted\_data->id\_number** (nullable, string) Alpha-numeric ID number extracted via OCR from the user's document image. **documentary\_verification->documents->extracted\_data->category** (string) The type of identity document detected in the images provided. Will always be one of the following values: drivers\_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privileges id\_card - A general national identification card, distinct from driver's licenses as it only establishes identity passport - A travel passport issued by the associated country for one of its citizens residence\_permit\_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside there resident\_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside there visa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 months Note: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say passport Possible values: drivers\_license, id\_card, passport, residence\_permit\_card, resident\_card, visa **documentary\_verification->documents->extracted\_data->expiration\_date** (nullable, string) The expiration date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->issue\_date** (nullable, string) The issue date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->issuing\_country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **documentary\_verification->documents->extracted\_data->issuing\_region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **documentary\_verification->documents->extracted\_data->date\_of\_birth** (nullable, string) A date extracted from the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->address** (nullable, object) The address extracted from the document. The address must at least contain the following fields to be a valid address: street, city, country. If any are missing or unable to be extracted, the address will be null. region, and postal\_code may be null based on the addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document. **documentary\_verification->documents->extracted\_data->address->street** (string) The full street address extracted from the document. **documentary\_verification->documents->extracted\_data->address->city** (string) City extracted from the document. **documentary\_verification->documents->extracted\_data->address->region** (nullable, string) A subdivision code extracted from the document. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc. For a full list of valid codes, see country subdivision codes. Country prefixes are omitted, since they can be inferred from the country field. **documentary\_verification->documents->extracted\_data->address->postal\_code** (nullable, string) The postal code extracted from the document. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **documentary\_verification->documents->extracted\_data->address->country** (string) Valid, capitalized, two-letter ISO code representing the country extracted from the document. Must be in ISO 3166-1 alpha-2 form. **documentary\_verification->documents->extracted\_data->name** (nullable, object) The individual's name extracted from the document. **documentary\_verification->documents->extracted\_data->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **documentary\_verification->documents->extracted\_data->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **documentary\_verification->documents->analysis** (object) High level descriptions of how the associated document was processed. If a document fails verification, the details in the analysis object should help clarify why the document was rejected. **documentary\_verification->documents->analysis->authenticity** (string) High level summary of whether the document in the provided image matches the formatting rules and security checks for the associated jurisdiction. For example, most identity documents have formatting rules like the following: The image of the person's face must have a certain contrast in order to highlight skin tone The subject in the document's image must remove eye glasses and pose in a certain way The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules Security features like watermarks and background patterns must be present So a match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->image\_quality** (string) A high level description of the quality of the image the user submitted. For example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks. Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality. Possible values: high, medium, low **documentary\_verification->documents->analysis->extracted\_data** (nullable, object) Analysis of the data extracted from the submitted document. **documentary\_verification->documents->analysis->extracted\_data->name** (string) A match summary describing the cross comparison between the subject's name, extracted from the document image, and the name they separately provided to identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->extracted\_data->date\_of\_birth** (string) A match summary describing the cross comparison between the subject's date of birth, extracted from the document image, and the date of birth they separately provided to the identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->extracted\_data->expiration\_date** (string) A description of whether the associated document was expired when the verification was performed. Note: In the case where an expiration date is not present on the document or failed to be extracted, this value will be no\_data. Possible values: not\_expired, expired, no\_data **documentary\_verification->documents->analysis->extracted\_data->issuing\_country** (string) A binary match indicator specifying whether the country that issued the provided document matches the country that the user separately provided to Plaid. Note: You can configure whether a no\_match on issuing\_country fails the documentary\_verification by editing your Plaid Template. Possible values: match, no\_match **documentary\_verification->documents->analysis->aamva\_verification** (nullable, object) Analyzed AAMVA data for the associated hit. Note: This field is only available for U.S. driver's licenses issued by participating states. **documentary\_verification->documents->analysis->aamva\_verification->is\_verified** (boolean) The overall outcome of checking the associated hit against the issuing state database. **documentary\_verification->documents->analysis->aamva\_verification->id\_number** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->id\_issue\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->id\_expiration\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->street** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->city** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->postal\_code** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->date\_of\_birth** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->gender** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->height** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->eye\_color** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->first\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->middle\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->last\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **selfie\_check** (nullable, object) Additional information for the selfie\_check step. This field will be null unless steps.selfie\_check has reached a terminal state of either success or failed. **selfie\_check->status** (string) The outcome status for the associated Identity Verification attempt's selfie\_check step. This field will always have the same value as steps.selfie\_check. Possible values: success, failed **selfie\_check->selfies** (\[object\]) An array of selfies submitted to the selfie\_check step. Each entry represents one user submission. **selfie\_check->selfies->status** (string) An outcome status for this specific selfie. Distinct from the overall selfie\_check.status that summarizes the verification outcome from one or more selfies. Possible values: success, failed **selfie\_check->selfies->attempt** (integer) The attempt field begins with 1 and increments with each subsequent selfie upload. **selfie\_check->selfies->capture** (object) The image or video capture of a selfie. Only one of image or video URL will be populated per selfie. **selfie\_check->selfies->capture->image\_url** (nullable, string) Temporary URL for downloading an image selfie capture. **selfie\_check->selfies->capture->video\_url** (nullable, string) Temporary URL for downloading a video selfie capture. **selfie\_check->selfies->analysis** (object) High level descriptions of how the associated selfie was processed. If a selfie fails verification, the details in the analysis object should help clarify why the selfie was rejected. **selfie\_check->selfies->analysis->document\_comparison** (string) Information about the comparison between the selfie and the document (if documentary verification also ran). Possible values: match, no\_match, no\_input **selfie\_check->selfies->analysis->liveness\_check** (string) Assessment of whether the selfie capture is of a real human being, as opposed to a picture of a human on a screen, a picture of a paper cut out, someone wearing a mask, or a deepfake. Possible values: success, failed **kyc\_check** (nullable, object) Additional information for the kyc\_check (Data Source Verification) step. This field will be null unless steps.kyc\_check has reached a terminal state of either success or failed. **kyc\_check->status** (string) The outcome status for the associated Identity Verification attempt's kyc\_check step. This field will always have the same value as steps.kyc\_check. **kyc\_check->address** (object) Result summary object specifying how the address field matched. **kyc\_check->address->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->address->po\_box** (string) Field describing whether the associated address is a post office box. Will be yes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no\_data when Plaid was not able to determine if the address is a P.O. box. Possible values: yes, no, no\_data **kyc\_check->address->type** (string) Field describing whether the associated address is being used for commercial or residential purposes. Note: This value will be no\_data when Plaid does not have sufficient data to determine the address's use. Possible values: residential, commercial, no\_data **kyc\_check->name** (object) Result summary object specifying how the name field matched. **kyc\_check->name->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->date\_of\_birth** (object) Result summary object specifying how the date\_of\_birth field matched. **kyc\_check->date\_of\_birth->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->id\_number** (object) Result summary object specifying how the id\_number field matched. **kyc\_check->id\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->phone\_number** (object) Result summary object specifying how the phone field matched. **kyc\_check->phone\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->phone\_number->area\_code** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **risk\_check** (nullable, object) Additional information for the risk\_check step. **risk\_check->status** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **risk\_check->behavior** (nullable, object) Result summary object specifying values for behavior attributes of risk check, when available. **risk\_check->behavior->user\_interactions** (string) Field describing the overall user interaction signals of a behavior risk check. This value represents how familiar the user is with the personal data they provide, based on a number of signals that are collected during their session. genuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely. neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome. risky indicates the user has low familiarity with the data they are providing, and that fraud is likely. no\_data indicates there is not sufficient information to give an accurate signal. Possible values: genuine, neutral, risky, no\_data **risk\_check->behavior->fraud\_ring\_detected** (string) Field describing the outcome of a fraud ring behavior risk check. yes indicates that fraud ring activity was detected. no indicates that fraud ring activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **risk\_check->behavior->bot\_detected** (string) Field describing the outcome of a bot detection behavior risk check. yes indicates that automated activity was detected. no indicates that automated activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **risk\_check->email** (nullable, object) Result summary object specifying values for email attributes of risk check. **risk\_check->email->is\_deliverable** (string) SMTP-MX check to confirm the email address exists if known. Possible values: yes, no, no\_data **risk\_check->email->breach\_count** (nullable, integer) Count of all known breaches of this email address if known. **risk\_check->email->first\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->last\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->domain\_registered\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->domain\_is\_free\_provider** (string) Indicates whether the email address domain is a free provider such as Gmail or Hotmail if known. Possible values: yes, no, no\_data **risk\_check->email->domain\_is\_custom** (string) Indicates whether the email address domain is custom if known, i.e. a company domain and not free or disposable. Possible values: yes, no, no\_data **risk\_check->email->domain\_is\_disposable** (string) Indicates whether the email domain is listed as disposable if known. Disposable domains are often used to create email addresses that are part of a fake set of user details. Possible values: yes, no, no\_data **risk\_check->email->top\_level\_domain\_is\_suspicious** (string) Indicates whether the email address top level domain, which is the last part of the domain, is fraudulent or risky if known. In most cases, a suspicious top level domain is also associated with a disposable or high-risk domain. Possible values: yes, no, no\_data **risk\_check->email->linked\_services** (\[string\]) A list of online services where this email address has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **risk\_check->phone** (nullable, object) Result summary object specifying values for phone attributes of risk check. **risk\_check->phone->linked\_services** (\[string\]) A list of online services where this phone number has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **risk\_check->devices** (\[object\]) Array of result summary objects specifying values for device attributes of risk check. **risk\_check->devices->ip\_proxy\_type** (nullable, string) An enum indicating whether a network proxy is present and if so what type it is. none\_detected indicates the user is not on a detectable proxy network. tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network). vpn indicates the user is on a VPN (Virtual Private Network) web\_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information. public\_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance. Possible values: none\_detected, tor, vpn, web\_proxy, public\_proxy **risk\_check->devices->ip\_spam\_list\_count** (nullable, integer) Count of spam lists the IP address is associated with if known. **risk\_check->devices->ip\_timezone\_offset** (nullable, string) UTC offset of the timezone associated with the IP address. **risk\_check->identity\_abuse\_signals** (nullable, object) Result summary object capturing abuse signals related to identity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected. **risk\_check->identity\_abuse\_signals->synthetic\_identity** (nullable, object) Field containing the data used in determining the outcome of the synthetic identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **risk\_check->identity\_abuse\_signals->synthetic\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **risk\_check->identity\_abuse\_signals->stolen\_identity** (nullable, object) Field containing the data used in determining the outcome of the stolen identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **risk\_check->identity\_abuse\_signals->stolen\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **verify\_sms** (nullable, object) Additional information for the verify\_sms step. **verify\_sms->status** (string) The outcome status for the associated Identity Verification attempt's verify\_sms step. This field will always have the same value as steps.verify\_sms. Possible values: success, failed **verify\_sms->verifications** (\[object\]) An array where each entry represents a verification attempt for the verify\_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications. **verify\_sms->verifications->status** (string) The outcome status for the individual SMS verification. Possible values: pending, success, failed, canceled **verify\_sms->verifications->attempt** (integer) The attempt field begins with 1 and increments with each subsequent SMS verification. **verify\_sms->verifications->phone\_number** (nullable, string) A phone number in E.164 format. **verify\_sms->verifications->delivery\_attempt\_count** (integer) The number of delivery attempts made within the verification to send the SMS code to the user. Each delivery attempt represents the user taking action from the front end UI to request creation and delivery of a new SMS verification code, or to resend an existing SMS verification code. There is a limit of 3 delivery attempts per verification. **verify\_sms->verifications->solve\_attempt\_count** (integer) The number of attempts made by the user within the verification to verify the SMS code by entering it into the front end UI. There is a limit of 3 solve attempts per verification. **verify\_sms->verifications->initially\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **verify\_sms->verifications->last\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **verify\_sms->verifications->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_screening\_id** (nullable, string) ID of the associated screening. **beacon\_user\_id** (nullable, string) ID of the associated Beacon User. **user\_id** (nullable, string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. **redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **latest\_scored\_protect\_event** (nullable, object) Information about a Protect event including Trust Index score and fraud attributes. **latest\_scored\_protect\_event->event\_id** (string) The event ID. **latest\_scored\_protect\_event->timestamp** (string) The timestamp of the event, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **latest\_scored\_protect\_event->trust\_index** (nullable, object) Represents a calculate Trust Index Score. **latest\_scored\_protect\_event->trust\_index->score** (integer) The overall trust index score. **latest\_scored\_protect\_event->trust\_index->model** (string) The versioned name of the Trust Index model used for scoring. **latest\_scored\_protect\_event->trust\_index->subscores** (nullable, object) Contains sub-score metadata. **latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection** (nullable, object) Represents Trust Index Subscore. **latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection->score** (integer) The subscore score. **latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights** (nullable, object) Represents Trust Index Subscore. **latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights->score** (integer) The subscore score. **latest\_scored\_protect\_event->fraud\_attributes** (nullable, object) Event fraud attributes as an arbitrary set of key-value pairs. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "idv_52xR9LKo77r1Np", "client_user_id": "your-db-id-3b24110", "created_at": "2020-07-24T03:26:02Z", "completed_at": "2020-07-24T03:26:02Z", "previous_attempt_id": "idv_42cF1MNo42r9Xj", "shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f", "template": { "id": "idvtmp_4FrXJvfQU3zGUR", "version": 2 }, "user": { "phone_number": "+12345678909", "date_of_birth": "1990-05-29", "ip_address": "192.0.2.42", "email_address": "user@example.com", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "id_number": { "value": "123456789", "type": "us_ssn" } }, "status": "success", "steps": { "accept_tos": "success", "verify_sms": "success", "kyc_check": "success", "documentary_verification": "success", "selfie_check": "success", "watchlist_screening": "success", "risk_check": "success" }, "documentary_verification": { "status": "success", "documents": [ { "status": "success", "attempt": 1, "images": { "original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg", "original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg", "cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg", "cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg", "face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg" }, "extracted_data": { "id_number": "AB123456", "category": "drivers_license", "expiration_date": "2030-05-29", "issue_date": "2020-05-29", "issuing_country": "US", "issuing_region": "IN", "date_of_birth": "1990-05-29", "address": { "street": "123 Main St. Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "name": { "given_name": "Leslie", "family_name": "Knope" } }, "analysis": { "authenticity": "match", "image_quality": "high", "extracted_data": { "name": "match", "date_of_birth": "match", "expiration_date": "not_expired", "issuing_country": "match" }, "aamva_verification": { "is_verified": true, "id_number": "match", "id_issue_date": "match", "id_expiration_date": "match", "street": "match", "city": "match", "postal_code": "match", "date_of_birth": "match", "gender": "match", "height": "match", "eye_color": "match", "first_name": "match", "middle_name": "match", "last_name": "match" } }, "redacted_at": "2020-07-24T03:26:02Z" } ] }, "selfie_check": { "status": "success", "selfies": [ { "status": "success", "attempt": 1, "capture": { "image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg", "video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm" }, "analysis": { "document_comparison": "match", "liveness_check": "success" } } ] }, "kyc_check": { "status": "success", "address": { "summary": "match", "po_box": "yes", "type": "residential" }, "name": { "summary": "match" }, "date_of_birth": { "summary": "match" }, "id_number": { "summary": "match" }, "phone_number": { "summary": "match", "area_code": "match" } }, "risk_check": { "status": "success", "behavior": { "user_interactions": "risky", "fraud_ring_detected": "yes", "bot_detected": "yes" }, "email": { "is_deliverable": "yes", "breach_count": 1, "first_breached_at": "1990-05-29", "last_breached_at": "1990-05-29", "domain_registered_at": "1990-05-29", "domain_is_free_provider": "yes", "domain_is_custom": "yes", "domain_is_disposable": "yes", "top_level_domain_is_suspicious": "yes", "linked_services": [ "apple" ] }, "phone": { "linked_services": [ "apple" ] }, "devices": [ { "ip_proxy_type": "none_detected", "ip_spam_list_count": 1, "ip_timezone_offset": "+06:00:00" } ], "identity_abuse_signals": { "synthetic_identity": { "score": 0 }, "stolen_identity": { "score": 0 } } }, "verify_sms": { "status": "success", "verifications": [ { "status": "success", "attempt": 1, "phone_number": "+12345678909", "delivery_attempt_count": 1, "solve_attempt_count": 1, "initially_sent_at": "2020-07-24T03:26:02Z", "last_sent_at": "2020-07-24T03:26:02Z", "redacted_at": "2020-07-24T03:26:02Z" } ] }, "watchlist_screening_id": "scr_52xR9LKo77r1Np", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "user_id": "usr_dddAs9ewdcDQQQ", "redacted_at": "2020-07-24T03:26:02Z", "latest_scored_protect_event": { "event_id": "ptevt_7AJYTMFxRUgJ", "timestamp": "2020-07-24T03:26:02Z", "trust_index": { "score": 86, "model": "trust_index.1.0.1", "subscores": { "device_and_connection": { "score": 87 }, "bank_account_insights": { "score": 85 } } }, "fraud_attributes": { "fraud_attributes": { "link_session.linked_bank_accounts.user_pi_matches_owners": true, "link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582, "session.challenged_with_mfa": false, "user.bank_accounts.num_of_frozen_or_restricted_accounts": 0, "user.linked_bank_accounts.num_family_names": 1, "user.linked_bank_accounts.num_of_connected_banks": 1, "user.link_sessions.days_since_first_link_session": 150, "user.pi.email.history_yrs": 7.03, "user.pi.email.num_social_networks_linked": 12, "user.pi.ssn.user_likely_has_better_ssn": false } } }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /identity\_verification/get  #### Retrieve Identity Verification  Retrieve a previously created Identity Verification. #### Request fields  **identity\_verification\_id** (required, string) ID of the associated Identity Verification attempt. **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\_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. /identity\_verification/get Node▼ ```javascript const request: IdentityVerificationGetRequest = { identity_verification_id: 'idv_52xR9LKo77r1Np', }; try { const response = await plaidClient.identityVerificationGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Identity Verification attempt. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **completed\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **previous\_attempt\_id** (nullable, string) The ID for the Identity Verification preceding this session. This field will only be filled if the current Identity Verification is a retry of a previous attempt. **shareable\_url** (nullable, string) A shareable URL that can be sent directly to the user to complete verification **template** (object) The resource ID and version number of the template configuring the behavior of a given Identity Verification. **template->id** (string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **template->version** (integer) Version of the associated Identity Verification template. **user** (object) The identity data that was either collected from the user or provided via API in order to perform an Identity Verification. **user->phone\_number** (nullable, string) A valid phone number in E.164 format. **user->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->ip\_address** (nullable, string) An IPv4 or IPV6 address. **user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->name** (nullable, object) The full name provided by the user. If the user has not submitted their name, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (nullable, object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code **user->address->street** (nullable, string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (nullable, string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->id\_number** (nullable, object) ID number submitted by the user, currently used only for the Identity Verification product. If the user has not submitted this data yet, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (string) 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 **status** (string) The status of this Identity Verification attempt. active - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed. success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification template failed - The user failed one or more steps in the session and was told to contact support. expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future. canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. Possible values: active, success, failed, expired, canceled, pending\_review **steps** (object) Each step will be one of the following values: active - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point. success - The Identity Verification attempt has completed this step. failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session. waiting\_for\_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback. not\_applicable - This step will not be run for this session. skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped. expired - This step had not yet been completed when the Identity Verification attempt as a whole expired. canceled - The Identity Verification attempt was canceled before the user completed this step. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. manually\_approved - The step was manually overridden to pass by a team member in the dashboard. manually\_rejected - The step was manually overridden to fail by a team member in the dashboard. **steps->accept\_tos** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->verify\_sms** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->kyc\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->documentary\_verification** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->selfie\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->watchlist\_screening** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->risk\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **documentary\_verification** (nullable, object) Data, images, analysis, and results from the documentary\_verification step. This field will be null unless steps.documentary\_verification has reached a terminal state of either success or failed. **documentary\_verification->status** (string) The outcome status for the associated Identity Verification attempt's documentary\_verification step. This field will always have the same value as steps.documentary\_verification. **documentary\_verification->documents** (\[object\]) An array of documents submitted to the documentary\_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type. Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within documents. If the overall documentary\_verification is failed, the user has exhausted their retry attempts. **documentary\_verification->documents->status** (string) An outcome status for this specific document submission. Distinct from the overall documentary\_verification.status that summarizes the verification outcome from one or more documents. Possible values: success, failed, manually\_approved **documentary\_verification->documents->attempt** (integer) The attempt field begins with 1 and increments with each subsequent document upload. **documentary\_verification->documents->images** (object) URLs for downloading original and cropped images for this document submission. The URLs are designed to only allow downloading, not hot linking, so the URL will only serve the document image for 60 seconds before expiring. The expiration time is 60 seconds after the GET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires. **documentary\_verification->documents->images->original\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading the uncropped original image of the front of the document. **documentary\_verification->documents->images->original\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading the original image of the back of the document. Might be null if the back of the document was not collected. **documentary\_verification->documents->images->cropped\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the front of the document. **documentary\_verification->documents->images->cropped\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the back of the document. Might be null if the back of the document was not collected. **documentary\_verification->documents->images->face** (nullable, string) Temporary URL that expires after 60 seconds for downloading a crop of just the user's face from the document image. Might be null if the document does not contain a face photo. **documentary\_verification->documents->extracted\_data** (nullable, object) Data extracted from a user-submitted document. **documentary\_verification->documents->extracted\_data->id\_number** (nullable, string) Alpha-numeric ID number extracted via OCR from the user's document image. **documentary\_verification->documents->extracted\_data->category** (string) The type of identity document detected in the images provided. Will always be one of the following values: drivers\_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privileges id\_card - A general national identification card, distinct from driver's licenses as it only establishes identity passport - A travel passport issued by the associated country for one of its citizens residence\_permit\_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside there resident\_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside there visa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 months Note: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say passport Possible values: drivers\_license, id\_card, passport, residence\_permit\_card, resident\_card, visa **documentary\_verification->documents->extracted\_data->expiration\_date** (nullable, string) The expiration date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->issue\_date** (nullable, string) The issue date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->issuing\_country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **documentary\_verification->documents->extracted\_data->issuing\_region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **documentary\_verification->documents->extracted\_data->date\_of\_birth** (nullable, string) A date extracted from the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->address** (nullable, object) The address extracted from the document. The address must at least contain the following fields to be a valid address: street, city, country. If any are missing or unable to be extracted, the address will be null. region, and postal\_code may be null based on the addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document. **documentary\_verification->documents->extracted\_data->address->street** (string) The full street address extracted from the document. **documentary\_verification->documents->extracted\_data->address->city** (string) City extracted from the document. **documentary\_verification->documents->extracted\_data->address->region** (nullable, string) A subdivision code extracted from the document. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc. For a full list of valid codes, see country subdivision codes. Country prefixes are omitted, since they can be inferred from the country field. **documentary\_verification->documents->extracted\_data->address->postal\_code** (nullable, string) The postal code extracted from the document. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **documentary\_verification->documents->extracted\_data->address->country** (string) Valid, capitalized, two-letter ISO code representing the country extracted from the document. Must be in ISO 3166-1 alpha-2 form. **documentary\_verification->documents->extracted\_data->name** (nullable, object) The individual's name extracted from the document. **documentary\_verification->documents->extracted\_data->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **documentary\_verification->documents->extracted\_data->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **documentary\_verification->documents->analysis** (object) High level descriptions of how the associated document was processed. If a document fails verification, the details in the analysis object should help clarify why the document was rejected. **documentary\_verification->documents->analysis->authenticity** (string) High level summary of whether the document in the provided image matches the formatting rules and security checks for the associated jurisdiction. For example, most identity documents have formatting rules like the following: The image of the person's face must have a certain contrast in order to highlight skin tone The subject in the document's image must remove eye glasses and pose in a certain way The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules Security features like watermarks and background patterns must be present So a match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->image\_quality** (string) A high level description of the quality of the image the user submitted. For example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks. Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality. Possible values: high, medium, low **documentary\_verification->documents->analysis->extracted\_data** (nullable, object) Analysis of the data extracted from the submitted document. **documentary\_verification->documents->analysis->extracted\_data->name** (string) A match summary describing the cross comparison between the subject's name, extracted from the document image, and the name they separately provided to identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->extracted\_data->date\_of\_birth** (string) A match summary describing the cross comparison between the subject's date of birth, extracted from the document image, and the date of birth they separately provided to the identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->extracted\_data->expiration\_date** (string) A description of whether the associated document was expired when the verification was performed. Note: In the case where an expiration date is not present on the document or failed to be extracted, this value will be no\_data. Possible values: not\_expired, expired, no\_data **documentary\_verification->documents->analysis->extracted\_data->issuing\_country** (string) A binary match indicator specifying whether the country that issued the provided document matches the country that the user separately provided to Plaid. Note: You can configure whether a no\_match on issuing\_country fails the documentary\_verification by editing your Plaid Template. Possible values: match, no\_match **documentary\_verification->documents->analysis->aamva\_verification** (nullable, object) Analyzed AAMVA data for the associated hit. Note: This field is only available for U.S. driver's licenses issued by participating states. **documentary\_verification->documents->analysis->aamva\_verification->is\_verified** (boolean) The overall outcome of checking the associated hit against the issuing state database. **documentary\_verification->documents->analysis->aamva\_verification->id\_number** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->id\_issue\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->id\_expiration\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->street** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->city** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->postal\_code** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->date\_of\_birth** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->gender** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->height** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->eye\_color** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->first\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->middle\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->last\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **selfie\_check** (nullable, object) Additional information for the selfie\_check step. This field will be null unless steps.selfie\_check has reached a terminal state of either success or failed. **selfie\_check->status** (string) The outcome status for the associated Identity Verification attempt's selfie\_check step. This field will always have the same value as steps.selfie\_check. Possible values: success, failed **selfie\_check->selfies** (\[object\]) An array of selfies submitted to the selfie\_check step. Each entry represents one user submission. **selfie\_check->selfies->status** (string) An outcome status for this specific selfie. Distinct from the overall selfie\_check.status that summarizes the verification outcome from one or more selfies. Possible values: success, failed **selfie\_check->selfies->attempt** (integer) The attempt field begins with 1 and increments with each subsequent selfie upload. **selfie\_check->selfies->capture** (object) The image or video capture of a selfie. Only one of image or video URL will be populated per selfie. **selfie\_check->selfies->capture->image\_url** (nullable, string) Temporary URL for downloading an image selfie capture. **selfie\_check->selfies->capture->video\_url** (nullable, string) Temporary URL for downloading a video selfie capture. **selfie\_check->selfies->analysis** (object) High level descriptions of how the associated selfie was processed. If a selfie fails verification, the details in the analysis object should help clarify why the selfie was rejected. **selfie\_check->selfies->analysis->document\_comparison** (string) Information about the comparison between the selfie and the document (if documentary verification also ran). Possible values: match, no\_match, no\_input **selfie\_check->selfies->analysis->liveness\_check** (string) Assessment of whether the selfie capture is of a real human being, as opposed to a picture of a human on a screen, a picture of a paper cut out, someone wearing a mask, or a deepfake. Possible values: success, failed **kyc\_check** (nullable, object) Additional information for the kyc\_check (Data Source Verification) step. This field will be null unless steps.kyc\_check has reached a terminal state of either success or failed. **kyc\_check->status** (string) The outcome status for the associated Identity Verification attempt's kyc\_check step. This field will always have the same value as steps.kyc\_check. **kyc\_check->address** (object) Result summary object specifying how the address field matched. **kyc\_check->address->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->address->po\_box** (string) Field describing whether the associated address is a post office box. Will be yes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no\_data when Plaid was not able to determine if the address is a P.O. box. Possible values: yes, no, no\_data **kyc\_check->address->type** (string) Field describing whether the associated address is being used for commercial or residential purposes. Note: This value will be no\_data when Plaid does not have sufficient data to determine the address's use. Possible values: residential, commercial, no\_data **kyc\_check->name** (object) Result summary object specifying how the name field matched. **kyc\_check->name->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->date\_of\_birth** (object) Result summary object specifying how the date\_of\_birth field matched. **kyc\_check->date\_of\_birth->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->id\_number** (object) Result summary object specifying how the id\_number field matched. **kyc\_check->id\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->phone\_number** (object) Result summary object specifying how the phone field matched. **kyc\_check->phone\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->phone\_number->area\_code** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **risk\_check** (nullable, object) Additional information for the risk\_check step. **risk\_check->status** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **risk\_check->behavior** (nullable, object) Result summary object specifying values for behavior attributes of risk check, when available. **risk\_check->behavior->user\_interactions** (string) Field describing the overall user interaction signals of a behavior risk check. This value represents how familiar the user is with the personal data they provide, based on a number of signals that are collected during their session. genuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely. neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome. risky indicates the user has low familiarity with the data they are providing, and that fraud is likely. no\_data indicates there is not sufficient information to give an accurate signal. Possible values: genuine, neutral, risky, no\_data **risk\_check->behavior->fraud\_ring\_detected** (string) Field describing the outcome of a fraud ring behavior risk check. yes indicates that fraud ring activity was detected. no indicates that fraud ring activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **risk\_check->behavior->bot\_detected** (string) Field describing the outcome of a bot detection behavior risk check. yes indicates that automated activity was detected. no indicates that automated activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **risk\_check->email** (nullable, object) Result summary object specifying values for email attributes of risk check. **risk\_check->email->is\_deliverable** (string) SMTP-MX check to confirm the email address exists if known. Possible values: yes, no, no\_data **risk\_check->email->breach\_count** (nullable, integer) Count of all known breaches of this email address if known. **risk\_check->email->first\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->last\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->domain\_registered\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->domain\_is\_free\_provider** (string) Indicates whether the email address domain is a free provider such as Gmail or Hotmail if known. Possible values: yes, no, no\_data **risk\_check->email->domain\_is\_custom** (string) Indicates whether the email address domain is custom if known, i.e. a company domain and not free or disposable. Possible values: yes, no, no\_data **risk\_check->email->domain\_is\_disposable** (string) Indicates whether the email domain is listed as disposable if known. Disposable domains are often used to create email addresses that are part of a fake set of user details. Possible values: yes, no, no\_data **risk\_check->email->top\_level\_domain\_is\_suspicious** (string) Indicates whether the email address top level domain, which is the last part of the domain, is fraudulent or risky if known. In most cases, a suspicious top level domain is also associated with a disposable or high-risk domain. Possible values: yes, no, no\_data **risk\_check->email->linked\_services** (\[string\]) A list of online services where this email address has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **risk\_check->phone** (nullable, object) Result summary object specifying values for phone attributes of risk check. **risk\_check->phone->linked\_services** (\[string\]) A list of online services where this phone number has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **risk\_check->devices** (\[object\]) Array of result summary objects specifying values for device attributes of risk check. **risk\_check->devices->ip\_proxy\_type** (nullable, string) An enum indicating whether a network proxy is present and if so what type it is. none\_detected indicates the user is not on a detectable proxy network. tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network). vpn indicates the user is on a VPN (Virtual Private Network) web\_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information. public\_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance. Possible values: none\_detected, tor, vpn, web\_proxy, public\_proxy **risk\_check->devices->ip\_spam\_list\_count** (nullable, integer) Count of spam lists the IP address is associated with if known. **risk\_check->devices->ip\_timezone\_offset** (nullable, string) UTC offset of the timezone associated with the IP address. **risk\_check->identity\_abuse\_signals** (nullable, object) Result summary object capturing abuse signals related to identity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected. **risk\_check->identity\_abuse\_signals->synthetic\_identity** (nullable, object) Field containing the data used in determining the outcome of the synthetic identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **risk\_check->identity\_abuse\_signals->synthetic\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **risk\_check->identity\_abuse\_signals->stolen\_identity** (nullable, object) Field containing the data used in determining the outcome of the stolen identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **risk\_check->identity\_abuse\_signals->stolen\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **verify\_sms** (nullable, object) Additional information for the verify\_sms step. **verify\_sms->status** (string) The outcome status for the associated Identity Verification attempt's verify\_sms step. This field will always have the same value as steps.verify\_sms. Possible values: success, failed **verify\_sms->verifications** (\[object\]) An array where each entry represents a verification attempt for the verify\_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications. **verify\_sms->verifications->status** (string) The outcome status for the individual SMS verification. Possible values: pending, success, failed, canceled **verify\_sms->verifications->attempt** (integer) The attempt field begins with 1 and increments with each subsequent SMS verification. **verify\_sms->verifications->phone\_number** (nullable, string) A phone number in E.164 format. **verify\_sms->verifications->delivery\_attempt\_count** (integer) The number of delivery attempts made within the verification to send the SMS code to the user. Each delivery attempt represents the user taking action from the front end UI to request creation and delivery of a new SMS verification code, or to resend an existing SMS verification code. There is a limit of 3 delivery attempts per verification. **verify\_sms->verifications->solve\_attempt\_count** (integer) The number of attempts made by the user within the verification to verify the SMS code by entering it into the front end UI. There is a limit of 3 solve attempts per verification. **verify\_sms->verifications->initially\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **verify\_sms->verifications->last\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **verify\_sms->verifications->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_screening\_id** (nullable, string) ID of the associated screening. **beacon\_user\_id** (nullable, string) ID of the associated Beacon User. **user\_id** (nullable, string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. **redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **latest\_scored\_protect\_event** (nullable, object) Information about a Protect event including Trust Index score and fraud attributes. **latest\_scored\_protect\_event->event\_id** (string) The event ID. **latest\_scored\_protect\_event->timestamp** (string) The timestamp of the event, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **latest\_scored\_protect\_event->trust\_index** (nullable, object) Represents a calculate Trust Index Score. **latest\_scored\_protect\_event->trust\_index->score** (integer) The overall trust index score. **latest\_scored\_protect\_event->trust\_index->model** (string) The versioned name of the Trust Index model used for scoring. **latest\_scored\_protect\_event->trust\_index->subscores** (nullable, object) Contains sub-score metadata. **latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection** (nullable, object) Represents Trust Index Subscore. **latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection->score** (integer) The subscore score. **latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights** (nullable, object) Represents Trust Index Subscore. **latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights->score** (integer) The subscore score. **latest\_scored\_protect\_event->fraud\_attributes** (nullable, object) Event fraud attributes as an arbitrary set of key-value pairs. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "idv_52xR9LKo77r1Np", "client_user_id": "your-db-id-3b24110", "created_at": "2020-07-24T03:26:02Z", "completed_at": "2020-07-24T03:26:02Z", "previous_attempt_id": "idv_42cF1MNo42r9Xj", "shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f", "template": { "id": "idvtmp_4FrXJvfQU3zGUR", "version": 2 }, "user": { "phone_number": "+12345678909", "date_of_birth": "1990-05-29", "ip_address": "192.0.2.42", "email_address": "user@example.com", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "id_number": { "value": "123456789", "type": "us_ssn" } }, "status": "success", "steps": { "accept_tos": "success", "verify_sms": "success", "kyc_check": "success", "documentary_verification": "success", "selfie_check": "success", "watchlist_screening": "success", "risk_check": "success" }, "documentary_verification": { "status": "success", "documents": [ { "status": "success", "attempt": 1, "images": { "original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg", "original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg", "cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg", "cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg", "face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg" }, "extracted_data": { "id_number": "AB123456", "category": "drivers_license", "expiration_date": "2030-05-29", "issue_date": "2020-05-29", "issuing_country": "US", "issuing_region": "IN", "date_of_birth": "1990-05-29", "address": { "street": "123 Main St. Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "name": { "given_name": "Leslie", "family_name": "Knope" } }, "analysis": { "authenticity": "match", "image_quality": "high", "extracted_data": { "name": "match", "date_of_birth": "match", "expiration_date": "not_expired", "issuing_country": "match" }, "aamva_verification": { "is_verified": true, "id_number": "match", "id_issue_date": "match", "id_expiration_date": "match", "street": "match", "city": "match", "postal_code": "match", "date_of_birth": "match", "gender": "match", "height": "match", "eye_color": "match", "first_name": "match", "middle_name": "match", "last_name": "match" } }, "redacted_at": "2020-07-24T03:26:02Z" } ] }, "selfie_check": { "status": "success", "selfies": [ { "status": "success", "attempt": 1, "capture": { "image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg", "video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm" }, "analysis": { "document_comparison": "match", "liveness_check": "success" } } ] }, "kyc_check": { "status": "success", "address": { "summary": "match", "po_box": "yes", "type": "residential" }, "name": { "summary": "match" }, "date_of_birth": { "summary": "match" }, "id_number": { "summary": "match" }, "phone_number": { "summary": "match", "area_code": "match" } }, "risk_check": { "status": "success", "behavior": { "user_interactions": "risky", "fraud_ring_detected": "yes", "bot_detected": "yes" }, "email": { "is_deliverable": "yes", "breach_count": 1, "first_breached_at": "1990-05-29", "last_breached_at": "1990-05-29", "domain_registered_at": "1990-05-29", "domain_is_free_provider": "yes", "domain_is_custom": "yes", "domain_is_disposable": "yes", "top_level_domain_is_suspicious": "yes", "linked_services": [ "apple" ] }, "phone": { "linked_services": [ "apple" ] }, "devices": [ { "ip_proxy_type": "none_detected", "ip_spam_list_count": 1, "ip_timezone_offset": "+06:00:00" } ], "identity_abuse_signals": { "synthetic_identity": { "score": 0 }, "stolen_identity": { "score": 0 } } }, "verify_sms": { "status": "success", "verifications": [ { "status": "success", "attempt": 1, "phone_number": "+12345678909", "delivery_attempt_count": 1, "solve_attempt_count": 1, "initially_sent_at": "2020-07-24T03:26:02Z", "last_sent_at": "2020-07-24T03:26:02Z", "redacted_at": "2020-07-24T03:26:02Z" } ] }, "watchlist_screening_id": "scr_52xR9LKo77r1Np", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "user_id": "usr_dddAs9ewdcDQQQ", "redacted_at": "2020-07-24T03:26:02Z", "latest_scored_protect_event": { "event_id": "ptevt_7AJYTMFxRUgJ", "timestamp": "2020-07-24T03:26:02Z", "trust_index": { "score": 86, "model": "trust_index.1.0.1", "subscores": { "device_and_connection": { "score": 87 }, "bank_account_insights": { "score": 85 } } }, "fraud_attributes": { "fraud_attributes": { "link_session.linked_bank_accounts.user_pi_matches_owners": true, "link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582, "session.challenged_with_mfa": false, "user.bank_accounts.num_of_frozen_or_restricted_accounts": 0, "user.linked_bank_accounts.num_family_names": 1, "user.linked_bank_accounts.num_of_connected_banks": 1, "user.link_sessions.days_since_first_link_session": 150, "user.pi.email.history_yrs": 7.03, "user.pi.email.num_social_networks_linked": 12, "user.pi.ssn.user_likely_has_better_ssn": false } } }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /identity\_verification/list  #### List Identity Verifications  Filter and list Identity Verifications created by your account #### Request fields  **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\_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. **template\_id** (required, string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **user\_id** (string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. If both client\_user\_id and user\_id are provided, client\_user\_id must match the value for the returned user. **cursor** (string) An identifier that determines which page of results you receive. /identity\_verification/list Node▼ ```javascript const request: ListIdentityVerificationRequest = { template_id: 'idvtmp_52xR9LKo77r1Np', client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', }; try { const response = await plaidClient.identityVerificationList(request); } catch (error) { // handle error } ``` #### Response fields  **identity\_verifications** (\[object\]) List of Plaid sessions **identity\_verifications->id** (string) ID of the associated Identity Verification attempt. **identity\_verifications->client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **identity\_verifications->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->completed\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->previous\_attempt\_id** (nullable, string) The ID for the Identity Verification preceding this session. This field will only be filled if the current Identity Verification is a retry of a previous attempt. **identity\_verifications->shareable\_url** (nullable, string) A shareable URL that can be sent directly to the user to complete verification **identity\_verifications->template** (object) The resource ID and version number of the template configuring the behavior of a given Identity Verification. **identity\_verifications->template->id** (string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **identity\_verifications->template->version** (integer) Version of the associated Identity Verification template. **identity\_verifications->user** (object) The identity data that was either collected from the user or provided via API in order to perform an Identity Verification. **identity\_verifications->user->phone\_number** (nullable, string) A valid phone number in E.164 format. **identity\_verifications->user->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->user->ip\_address** (nullable, string) An IPv4 or IPV6 address. **identity\_verifications->user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **identity\_verifications->user->name** (nullable, object) The full name provided by the user. If the user has not submitted their name, this field will be null. Otherwise, both fields are guaranteed to be filled. **identity\_verifications->user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **identity\_verifications->user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **identity\_verifications->user->address** (nullable, object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code **identity\_verifications->user->address->street** (nullable, string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **identity\_verifications->user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **identity\_verifications->user->address->city** (nullable, string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **identity\_verifications->user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **identity\_verifications->user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **identity\_verifications->user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **identity\_verifications->user->id\_number** (nullable, object) ID number submitted by the user, currently used only for the Identity Verification product. If the user has not submitted this data yet, this field will be null. Otherwise, both fields are guaranteed to be filled. **identity\_verifications->user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **identity\_verifications->user->id\_number->type** (string) 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 **identity\_verifications->status** (string) The status of this Identity Verification attempt. active - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed. success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification template failed - The user failed one or more steps in the session and was told to contact support. expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future. canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. Possible values: active, success, failed, expired, canceled, pending\_review **identity\_verifications->steps** (object) Each step will be one of the following values: active - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point. success - The Identity Verification attempt has completed this step. failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session. waiting\_for\_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback. not\_applicable - This step will not be run for this session. skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped. expired - This step had not yet been completed when the Identity Verification attempt as a whole expired. canceled - The Identity Verification attempt was canceled before the user completed this step. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. manually\_approved - The step was manually overridden to pass by a team member in the dashboard. manually\_rejected - The step was manually overridden to fail by a team member in the dashboard. **identity\_verifications->steps->accept\_tos** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->steps->verify\_sms** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->steps->kyc\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->steps->documentary\_verification** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->steps->selfie\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->steps->watchlist\_screening** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->steps->risk\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->documentary\_verification** (nullable, object) Data, images, analysis, and results from the documentary\_verification step. This field will be null unless steps.documentary\_verification has reached a terminal state of either success or failed. **identity\_verifications->documentary\_verification->status** (string) The outcome status for the associated Identity Verification attempt's documentary\_verification step. This field will always have the same value as steps.documentary\_verification. **identity\_verifications->documentary\_verification->documents** (\[object\]) An array of documents submitted to the documentary\_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type. Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within documents. If the overall documentary\_verification is failed, the user has exhausted their retry attempts. **identity\_verifications->documentary\_verification->documents->status** (string) An outcome status for this specific document submission. Distinct from the overall documentary\_verification.status that summarizes the verification outcome from one or more documents. Possible values: success, failed, manually\_approved **identity\_verifications->documentary\_verification->documents->attempt** (integer) The attempt field begins with 1 and increments with each subsequent document upload. **identity\_verifications->documentary\_verification->documents->images** (object) URLs for downloading original and cropped images for this document submission. The URLs are designed to only allow downloading, not hot linking, so the URL will only serve the document image for 60 seconds before expiring. The expiration time is 60 seconds after the GET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires. **identity\_verifications->documentary\_verification->documents->images->original\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading the uncropped original image of the front of the document. **identity\_verifications->documentary\_verification->documents->images->original\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading the original image of the back of the document. Might be null if the back of the document was not collected. **identity\_verifications->documentary\_verification->documents->images->cropped\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the front of the document. **identity\_verifications->documentary\_verification->documents->images->cropped\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the back of the document. Might be null if the back of the document was not collected. **identity\_verifications->documentary\_verification->documents->images->face** (nullable, string) Temporary URL that expires after 60 seconds for downloading a crop of just the user's face from the document image. Might be null if the document does not contain a face photo. **identity\_verifications->documentary\_verification->documents->extracted\_data** (nullable, object) Data extracted from a user-submitted document. **identity\_verifications->documentary\_verification->documents->extracted\_data->id\_number** (nullable, string) Alpha-numeric ID number extracted via OCR from the user's document image. **identity\_verifications->documentary\_verification->documents->extracted\_data->category** (string) The type of identity document detected in the images provided. Will always be one of the following values: drivers\_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privileges id\_card - A general national identification card, distinct from driver's licenses as it only establishes identity passport - A travel passport issued by the associated country for one of its citizens residence\_permit\_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside there resident\_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside there visa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 months Note: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say passport Possible values: drivers\_license, id\_card, passport, residence\_permit\_card, resident\_card, visa **identity\_verifications->documentary\_verification->documents->extracted\_data->expiration\_date** (nullable, string) The expiration date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->documentary\_verification->documents->extracted\_data->issue\_date** (nullable, string) The issue date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->documentary\_verification->documents->extracted\_data->issuing\_country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **identity\_verifications->documentary\_verification->documents->extracted\_data->issuing\_region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **identity\_verifications->documentary\_verification->documents->extracted\_data->date\_of\_birth** (nullable, string) A date extracted from the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->documentary\_verification->documents->extracted\_data->address** (nullable, object) The address extracted from the document. The address must at least contain the following fields to be a valid address: street, city, country. If any are missing or unable to be extracted, the address will be null. region, and postal\_code may be null based on the addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document. **identity\_verifications->documentary\_verification->documents->extracted\_data->address->street** (string) The full street address extracted from the document. **identity\_verifications->documentary\_verification->documents->extracted\_data->address->city** (string) City extracted from the document. **identity\_verifications->documentary\_verification->documents->extracted\_data->address->region** (nullable, string) A subdivision code extracted from the document. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc. For a full list of valid codes, see country subdivision codes. Country prefixes are omitted, since they can be inferred from the country field. **identity\_verifications->documentary\_verification->documents->extracted\_data->address->postal\_code** (nullable, string) The postal code extracted from the document. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **identity\_verifications->documentary\_verification->documents->extracted\_data->address->country** (string) Valid, capitalized, two-letter ISO code representing the country extracted from the document. Must be in ISO 3166-1 alpha-2 form. **identity\_verifications->documentary\_verification->documents->extracted\_data->name** (nullable, object) The individual's name extracted from the document. **identity\_verifications->documentary\_verification->documents->extracted\_data->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **identity\_verifications->documentary\_verification->documents->extracted\_data->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **identity\_verifications->documentary\_verification->documents->analysis** (object) High level descriptions of how the associated document was processed. If a document fails verification, the details in the analysis object should help clarify why the document was rejected. **identity\_verifications->documentary\_verification->documents->analysis->authenticity** (string) High level summary of whether the document in the provided image matches the formatting rules and security checks for the associated jurisdiction. For example, most identity documents have formatting rules like the following: The image of the person's face must have a certain contrast in order to highlight skin tone The subject in the document's image must remove eye glasses and pose in a certain way The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules Security features like watermarks and background patterns must be present So a match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->image\_quality** (string) A high level description of the quality of the image the user submitted. For example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks. Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality. Possible values: high, medium, low **identity\_verifications->documentary\_verification->documents->analysis->extracted\_data** (nullable, object) Analysis of the data extracted from the submitted document. **identity\_verifications->documentary\_verification->documents->analysis->extracted\_data->name** (string) A match summary describing the cross comparison between the subject's name, extracted from the document image, and the name they separately provided to identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->extracted\_data->date\_of\_birth** (string) A match summary describing the cross comparison between the subject's date of birth, extracted from the document image, and the date of birth they separately provided to the identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->extracted\_data->expiration\_date** (string) A description of whether the associated document was expired when the verification was performed. Note: In the case where an expiration date is not present on the document or failed to be extracted, this value will be no\_data. Possible values: not\_expired, expired, no\_data **identity\_verifications->documentary\_verification->documents->analysis->extracted\_data->issuing\_country** (string) A binary match indicator specifying whether the country that issued the provided document matches the country that the user separately provided to Plaid. Note: You can configure whether a no\_match on issuing\_country fails the documentary\_verification by editing your Plaid Template. Possible values: match, no\_match **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification** (nullable, object) Analyzed AAMVA data for the associated hit. Note: This field is only available for U.S. driver's licenses issued by participating states. **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->is\_verified** (boolean) The overall outcome of checking the associated hit against the issuing state database. **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->id\_number** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->id\_issue\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->id\_expiration\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->street** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->city** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->postal\_code** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->date\_of\_birth** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->gender** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->height** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->eye\_color** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->first\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->middle\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->analysis->aamva\_verification->last\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **identity\_verifications->documentary\_verification->documents->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->selfie\_check** (nullable, object) Additional information for the selfie\_check step. This field will be null unless steps.selfie\_check has reached a terminal state of either success or failed. **identity\_verifications->selfie\_check->status** (string) The outcome status for the associated Identity Verification attempt's selfie\_check step. This field will always have the same value as steps.selfie\_check. Possible values: success, failed **identity\_verifications->selfie\_check->selfies** (\[object\]) An array of selfies submitted to the selfie\_check step. Each entry represents one user submission. **identity\_verifications->selfie\_check->selfies->status** (string) An outcome status for this specific selfie. Distinct from the overall selfie\_check.status that summarizes the verification outcome from one or more selfies. Possible values: success, failed **identity\_verifications->selfie\_check->selfies->attempt** (integer) The attempt field begins with 1 and increments with each subsequent selfie upload. **identity\_verifications->selfie\_check->selfies->capture** (object) The image or video capture of a selfie. Only one of image or video URL will be populated per selfie. **identity\_verifications->selfie\_check->selfies->capture->image\_url** (nullable, string) Temporary URL for downloading an image selfie capture. **identity\_verifications->selfie\_check->selfies->capture->video\_url** (nullable, string) Temporary URL for downloading a video selfie capture. **identity\_verifications->selfie\_check->selfies->analysis** (object) High level descriptions of how the associated selfie was processed. If a selfie fails verification, the details in the analysis object should help clarify why the selfie was rejected. **identity\_verifications->selfie\_check->selfies->analysis->document\_comparison** (string) Information about the comparison between the selfie and the document (if documentary verification also ran). Possible values: match, no\_match, no\_input **identity\_verifications->selfie\_check->selfies->analysis->liveness\_check** (string) Assessment of whether the selfie capture is of a real human being, as opposed to a picture of a human on a screen, a picture of a paper cut out, someone wearing a mask, or a deepfake. Possible values: success, failed **identity\_verifications->kyc\_check** (nullable, object) Additional information for the kyc\_check (Data Source Verification) step. This field will be null unless steps.kyc\_check has reached a terminal state of either success or failed. **identity\_verifications->kyc\_check->status** (string) The outcome status for the associated Identity Verification attempt's kyc\_check step. This field will always have the same value as steps.kyc\_check. **identity\_verifications->kyc\_check->address** (object) Result summary object specifying how the address field matched. **identity\_verifications->kyc\_check->address->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **identity\_verifications->kyc\_check->address->po\_box** (string) Field describing whether the associated address is a post office box. Will be yes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no\_data when Plaid was not able to determine if the address is a P.O. box. Possible values: yes, no, no\_data **identity\_verifications->kyc\_check->address->type** (string) Field describing whether the associated address is being used for commercial or residential purposes. Note: This value will be no\_data when Plaid does not have sufficient data to determine the address's use. Possible values: residential, commercial, no\_data **identity\_verifications->kyc\_check->name** (object) Result summary object specifying how the name field matched. **identity\_verifications->kyc\_check->name->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **identity\_verifications->kyc\_check->date\_of\_birth** (object) Result summary object specifying how the date\_of\_birth field matched. **identity\_verifications->kyc\_check->date\_of\_birth->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **identity\_verifications->kyc\_check->id\_number** (object) Result summary object specifying how the id\_number field matched. **identity\_verifications->kyc\_check->id\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **identity\_verifications->kyc\_check->phone\_number** (object) Result summary object specifying how the phone field matched. **identity\_verifications->kyc\_check->phone\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **identity\_verifications->kyc\_check->phone\_number->area\_code** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **identity\_verifications->risk\_check** (nullable, object) Additional information for the risk\_check step. **identity\_verifications->risk\_check->status** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **identity\_verifications->risk\_check->behavior** (nullable, object) Result summary object specifying values for behavior attributes of risk check, when available. **identity\_verifications->risk\_check->behavior->user\_interactions** (string) Field describing the overall user interaction signals of a behavior risk check. This value represents how familiar the user is with the personal data they provide, based on a number of signals that are collected during their session. genuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely. neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome. risky indicates the user has low familiarity with the data they are providing, and that fraud is likely. no\_data indicates there is not sufficient information to give an accurate signal. Possible values: genuine, neutral, risky, no\_data **identity\_verifications->risk\_check->behavior->fraud\_ring\_detected** (string) Field describing the outcome of a fraud ring behavior risk check. yes indicates that fraud ring activity was detected. no indicates that fraud ring activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->behavior->bot\_detected** (string) Field describing the outcome of a bot detection behavior risk check. yes indicates that automated activity was detected. no indicates that automated activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->email** (nullable, object) Result summary object specifying values for email attributes of risk check. **identity\_verifications->risk\_check->email->is\_deliverable** (string) SMTP-MX check to confirm the email address exists if known. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->email->breach\_count** (nullable, integer) Count of all known breaches of this email address if known. **identity\_verifications->risk\_check->email->first\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->risk\_check->email->last\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->risk\_check->email->domain\_registered\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **identity\_verifications->risk\_check->email->domain\_is\_free\_provider** (string) Indicates whether the email address domain is a free provider such as Gmail or Hotmail if known. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->email->domain\_is\_custom** (string) Indicates whether the email address domain is custom if known, i.e. a company domain and not free or disposable. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->email->domain\_is\_disposable** (string) Indicates whether the email domain is listed as disposable if known. Disposable domains are often used to create email addresses that are part of a fake set of user details. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->email->top\_level\_domain\_is\_suspicious** (string) Indicates whether the email address top level domain, which is the last part of the domain, is fraudulent or risky if known. In most cases, a suspicious top level domain is also associated with a disposable or high-risk domain. Possible values: yes, no, no\_data **identity\_verifications->risk\_check->email->linked\_services** (\[string\]) A list of online services where this email address has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **identity\_verifications->risk\_check->phone** (nullable, object) Result summary object specifying values for phone attributes of risk check. **identity\_verifications->risk\_check->phone->linked\_services** (\[string\]) A list of online services where this phone number has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **identity\_verifications->risk\_check->devices** (\[object\]) Array of result summary objects specifying values for device attributes of risk check. **identity\_verifications->risk\_check->devices->ip\_proxy\_type** (nullable, string) An enum indicating whether a network proxy is present and if so what type it is. none\_detected indicates the user is not on a detectable proxy network. tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network). vpn indicates the user is on a VPN (Virtual Private Network) web\_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information. public\_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance. Possible values: none\_detected, tor, vpn, web\_proxy, public\_proxy **identity\_verifications->risk\_check->devices->ip\_spam\_list\_count** (nullable, integer) Count of spam lists the IP address is associated with if known. **identity\_verifications->risk\_check->devices->ip\_timezone\_offset** (nullable, string) UTC offset of the timezone associated with the IP address. **identity\_verifications->risk\_check->identity\_abuse\_signals** (nullable, object) Result summary object capturing abuse signals related to identity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected. **identity\_verifications->risk\_check->identity\_abuse\_signals->synthetic\_identity** (nullable, object) Field containing the data used in determining the outcome of the synthetic identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **identity\_verifications->risk\_check->identity\_abuse\_signals->synthetic\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **identity\_verifications->risk\_check->identity\_abuse\_signals->stolen\_identity** (nullable, object) Field containing the data used in determining the outcome of the stolen identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **identity\_verifications->risk\_check->identity\_abuse\_signals->stolen\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **identity\_verifications->verify\_sms** (nullable, object) Additional information for the verify\_sms step. **identity\_verifications->verify\_sms->status** (string) The outcome status for the associated Identity Verification attempt's verify\_sms step. This field will always have the same value as steps.verify\_sms. Possible values: success, failed **identity\_verifications->verify\_sms->verifications** (\[object\]) An array where each entry represents a verification attempt for the verify\_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications. **identity\_verifications->verify\_sms->verifications->status** (string) The outcome status for the individual SMS verification. Possible values: pending, success, failed, canceled **identity\_verifications->verify\_sms->verifications->attempt** (integer) The attempt field begins with 1 and increments with each subsequent SMS verification. **identity\_verifications->verify\_sms->verifications->phone\_number** (nullable, string) A phone number in E.164 format. **identity\_verifications->verify\_sms->verifications->delivery\_attempt\_count** (integer) The number of delivery attempts made within the verification to send the SMS code to the user. Each delivery attempt represents the user taking action from the front end UI to request creation and delivery of a new SMS verification code, or to resend an existing SMS verification code. There is a limit of 3 delivery attempts per verification. **identity\_verifications->verify\_sms->verifications->solve\_attempt\_count** (integer) The number of attempts made by the user within the verification to verify the SMS code by entering it into the front end UI. There is a limit of 3 solve attempts per verification. **identity\_verifications->verify\_sms->verifications->initially\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->verify\_sms->verifications->last\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->verify\_sms->verifications->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->watchlist\_screening\_id** (nullable, string) ID of the associated screening. **identity\_verifications->beacon\_user\_id** (nullable, string) ID of the associated Beacon User. **identity\_verifications->user\_id** (nullable, string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. **identity\_verifications->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **identity\_verifications->latest\_scored\_protect\_event** (nullable, object) Information about a Protect event including Trust Index score and fraud attributes. **identity\_verifications->latest\_scored\_protect\_event->event\_id** (string) The event ID. **identity\_verifications->latest\_scored\_protect\_event->timestamp** (string) The timestamp of the event, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **identity\_verifications->latest\_scored\_protect\_event->trust\_index** (nullable, object) Represents a calculate Trust Index Score. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->score** (integer) The overall trust index score. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->model** (string) The versioned name of the Trust Index model used for scoring. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->subscores** (nullable, object) Contains sub-score metadata. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection** (nullable, object) Represents Trust Index Subscore. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection->score** (integer) The subscore score. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights** (nullable, object) Represents Trust Index Subscore. **identity\_verifications->latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights->score** (integer) The subscore score. **identity\_verifications->latest\_scored\_protect\_event->fraud\_attributes** (nullable, object) Event fraud attributes as an arbitrary set of key-value pairs. **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "identity_verifications": [ { "id": "idv_52xR9LKo77r1Np", "client_user_id": "your-db-id-3b24110", "created_at": "2020-07-24T03:26:02Z", "completed_at": "2020-07-24T03:26:02Z", "previous_attempt_id": "idv_42cF1MNo42r9Xj", "shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f", "template": { "id": "idvtmp_4FrXJvfQU3zGUR", "version": 2 }, "user": { "phone_number": "+12345678909", "date_of_birth": "1990-05-29", "ip_address": "192.0.2.42", "email_address": "user@example.com", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "id_number": { "value": "123456789", "type": "us_ssn" } }, "status": "success", "steps": { "accept_tos": "success", "verify_sms": "success", "kyc_check": "success", "documentary_verification": "success", "selfie_check": "success", "watchlist_screening": "success", "risk_check": "success" }, "documentary_verification": { "status": "success", "documents": [ { "status": "success", "attempt": 1, "images": { "original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg", "original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg", "cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg", "cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg", "face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg" }, "extracted_data": { "id_number": "AB123456", "category": "drivers_license", "expiration_date": "2030-05-29", "issue_date": "2020-05-29", "issuing_country": "US", "issuing_region": "IN", "date_of_birth": "1990-05-29", "address": { "street": "123 Main St. Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "name": { "given_name": "Leslie", "family_name": "Knope" } }, "analysis": { "authenticity": "match", "image_quality": "high", "extracted_data": { "name": "match", "date_of_birth": "match", "expiration_date": "not_expired", "issuing_country": "match" }, "aamva_verification": { "is_verified": true, "id_number": "match", "id_issue_date": "match", "id_expiration_date": "match", "street": "match", "city": "match", "postal_code": "match", "date_of_birth": "match", "gender": "match", "height": "match", "eye_color": "match", "first_name": "match", "middle_name": "match", "last_name": "match" } }, "redacted_at": "2020-07-24T03:26:02Z" } ] }, "selfie_check": { "status": "success", "selfies": [ { "status": "success", "attempt": 1, "capture": { "image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg", "video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm" }, "analysis": { "document_comparison": "match", "liveness_check": "success" } } ] }, "kyc_check": { "status": "success", "address": { "summary": "match", "po_box": "yes", "type": "residential" }, "name": { "summary": "match" }, "date_of_birth": { "summary": "match" }, "id_number": { "summary": "match" }, "phone_number": { "summary": "match", "area_code": "match" } }, "risk_check": { "status": "success", "behavior": { "user_interactions": "risky", "fraud_ring_detected": "yes", "bot_detected": "yes" }, "email": { "is_deliverable": "yes", "breach_count": 1, "first_breached_at": "1990-05-29", "last_breached_at": "1990-05-29", "domain_registered_at": "1990-05-29", "domain_is_free_provider": "yes", "domain_is_custom": "yes", "domain_is_disposable": "yes", "top_level_domain_is_suspicious": "yes", "linked_services": [ "apple" ] }, "phone": { "linked_services": [ "apple" ] }, "devices": [ { "ip_proxy_type": "none_detected", "ip_spam_list_count": 1, "ip_timezone_offset": "+06:00:00" } ], "identity_abuse_signals": { "synthetic_identity": { "score": 0 }, "stolen_identity": { "score": 0 } } }, "verify_sms": { "status": "success", "verifications": [ { "status": "success", "attempt": 1, "phone_number": "+12345678909", "delivery_attempt_count": 1, "solve_attempt_count": 1, "initially_sent_at": "2020-07-24T03:26:02Z", "last_sent_at": "2020-07-24T03:26:02Z", "redacted_at": "2020-07-24T03:26:02Z" } ] }, "watchlist_screening_id": "scr_52xR9LKo77r1Np", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "user_id": "usr_dddAs9ewdcDQQQ", "redacted_at": "2020-07-24T03:26:02Z", "latest_scored_protect_event": { "event_id": "ptevt_7AJYTMFxRUgJ", "timestamp": "2020-07-24T03:26:02Z", "trust_index": { "score": 86, "model": "trust_index.1.0.1", "subscores": { "device_and_connection": { "score": 87 }, "bank_account_insights": { "score": 85 } } }, "fraud_attributes": { "fraud_attributes": { "link_session.linked_bank_accounts.user_pi_matches_owners": true, "link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582, "session.challenged_with_mfa": false, "user.bank_accounts.num_of_frozen_or_restricted_accounts": 0, "user.linked_bank_accounts.num_family_names": 1, "user.linked_bank_accounts.num_of_connected_banks": 1, "user.link_sessions.days_since_first_link_session": 150, "user.pi.email.history_yrs": 7.03, "user.pi.email.num_social_networks_linked": 12, "user.pi.ssn.user_likely_has_better_ssn": false } } } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /identity\_verification/retry  #### Retry an Identity Verification  Allow a customer to retry their Identity Verification #### Request fields  **client\_user\_id** (required, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **template\_id** (required, string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **strategy** (required, string) An instruction specifying what steps the new Identity Verification attempt should require the user to complete: reset - Restart the user at the beginning of the session, regardless of whether they successfully completed part of their previous session. incomplete - Start the new session at the step that the user failed in the previous session, skipping steps that have already been successfully completed. infer - If the most recent Identity Verification attempt associated with the given client\_user\_id has a status of failed or expired, retry using the incomplete strategy. Otherwise, use the reset strategy. custom - Start the new session with a custom configuration, specified by the value of the steps field Note: The incomplete strategy cannot be applied if the session's failing step is screening or risk\_check. The infer strategy cannot be applied if the session's status is still active Possible values: reset, incomplete, infer, custom **user** (object) User information collected outside of Link, most likely via your own onboarding process. Each of the following identity fields are optional: email\_address phone\_number date\_of\_birth name address id\_number Specifically, these fields are optional in that they can either be fully provided (satisfying every required field in their subschema) or omitted from the request entirely by not providing the key or value. Providing these fields via the API will result in Link skipping the data collection process for the associated user. All verification steps enabled in the associated Identity Verification Template will still be run. Verification steps will either be run immediately, or once the user completes the accept\_tos step, depending on the value provided to the gave\_consent field. **user->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->phone\_number** (string) A valid phone number in E.164 format. **user->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->name** (object) You can use this field to pre-populate the user's legal name; if it is provided here, they will not be prompted to enter their name in the identity verification attempt. **user->name->given\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (object) Home address for the user. Supported values are: not provided, address with only country code or full address. For more context on this field, see Input Validation by Country. **user->address->street** (string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->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. **user->address->country** (required, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->id\_number** (object) ID number submitted by the user, currently used only for the Identity Verification product. If the user has not submitted this data yet, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->id\_number->value** (required, string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (required, string) 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 **steps** (object) Instructions for the custom retry strategy specifying which steps should be required or skipped. Note: This field must be provided when the retry strategy is custom and must be omitted otherwise. Custom retries override settings in your Plaid Template. For example, if your Plaid Template has verify\_sms disabled, a custom retry with verify\_sms enabled will still require the step. The selfie\_check step is currently not supported on the sandbox server. Sandbox requests will silently disable the selfie\_check step when provided. **steps->verify\_sms** (required, boolean) A boolean field specifying whether the new session should require or skip the verify\_sms step. **steps->kyc\_check** (required, boolean) A boolean field specifying whether the new session should require or skip the kyc\_check (Data Source Verification) step. **steps->documentary\_verification** (required, boolean) A boolean field specifying whether the new session should require or skip the documentary\_verification step. **steps->selfie\_check** (required, boolean) A boolean field specifying whether the new session should require or skip the selfie\_check step. If a previous session has already passed the selfie\_check step, the new selfie check will be a Selfie Reauthentication check, in which the selfie is tested for liveness and for consistency with the previous selfie. **is\_shareable** (boolean) A flag specifying whether you would like Plaid to expose a shareable URL for the verification being retried. If a value for this flag is not specified, the is\_shareable setting from the original verification attempt will be used. **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. /identity\_verification/retry Node▼ ```javascript const request: IdentityVerificationRetryRequest = { client_user_id: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', template_id: 'idvtmp_52xR9LKo77r1Np', strategy: 'reset', user: { email_address: 'acharleston@email.com', phone_number: '+12345678909', date_of_birth: '1975-01-18', name: { given_name: 'Anna', family_name: 'Charleston', }, address: { street: '100 Market Street', street2: 'Apt 1A', city: 'San Francisco', region: 'CA', postal_code: '94103', country: 'US', }, id_number: { value: '123456789', type: 'us_ssn', }, }, }; try { const response = await plaidClient.identityVerificationRetry(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated Identity Verification attempt. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **completed\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **previous\_attempt\_id** (nullable, string) The ID for the Identity Verification preceding this session. This field will only be filled if the current Identity Verification is a retry of a previous attempt. **shareable\_url** (nullable, string) A shareable URL that can be sent directly to the user to complete verification **template** (object) The resource ID and version number of the template configuring the behavior of a given Identity Verification. **template->id** (string) ID of the associated Identity Verification template. Like all Plaid identifiers, this is case-sensitive. **template->version** (integer) Version of the associated Identity Verification template. **user** (object) The identity data that was either collected from the user or provided via API in order to perform an Identity Verification. **user->phone\_number** (nullable, string) A valid phone number in E.164 format. **user->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **user->ip\_address** (nullable, string) An IPv4 or IPV6 address. **user->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **user->name** (nullable, object) The full name provided by the user. If the user has not submitted their name, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **user->address** (nullable, object) Even if an address has been collected, some fields may be null depending on the region's addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code **user->address->street** (nullable, string) The primary street portion of an address. If an address is provided, this field will always be filled. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **user->address->street2** (nullable, string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **user->address->city** (nullable, string) City from the address. A string with at least one non-whitespace alphabetical character, with a max length of 100 characters. **user->address->region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **user->address->postal\_code** (nullable, string) The postal code for the associated address. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **user->address->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **user->id\_number** (nullable, object) ID number submitted by the user, currently used only for the Identity Verification product. If the user has not submitted this data yet, this field will be null. Otherwise, both fields are guaranteed to be filled. **user->id\_number->value** (string) Value of identity document value typed in by user. Alpha-numeric, with all formatting characters stripped. For specific format requirements by ID type, see Hybrid Input Validation. **user->id\_number->type** (string) 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 **status** (string) The status of this Identity Verification attempt. active - The Identity Verification attempt is incomplete. The user may have completed part of the session, but has neither failed or passed. success - The Identity Verification attempt has completed, passing all steps defined to the associated Identity Verification template failed - The user failed one or more steps in the session and was told to contact support. expired - The Identity Verification attempt was active for a long period of time without being completed and was automatically marked as expired. Note that sessions currently do not expire. Automatic expiration is expected to be enabled in the future. canceled - The Identity Verification attempt was canceled, either via the dashboard by a user, or via API. The user may have completed part of the session, but has neither failed or passed. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. Possible values: active, success, failed, expired, canceled, pending\_review **steps** (object) Each step will be one of the following values: active - This step is the user's current step. They are either in the process of completing this step, or they recently closed their Identity Verification attempt while in the middle of this step. Only one step will be marked as active at any given point. success - The Identity Verification attempt has completed this step. failed - The user failed this step. This can either call the user to fail the session as a whole, or cause them to fallback to another step depending on how the Identity Verification template is configured. A failed step does not imply a failed session. waiting\_for\_prerequisite - The user needs to complete another step first, before they progress to this step. This step may never run, depending on if the user fails an earlier step or if the step is only run as a fallback. not\_applicable - This step will not be run for this session. skipped - The retry instructions that created this Identity Verification attempt specified that this step should be skipped. expired - This step had not yet been completed when the Identity Verification attempt as a whole expired. canceled - The Identity Verification attempt was canceled before the user completed this step. pending\_review - The Identity Verification attempt template was configured to perform a screening that had one or more hits needing review. manually\_approved - The step was manually overridden to pass by a team member in the dashboard. manually\_rejected - The step was manually overridden to fail by a team member in the dashboard. **steps->accept\_tos** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->verify\_sms** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->kyc\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->documentary\_verification** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->selfie\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->watchlist\_screening** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **steps->risk\_check** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **documentary\_verification** (nullable, object) Data, images, analysis, and results from the documentary\_verification step. This field will be null unless steps.documentary\_verification has reached a terminal state of either success or failed. **documentary\_verification->status** (string) The outcome status for the associated Identity Verification attempt's documentary\_verification step. This field will always have the same value as steps.documentary\_verification. **documentary\_verification->documents** (\[object\]) An array of documents submitted to the documentary\_verification step. Each entry represents one user submission, where each submission will contain both a front and back image, or just a front image, depending on the document type. Note: Plaid will automatically let a user submit a new set of document images up to three times if we detect that a previous attempt might have failed due to user error. For example, if the first set of document images are blurry or obscured by glare, the user will be asked to capture their documents again, resulting in at least two separate entries within documents. If the overall documentary\_verification is failed, the user has exhausted their retry attempts. **documentary\_verification->documents->status** (string) An outcome status for this specific document submission. Distinct from the overall documentary\_verification.status that summarizes the verification outcome from one or more documents. Possible values: success, failed, manually\_approved **documentary\_verification->documents->attempt** (integer) The attempt field begins with 1 and increments with each subsequent document upload. **documentary\_verification->documents->images** (object) URLs for downloading original and cropped images for this document submission. The URLs are designed to only allow downloading, not hot linking, so the URL will only serve the document image for 60 seconds before expiring. The expiration time is 60 seconds after the GET request for the associated Identity Verification attempt. A new expiring URL is generated with each request, so you can always rerequest the Identity Verification attempt if one of your URLs expires. **documentary\_verification->documents->images->original\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading the uncropped original image of the front of the document. **documentary\_verification->documents->images->original\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading the original image of the back of the document. Might be null if the back of the document was not collected. **documentary\_verification->documents->images->cropped\_front** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the front of the document. **documentary\_verification->documents->images->cropped\_back** (nullable, string) Temporary URL that expires after 60 seconds for downloading a cropped image containing just the back of the document. Might be null if the back of the document was not collected. **documentary\_verification->documents->images->face** (nullable, string) Temporary URL that expires after 60 seconds for downloading a crop of just the user's face from the document image. Might be null if the document does not contain a face photo. **documentary\_verification->documents->extracted\_data** (nullable, object) Data extracted from a user-submitted document. **documentary\_verification->documents->extracted\_data->id\_number** (nullable, string) Alpha-numeric ID number extracted via OCR from the user's document image. **documentary\_verification->documents->extracted\_data->category** (string) The type of identity document detected in the images provided. Will always be one of the following values: drivers\_license - A driver's license issued by the associated country, establishing identity without any guarantee as to citizenship, and granting driving privileges id\_card - A general national identification card, distinct from driver's licenses as it only establishes identity passport - A travel passport issued by the associated country for one of its citizens residence\_permit\_card - An identity document issued by the associated country permitting a foreign citizen to temporarily reside there resident\_card - An identity document issued by the associated country permitting a foreign citizen to permanently reside there visa - An identity document issued by the associated country permitting a foreign citizen entry for a short duration and for a specific purpose, typically no longer than 6 months Note: This value may be different from the ID type that the user selects within Link. For example, if they select "Driver's License" but then submit a picture of a passport, this field will say passport Possible values: drivers\_license, id\_card, passport, residence\_permit\_card, resident\_card, visa **documentary\_verification->documents->extracted\_data->expiration\_date** (nullable, string) The expiration date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->issue\_date** (nullable, string) The issue date of the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->issuing\_country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **documentary\_verification->documents->extracted\_data->issuing\_region** (nullable, string) A subdivision code. "Subdivision" is a generic term for "state", "province", "prefecture", "zone", etc. For the list of valid codes, see country subdivision codes. Country prefixes are omitted, since they are inferred from the country field. **documentary\_verification->documents->extracted\_data->date\_of\_birth** (nullable, string) A date extracted from the document in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **documentary\_verification->documents->extracted\_data->address** (nullable, object) The address extracted from the document. The address must at least contain the following fields to be a valid address: street, city, country. If any are missing or unable to be extracted, the address will be null. region, and postal\_code may be null based on the addressing system. For example: Addresses from the United Kingdom will not include a region Addresses from Hong Kong will not include postal code Note: Optical Character Recognition (OCR) technology may sometimes extract incorrect data from a document. **documentary\_verification->documents->extracted\_data->address->street** (string) The full street address extracted from the document. **documentary\_verification->documents->extracted\_data->address->city** (string) City extracted from the document. **documentary\_verification->documents->extracted\_data->address->region** (nullable, string) A subdivision code extracted from the document. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc. For a full list of valid codes, see country subdivision codes. Country prefixes are omitted, since they can be inferred from the country field. **documentary\_verification->documents->extracted\_data->address->postal\_code** (nullable, string) The postal code extracted from the document. Between 2 and 10 alphanumeric characters. For US-based addresses this must be 5 numeric digits. **documentary\_verification->documents->extracted\_data->address->country** (string) Valid, capitalized, two-letter ISO code representing the country extracted from the document. Must be in ISO 3166-1 alpha-2 form. **documentary\_verification->documents->extracted\_data->name** (nullable, object) The individual's name extracted from the document. **documentary\_verification->documents->extracted\_data->name->given\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **documentary\_verification->documents->extracted\_data->name->family\_name** (string) A string with at least one non-whitespace character, with a max length of 100 characters. **documentary\_verification->documents->analysis** (object) High level descriptions of how the associated document was processed. If a document fails verification, the details in the analysis object should help clarify why the document was rejected. **documentary\_verification->documents->analysis->authenticity** (string) High level summary of whether the document in the provided image matches the formatting rules and security checks for the associated jurisdiction. For example, most identity documents have formatting rules like the following: The image of the person's face must have a certain contrast in order to highlight skin tone The subject in the document's image must remove eye glasses and pose in a certain way The informational fields (name, date of birth, ID number, etc.) must be colored and aligned according to specific rules Security features like watermarks and background patterns must be present So a match status for this field indicates that the document in the provided image seems to conform to the various formatting and security rules associated with the detected document. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->image\_quality** (string) A high level description of the quality of the image the user submitted. For example, an image that is blurry, distorted by glare from a nearby light source, or improperly framed might be marked as low or medium quality. Poor quality images are more likely to fail OCR and/or template conformity checks. Note: By default, Plaid will let a user recapture document images twice before failing the entire session if we attribute the failure to low image quality. Possible values: high, medium, low **documentary\_verification->documents->analysis->extracted\_data** (nullable, object) Analysis of the data extracted from the submitted document. **documentary\_verification->documents->analysis->extracted\_data->name** (string) A match summary describing the cross comparison between the subject's name, extracted from the document image, and the name they separately provided to identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->extracted\_data->date\_of\_birth** (string) A match summary describing the cross comparison between the subject's date of birth, extracted from the document image, and the date of birth they separately provided to the identity verification attempt. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->extracted\_data->expiration\_date** (string) A description of whether the associated document was expired when the verification was performed. Note: In the case where an expiration date is not present on the document or failed to be extracted, this value will be no\_data. Possible values: not\_expired, expired, no\_data **documentary\_verification->documents->analysis->extracted\_data->issuing\_country** (string) A binary match indicator specifying whether the country that issued the provided document matches the country that the user separately provided to Plaid. Note: You can configure whether a no\_match on issuing\_country fails the documentary\_verification by editing your Plaid Template. Possible values: match, no\_match **documentary\_verification->documents->analysis->aamva\_verification** (nullable, object) Analyzed AAMVA data for the associated hit. Note: This field is only available for U.S. driver's licenses issued by participating states. **documentary\_verification->documents->analysis->aamva\_verification->is\_verified** (boolean) The overall outcome of checking the associated hit against the issuing state database. **documentary\_verification->documents->analysis->aamva\_verification->id\_number** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->id\_issue\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->id\_expiration\_date** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->street** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->city** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->postal\_code** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->date\_of\_birth** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->gender** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->height** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->eye\_color** (string) The outcome of checking the particular field against state databases. match - The field is an exact match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->first\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->middle\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->analysis->aamva\_verification->last\_name** (string) The outcome of checking the associated hit against state databases. match - The field is an exact match with the state database. partial\_match - The field is a partial match with the state database. no\_match - The field is not an exact match with the state database. no\_data - The field was unable to be checked against state databases. Possible values: match, partial\_match, no\_match, no\_data **documentary\_verification->documents->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **selfie\_check** (nullable, object) Additional information for the selfie\_check step. This field will be null unless steps.selfie\_check has reached a terminal state of either success or failed. **selfie\_check->status** (string) The outcome status for the associated Identity Verification attempt's selfie\_check step. This field will always have the same value as steps.selfie\_check. Possible values: success, failed **selfie\_check->selfies** (\[object\]) An array of selfies submitted to the selfie\_check step. Each entry represents one user submission. **selfie\_check->selfies->status** (string) An outcome status for this specific selfie. Distinct from the overall selfie\_check.status that summarizes the verification outcome from one or more selfies. Possible values: success, failed **selfie\_check->selfies->attempt** (integer) The attempt field begins with 1 and increments with each subsequent selfie upload. **selfie\_check->selfies->capture** (object) The image or video capture of a selfie. Only one of image or video URL will be populated per selfie. **selfie\_check->selfies->capture->image\_url** (nullable, string) Temporary URL for downloading an image selfie capture. **selfie\_check->selfies->capture->video\_url** (nullable, string) Temporary URL for downloading a video selfie capture. **selfie\_check->selfies->analysis** (object) High level descriptions of how the associated selfie was processed. If a selfie fails verification, the details in the analysis object should help clarify why the selfie was rejected. **selfie\_check->selfies->analysis->document\_comparison** (string) Information about the comparison between the selfie and the document (if documentary verification also ran). Possible values: match, no\_match, no\_input **selfie\_check->selfies->analysis->liveness\_check** (string) Assessment of whether the selfie capture is of a real human being, as opposed to a picture of a human on a screen, a picture of a paper cut out, someone wearing a mask, or a deepfake. Possible values: success, failed **kyc\_check** (nullable, object) Additional information for the kyc\_check (Data Source Verification) step. This field will be null unless steps.kyc\_check has reached a terminal state of either success or failed. **kyc\_check->status** (string) The outcome status for the associated Identity Verification attempt's kyc\_check step. This field will always have the same value as steps.kyc\_check. **kyc\_check->address** (object) Result summary object specifying how the address field matched. **kyc\_check->address->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->address->po\_box** (string) Field describing whether the associated address is a post office box. Will be yes when a P.O. box is detected, no when Plaid confirmed the address is not a P.O. box, and no\_data when Plaid was not able to determine if the address is a P.O. box. Possible values: yes, no, no\_data **kyc\_check->address->type** (string) Field describing whether the associated address is being used for commercial or residential purposes. Note: This value will be no\_data when Plaid does not have sufficient data to determine the address's use. Possible values: residential, commercial, no\_data **kyc\_check->name** (object) Result summary object specifying how the name field matched. **kyc\_check->name->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->date\_of\_birth** (object) Result summary object specifying how the date\_of\_birth field matched. **kyc\_check->date\_of\_birth->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->id\_number** (object) Result summary object specifying how the id\_number field matched. **kyc\_check->id\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->phone\_number** (object) Result summary object specifying how the phone field matched. **kyc\_check->phone\_number->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **kyc\_check->phone\_number->area\_code** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **risk\_check** (nullable, object) Additional information for the risk\_check step. **risk\_check->status** (string) The status of a step in the Identity Verification process. Possible values: success, active, failed, waiting\_for\_prerequisite, not\_applicable, skipped, expired, canceled, pending\_review, manually\_approved, manually\_rejected **risk\_check->behavior** (nullable, object) Result summary object specifying values for behavior attributes of risk check, when available. **risk\_check->behavior->user\_interactions** (string) Field describing the overall user interaction signals of a behavior risk check. This value represents how familiar the user is with the personal data they provide, based on a number of signals that are collected during their session. genuine indicates the user has high familiarity with the data they are providing, and that fraud is unlikely. neutral indicates some signals are present in between risky and genuine, but there are not enough clear signals to determine an outcome. risky indicates the user has low familiarity with the data they are providing, and that fraud is likely. no\_data indicates there is not sufficient information to give an accurate signal. Possible values: genuine, neutral, risky, no\_data **risk\_check->behavior->fraud\_ring\_detected** (string) Field describing the outcome of a fraud ring behavior risk check. yes indicates that fraud ring activity was detected. no indicates that fraud ring activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **risk\_check->behavior->bot\_detected** (string) Field describing the outcome of a bot detection behavior risk check. yes indicates that automated activity was detected. no indicates that automated activity was not detected. no\_data indicates there was not enough information available to give an accurate signal. Possible values: yes, no, no\_data **risk\_check->email** (nullable, object) Result summary object specifying values for email attributes of risk check. **risk\_check->email->is\_deliverable** (string) SMTP-MX check to confirm the email address exists if known. Possible values: yes, no, no\_data **risk\_check->email->breach\_count** (nullable, integer) Count of all known breaches of this email address if known. **risk\_check->email->first\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->last\_breached\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->domain\_registered\_at** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **risk\_check->email->domain\_is\_free\_provider** (string) Indicates whether the email address domain is a free provider such as Gmail or Hotmail if known. Possible values: yes, no, no\_data **risk\_check->email->domain\_is\_custom** (string) Indicates whether the email address domain is custom if known, i.e. a company domain and not free or disposable. Possible values: yes, no, no\_data **risk\_check->email->domain\_is\_disposable** (string) Indicates whether the email domain is listed as disposable if known. Disposable domains are often used to create email addresses that are part of a fake set of user details. Possible values: yes, no, no\_data **risk\_check->email->top\_level\_domain\_is\_suspicious** (string) Indicates whether the email address top level domain, which is the last part of the domain, is fraudulent or risky if known. In most cases, a suspicious top level domain is also associated with a disposable or high-risk domain. Possible values: yes, no, no\_data **risk\_check->email->linked\_services** (\[string\]) A list of online services where this email address has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **risk\_check->phone** (nullable, object) Result summary object specifying values for phone attributes of risk check. **risk\_check->phone->linked\_services** (\[string\]) A list of online services where this phone number has been detected to have accounts or other activity. Possible values: aboutme, adobe, adult\_sites, airbnb, altbalaji, amazon, apple, archiveorg, atlassian, bitmoji, bodybuilding, booking, bukalapak, codecademy, deliveroo, diigo, discord, disneyplus, duolingo, ebay, envato, eventbrite, evernote, facebook, firefox, flickr, flipkart, foursquare, freelancer, gaana, giphy, github, google, gravatar, hubspot, imgur, instagram, jdid, kakao, kommo, komoot, lastfm, lazada, line, linkedin, mailru, microsoft, myspace, netflix, nike, ok, patreon, pinterest, plurk, quora, qzone, rambler, rappi, replit, samsung, seoclerks, shopclues, skype, snapchat, snapdeal, soundcloud, spotify, starz, strava, taringa, telegram, tiki, tokopedia, treehouse, tumblr, twitter, venmo, viber, vimeo, vivino, vkontakte, wattpad, weibo, whatsapp, wordpress, xing, yahoo, yandex, zalo, zoho **risk\_check->devices** (\[object\]) Array of result summary objects specifying values for device attributes of risk check. **risk\_check->devices->ip\_proxy\_type** (nullable, string) An enum indicating whether a network proxy is present and if so what type it is. none\_detected indicates the user is not on a detectable proxy network. tor indicates the user was using a Tor browser, which sends encrypted traffic on a decentralized network and is somewhat similar to a VPN (Virtual Private Network). vpn indicates the user is on a VPN (Virtual Private Network) web\_proxy indicates the user is on a web proxy server, which may allow them to conceal information such as their IP address or other identifying information. public\_proxy indicates the user is on a public web proxy server, which is similar to a web proxy but can be shared by multiple users. This may allow multiple users to appear as if they have the same IP address for instance. Possible values: none\_detected, tor, vpn, web\_proxy, public\_proxy **risk\_check->devices->ip\_spam\_list\_count** (nullable, integer) Count of spam lists the IP address is associated with if known. **risk\_check->devices->ip\_timezone\_offset** (nullable, string) UTC offset of the timezone associated with the IP address. **risk\_check->identity\_abuse\_signals** (nullable, object) Result summary object capturing abuse signals related to identity abuse, e.g. stolen and synthetic identity fraud. These attributes are only available for US identities and some signals may not be available depending on what information was collected. **risk\_check->identity\_abuse\_signals->synthetic\_identity** (nullable, object) Field containing the data used in determining the outcome of the synthetic identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **risk\_check->identity\_abuse\_signals->synthetic\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a synthetic identity. **risk\_check->identity\_abuse\_signals->stolen\_identity** (nullable, object) Field containing the data used in determining the outcome of the stolen identity risk check. Contains the following fields: score - A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **risk\_check->identity\_abuse\_signals->stolen\_identity->score** (integer) A score from 0 to 100 indicating the likelihood that the user is a stolen identity. **verify\_sms** (nullable, object) Additional information for the verify\_sms step. **verify\_sms->status** (string) The outcome status for the associated Identity Verification attempt's verify\_sms step. This field will always have the same value as steps.verify\_sms. Possible values: success, failed **verify\_sms->verifications** (\[object\]) An array where each entry represents a verification attempt for the verify\_sms step. Each entry represents one user-submitted phone number. Phone number edits, and in some cases error handling due to edge cases like rate limiting, may generate additional verifications. **verify\_sms->verifications->status** (string) The outcome status for the individual SMS verification. Possible values: pending, success, failed, canceled **verify\_sms->verifications->attempt** (integer) The attempt field begins with 1 and increments with each subsequent SMS verification. **verify\_sms->verifications->phone\_number** (nullable, string) A phone number in E.164 format. **verify\_sms->verifications->delivery\_attempt\_count** (integer) The number of delivery attempts made within the verification to send the SMS code to the user. Each delivery attempt represents the user taking action from the front end UI to request creation and delivery of a new SMS verification code, or to resend an existing SMS verification code. There is a limit of 3 delivery attempts per verification. **verify\_sms->verifications->solve\_attempt\_count** (integer) The number of attempts made by the user within the verification to verify the SMS code by entering it into the front end UI. There is a limit of 3 solve attempts per verification. **verify\_sms->verifications->initially\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **verify\_sms->verifications->last\_sent\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **verify\_sms->verifications->redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_screening\_id** (nullable, string) ID of the associated screening. **beacon\_user\_id** (nullable, string) ID of the associated Beacon User. **user\_id** (nullable, string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. **redacted\_at** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **latest\_scored\_protect\_event** (nullable, object) Information about a Protect event including Trust Index score and fraud attributes. **latest\_scored\_protect\_event->event\_id** (string) The event ID. **latest\_scored\_protect\_event->timestamp** (string) The timestamp of the event, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **latest\_scored\_protect\_event->trust\_index** (nullable, object) Represents a calculate Trust Index Score. **latest\_scored\_protect\_event->trust\_index->score** (integer) The overall trust index score. **latest\_scored\_protect\_event->trust\_index->model** (string) The versioned name of the Trust Index model used for scoring. **latest\_scored\_protect\_event->trust\_index->subscores** (nullable, object) Contains sub-score metadata. **latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection** (nullable, object) Represents Trust Index Subscore. **latest\_scored\_protect\_event->trust\_index->subscores->device\_and\_connection->score** (integer) The subscore score. **latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights** (nullable, object) Represents Trust Index Subscore. **latest\_scored\_protect\_event->trust\_index->subscores->bank\_account\_insights->score** (integer) The subscore score. **latest\_scored\_protect\_event->fraud\_attributes** (nullable, object) Event fraud attributes as an arbitrary set of key-value pairs. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "idv_52xR9LKo77r1Np", "client_user_id": "your-db-id-3b24110", "created_at": "2020-07-24T03:26:02Z", "completed_at": "2020-07-24T03:26:02Z", "previous_attempt_id": "idv_42cF1MNo42r9Xj", "shareable_url": "https://flow.plaid.com/verify/idv_4FrXJvfQU3zGUR?key=e004115db797f7cc3083bff3167cba30644ef630fb46f5b086cde6cc3b86a36f", "template": { "id": "idvtmp_4FrXJvfQU3zGUR", "version": 2 }, "user": { "phone_number": "+12345678909", "date_of_birth": "1990-05-29", "ip_address": "192.0.2.42", "email_address": "user@example.com", "name": { "given_name": "Leslie", "family_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "id_number": { "value": "123456789", "type": "us_ssn" } }, "status": "success", "steps": { "accept_tos": "success", "verify_sms": "success", "kyc_check": "success", "documentary_verification": "success", "selfie_check": "success", "watchlist_screening": "success", "risk_check": "success" }, "documentary_verification": { "status": "success", "documents": [ { "status": "success", "attempt": 1, "images": { "original_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_front.jpeg", "original_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/original_back.jpeg", "cropped_front": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_front.jpeg", "cropped_back": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/cropped_back.jpeg", "face": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/documents/1/face.jpeg" }, "extracted_data": { "id_number": "AB123456", "category": "drivers_license", "expiration_date": "2030-05-29", "issue_date": "2020-05-29", "issuing_country": "US", "issuing_region": "IN", "date_of_birth": "1990-05-29", "address": { "street": "123 Main St. Unit 42", "city": "Pawnee", "region": "IN", "postal_code": "46001", "country": "US" }, "name": { "given_name": "Leslie", "family_name": "Knope" } }, "analysis": { "authenticity": "match", "image_quality": "high", "extracted_data": { "name": "match", "date_of_birth": "match", "expiration_date": "not_expired", "issuing_country": "match" }, "aamva_verification": { "is_verified": true, "id_number": "match", "id_issue_date": "match", "id_expiration_date": "match", "street": "match", "city": "match", "postal_code": "match", "date_of_birth": "match", "gender": "match", "height": "match", "eye_color": "match", "first_name": "match", "middle_name": "match", "last_name": "match" } }, "redacted_at": "2020-07-24T03:26:02Z" } ] }, "selfie_check": { "status": "success", "selfies": [ { "status": "success", "attempt": 1, "capture": { "image_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.jpeg", "video_url": "https://example.plaid.com/verifications/idv_52xR9LKo77r1Np/selfie/liveness.webm" }, "analysis": { "document_comparison": "match", "liveness_check": "success" } } ] }, "kyc_check": { "status": "success", "address": { "summary": "match", "po_box": "yes", "type": "residential" }, "name": { "summary": "match" }, "date_of_birth": { "summary": "match" }, "id_number": { "summary": "match" }, "phone_number": { "summary": "match", "area_code": "match" } }, "risk_check": { "status": "success", "behavior": { "user_interactions": "risky", "fraud_ring_detected": "yes", "bot_detected": "yes" }, "email": { "is_deliverable": "yes", "breach_count": 1, "first_breached_at": "1990-05-29", "last_breached_at": "1990-05-29", "domain_registered_at": "1990-05-29", "domain_is_free_provider": "yes", "domain_is_custom": "yes", "domain_is_disposable": "yes", "top_level_domain_is_suspicious": "yes", "linked_services": [ "apple" ] }, "phone": { "linked_services": [ "apple" ] }, "devices": [ { "ip_proxy_type": "none_detected", "ip_spam_list_count": 1, "ip_timezone_offset": "+06:00:00" } ], "identity_abuse_signals": { "synthetic_identity": { "score": 0 }, "stolen_identity": { "score": 0 } } }, "verify_sms": { "status": "success", "verifications": [ { "status": "success", "attempt": 1, "phone_number": "+12345678909", "delivery_attempt_count": 1, "solve_attempt_count": 1, "initially_sent_at": "2020-07-24T03:26:02Z", "last_sent_at": "2020-07-24T03:26:02Z", "redacted_at": "2020-07-24T03:26:02Z" } ] }, "watchlist_screening_id": "scr_52xR9LKo77r1Np", "beacon_user_id": "becusr_42cF1MNo42r9Xj", "user_id": "usr_dddAs9ewdcDQQQ", "redacted_at": "2020-07-24T03:26:02Z", "latest_scored_protect_event": { "event_id": "ptevt_7AJYTMFxRUgJ", "timestamp": "2020-07-24T03:26:02Z", "trust_index": { "score": 86, "model": "trust_index.1.0.1", "subscores": { "device_and_connection": { "score": 87 }, "bank_account_insights": { "score": 85 } } }, "fraud_attributes": { "fraud_attributes": { "link_session.linked_bank_accounts.user_pi_matches_owners": true, "link_session.linked_bank_accounts.connected_apps.days_since_first_connection": 582, "session.challenged_with_mfa": false, "user.bank_accounts.num_of_frozen_or_restricted_accounts": 0, "user.linked_bank_accounts.num_family_names": 1, "user.linked_bank_accounts.num_of_connected_banks": 1, "user.link_sessions.days_since_first_link_session": 150, "user.pi.email.history_yrs": 7.03, "user.pi.email.num_social_networks_linked": 12, "user.pi.ssn.user_likely_has_better_ssn": false } } }, "request_id": "saKrIBuEB9qJZng" } ``` ### Webhooks  \=\*=\*=\*= #### STATUS\_UPDATED  Fired when the status of an identity verification has been updated, which can be triggered via the dashboard or the API. #### Properties  **webhook\_type** (string) IDENTITY\_VERIFICATION **webhook\_code** (string) STATUS\_UPDATED **identity\_verification\_id** (string) The ID of the associated Identity Verification attempt. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "IDENTITY_VERIFICATION", "webhook_code": "STATUS_UPDATED", "identity_verification_id": "idv_52xR9LKo77r1Np", "environment": "production" } ``` \=\*=\*=\*= #### STEP\_UPDATED  Fired when an end user has completed a step of the Identity Verification process. #### Properties  **webhook\_type** (string) IDENTITY\_VERIFICATION **webhook\_code** (string) STEP\_UPDATED **identity\_verification\_id** (string) The ID of the associated Identity Verification attempt. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "IDENTITY_VERIFICATION", "webhook_code": "STEP_UPDATED", "identity_verification_id": "idv_52xR9LKo77r1Np", "environment": "production" } ``` \=\*=\*=\*= #### RETRIED  Fired when identity verification has been retried, which can be triggered via the dashboard or the API. #### Properties  **webhook\_type** (string) IDENTITY\_VERIFICATION **webhook\_code** (string) RETRIED **identity\_verification\_id** (string) The ID of the associated Identity Verification attempt. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "IDENTITY_VERIFICATION", "webhook_code": "RETRIED", "identity_verification_id": "idv_52xR9LKo77r1Np", "environment": "production" } ``` --- # API - Identity | Plaid Docs Identity  ========= #### API reference for Identity endpoints and webhooks  Verify the name, address, phone number, and email address of a user against bank account information on file. For how-to guidance, see the [Identity documentation](https://plaid.com/docs/identity/index.html.md) . | Endpoints | | | --- | --- | | [/identity/get](https://plaid.com/docs/api/products/identity/index.html.md#identityget) | Fetch identity data | | [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) | Match client identity with bank identity | | [/identity/documents/uploads/get](https://plaid.com/docs/api/products/identity/index.html.md#identitydocumentsuploadsget) | Get Identity data parsed from an uploaded bank statement | ### Endpoints  \=\*=\*=\*= #### /identity/get  #### Retrieve identity data  The [/identity/get](https://plaid.com/docs/api/products/identity/index.html.md#identityget) endpoint allows you to retrieve various account holder information on file with the financial institution, including names, emails, phone numbers, and addresses. Only name data is guaranteed to be returned; other fields will be empty arrays if not provided by the institution. Note: In API versions 2018-05-22 and earlier, the `owners` object is not returned, and instead identity information is returned in the top level `identity` object. For more details, see [Plaid API versioning](https://plaid.com/docs/api/versioning/index.html.md#version-2019-05-29) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /identity/get results. **options->account\_ids** (\[string\]) A list of account\_ids to retrieve for the Item. Note: An error will be returned if a provided account\_id is not associated with the Item. /identity/get Node▼ ```javascript // Pull Identity data for an Item const request: IdentityGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.identityGet(request); const identities = response.data.accounts.flatMap( (account) => account.owners, ); } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) The accounts for which Identity data has been requested **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. Only returned by Identity or Assets endpoints. For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution; detecting whether the linked account is a business account is not currently supported. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. In API versions 2018-05-22 and earlier, the owners object is not returned, and instead identity information is returned in the top level identity object. For more details, see Plaid API versioning **accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **accounts->owners->phone\_numbers->data** (string) The phone number. **accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **accounts->owners->emails->data** (string) The email address. **accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **accounts->owners->addresses->data** (object) Data about the components comprising an address. **accounts->owners->addresses->data->city** (nullable, string) The full city name **accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "2025550123", "primary": false, "type": "home" }, { "data": "1112224444", "primary": false, "type": "work" }, { "data": "1112225555", "primary": false, "type": "mobile" } ] } ], "subtype": "checking", "type": "depository" }, { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "balances": { "available": 200, "current": 210, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "1111", "name": "Plaid Saving", "official_name": "Plaid Silver Standard 0.1% Interest Saving", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "accountholder1@example.com", "primary": false, "type": "secondary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "2025550123", "primary": false, "type": "home" }, { "data": "1112224444", "primary": false, "type": "work" }, { "data": "1112225555", "primary": false, "type": "mobile" } ] } ], "subtype": "savings", "type": "depository" } ], "item": { "available_products": [ "balance", "investments" ], "billed_products": [ "assets", "auth", "identity", "liabilities", "transactions" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "3nARps6TOYtbACO" } ``` \=\*=\*=\*= #### /identity/match  #### Retrieve identity match score  The [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) endpoint generates a match score, which indicates how well the provided identity data matches the identity information on file with the account holder's financial institution. Fields within the `balances` object will always be null when retrieved by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) . Instead, use the free [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) endpoint to request balance cached data, or [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) or [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) for real-time data. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **user** (object) The user's legal name, phone number, email address and address used to perform fuzzy match. If Financial Account Matching is enabled in the Identity Verification product, leave this field empty to automatically match against PII collected from the Identity Verification checks. **user->legal\_name** (string) The user's full legal name. **user->phone\_number** (string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14157452130". Phone numbers provided in other formats will be parsed on a best-effort basis. Phone number input is validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **user->email\_address** (string) The user's email address. **user->address** (object) Data about the components comprising an address. **user->address->city** (string) The full city name **user->address->region** (string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **user->address->street** (string) The full street address Example: "564 Main Street, APT 15" **user->address->postal\_code** (string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **user->address->country** (string) The ISO 3166-1 alpha-2 country code **options** (object) An optional object to filter /identity/match results **options->account\_ids** (\[string\]) An array of account\_ids to perform fuzzy match /identity/match Node▼ ```javascript const request = { access_token: accessToken, // Omit user object if using Identity Verification Financial Account Matching user: { legal_name: 'Jane Smith', phone_number: '+14155552671', email_address: 'jane.smith@example.com', address: { street: '500 Market St', city: 'San Francisco', region: 'CA', postal_code: '94105', country: 'US', }, }, }; try { const response = await plaidClient.identityMatch(request); const accounts = response.data.accounts; for (const account of accounts) { const legalNameScore = account.legal_name?.score; const phoneScore = account.phone_number?.score; const emailScore = account.email_address?.score; const addressScore = account.address?.score; } } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) The accounts for which Identity match has been requested **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **accounts->legal\_name** (nullable, object) Score found by matching name provided by the API with the name on the account at the financial institution. If the account contains multiple owners, the maximum match score is filled. **accounts->legal\_name->score** (nullable, integer) Match score for name. 100 is a perfect score, 99-85 means a strong match, 84-70 is a partial match, any score less than 70 is a mismatch. Typically, the match threshold should be set to a score of 70 or higher. If the name is missing from either the API or financial institution, this is null. **accounts->legal\_name->is\_first\_name\_or\_last\_name\_match** (nullable, boolean) first or last name completely matched, likely a family member **accounts->legal\_name->is\_nickname\_match** (nullable, boolean) nickname matched, example Jennifer and Jenn. **accounts->legal\_name->is\_business\_name\_detected** (nullable, boolean) Is true if the name on either of the names that was matched for the score contained strings indicative of a business name, such as "CORP", "LLC", "INC", or "LTD". A true result generally indicates that an account's name is a business name. However, a false result does not mean the account name is not a business name, as some businesses do not use these strings in the names used for their financial institution accounts. **accounts->phone\_number** (nullable, object) Score found by matching phone number provided by the API with the phone number on the account at the financial institution. 100 is a perfect match and 0 is a no match. If the account contains multiple owners, the maximum match score is filled. **accounts->phone\_number->score** (nullable, integer) Match score for normalized phone number. 100 is a perfect match, 99-70 is a partial match (matching the same phone number with extension against one without extension, etc.), anything below 70 is considered a mismatch. Typically, the match threshold should be set to a score of 70 or higher. If the phone number is missing from either the API or financial institution, this is null. **accounts->email\_address** (nullable, object) Score found by matching email provided by the API with the email on the account at the financial institution. 100 is a perfect match and 0 is a no match. If the account contains multiple owners, the maximum match score is filled. **accounts->email\_address->score** (nullable, integer) Match score for normalized email. 100 is a perfect match, 99-70 is a partial match (matching the same email with different '+' extensions), anything below 70 is considered a mismatch. Typically, the match threshold should be set to a score of 70 or higher. If the email is missing from either the API or financial institution, this is null. **accounts->address** (nullable, object) Score found by matching address provided by the API with the address on the account at the financial institution. The score can range from 0 to 100 where 100 is a perfect match and 0 is a no match. If the account contains multiple owners, the maximum match score is filled. **accounts->address->score** (nullable, integer) Match score for address. 100 is a perfect match, 99-90 is a strong match, 89-70 is a partial match, anything below 70 is considered a weak match. Typically, the match threshold should be set to a score of 70 or higher. If the address is missing from either the API or financial institution, this is null. **accounts->address->is\_postal\_code\_match** (nullable, boolean) postal code was provided for both and was a match **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": null, "current": null, "iso_currency_code": null, "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "legal_name": { "score": 90, "is_nickname_match": true, "is_first_name_or_last_name_match": true, "is_business_name_detected": false }, "phone_number": { "score": 100 }, "email_address": { "score": 100 }, "address": { "score": 100, "is_postal_code_match": true }, "subtype": "checking", "type": "depository" }, { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "balances": { "available": null, "current": null, "iso_currency_code": null, "limit": null, "unofficial_currency_code": null }, "mask": "1111", "name": "Plaid Saving", "official_name": "Plaid Silver Standard 0.1% Interest Saving", "legal_name": { "score": 30, "is_first_name_or_last_name_match": false }, "phone_number": { "score": 100 }, "email_address": null, "address": { "score": 100, "is_postal_code_match": true }, "subtype": "savings", "type": "depository" } ], "item": { "available_products": [ "balance", "investments" ], "billed_products": [ "assets", "auth", "identity", "liabilities", "transactions" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "3nARps6TOYtbACO" } ``` \=\*=\*=\*= #### /identity/documents/uploads/get  #### Returns uploaded document identity  Use [/identity/documents/uploads/get](https://plaid.com/docs/api/products/identity/index.html.md#identitydocumentsuploadsget) to retrieve identity details when using [Identity Document Upload](https://plaid.com/docs/identity/identity-document-upload/index.html.md) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /identity/documents/uploads/get results. **options->account\_ids** (\[string\]) A list of account\_ids to retrieve for the Item. Note: An error will be returned if a provided account\_id is not associated with the Item. /identity/documents/uploads/get Node▼ ```javascript const request: IdentityDocumentsUploadsGetRequest = { access_token: accessToken, }; try { const response = await client.identityDocumentsUploadsGet(request); } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) The accounts for which Identity data has been requested **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. Only returned by Identity or Assets endpoints. For business accounts, the name reported may be either the name of the individual or the name of the business, depending on the institution; detecting whether the linked account is a business account is not currently supported. Multiple owners on a single account will be represented in the same owner object, not in multiple owner objects within the array. In API versions 2018-05-22 and earlier, the owners object is not returned, and instead identity information is returned in the top level identity object. For more details, see Plaid API versioning **accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **accounts->owners->phone\_numbers->data** (string) The phone number. **accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **accounts->owners->emails->data** (string) The email address. **accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **accounts->owners->addresses->data** (object) Data about the components comprising an address. **accounts->owners->addresses->data->city** (nullable, string) The full city name **accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **accounts->documents** (nullable, \[object\]) Data about the documents that were uploaded as proof of account ownership. **accounts->documents->document\_id** (string) A UUID identifying the document. **accounts->documents->metadata** (object) Metadata pertaining to the document. **accounts->documents->metadata->document\_type** (nullable, string) The submitted document type. Currently, this will always be BANK\_STATEMENT. **accounts->documents->metadata->is\_account\_number\_match** (nullable, boolean) Boolean field indicating whether the uploaded document's account number matches the account number we have on file. If false, it is not recommended to accept the uploaded identity data as accurate without further verification. **accounts->documents->metadata->page\_count** (nullable, integer) The number of pages in the uploaded document. **accounts->documents->metadata->last\_updated** (string) The timestamp when the document was last updated. Format: date-time **accounts->documents->metadata->uploaded\_at** (string) The timestamp when the document was originally uploaded. Format: date-time **accounts->documents->risk\_insights** (object) Object representing fraud risk data of the uploaded document. Only provided when using Identity Document Upload with Fraud Risk enabled. **accounts->documents->risk\_insights->risk\_summary** (object) Risk summary of an uploaded document. **accounts->documents->risk\_insights->risk\_summary->risk\_score** (nullable, integer) A number between 0 and 100, inclusive, where a score closer to 0 indicates a document is likely to be trustworthy and a score closer to 100 indicates a document is likely to be fraudulent. **accounts->documents->risk\_insights->risk\_signals** (\[object\]) An array of risk signals. **accounts->documents->risk\_insights->risk\_signals->type** (nullable, string) The type of risk found. Possible values: FONT, MASKING, OVERLAID\_TEXT, EDITED\_TEXT, TEXT\_COMPRESSION, ADDRESS\_FORMAT\_ANOMALY, DATE\_FORMAT\_ANOMALY, FONT\_ANOMALY, NAME\_FORMAT\_ANOMALY, PDF\_ALIGNMENT, BRUSH\_DETECTION, METADATA\_DATES\_OUTSIDE\_WINDOW, METADATA\_DATES\_INSIDE\_WINDOW, METADATA\_DATES\_MISSING, METADATA\_DATES\_MATCH, ADOBE\_FONTS, ANNOTATION\_DATES, ANNOTATIONS, EDITED\_WHILE\_SCANNED, EXIF\_DATA\_MODIFIED, HIGH\_USER\_ACCESS, MALFORMED\_DATE, QPDF, TEXT\_LAYER\_TEXT, TOUCHUP\_TEXT, FLATTENED\_PDF, BLACKLISTS, COPYCAT\_IMAGE, COPYCAT\_TEXT, REJECTED\_CUSTOMER, TEMPLATES, SOFTWARE\_BLACKLIST **accounts->documents->risk\_insights->risk\_signals->has\_fraud\_risk** (nullable, boolean) Indicates whether fraud risk was detected on the field. **accounts->documents->risk\_insights->risk\_signals->signal\_description** (nullable, string) A human-readable explanation providing more detail about the specific risk signal. **accounts->documents->risk\_insights->risk\_signals->page\_number** (nullable, integer) The relevant page associated with the risk signal. If the risk signal is not associated with a specific page, the value will be 0. **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "ZXEbW7Rkr9iv1qj8abebU1KDMlkexgSgrLAod", "balances": { "available": null, "current": null, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "documents": [ { "document_id": "9f838fef-b0a5-4ef4-bf73-8e5248d43ad7", "metadata": { "document_type": "BANK_STATEMENT", "is_account_number_match": true, "last_updated": "2024-09-25T23:57:12Z", "page_count": 1, "uploaded_at": "2024-09-25T23:57:12Z" }, "risk_insights": { "risk_signals": [ { "has_fraud_risk": true, "page_number": 0, "signal_description": "Creation date and modification date do not match", "type": "METADATA_DATES_OUTSIDE_WINDOW" }, { "has_fraud_risk": true, "page_number": 0, "signal_description": "Adobe Acrobat", "type": "SOFTWARE_BLACKLIST" } ], "risk_summary": { "risk_score": 100 } } } ], "mask": "0000", "name": "Checking ...0000", "official_name": null, "owners": [ { "addresses": [ { "data": { "city": "OAKLAND", "country": "US", "postal_code": "94103", "region": "CA", "street": "1234 GRAND AVE" }, "primary": true } ], "document_id": "9f838fef-b0a5-4ef4-bf73-8e5248d43ad7", "emails": [], "names": [ "JANE DOE" ], "phone_numbers": [] } ], "subtype": "checking", "type": "depository", "verification_status": "manually_verified" } ], "item": { "available_products": [], "billed_products": [ "auth" ], "consent_expiration_time": null, "error": null, "item_id": "QwpzDByRv8uvdpwKEW3WU4PkGEApajtp3o4NN", "products": [ "auth" ], "update_type": "background", "webhook": "https://www.example.com/webhook" }, "request_id": "b5jvmskusjwX5Gs" } ``` ### Webhooks (beta)  This feature is in currently in beta; please reach out to your Plaid Account Manager if you would like it enabled. \=\*=\*=\*= #### DEFAULT\_UPDATE  Fired when a change to identity data has been detected on an Item. Items are checked for identity updates every 30-90 days. We recommend that upon receiving this webhook you make another call to [/identity/get](https://plaid.com/docs/api/products/identity/index.html.md#identityget) to fetch the user's latest identity data. #### Properties  **webhook\_type** (string) IDENTITY **webhook\_code** (string) DEFAULT\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **account\_ids\_with\_updated\_identity** (object) An object with keys of account\_id's that are mapped to their respective identity attributes that changed. Example: { "XMBvvyMGQ1UoLbKByoMqH3nXMj84ALSdE5B58": \["PHONES"\] } **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "IDENTITY", "webhook_code": "DEFAULT_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "account_ids_with_updated_identity": { "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp": [ "ADDRESSES" ] }, "error": null, "environment": "production" } ``` --- # API - Income | Plaid Docs Income  ======= #### API reference for Income endpoints and webhooks  Verify a user's income via payroll or bank account data. For how-to guidance, see the [Income documentation](https://plaid.com/docs/income/index.html.md) . | Endpoints | | | --- | --- | | [/credit/sessions/get](https://plaid.com/docs/api/products/income/index.html.md#creditsessionsget) | Get Link session metadata and results for the end user | | [/credit/bank\_income/get](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomeget) | Retrieve information from the bank accounts used for income verification | | [/credit/bank\_income/pdf/get](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomepdfget) | Retrieve information from the bank accounts used for income verification in PDF format | | [/credit/bank\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomerefresh) | Refresh a user's bank income information | | [/credit/bank\_statements/uploads/get](https://plaid.com/docs/api/products/income/index.html.md#creditbank_statementsuploadsget) | Retrieve information from the bank statements used for income verification | | [/credit/payroll\_income/get](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomeget) | Retrieve information from the pay stubs or tax forms used for income verification | | [/credit/payroll\_income/risk\_signals/get](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerisk_signalsget) | Analyze uploaded income documents for indications of potential fraud | | [/credit/payroll\_income/parsing\_config/update](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomeparsing_configupdate) | Update the parsing configuration for a document verification | | [/credit/employment/get](https://plaid.com/docs/api/products/income/index.html.md#creditemploymentget) | (Beta) Retrieve employment information about the end user | | [/credit/payroll\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerefresh) | (Beta) Retrieve updated payroll income data on a linked account | | See also | | | --- | --- | | [/sandbox/income/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxincomefire_webhook) | Manually fire an Income webhook (Sandbox only) | | [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) | Create a user for use with the income verification product | | Webhooks | | | --- | --- | | [INCOME\_VERIFICATION](https://plaid.com/docs/api/products/income/index.html.md#income_verification) | Income verification has completed | | [INCOME\_VERIFICATION\_RISK\_SIGNALS](https://plaid.com/docs/api/products/income/index.html.md#income_verification_risk_signals) | Risk evaluation of user-uploaded documents has completed | | [BANK\_INCOME\_REFRESH\_COMPLETE](https://plaid.com/docs/api/products/income/index.html.md#bank_income_refresh_complete) | The refreshed report has finished generating | | [INCOME\_VERIFICATION\_REFRESH\_RECONNECT\_NEEDED](https://plaid.com/docs/api/products/income/index.html.md#income_verification_refresh_reconnect_needed) | A Payroll Income verification could not be refreshed | ### Endpoints  \=\*=\*=\*= #### /user/create  #### Create user  This endpoint should be called for each of your end users before they begin a Plaid Check or Income flow, or a Multi-Item Link flow. This provides you a single token to access all data associated with the user. You should only create one per end user. The `consumer_report_user_identity` object must be present in order to create a Plaid Check Consumer Report for a user. If it is not provided during the [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) call, it can be added later by calling [/user/update](https://plaid.com/docs/api/users/index.html.md#userupdate) . Plaid Check Consumer Reports can only be created for US-based users; the user's address country must be `US`. If you call the endpoint multiple times with the same `client_user_id`, the first creation call will succeed and the rest will fail with an error message indicating that the user has been created for the given `client_user_id`. Ensure that you store the `user_token` along with your user's identifier in your database, as it is not possible to retrieve a previously created `user_token`. #### Request fields  **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\_user\_id** (required, string) A unique ID representing the end user. Maximum of 128 characters. 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. Max length: 128 Min length: 1 **consumer\_report\_user\_identity** (object) To create a Plaid Check Consumer Report for a user, this field must be present on the user token. If this field is not provided during user token creation, you can add it to the user later by calling /user/update. Once the field has been added to the user, you will be able to call /link/token/create with a non-empty consumer\_report\_permissible\_purpose (which will automatically create a Plaid Check Consumer Report), or call /cra/check\_report/create for that user. **consumer\_report\_user\_identity->first\_name** (required, string) The user's first name **consumer\_report\_user\_identity->last\_name** (required, string) The user's last name **consumer\_report\_user\_identity->phone\_numbers** (required, \[string\]) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14157452130". Phone numbers provided in other formats will be parsed on a best-effort basis. Phone number input is validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **consumer\_report\_user\_identity->emails** (required, \[string\]) The user's emails **consumer\_report\_user\_identity->ssn\_full** (string) The user's full social security number. This field should only be provided by lenders intending to share the resulting consumer report with a Government-Sponsored Enterprise (GSE), such as Fannie Mae or Freddie Mac. Format: "ddd-dd-dddd" **consumer\_report\_user\_identity->ssn\_last\_4** (string) The last 4 digits of the user's social security number. Max length: 4 Min length: 4 **consumer\_report\_user\_identity->date\_of\_birth** (required, string) To be provided in the format "yyyy-mm-dd". This field is required for all Plaid Check customers. Format: date **consumer\_report\_user\_identity->primary\_address** (required, object) Data about the components comprising an address. **consumer\_report\_user\_identity->primary\_address->city** (required, string) The full city name **consumer\_report\_user\_identity->primary\_address->region** (required, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **consumer\_report\_user\_identity->primary\_address->street** (required, string) The full street address Example: "564 Main Street, APT 15" **consumer\_report\_user\_identity->primary\_address->postal\_code** (required, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **consumer\_report\_user\_identity->primary\_address->country** (required, string) The ISO 3166-1 alpha-2 country code /user/create Node▼ ```javascript const request: UserCreateRequest = { client_user_id: 'c0e2c4ee-b763-4af5-cfe9-46a46bce883d', }; try { const response = await client.userCreate(request); } catch (error) { // handle error } ``` #### Response fields  **user\_token** (string) The user token associated with the User data is being requested for. **user\_id** (string) The Plaid user\_id of the User associated with this webhook, warning, or error. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "user_token": "user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d", "user_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /credit/sessions/get  #### Retrieve Link sessions for your user  This endpoint can be used for your end users after they complete the Link flow. This endpoint returns a list of Link sessions that your user completed, where each session includes the results from the Link flow. These results include details about the Item that was created and some product related metadata (showing, for example, whether the user finished the bank income verification step). #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. /credit/sessions/get Node▼ ```javascript const request: CreditSessionsGetRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', }; try { const response = await client.creditSessionsGet(request); } catch (error) { // handle error } ``` #### Response fields  **sessions** (\[object\]) A list of Link sessions for the user. Sessions will be sorted in reverse chronological order. **sessions->link\_session\_id** (string) The unique identifier associated with the Link session. This identifier matches the link\_session\_id returned in the onSuccess/onExit callbacks. **sessions->session\_start\_time** (string) The time when the Link session started Format: date-time **sessions->results** (object) The set of results for a Link session. **sessions->results->item\_add\_results** (\[object\]) The set of Item adds for the Link session. **sessions->results->item\_add\_results->public\_token** (string) Returned once a user has successfully linked their Item. **sessions->results->item\_add\_results->item\_id** (string) 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. **sessions->results->item\_add\_results->institution\_id** (string) The Plaid Institution ID associated with the Item. **sessions->results->bank\_income\_results** (\[object\]) The set of bank income verifications for the Link session. **sessions->results->bank\_income\_results->status** (string) 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. Possible values: APPROVED, NO\_DEPOSITS\_FOUND, USER\_REPORTED\_NO\_INCOME **sessions->results->bank\_income\_results->item\_id** (string) 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. **sessions->results->bank\_income\_results->institution\_id** (string) The Plaid Institution ID associated with the Item. **sessions->results->bank\_employment\_results** (\[object\]) The set of bank employment verifications for the Link session. **sessions->results->bank\_employment\_results->status** (string) Status of the Bank Employment Link session. APPROVED: User has approved and verified their employment. NO\_EMPLOYMENTS\_FOUND: We attempted, but were unable to find any employment in the connected account. EMPLOYER\_NOT\_LISTED: The user explicitly indicated that they did not see their current or previous employer in the list of employer names found. STARTED: The user began the bank income portion of the link flow. INTERNAL\_ERROR: The user encountered an internal error. Possible values: APPROVED, NO\_EMPLOYERS\_FOUND, EMPLOYER\_NOT\_LISTED **sessions->results->bank\_employment\_results->item\_id** (string) 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. **sessions->results->bank\_employment\_results->institution\_id** (string) The Plaid Institution ID associated with the Item. **sessions->results->payroll\_income\_results** (\[object\]) The set of payroll income verifications for the Link session. **sessions->results->payroll\_income\_results->num\_paystubs\_retrieved** (integer) The number of paystubs retrieved from a payroll provider. **sessions->results->payroll\_income\_results->num\_w2s\_retrieved** (integer) The number of w2s retrieved from a payroll provider. **sessions->results->payroll\_income\_results->institution\_id** (string) The Plaid Institution ID associated with the Item. **sessions->results->payroll\_income\_results->institution\_name** (string) The Institution Name associated with the Item. **sessions->results->document\_income\_results** (nullable, object) The details of a document income verification in Link **sessions->results->document\_income\_results->num\_paystubs\_uploaded** (integer) The number of paystubs uploaded by the user. **sessions->results->document\_income\_results->num\_w2s\_uploaded** (integer) The number of w2s uploaded by the user. **sessions->results->document\_income\_results->num\_bank\_statements\_uploaded** (integer) The number of bank statements uploaded by the user. **sessions->results->document\_income\_results->num\_1099s\_uploaded** (integer) The number of 1099s uploaded by the user **sessions->errors** (\[object\]) The set of errors that occurred during the Link session. **sessions->errors->error\_type** (string) A broad categorization of the error. **sessions->errors->error\_code** (string) The particular error code. **sessions->errors->error\_message** (string) A developer-friendly representation of the error code. **sessions->errors->display\_message** (nullable, string) A user-friendly representation of the error code. null if the error is not related to user action. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "Aim3b", "sessions": [ { "link_session_id": "356dbb28-7f98-44d1-8e6d-0cec580f3171", "results": { "item_add_results": [ { "public_token": "public-sandbox-5c224a01-8314-4491-a06f-39e193d5cddc", "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op", "institution_id": "ins_56" } ], "bank_income_results": [ { "status": "APPROVED", "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op", "institution_id": "ins_56" } ] }, "session_start_time": "2022-09-30T23:40:30.946225Z" }, { "link_session_id": "f742cae8-31e4-49cc-a621-6cafbdb26fb9", "results": { "payroll_income_results": [ { "num_paystubs_retrieved": 2, "num_w2s_retrieved": 1, "institution_id": "ins_92" } ] }, "session_start_time": "2022-09-26T23:40:30.946225Z" } ] } ``` \=\*=\*=\*= #### /credit/bank\_income/get  #### Retrieve information from the bank accounts used for income verification  [/credit/bank\_income/get](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomeget) returns the bank income report(s) for a specified user. A single report corresponds to all institutions linked in a single Link session. To include multiple institutions in a single report, use [Multi-Item Link](https://plaid.com/docs/link/multi-item-link/index.html.md) . To return older reports, use the `options.count` field. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **options** (object) An optional object for /credit/bank\_income/get request options. **options->count** (integer) How many Bank Income Reports should be fetched. Multiple reports may be available if the report has been re-created or refreshed. If more than one report is available, the most recent reports will be returned first. Default: 1 /credit/bank\_income/get Node▼ ```javascript const request: CreditBankIncomeGetRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', options: { count: 1, }, }; try { const response = await client.creditBankIncomeGet(request); } catch (error) { // handle error } ``` #### Response fields  string **bank\_income** (\[object\]) The unique identifier associated with the Bank Income Report. **bank\_income->generated\_time** (string) The time when the report was generated. Format: date-time **bank\_income->days\_requested** (integer) The number of days requested by the customer for the report. **bank\_income->items** (\[object\]) The list of Items in the report along with the associated metadata about the Item. **bank\_income->items->bank\_income\_accounts** (\[object\]) The Item's accounts that have Bank Income data. **bank\_income->items->bank\_income\_accounts->account\_id** (string) Plaid's unique identifier for the account. **bank\_income->items->bank\_income\_accounts->mask** (nullable, string) 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, and it may also not match the mask that the bank displays to the user. **bank\_income->items->bank\_income\_accounts->name** (string) The name of the bank account. **bank\_income->items->bank\_income\_accounts->official\_name** (nullable, string) The official name of the bank account. **bank\_income->items->bank\_income\_accounts->subtype** (string) Valid account subtypes for depository accounts. For a list containing descriptions of each subtype, see Account schemas. Possible values: checking, savings, hsa, cd, money market, paypal, prepaid, cash management, ebt, all **bank\_income->items->bank\_income\_accounts->type** (string) The account type. This will always be depository. Possible values: depository **bank\_income->items->bank\_income\_accounts->owners** (\[object\]) Data returned by the financial institution about the account owner or owners. Identity information is optional, so field may return an empty array. **bank\_income->items->bank\_income\_accounts->owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **bank\_income->items->bank\_income\_accounts->owners->phone\_numbers** (\[object\]) A list of phone numbers associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **bank\_income->items->bank\_income\_accounts->owners->phone\_numbers->data** (string) The phone number. **bank\_income->items->bank\_income\_accounts->owners->phone\_numbers->primary** (boolean) When true, identifies the phone number as the primary number on an account. **bank\_income->items->bank\_income\_accounts->owners->phone\_numbers->type** (string) The type of phone number. Possible values: home, work, office, mobile, mobile1, other **bank\_income->items->bank\_income\_accounts->owners->emails** (\[object\]) A list of email addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **bank\_income->items->bank\_income\_accounts->owners->emails->data** (string) The email address. **bank\_income->items->bank\_income\_accounts->owners->emails->primary** (boolean) When true, identifies the email address as the primary email on an account. **bank\_income->items->bank\_income\_accounts->owners->emails->type** (string) The type of email account as described by the financial institution. Possible values: primary, secondary, other **bank\_income->items->bank\_income\_accounts->owners->addresses** (\[object\]) Data about the various addresses associated with the account by the financial institution. May be an empty array if no relevant information is returned from the financial institution. **bank\_income->items->bank\_income\_accounts->owners->addresses->data** (object) Data about the components comprising an address. **bank\_income->items->bank\_income\_accounts->owners->addresses->data->city** (nullable, string) The full city name **bank\_income->items->bank\_income\_accounts->owners->addresses->data->region** (nullable, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **bank\_income->items->bank\_income\_accounts->owners->addresses->data->street** (string) The full street address Example: "564 Main Street, APT 15" **bank\_income->items->bank\_income\_accounts->owners->addresses->data->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **bank\_income->items->bank\_income\_accounts->owners->addresses->data->country** (nullable, string) The ISO 3166-1 alpha-2 country code **bank\_income->items->bank\_income\_accounts->owners->addresses->primary** (boolean) When true, identifies the address as the primary address on an account. **bank\_income->items->bank\_income\_sources** (\[object\]) The income sources for this Item. Each entry in the array is a single income source. **bank\_income->items->bank\_income\_sources->income\_source\_id** (string) A unique identifier for an income source. **bank\_income->items->bank\_income\_sources->income\_description** (string) The most common name or original description for the underlying income transactions. **bank\_income->items->bank\_income\_sources->income\_category** (string) The income category. BANK\_INTEREST: Interest earned from a bank account. BENEFIT\_OTHER: Government benefits other than retirement, unemployment, child support, or disability. Currently used only in the UK, to represent benefits such as Cost of Living Payments. CASH: Deprecated and used only for existing legacy implementations. Has been replaced by CASH\_DEPOSIT and TRANSFER\_FROM\_APPLICATION. CASH\_DEPOSIT: A cash or check deposit. CHILD\_SUPPORT: Child support payments received. GIG\_ECONOMY: Income earned as a gig economy worker, e.g. driving for Uber, Lyft, Postmates, DoorDash, etc. LONG\_TERM\_DISABILITY: Disability payments, including Social Security disability benefits. OTHER: Income that could not be categorized as any other income category. MILITARY: Veterans benefits. Income earned as salary for serving in the military (e.g. through DFAS) will be classified as SALARY rather than MILITARY. RENTAL: Income earned from a rental property. Income may be identified as rental when the payment is received through a rental platform, e.g. Airbnb; rent paid directly by the tenant to the property owner (e.g. via cash, check, or ACH) will typically not be classified as rental income. RETIREMENT: Payments from private retirement systems, pensions, and government retirement programs, including Social Security retirement benefits. SALARY: Payment from an employer to an earner or other form of permanent employment. TAX\_REFUND: A tax refund. TRANSFER\_FROM\_APPLICATION: Deposits from a money transfer app, such as Venmo, Cash App, or Zelle. UNEMPLOYMENT: Unemployment benefits. In the UK, includes certain low-income benefits such as the Universal Credit. Possible values: SALARY, UNEMPLOYMENT, CASH, GIG\_ECONOMY, RENTAL, CHILD\_SUPPORT, MILITARY, RETIREMENT, LONG\_TERM\_DISABILITY, BANK\_INTEREST, CASH\_DEPOSIT, TRANSFER\_FROM\_APPLICATION, TAX\_REFUND, BENEFIT\_OTHER, OTHER **bank\_income->items->bank\_income\_sources->account\_id** (string) Plaid's unique identifier for the account. **bank\_income->items->bank\_income\_sources->start\_date** (string) Minimum of all dates within the specific income sources in the user's bank account for days requested by the client. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->items->bank\_income\_sources->end\_date** (string) Maximum of all dates within the specific income sources in the user’s bank account for days requested by the client. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->items->bank\_income\_sources->pay\_frequency** (string) The income pay frequency. Possible values: WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, DAILY, UNKNOWN **bank\_income->items->bank\_income\_sources->total\_amount** (number) Total amount of earnings in the user’s bank account for the specific income source for days requested by the client. **bank\_income->items->bank\_income\_sources->transaction\_count** (integer) Number of transactions for the income source within the start and end date. deprecated, number **bank\_income->items->bank\_income\_sources->historical\_summary** (\[object\]) Total amount of earnings for the income source(s) of the user for the month in the summary. This may return an incorrect value if the summary includes income sources in multiple currencies. Please use total\_amounts instead. **bank\_income->items->bank\_income\_sources->historical\_summary->iso\_currency\_code** (deprecated, nullable, string) The ISO 4217 currency code of the amount or balance. Please use total\_amounts instead. **bank\_income->items->bank\_income\_sources->historical\_summary->unofficial\_currency\_code** (deprecated, nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. Please use total\_amounts instead. **bank\_income->items->bank\_income\_sources->historical\_summary->total\_amounts** (\[object\]) Total amount of earnings for the income source(s) of the user for the month in the summary. This can contain multiple amounts, with each amount denominated in one unique currency. **bank\_income->items->bank\_income\_sources->historical\_summary->total\_amounts->amount** (number) Value of amount with up to 2 decimal places. **bank\_income->items->bank\_income\_sources->historical\_summary->total\_amounts->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **bank\_income->items->bank\_income\_sources->historical\_summary->total\_amounts->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **bank\_income->items->bank\_income\_sources->historical\_summary->start\_date** (string) The start date of the period covered in this monthly summary. This date will be the first day of the month, unless the month being covered is a partial month because it is the first month included in the summary and the date range being requested does not begin with the first day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->items->bank\_income\_sources->historical\_summary->end\_date** (string) The end date of the period included in this monthly summary. This date will be the last day of the month, unless the month being covered is a partial month because it is the last month included in the summary and the date range being requested does not end with the last day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date number **bank\_income->items->bank\_income\_sources->historical\_summary->transactions** (\[object\]) The settled value of the transaction, denominated in the transactions's currency as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, credit card purchases are positive; credit card payment, direct deposits, and refunds are negative. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->name** (string) The merchant name or transaction description. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **bank\_income->items->bank\_income\_sources->historical\_summary->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **bank\_income->items->last\_updated\_time** (string) The time when this Item's data was last retrieved from the financial institution. Format: date-time **bank\_income->items->institution\_id** (string) The unique identifier of the institution associated with the Item. **bank\_income->items->institution\_name** (string) The name of the institution associated with the Item. **bank\_income->items->item\_id** (string) The unique identifier for the Item. **bank\_income->bank\_income\_summary** (object) Summary for bank income across all income sources and items (max history of 730 days). **bank\_income->bank\_income\_summary->total\_amount** (deprecated, number) Total amount of earnings across all the income sources in the end user's Items for the days requested by the client. This may return an incorrect value if the summary includes income sources in multiple currencies. Please use total\_amounts instead. **bank\_income->bank\_income\_summary->iso\_currency\_code** (deprecated, nullable, string) The ISO 4217 currency code of the amount or balance. Please use total\_amounts instead. **bank\_income->bank\_income\_summary->unofficial\_currency\_code** (deprecated, nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. Please use total\_amounts instead. **bank\_income->bank\_income\_summary->total\_amounts** (\[object\]) Total amount of earnings across all the income sources in the end user's Items for the days requested by the client. This can contain multiple amounts, with each amount denominated in one unique currency. **bank\_income->bank\_income\_summary->total\_amounts->amount** (number) Value of amount with up to 2 decimal places. **bank\_income->bank\_income\_summary->total\_amounts->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **bank\_income->bank\_income\_summary->total\_amounts->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **bank\_income->bank\_income\_summary->start\_date** (string) The earliest date within the days requested in which all income sources identified by Plaid appear in a user's account. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->bank\_income\_summary->end\_date** (string) The latest date in which all income sources identified by Plaid appear in the user's account. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->bank\_income\_summary->income\_sources\_count** (integer) Number of income sources per end user. **bank\_income->bank\_income\_summary->income\_categories\_count** (integer) Number of income categories per end user. **bank\_income->bank\_income\_summary->income\_transactions\_count** (integer) Number of income transactions per end user. deprecated, number **bank\_income->bank\_income\_summary->historical\_summary** (\[object\]) Total amount of earnings for the income source(s) of the user for the month in the summary. This may return an incorrect value if the summary includes income sources in multiple currencies. Please use total\_amounts instead. **bank\_income->bank\_income\_summary->historical\_summary->iso\_currency\_code** (deprecated, nullable, string) The ISO 4217 currency code of the amount or balance. Please use total\_amounts instead. **bank\_income->bank\_income\_summary->historical\_summary->unofficial\_currency\_code** (deprecated, nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. Please use total\_amounts instead. **bank\_income->bank\_income\_summary->historical\_summary->total\_amounts** (\[object\]) Total amount of earnings for the income source(s) of the user for the month in the summary. This can contain multiple amounts, with each amount denominated in one unique currency. **bank\_income->bank\_income\_summary->historical\_summary->total\_amounts->amount** (number) Value of amount with up to 2 decimal places. **bank\_income->bank\_income\_summary->historical\_summary->total\_amounts->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **bank\_income->bank\_income\_summary->historical\_summary->total\_amounts->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **bank\_income->bank\_income\_summary->historical\_summary->start\_date** (string) The start date of the period covered in this monthly summary. This date will be the first day of the month, unless the month being covered is a partial month because it is the first month included in the summary and the date range being requested does not begin with the first day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->bank\_income\_summary->historical\_summary->end\_date** (string) The end date of the period included in this monthly summary. This date will be the last day of the month, unless the month being covered is a partial month because it is the last month included in the summary and the date range being requested does not end with the last day of the month. The date will be returned in an ISO 8601 format (YYYY-MM-DD). Format: date number **bank\_income->bank\_income\_summary->historical\_summary->transactions** (\[object\]) The settled value of the transaction, denominated in the transactions's currency as stated in iso\_currency\_code or unofficial\_currency\_code. Positive values when money moves out of the account; negative values when money moves in. For example, credit card purchases are positive; credit card payment, direct deposits, and refunds are negative. **bank\_income->bank\_income\_summary->historical\_summary->transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **bank\_income->bank\_income\_summary->historical\_summary->transactions->name** (string) The merchant name or transaction description. **bank\_income->bank\_income\_summary->historical\_summary->transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. **bank\_income->bank\_income\_summary->historical\_summary->transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. **bank\_income->bank\_income\_summary->historical\_summary->transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **bank\_income->bank\_income\_summary->historical\_summary->transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **bank\_income->bank\_income\_summary->historical\_summary->transactions->iso\_currency\_code** (nullable, string) The ISO 4217 currency code of the amount or balance. **bank\_income->bank\_income\_summary->historical\_summary->transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the amount or balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **bank\_income->warnings** (\[object\]) If data from the report was unable to be retrieved, the warnings will contain information about the error that caused the data to be incomplete. **bank\_income->warnings->warning\_type** (string) The warning type which will always be BANK\_INCOME\_WARNING. Possible values: BANK\_INCOME\_WARNING **bank\_income->warnings->warning\_code** (string) The warning code identifies a specific kind of warning. IDENTITY\_UNAVAILABLE: Unable to extract identity for the Item TRANSACTIONS\_UNAVAILABLE: Unable to extract transactions for the Item ITEM\_UNAPPROVED: User exited flow before giving permission to share data for the Item REPORT\_DELETED: Report deleted due to customer or consumer request DATA\_UNAVAILABLE: No relevant data was found for the Item Possible values: IDENTITY\_UNAVAILABLE, TRANSACTIONS\_UNAVAILABLE, ITEM\_UNAPPROVED, REPORT\_DELETED, DATA\_UNAVAILABLE **bank\_income->warnings->cause** (object) An error object and associated item\_id used to identify a specific Item and error when a batch operation operating on multiple Items has encountered an error in one of the Items. **bank\_income->warnings->cause->error\_type** (string) A broad categorization of the error. Safe for programmatic use. Possible values: INTERNAL\_SERVER\_ERROR, INSUFFICIENT\_CREDENTIALS, ITEM\_LOCKED, USER\_SETUP\_REQUIRED, COUNTRY\_NOT\_SUPPORTED, INSTITUTION\_DOWN, INSTITUTION\_NO\_LONGER\_SUPPORTED, INSTITUTION\_NOT\_RESPONDING, INVALID\_CREDENTIALS, INVALID\_MFA, INVALID\_SEND\_METHOD, ITEM\_LOGIN\_REQUIRED, MFA\_NOT\_SUPPORTED, NO\_ACCOUNTS, ITEM\_NOT\_SUPPORTED, ACCESS\_NOT\_GRANTED **bank\_income->warnings->cause->error\_code** (string) 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. Error fields will be null if no error has occurred. **bank\_income->warnings->cause->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **bank\_income->warnings->cause->display\_message** (string) 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. **bank\_income->warnings->cause->item\_id** (string) The item\_id of the Item associated with this warning. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "bank_income": [ { "bank_income_id": "dacc92a0-cb59-43a5-ba24-1b1c07a03f28", "bank_income_summary": { "end_date": "2024-08-21", "historical_summary": [ { "end_date": "2024-08-21", "iso_currency_code": "USD", "start_date": "2024-08-06", "total_amount": 4090.14, "total_amounts": [ { "amount": 4090.14, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "amount": 120.12, "check_number": null, "date": "2024-08-07", "iso_currency_code": "USD", "name": "TEXAS OAG CHILD SUPPORT", "original_description": "TEXAS OAG CHILD SUPPORT", "transaction_id": "EZMmvwREqlSGmlRam7bzFKyBll3kJjU4xKm1w", "unofficial_currency_code": null }, { "amount": 1525, "check_number": null, "date": "2024-08-08", "iso_currency_code": "USD", "name": "AIRBNB PAYMENTS PPD ID: 1234567890", "original_description": "AIRBNB PAYMENTS PPD ID: 1234567890", "transaction_id": "Wr6jzLwg1qs6ag9Xa8BrCpBAPPxnEXF6ZmjDR", "unofficial_currency_code": null }, { "amount": 500, "check_number": null, "date": "2024-08-12", "iso_currency_code": "USD", "name": "TWC-BENEFITS/UI BENEFIT", "original_description": "TWC-BENEFITS/UI BENEFIT", "transaction_id": "Aj7Apx5bDyIA3VRl35yqC18wXXorBgI9rX5dp", "unofficial_currency_code": null }, { "amount": 1000.7, "check_number": null, "date": "2024-08-15", "iso_currency_code": "USD", "name": "PLAID PAYROLL", "original_description": "PLAID PAYROLL", "transaction_id": "G1L9oybBrKSMPmBdPzXoFN8aGGE7gXC6MeoQB", "unofficial_currency_code": null }, { "amount": 824.2, "check_number": null, "date": "2024-08-15", "iso_currency_code": "USD", "name": "SSI TREAS 310 XXSUPP SEC PPD ID: 1234567890", "original_description": "SSI TREAS 310 XXSUPP SEC PPD ID: 1234567890", "transaction_id": "nWLlwMm1qxi8DomvDXP3FaGjXX5bm9TAlyQnk", "unofficial_currency_code": null }, { "amount": 120.12, "check_number": null, "date": "2024-08-21", "iso_currency_code": "USD", "name": "TEXAS OAG CHILD SUPPORT", "original_description": "TEXAS OAG CHILD SUPPORT", "transaction_id": "b7dkg6eQbPFQeRvVeZlxcqxZooa7nWSmb47dj", "unofficial_currency_code": null } ], "unofficial_currency_code": null } ], "income_categories_count": 5, "income_sources_count": 5, "income_transactions_count": 6, "iso_currency_code": "USD", "start_date": "2024-08-07", "total_amount": 4090.14, "total_amounts": [ { "amount": 4090.14, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "unofficial_currency_code": null }, "days_requested": 15, "generated_time": "2024-08-21T18:10:46.293199Z", "items": [ { "bank_income_accounts": [ { "account_id": "G1L9oybBrKSMPmBdPzXoFN8oo16rqqC6PwkA5", "mask": "9217", "name": "Checking", "official_name": "Plaid checking", "owners": [ { "addresses": [], "emails": [], "names": [ "Jane Doe" ], "phone_numbers": [] } ], "subtype": "checking", "type": "depository" } ], "bank_income_sources": [ { "account_id": "G1L9oybBrKSMPmBdPzXoFN8oo16rqqC6PwkA5", "end_date": "2024-08-15", "historical_summary": [ { "end_date": "2024-08-21", "iso_currency_code": "USD", "start_date": "2024-08-06", "total_amount": 1000.7, "total_amounts": [ { "amount": 1000.7, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "amount": 1000.7, "check_number": null, "date": "2024-08-15", "iso_currency_code": "USD", "name": "PLAID PAYROLL", "original_description": "PLAID PAYROLL", "transaction_id": "G1L9oybBrKSMPmBdPzXoFN8aGGE7gXC6MeoQB", "unofficial_currency_code": null } ], "unofficial_currency_code": null } ], "income_category": "SALARY", "income_description": "PLAID PAYROLL", "income_source_id": "0e9d6fbc-29de-4225-9843-2f71e02a54d1", "pay_frequency": "UNKNOWN", "start_date": "2024-08-15", "total_amount": 1000.7, "transaction_count": 1 }, { "account_id": "G1L9oybBrKSMPmBdPzXoFN8oo16rqqC6PwkA5", "end_date": "2024-08-15", "historical_summary": [ { "end_date": "2024-08-21", "iso_currency_code": "USD", "start_date": "2024-08-06", "total_amount": 824.2, "total_amounts": [ { "amount": 824.2, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "amount": 824.2, "check_number": null, "date": "2024-08-15", "iso_currency_code": "USD", "name": "SSI TREAS 310 XXSUPP SEC PPD ID: 1234567890", "original_description": "SSI TREAS 310 XXSUPP SEC PPD ID: 1234567890", "transaction_id": "nWLlwMm1qxi8DomvDXP3FaGjXX5bm9TAlyQnk", "unofficial_currency_code": null } ], "unofficial_currency_code": null } ], "income_category": "LONG_TERM_DISABILITY", "income_description": "SSI TREAS 310 XXSUPP SEC PPD ID: 1234567890", "income_source_id": "88bc00d8-2bb1-42d0-a054-db3f20948283", "pay_frequency": "UNKNOWN", "start_date": "2024-08-15", "total_amount": 824.2, "transaction_count": 1 }, { "account_id": "G1L9oybBrKSMPmBdPzXoFN8oo16rqqC6PwkA5", "end_date": "2024-08-08", "historical_summary": [ { "end_date": "2024-08-21", "iso_currency_code": "USD", "start_date": "2024-08-06", "total_amount": 1525, "total_amounts": [ { "amount": 1525, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "amount": 1525, "check_number": null, "date": "2024-08-08", "iso_currency_code": "USD", "name": "AIRBNB PAYMENTS PPD ID: 1234567890", "original_description": "AIRBNB PAYMENTS PPD ID: 1234567890", "transaction_id": "Wr6jzLwg1qs6ag9Xa8BrCpBAPPxnEXF6ZmjDR", "unofficial_currency_code": null } ], "unofficial_currency_code": null } ], "income_category": "RENTAL", "income_description": "AIRBNB PAYMENTS PPD ID: 1234567890", "income_source_id": "063689af-7299-4327-b71f-9d8849a40c0e", "pay_frequency": "UNKNOWN", "start_date": "2024-08-08", "total_amount": 1525, "transaction_count": 1 }, { "account_id": "G1L9oybBrKSMPmBdPzXoFN8oo16rqqC6PwkA5", "end_date": "2024-08-12", "historical_summary": [ { "end_date": "2024-08-21", "iso_currency_code": "USD", "start_date": "2024-08-06", "total_amount": 500, "total_amounts": [ { "amount": 500, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "amount": 500, "check_number": null, "date": "2024-08-12", "iso_currency_code": "USD", "name": "TWC-BENEFITS/UI BENEFIT", "original_description": "TWC-BENEFITS/UI BENEFIT", "transaction_id": "Aj7Apx5bDyIA3VRl35yqC18wXXorBgI9rX5dp", "unofficial_currency_code": null } ], "unofficial_currency_code": null } ], "income_category": "UNEMPLOYMENT", "income_description": "TWC-BENEFITS/UI BENEFIT", "income_source_id": "ce160170-49d0-4811-b58e-cb4878d05f83", "pay_frequency": "UNKNOWN", "start_date": "2024-08-12", "total_amount": 500, "transaction_count": 1 }, { "account_id": "G1L9oybBrKSMPmBdPzXoFN8oo16rqqC6PwkA5", "end_date": "2024-08-21", "historical_summary": [ { "end_date": "2024-08-21", "iso_currency_code": "USD", "start_date": "2024-08-06", "total_amount": 240.24, "total_amounts": [ { "amount": 240.24, "iso_currency_code": "USD", "unofficial_currency_code": null } ], "transactions": [ { "amount": 120.12, "check_number": null, "date": "2024-08-07", "iso_currency_code": "USD", "name": "TEXAS OAG CHILD SUPPORT", "original_description": "TEXAS OAG CHILD SUPPORT", "transaction_id": "EZMmvwREqlSGmlRam7bzFKyBll3kJjU4xKm1w", "unofficial_currency_code": null }, { "amount": 120.12, "check_number": null, "date": "2024-08-21", "iso_currency_code": "USD", "name": "TEXAS OAG CHILD SUPPORT", "original_description": "TEXAS OAG CHILD SUPPORT", "transaction_id": "b7dkg6eQbPFQeRvVeZlxcqxZooa7nWSmb47dj", "unofficial_currency_code": null } ], "unofficial_currency_code": null } ], "income_category": "CHILD_SUPPORT", "income_description": "TEXAS OAG CHILD SUPPORT", "income_source_id": "c8e1576e-9de4-47b4-ad55-3f7b068cc863", "pay_frequency": "UNKNOWN", "start_date": "2024-08-07", "total_amount": 240.24, "transaction_count": 2 } ], "institution_id": "ins_20", "institution_name": "Citizens Bank", "item_id": "L8EKo4GydxSKmJQGmXyPuDkeNn4rg9fP3MKLv", "last_updated_time": "2024-08-21T18:10:47.367335Z" } ] } ], "request_id": "MLM1fFu4fbVg7KR" } ``` \=\*=\*=\*= #### /credit/bank\_income/pdf/get  #### Retrieve information from the bank accounts used for income verification in PDF format  [/credit/bank\_income/pdf/get](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomepdfget) returns the most recent bank income report for a specified user in PDF format. A single report corresponds to all institutions linked in a single Link session. To include multiple institutions in a single report, use [Multi-Item Link](https://plaid.com/docs/link/multi-item-link/index.html.md) . #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. /credit/bank\_income/pdf/get Node▼ ```javascript const request: CreditBankIncomePDFGetRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', }; try { const response = await client.creditBankIncomePdfGet(request, { responseType: 'arraybuffer', }); const pdf = response.buffer.toString('base64'); } catch (error) { // handle error } ``` ##### Response  This endpoint returns binary PDF data. [View a sample Bank Income PDF.](https://plaid.com/documents/sample-bank-income.pdf) \=\*=\*=\*= #### /credit/bank\_income/refresh  #### Refresh a user's bank income information  [/credit/bank\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomerefresh) refreshes the most recent bank income report data for a specific user. If the most recent bank income report is no longer valid (i.e. deleted), the endpoint will refresh the most recent valid report instead. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. **options** (object) An optional object for /credit/bank\_income/refresh request options. **options->days\_requested** (integer) How many days of data to include in the refresh. If not specified, this will default to the days requested in the most recently generated bank income report for the user. /credit/bank\_income/refresh Node▼ ```javascript const request: CreditBankIncomeRefreshRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', options: { days_requested: 120, }, }; try { const response = await client.creditBankIncomeRefresh(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "LhQf0THi8SH1yJm" } ``` \=\*=\*=\*= #### /credit/bank\_statements/uploads/get  #### Retrieve data for a user's uploaded bank statements  [/credit/bank\_statements/uploads/get](https://plaid.com/docs/api/products/income/index.html.md#creditbank_statementsuploadsget) returns parsed data from bank statements uploaded by users as part of the Document Income flow. If your account is not enabled for Document Parsing, contact your account manager to request access. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. **options** (object) An optional object for /credit/bank\_statements/uploads/get request options. **options->item\_ids** (\[string\]) An array of item\_ids whose bank statements information is returned. Each item\_id should uniquely identify a bank statements uploaded item. If this field is not provided, all item\_ids associated with the user\_token will returned in the response. /credit/bank\_statements/uploads/get Node▼ ```javascript const request: CreditBankStatementsUploadsGetRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', }; try { const response = await client.creditBankStatementsUploadsGet(request); } catch (error) { // handle error } ``` #### Response fields  **items** (\[object\]) Array of bank statement upload items. **items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **items->bank\_statements** (\[object\]) An array of transactions appearing on the bank statement. nullable, number **items->bank\_statements->transactions** (\[object\]) The value of the transaction. A negative amount indicates that money moved into the account (such as a paycheck being deposited). **items->bank\_statements->transactions->date** (nullable, string) The date of when the transaction was made, in ISO 8601 format (YYYY-MM-DD). Format: date **items->bank\_statements->transactions->original\_description** (nullable, string) The raw description of the transaction as it appears on the bank statement. **items->bank\_statements->transactions->account\_id** (nullable, string) The unique id of the bank account that this transaction occurs in **items->bank\_statements->document\_metadata** (object) Object representing metadata pertaining to the document. **items->bank\_statements->document\_metadata->name** (string) The name of the document. **items->bank\_statements->document\_metadata->document\_type** (nullable, string) The type of document. PAYSTUB: A paystub. BANK\_STATEMENT: A bank statement. US\_TAX\_W2: A W-2 wage and tax statement provided by a US employer reflecting wages earned by the employee. US\_MILITARY\_ERAS: An electronic Retirement Account Statement (eRAS) issued by the US military. US\_MILITARY\_LES: A Leave and Earnings Statement (LES) issued by the US military. US\_MILITARY\_CLES: A Civilian Leave and Earnings Statement (CLES) issued by the US military. GIG: Used to indicate that the income is related to gig work. Does not necessarily correspond to a specific document type. PLAID\_GENERATED\_PAYSTUB\_PDF: Used to indicate that the PDF for the paystub was generated by Plaid. NONE: Used to indicate that there is no underlying document for the data. UNKNOWN: Document type could not be determined. Possible values: UNKNOWN, PAYSTUB, BANK\_STATEMENT, US\_TAX\_W2, US\_MILITARY\_ERAS, US\_MILITARY\_LES, US\_MILITARY\_CLES, GIG, PLAID\_GENERATED\_PAYSTUB\_PDF, NONE **items->bank\_statements->document\_metadata->download\_url** (nullable, string) Signed URL to retrieve the document(s). The payload will be a .zip file containing the document(s). For Payroll Income, the file type of the documents will always be PDF, and the documents may not be available, in which case the field will be null. If you would like Plaid to generate a PDF if the original is not available, contact your Account Manager. Example generated pay stub. For Document Income, this field will not be null, and the file type of the underlying document(s) will be the original file type uploaded by the user. For more details on available file types, see the Document Income documentation. This download URL can only be used once and expires after two minutes. To generate a new download URL, call /credit/payroll\_income/get again. **items->bank\_statements->document\_metadata->status** (nullable, string) The processing status of the document. PROCESSING\_COMPLETE: The document was successfully processed. DOCUMENT\_ERROR: The document could not be processed. Possible causes include: The document was an unacceptable document type such as an offer letter or bank statement, the document image was cropped or blurry, or the document was corrupted. UNKNOWN or null: An internal error occurred. If this happens repeatedly, contact support or your Plaid account manager. Possible values: UNKNOWN, PROCESSING\_COMPLETE, DOCUMENT\_ERROR, null **items->bank\_statements->document\_metadata->page\_count** (nullable, integer) The number of pages of the uploaded document (if available). **items->bank\_statements->document\_metadata->error\_message** (nullable, string) The reason why a failure occurred during document processing (if available). **items->bank\_statements->document\_id** (nullable, string) An identifier of the document referenced by the document metadata. **items->bank\_statements->bank\_accounts** (\[object\]) An array of bank accounts associated with the uploaded bank statement. **items->bank\_statements->bank\_accounts->name** (nullable, string) The name of the bank account **items->bank\_statements->bank\_accounts->bank\_name** (nullable, string) The name of the bank institution. **items->bank\_statements->bank\_accounts->account\_type** (nullable, string) The type of the bank account. **items->bank\_statements->bank\_accounts->account\_number** (nullable, string) The bank account number. **items->bank\_statements->bank\_accounts->owner** (object) An object containing data about the owner of the bank account for the uploaded bank statement. **items->bank\_statements->bank\_accounts->owner->name** (nullable, string) The name of the account owner **items->bank\_statements->bank\_accounts->owner->address** (object) Address on the uploaded bank statement **items->bank\_statements->bank\_accounts->owner->address->city** (nullable, string) The full city name. **items->bank\_statements->bank\_accounts->owner->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->bank\_statements->bank\_accounts->owner->address->postal\_code** (nullable, string) The postal code of the address. **items->bank\_statements->bank\_accounts->owner->address->region** (nullable, string) The region or state. Example: "NC" **items->bank\_statements->bank\_accounts->owner->address->street** (nullable, string) The full street address. **items->bank\_statements->bank\_accounts->periods** (\[object\]) An array of period objects, containing more data on the overall period of the statement. **items->bank\_statements->bank\_accounts->periods->start\_date** (nullable, string) The start date of the statement period in ISO 8601 format (YYYY-MM-DD). Format: date **items->bank\_statements->bank\_accounts->periods->end\_date** (nullable, string) The end date of the statement period in ISO 8601 format (YYYY-MM-DD). Format: date **items->bank\_statements->bank\_accounts->periods->starting\_balance** (nullable, number) The starting balance of the bank account for the period. **items->bank\_statements->bank\_accounts->periods->ending\_balance** (nullable, number) The ending balance of the bank account for the period. **items->bank\_statements->bank\_accounts->account\_id** (nullable, string) The unique id of the bank account **items->status** (nullable, object) Details about the status of the payroll item. **items->status->processing\_status** (nullable, string) Denotes the processing status for the verification. UNKNOWN: The processing status could not be determined. PROCESSING\_COMPLETE: The processing has completed and the user has approved for sharing. The data is available to be retrieved. PROCESSING: The verification is still processing. The data is not available yet. FAILED: The processing failed to complete successfully. APPROVAL\_STATUS\_PENDING: The processing has completed but the user has not yet approved the sharing of the data. Possible values: UNKNOWN, PROCESSING\_COMPLETE, PROCESSING, FAILED, APPROVAL\_STATUS\_PENDING **items->updated\_at** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time that the Item was updated. 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. Response Object ```json { "items": [ { "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "bank_statements": [ { "transactions": [ { "amount": -1000, "date": "2023-01-01", "original_description": "PAYCHECK", "account_id": "c6778d3f-e44c-4348-874e-71507c1ac12d" } ], "document_metadata": { "document_type": "BANK_STATEMENT", "name": "statement_01.pdf", "status": "PROCESSING_COMPLETE", "download_url": null, "page_count": 2 }, "document_id": "2jkflanbd", "bank_accounts": [ { "name": "CHASE CHECKING", "bank_name": "CHASE", "account_type": "CHECKING", "account_number": "000009752", "account_id": "c6778d3f-e44c-4348-874e-71507c1ac12d", "owner": { "name": "JANE DOE", "address": { "postal_code": "94133", "country": "US", "region": "CA", "city": "SAN FRANCISCO", "street": "2140 TAYLOR ST" } }, "periods": [ { "start_date": "2023-01-01", "end_date": "2023-02-01", "starting_balance": 2500, "ending_balance": 3500 } ] } ] } ], "status": { "processing_status": "PROCESSING_COMPLETE" }, "updated_at": "2023-02-01T21:14:54Z" } ], "request_id": "LhQf0THi8SH1yJm" } ``` \=\*=\*=\*= #### /credit/payroll\_income/get  #### Retrieve a user's payroll information  This endpoint gets payroll income information for a specific user, either as a result of the user connecting to their payroll provider or uploading a pay related document. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **options** (object) An optional object for /credit/payroll\_income/get request options. **options->item\_ids** (\[string\]) An array of item\_ids whose payroll information is returned. Each item\_id should uniquely identify a payroll income item. If this field is not provided, all item\_ids associated with the user\_token will returned in the response. /credit/payroll\_income/get Node▼ ```javascript const request: CreditPayrollIncomeGetRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', }; try { const response = await client.creditPayrollIncomeGet(request); } catch (error) { // handle error } ``` #### Response fields  **items** (\[object\]) Array of payroll items. **items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **items->institution\_id** (string) The unique identifier of the institution associated with the Item. **items->institution\_name** (string) The name of the institution associated with the Item. nullable, string **items->accounts** (\[object\]) ID of the payroll provider account. **items->accounts->rate\_of\_pay** (object) An object representing the rate at which an individual is paid. **items->accounts->rate\_of\_pay->pay\_rate** (nullable, string) The rate at which an employee is paid. Possible values: ANNUAL, HOURLY, CONTRACT, WEEKLY, BIWEEKLY, MONTHLY, SEMI\_MONTHLY, DAILY, COMMISSION, OTHER, null **items->accounts->rate\_of\_pay->pay\_amount** (nullable, number) The amount at which an employee is paid. Format: double **items->accounts->pay\_frequency** (nullable, string) The frequency at which an individual is paid. Possible values: DAILY, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, CONTRACT, QUARTERLY, SEMI\_ANNUALLY, ANNUALLY, OTHER, null nullable, string **items->payroll\_income** (\[object\]) ID of the payroll provider account. **items->payroll\_income->pay\_stubs** (\[object\]) Array of pay stubs for the user. **items->payroll\_income->pay\_stubs->deductions** (object) An object with the deduction information found on a pay stub. nullable, number **items->payroll\_income->pay\_stubs->deductions->breakdown** (\[object\]) Raw amount of the deduction Format: double **items->payroll\_income->pay\_stubs->deductions->breakdown->description** (nullable, string) Description of the deduction line item **items->payroll\_income->pay\_stubs->deductions->breakdown->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the line item. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->deductions->breakdown->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the line item. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->pay\_stubs->deductions->breakdown->ytd\_amount** (nullable, number) The year-to-date amount of the deduction Format: double **items->payroll\_income->pay\_stubs->deductions->total** (object) An object representing the total deductions for the pay period **items->payroll\_income->pay\_stubs->deductions->total->current\_amount** (nullable, number) Raw amount of the deduction Format: double **items->payroll\_income->pay\_stubs->deductions->total->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the line item. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->deductions->total->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the line item. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->pay\_stubs->deductions->total->ytd\_amount** (nullable, number) The year-to-date total amount of the deductions Format: double **items->payroll\_income->pay\_stubs->document\_id** (nullable, string) An identifier of the document referenced by the document metadata. **items->payroll\_income->pay\_stubs->document\_metadata** (object) Object representing metadata pertaining to the document. **items->payroll\_income->pay\_stubs->document\_metadata->name** (string) The name of the document. **items->payroll\_income->pay\_stubs->document\_metadata->document\_type** (nullable, string) The type of document. PAYSTUB: A paystub. BANK\_STATEMENT: A bank statement. US\_TAX\_W2: A W-2 wage and tax statement provided by a US employer reflecting wages earned by the employee. US\_MILITARY\_ERAS: An electronic Retirement Account Statement (eRAS) issued by the US military. US\_MILITARY\_LES: A Leave and Earnings Statement (LES) issued by the US military. US\_MILITARY\_CLES: A Civilian Leave and Earnings Statement (CLES) issued by the US military. GIG: Used to indicate that the income is related to gig work. Does not necessarily correspond to a specific document type. PLAID\_GENERATED\_PAYSTUB\_PDF: Used to indicate that the PDF for the paystub was generated by Plaid. NONE: Used to indicate that there is no underlying document for the data. UNKNOWN: Document type could not be determined. Possible values: UNKNOWN, PAYSTUB, BANK\_STATEMENT, US\_TAX\_W2, US\_MILITARY\_ERAS, US\_MILITARY\_LES, US\_MILITARY\_CLES, GIG, PLAID\_GENERATED\_PAYSTUB\_PDF, NONE **items->payroll\_income->pay\_stubs->document\_metadata->download\_url** (nullable, string) Signed URL to retrieve the document(s). The payload will be a .zip file containing the document(s). For Payroll Income, the file type of the documents will always be PDF, and the documents may not be available, in which case the field will be null. If you would like Plaid to generate a PDF if the original is not available, contact your Account Manager. Example generated pay stub. For Document Income, this field will not be null, and the file type of the underlying document(s) will be the original file type uploaded by the user. For more details on available file types, see the Document Income documentation. This download URL can only be used once and expires after two minutes. To generate a new download URL, call /credit/payroll\_income/get again. **items->payroll\_income->pay\_stubs->document\_metadata->status** (nullable, string) The processing status of the document. PROCESSING\_COMPLETE: The document was successfully processed. DOCUMENT\_ERROR: The document could not be processed. Possible causes include: The document was an unacceptable document type such as an offer letter or bank statement, the document image was cropped or blurry, or the document was corrupted. UNKNOWN or null: An internal error occurred. If this happens repeatedly, contact support or your Plaid account manager. Possible values: UNKNOWN, PROCESSING\_COMPLETE, DOCUMENT\_ERROR, null **items->payroll\_income->pay\_stubs->document\_metadata->page\_count** (nullable, integer) The number of pages of the uploaded document (if available). **items->payroll\_income->pay\_stubs->document\_metadata->error\_message** (nullable, string) The reason why a failure occurred during document processing (if available). **items->payroll\_income->pay\_stubs->earnings** (object) An object representing both a breakdown of earnings on a pay stub and the total earnings. nullable, string **items->payroll\_income->pay\_stubs->earnings->breakdown** (\[object\]) Commonly used term to describe the earning line item. Possible values: BONUS, COMMISSION, OVERTIME, PAID\_TIME\_OFF, REGULAR\_PAY, VACATION, BASIC\_ALLOWANCE\_HOUSING, BASIC\_ALLOWANCE\_SUBSISTENCE, OTHER, ALLOWANCE, BEREAVEMENT, HOLIDAY\_PAY, JURY\_DUTY, LEAVE, LONG\_TERM\_DISABILITY\_PAY, MILITARY\_PAY, PER\_DIEM, REFERRAL\_BONUS, REIMBURSEMENTS, RETENTION\_BONUS, RETROACTIVE\_PAY, SEVERANCE\_PAY, SHIFT\_DIFFERENTIAL, SHORT\_TERM\_DISABILITY\_PAY, SICK\_PAY, SIGNING\_BONUS, TIPS\_INCOME, RETIREMENT, GIG\_ECONOMY, STOCK\_COMPENSATION, null **items->payroll\_income->pay\_stubs->earnings->breakdown->current\_amount** (nullable, number) Raw amount of the earning line item. Format: double **items->payroll\_income->pay\_stubs->earnings->breakdown->description** (nullable, string) Description of the earning line item. **items->payroll\_income->pay\_stubs->earnings->breakdown->hours** (nullable, number) Number of hours applicable for this earning. **items->payroll\_income->pay\_stubs->earnings->breakdown->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the line item. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->earnings->breakdown->rate** (nullable, number) Hourly rate applicable for this earning. Format: double **items->payroll\_income->pay\_stubs->earnings->breakdown->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the line item. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->pay\_stubs->earnings->breakdown->ytd\_amount** (nullable, number) The year-to-date amount of the deduction. Format: double **items->payroll\_income->pay\_stubs->earnings->total** (object) An object representing both the current pay period and year to date amount for an earning category. **items->payroll\_income->pay\_stubs->earnings->total->current\_amount** (nullable, number) Total amount of the earnings for this pay period. Format: double **items->payroll\_income->pay\_stubs->earnings->total->hours** (nullable, number) Total number of hours worked for this pay period. **items->payroll\_income->pay\_stubs->earnings->total->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the line item. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->earnings->total->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the security. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->pay\_stubs->earnings->total->ytd\_amount** (nullable, number) The total year-to-date amount of the earnings. Format: double **items->payroll\_income->pay\_stubs->employee** (object) Data about the employee. **items->payroll\_income->pay\_stubs->employee->address** (object) Address on the pay stub. **items->payroll\_income->pay\_stubs->employee->address->city** (nullable, string) The full city name. **items->payroll\_income->pay\_stubs->employee->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->pay\_stubs->employee->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->pay\_stubs->employee->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->pay\_stubs->employee->address->street** (nullable, string) The full street address. **items->payroll\_income->pay\_stubs->employee->name** (nullable, string) The name of the employee. **items->payroll\_income->pay\_stubs->employee->marital\_status** (nullable, string) Marital status of the employee - either SINGLE or MARRIED or NOT LISTED. Possible values: SINGLE, MARRIED, NOT LISTED, null **items->payroll\_income->pay\_stubs->employee->taxpayer\_id** (object) Taxpayer ID of the individual receiving the paystub. **items->payroll\_income->pay\_stubs->employee->taxpayer\_id->id\_type** (nullable, string) Type of ID, e.g. 'SSN'. **items->payroll\_income->pay\_stubs->employee->taxpayer\_id->id\_mask** (nullable, string) ID mask; i.e. last 4 digits of the taxpayer ID. **items->payroll\_income->pay\_stubs->employer** (object) Information about the employer on the pay stub. **items->payroll\_income->pay\_stubs->employer->address** (object) Address on the pay stub. **items->payroll\_income->pay\_stubs->employer->address->city** (nullable, string) The full city name. **items->payroll\_income->pay\_stubs->employer->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->pay\_stubs->employer->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->pay\_stubs->employer->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->pay\_stubs->employer->address->street** (nullable, string) The full street address. **items->payroll\_income->pay\_stubs->employer->name** (nullable, string) The name of the employer on the pay stub. **items->payroll\_income->pay\_stubs->net\_pay** (object) An object representing information about the net pay amount on the pay stub. **items->payroll\_income->pay\_stubs->net\_pay->current\_amount** (nullable, number) Raw amount of the net pay for the pay period. Format: double **items->payroll\_income->pay\_stubs->net\_pay->description** (nullable, string) Description of the net pay. **items->payroll\_income->pay\_stubs->net\_pay->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the net pay. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->net\_pay->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the net pay. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->pay\_stubs->net\_pay->ytd\_amount** (nullable, number) The year-to-date amount of the net pay. Format: double **items->payroll\_income->pay\_stubs->pay\_period\_details** (object) Details about the pay period. **items->payroll\_income->pay\_stubs->pay\_period\_details->pay\_amount** (nullable, number) The amount of the paycheck. Format: double nullable, string **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown** (\[object\]) Name of the account for the given distribution. **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown->bank\_name** (nullable, string) The name of the bank that the payment is being deposited to. **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown->current\_amount** (nullable, number) The amount distributed to this account. Format: double **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the net pay. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown->mask** (nullable, string) The last 2-4 alphanumeric characters of an account's official account number. **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown->type** (nullable, string) Type of the account that the paystub was sent to (e.g. 'checking'). **items->payroll\_income->pay\_stubs->pay\_period\_details->distribution\_breakdown->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the net pay. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->pay\_stubs->pay\_period\_details->end\_date** (nullable, string) The date on which the pay period ended, in ISO 8601 format ("yyyy-mm-dd"). Format: date **items->payroll\_income->pay\_stubs->pay\_period\_details->gross\_earnings** (nullable, number) Total earnings before tax/deductions. Format: double **items->payroll\_income->pay\_stubs->pay\_period\_details->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the net pay. Always null if unofficial\_currency\_code is non-null. **items->payroll\_income->pay\_stubs->pay\_period\_details->pay\_date** (nullable, string) The date on which the pay stub was issued, in ISO 8601 format ("yyyy-mm-dd"). Format: date **items->payroll\_income->pay\_stubs->pay\_period\_details->pay\_frequency** (nullable, string) The frequency at which an individual is paid. Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, null **items->payroll\_income->pay\_stubs->pay\_period\_details->pay\_basis** (string) The explicit pay basis on the paystub (if present). Possible values: SALARY, HOURLY, COMMISSION **items->payroll\_income->pay\_stubs->pay\_period\_details->start\_date** (nullable, string) The date on which the pay period started, in ISO 8601 format ("yyyy-mm-dd"). Format: date **items->payroll\_income->pay\_stubs->pay\_period\_details->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the net pay. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **items->payroll\_income->w2s** (\[object\]) Array of tax form W-2s. **items->payroll\_income->w2s->document\_metadata** (object) Object representing metadata pertaining to the document. **items->payroll\_income->w2s->document\_metadata->name** (string) The name of the document. **items->payroll\_income->w2s->document\_metadata->document\_type** (nullable, string) The type of document. PAYSTUB: A paystub. BANK\_STATEMENT: A bank statement. US\_TAX\_W2: A W-2 wage and tax statement provided by a US employer reflecting wages earned by the employee. US\_MILITARY\_ERAS: An electronic Retirement Account Statement (eRAS) issued by the US military. US\_MILITARY\_LES: A Leave and Earnings Statement (LES) issued by the US military. US\_MILITARY\_CLES: A Civilian Leave and Earnings Statement (CLES) issued by the US military. GIG: Used to indicate that the income is related to gig work. Does not necessarily correspond to a specific document type. PLAID\_GENERATED\_PAYSTUB\_PDF: Used to indicate that the PDF for the paystub was generated by Plaid. NONE: Used to indicate that there is no underlying document for the data. UNKNOWN: Document type could not be determined. Possible values: UNKNOWN, PAYSTUB, BANK\_STATEMENT, US\_TAX\_W2, US\_MILITARY\_ERAS, US\_MILITARY\_LES, US\_MILITARY\_CLES, GIG, PLAID\_GENERATED\_PAYSTUB\_PDF, NONE **items->payroll\_income->w2s->document\_metadata->download\_url** (nullable, string) Signed URL to retrieve the document(s). The payload will be a .zip file containing the document(s). For Payroll Income, the file type of the documents will always be PDF, and the documents may not be available, in which case the field will be null. If you would like Plaid to generate a PDF if the original is not available, contact your Account Manager. Example generated pay stub. For Document Income, this field will not be null, and the file type of the underlying document(s) will be the original file type uploaded by the user. For more details on available file types, see the Document Income documentation. This download URL can only be used once and expires after two minutes. To generate a new download URL, call /credit/payroll\_income/get again. **items->payroll\_income->w2s->document\_metadata->status** (nullable, string) The processing status of the document. PROCESSING\_COMPLETE: The document was successfully processed. DOCUMENT\_ERROR: The document could not be processed. Possible causes include: The document was an unacceptable document type such as an offer letter or bank statement, the document image was cropped or blurry, or the document was corrupted. UNKNOWN or null: An internal error occurred. If this happens repeatedly, contact support or your Plaid account manager. Possible values: UNKNOWN, PROCESSING\_COMPLETE, DOCUMENT\_ERROR, null **items->payroll\_income->w2s->document\_metadata->page\_count** (nullable, integer) The number of pages of the uploaded document (if available). **items->payroll\_income->w2s->document\_metadata->error\_message** (nullable, string) The reason why a failure occurred during document processing (if available). **items->payroll\_income->w2s->document\_id** (string) An identifier of the document referenced by the document metadata. **items->payroll\_income->w2s->employer** (object) Information about the employer on the pay stub. **items->payroll\_income->w2s->employer->address** (object) Address on the pay stub. **items->payroll\_income->w2s->employer->address->city** (nullable, string) The full city name. **items->payroll\_income->w2s->employer->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->w2s->employer->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->w2s->employer->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->w2s->employer->address->street** (nullable, string) The full street address. **items->payroll\_income->w2s->employer->name** (nullable, string) The name of the employer on the pay stub. **items->payroll\_income->w2s->employee** (object) Data about the employee. **items->payroll\_income->w2s->employee->address** (object) Address on the pay stub. **items->payroll\_income->w2s->employee->address->city** (nullable, string) The full city name. **items->payroll\_income->w2s->employee->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->w2s->employee->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->w2s->employee->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->w2s->employee->address->street** (nullable, string) The full street address. **items->payroll\_income->w2s->employee->name** (nullable, string) The name of the employee. **items->payroll\_income->w2s->employee->marital\_status** (nullable, string) Marital status of the employee - either SINGLE or MARRIED or NOT LISTED. Possible values: SINGLE, MARRIED, NOT LISTED, null **items->payroll\_income->w2s->employee->taxpayer\_id** (object) Taxpayer ID of the individual receiving the paystub. **items->payroll\_income->w2s->employee->taxpayer\_id->id\_type** (nullable, string) Type of ID, e.g. 'SSN'. **items->payroll\_income->w2s->employee->taxpayer\_id->id\_mask** (nullable, string) ID mask; i.e. last 4 digits of the taxpayer ID. **items->payroll\_income->w2s->tax\_year** (nullable, string) The tax year of the W2 document. **items->payroll\_income->w2s->employer\_id\_number** (nullable, string) An employee identification number or EIN. **items->payroll\_income->w2s->wages\_tips\_other\_comp** (nullable, string) Wages from tips and other compensation. **items->payroll\_income->w2s->federal\_income\_tax\_withheld** (nullable, string) Federal income tax withheld for the tax year. **items->payroll\_income->w2s->social\_security\_wages** (nullable, string) Wages from social security. **items->payroll\_income->w2s->social\_security\_tax\_withheld** (nullable, string) Social security tax withheld for the tax year. **items->payroll\_income->w2s->medicare\_wages\_and\_tips** (nullable, string) Wages and tips from medicare. **items->payroll\_income->w2s->medicare\_tax\_withheld** (nullable, string) Medicare tax withheld for the tax year. **items->payroll\_income->w2s->social\_security\_tips** (nullable, string) Tips from social security. **items->payroll\_income->w2s->allocated\_tips** (nullable, string) Allocated tips. **items->payroll\_income->w2s->box\_9** (nullable, string) Contents from box 9 on the W2. **items->payroll\_income->w2s->dependent\_care\_benefits** (nullable, string) Dependent care benefits. **items->payroll\_income->w2s->nonqualified\_plans** (nullable, string) Nonqualified plans. nullable, string **items->payroll\_income->w2s->box\_12** (\[object\]) W2 Box 12 code. **items->payroll\_income->w2s->box\_12->amount** (nullable, string) W2 Box 12 amount. **items->payroll\_income->w2s->statutory\_employee** (nullable, string) Statutory employee. **items->payroll\_income->w2s->retirement\_plan** (nullable, string) Retirement plan. **items->payroll\_income->w2s->third\_party\_sick\_pay** (nullable, string) Third party sick pay. **items->payroll\_income->w2s->other** (nullable, string) Other. nullable, string **items->payroll\_income->w2s->state\_and\_local\_wages** (\[object\]) State associated with the wage. **items->payroll\_income->w2s->state\_and\_local\_wages->employer\_state\_id\_number** (nullable, string) State identification number of the employer. **items->payroll\_income->w2s->state\_and\_local\_wages->state\_wages\_tips** (nullable, string) Wages and tips from the specified state. **items->payroll\_income->w2s->state\_and\_local\_wages->state\_income\_tax** (nullable, string) Income tax from the specified state. **items->payroll\_income->w2s->state\_and\_local\_wages->local\_wages\_tips** (nullable, string) Wages and tips from the locality. **items->payroll\_income->w2s->state\_and\_local\_wages->local\_income\_tax** (nullable, string) Income tax from the locality. **items->payroll\_income->w2s->state\_and\_local\_wages->locality\_name** (nullable, string) Name of the locality. **items->payroll\_income->form1099s** (\[object\]) Array of tax form 1099s. **items->payroll\_income->form1099s->document\_id** (nullable, string) An identifier of the document referenced by the document metadata. **items->payroll\_income->form1099s->document\_metadata** (object) Object representing metadata pertaining to the document. **items->payroll\_income->form1099s->document\_metadata->name** (string) The name of the document. **items->payroll\_income->form1099s->document\_metadata->document\_type** (nullable, string) The type of document. PAYSTUB: A paystub. BANK\_STATEMENT: A bank statement. US\_TAX\_W2: A W-2 wage and tax statement provided by a US employer reflecting wages earned by the employee. US\_MILITARY\_ERAS: An electronic Retirement Account Statement (eRAS) issued by the US military. US\_MILITARY\_LES: A Leave and Earnings Statement (LES) issued by the US military. US\_MILITARY\_CLES: A Civilian Leave and Earnings Statement (CLES) issued by the US military. GIG: Used to indicate that the income is related to gig work. Does not necessarily correspond to a specific document type. PLAID\_GENERATED\_PAYSTUB\_PDF: Used to indicate that the PDF for the paystub was generated by Plaid. NONE: Used to indicate that there is no underlying document for the data. UNKNOWN: Document type could not be determined. Possible values: UNKNOWN, PAYSTUB, BANK\_STATEMENT, US\_TAX\_W2, US\_MILITARY\_ERAS, US\_MILITARY\_LES, US\_MILITARY\_CLES, GIG, PLAID\_GENERATED\_PAYSTUB\_PDF, NONE **items->payroll\_income->form1099s->document\_metadata->download\_url** (nullable, string) Signed URL to retrieve the document(s). The payload will be a .zip file containing the document(s). For Payroll Income, the file type of the documents will always be PDF, and the documents may not be available, in which case the field will be null. If you would like Plaid to generate a PDF if the original is not available, contact your Account Manager. Example generated pay stub. For Document Income, this field will not be null, and the file type of the underlying document(s) will be the original file type uploaded by the user. For more details on available file types, see the Document Income documentation. This download URL can only be used once and expires after two minutes. To generate a new download URL, call /credit/payroll\_income/get again. **items->payroll\_income->form1099s->document\_metadata->status** (nullable, string) The processing status of the document. PROCESSING\_COMPLETE: The document was successfully processed. DOCUMENT\_ERROR: The document could not be processed. Possible causes include: The document was an unacceptable document type such as an offer letter or bank statement, the document image was cropped or blurry, or the document was corrupted. UNKNOWN or null: An internal error occurred. If this happens repeatedly, contact support or your Plaid account manager. Possible values: UNKNOWN, PROCESSING\_COMPLETE, DOCUMENT\_ERROR, null **items->payroll\_income->form1099s->document\_metadata->page\_count** (nullable, integer) The number of pages of the uploaded document (if available). **items->payroll\_income->form1099s->document\_metadata->error\_message** (nullable, string) The reason why a failure occurred during document processing (if available). **items->payroll\_income->form1099s->form\_1099\_type** (string) Form 1099 Type Possible values: FORM\_1099\_TYPE\_UNKNOWN, FORM\_1099\_TYPE\_MISC, FORM\_1099\_TYPE\_K **items->payroll\_income->form1099s->recipient** (object) An object representing a recipient used in both 1099-K and 1099-MISC tax documents. **items->payroll\_income->form1099s->recipient->address** (object) Address on the pay stub. **items->payroll\_income->form1099s->recipient->address->city** (nullable, string) The full city name. **items->payroll\_income->form1099s->recipient->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->form1099s->recipient->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->form1099s->recipient->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->form1099s->recipient->address->street** (nullable, string) The full street address. **items->payroll\_income->form1099s->recipient->name** (nullable, string) Name of recipient. **items->payroll\_income->form1099s->recipient->tin** (nullable, string) Tax identification number of recipient. **items->payroll\_income->form1099s->recipient->account\_number** (nullable, string) Account number number of recipient. **items->payroll\_income->form1099s->recipient->facta\_filing\_requirement** (nullable, string) Checked if FACTA is a filing requirement. Possible values: CHECKED, NOT CHECKED **items->payroll\_income->form1099s->recipient->second\_tin\_exists** (nullable, string) Checked if 2nd TIN exists. Possible values: CHECKED, NOT CHECKED **items->payroll\_income->form1099s->payer** (object) An object representing a payer used by 1099-MISC tax documents. **items->payroll\_income->form1099s->payer->address** (object) Address on the pay stub. **items->payroll\_income->form1099s->payer->address->city** (nullable, string) The full city name. **items->payroll\_income->form1099s->payer->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->form1099s->payer->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->form1099s->payer->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->form1099s->payer->address->street** (nullable, string) The full street address. **items->payroll\_income->form1099s->payer->name** (nullable, string) Name of payer. **items->payroll\_income->form1099s->payer->tin** (nullable, string) Tax identification number of payer. **items->payroll\_income->form1099s->payer->telephone\_number** (nullable, string) Telephone number of payer. **items->payroll\_income->form1099s->filer** (object) An object representing a filer used by 1099-K tax documents. **items->payroll\_income->form1099s->filer->address** (object) Address on the pay stub. **items->payroll\_income->form1099s->filer->address->city** (nullable, string) The full city name. **items->payroll\_income->form1099s->filer->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **items->payroll\_income->form1099s->filer->address->postal\_code** (nullable, string) The postal code of the address. **items->payroll\_income->form1099s->filer->address->region** (nullable, string) The region or state. Example: "NC" **items->payroll\_income->form1099s->filer->address->street** (nullable, string) The full street address. **items->payroll\_income->form1099s->filer->name** (nullable, string) Name of filer. **items->payroll\_income->form1099s->filer->tin** (nullable, string) Tax identification number of filer. **items->payroll\_income->form1099s->filer->type** (nullable, string) One of the following values will be provided: Payment Settlement Entity (PSE), Electronic Payment Facilitator (EPF), Other Third Party Possible values: Payment Settlement Entity (PSE), Electronic Payment Facilitator (EPF), Other Third Party **items->payroll\_income->form1099s->tax\_year** (nullable, string) Tax year of the tax form. **items->payroll\_income->form1099s->rents** (nullable, number) Amount in rent by payer. Format: double **items->payroll\_income->form1099s->royalties** (nullable, number) Amount in royalties by payer. Format: double **items->payroll\_income->form1099s->other\_income** (nullable, number) Amount in other income by payer. Format: double **items->payroll\_income->form1099s->federal\_income\_tax\_withheld** (nullable, number) Amount of federal income tax withheld from payer. Format: double **items->payroll\_income->form1099s->fishing\_boat\_proceeds** (nullable, number) Amount of fishing boat proceeds from payer. Format: double **items->payroll\_income->form1099s->medical\_and\_healthcare\_payments** (nullable, number) Amount of medical and healthcare payments from payer. Format: double **items->payroll\_income->form1099s->nonemployee\_compensation** (nullable, number) Amount of nonemployee compensation from payer. Format: double **items->payroll\_income->form1099s->substitute\_payments\_in\_lieu\_of\_dividends\_or\_interest** (nullable, number) Amount of substitute payments made by payer. Format: double **items->payroll\_income->form1099s->payer\_made\_direct\_sales\_of\_5000\_or\_more\_of\_consumer\_products\_to\_buyer** (nullable, string) Whether or not payer made direct sales over $5000 of consumer products. **items->payroll\_income->form1099s->crop\_insurance\_proceeds** (nullable, number) Amount of crop insurance proceeds. Format: double **items->payroll\_income->form1099s->excess\_golden\_parachute\_payments** (nullable, number) Amount of golden parachute payments made by payer. Format: double **items->payroll\_income->form1099s->gross\_proceeds\_paid\_to\_an\_attorney** (nullable, number) Amount of gross proceeds paid to an attorney by payer. Format: double **items->payroll\_income->form1099s->section\_409a\_deferrals** (nullable, number) Amount of 409A deferrals earned by payer. Format: double **items->payroll\_income->form1099s->section\_409a\_income** (nullable, number) Amount of 409A income earned by payer. Format: double **items->payroll\_income->form1099s->state\_tax\_withheld** (nullable, number) Amount of state tax withheld of payer for primary state. Format: double **items->payroll\_income->form1099s->state\_tax\_withheld\_lower** (nullable, number) Amount of state tax withheld of payer for secondary state. Format: double **items->payroll\_income->form1099s->payer\_state\_number** (nullable, string) Primary state ID. **items->payroll\_income->form1099s->payer\_state\_number\_lower** (nullable, string) Secondary state ID. **items->payroll\_income->form1099s->state\_income** (nullable, number) State income reported for primary state. Format: double **items->payroll\_income->form1099s->state\_income\_lower** (nullable, number) State income reported for secondary state. Format: double **items->payroll\_income->form1099s->transactions\_reported** (nullable, string) One of the values will be provided Payment card Third party network Possible values: Payment card, Third party network **items->payroll\_income->form1099s->pse\_name** (nullable, string) Name of the PSE (Payment Settlement Entity). **items->payroll\_income->form1099s->pse\_telephone\_number** (nullable, string) Formatted (XXX) XXX-XXXX. Phone number of the PSE (Payment Settlement Entity). **items->payroll\_income->form1099s->gross\_amount** (nullable, number) Gross amount reported. Format: double **items->payroll\_income->form1099s->card\_not\_present\_transaction** (nullable, number) Amount in card not present transactions. Format: double **items->payroll\_income->form1099s->merchant\_category\_code** (nullable, string) Merchant category of filer. **items->payroll\_income->form1099s->number\_of\_payment\_transactions** (nullable, string) Number of payment transactions made. **items->payroll\_income->form1099s->january\_amount** (nullable, number) Amount reported for January. Format: double **items->payroll\_income->form1099s->february\_amount** (nullable, number) Amount reported for February. Format: double **items->payroll\_income->form1099s->march\_amount** (nullable, number) Amount reported for March. Format: double **items->payroll\_income->form1099s->april\_amount** (nullable, number) Amount reported for April. Format: double **items->payroll\_income->form1099s->may\_amount** (nullable, number) Amount reported for May. Format: double **items->payroll\_income->form1099s->june\_amount** (nullable, number) Amount reported for June. Format: double **items->payroll\_income->form1099s->july\_amount** (nullable, number) Amount reported for July. Format: double **items->payroll\_income->form1099s->august\_amount** (nullable, number) Amount reported for August. Format: double **items->payroll\_income->form1099s->september\_amount** (nullable, number) Amount reported for September. Format: double **items->payroll\_income->form1099s->october\_amount** (nullable, number) Amount reported for October. Format: double **items->payroll\_income->form1099s->november\_amount** (nullable, number) Amount reported for November. Format: double **items->payroll\_income->form1099s->december\_amount** (nullable, number) Amount reported for December. Format: double **items->payroll\_income->form1099s->primary\_state** (nullable, string) Primary state of business. **items->payroll\_income->form1099s->secondary\_state** (nullable, string) Secondary state of business. **items->payroll\_income->form1099s->primary\_state\_id** (nullable, string) Primary state ID. **items->payroll\_income->form1099s->secondary\_state\_id** (nullable, string) Secondary state ID. **items->payroll\_income->form1099s->primary\_state\_income\_tax** (nullable, number) State income tax reported for primary state. Format: double **items->payroll\_income->form1099s->secondary\_state\_income\_tax** (nullable, number) State income tax reported for secondary state. Format: double **items->status** (nullable, object) Details about the status of the payroll item. **items->status->processing\_status** (nullable, string) Denotes the processing status for the verification. UNKNOWN: The processing status could not be determined. PROCESSING\_COMPLETE: The processing has completed and the user has approved for sharing. The data is available to be retrieved. PROCESSING: The verification is still processing. The data is not available yet. FAILED: The processing failed to complete successfully. APPROVAL\_STATUS\_PENDING: The processing has completed but the user has not yet approved the sharing of the data. Possible values: UNKNOWN, PROCESSING\_COMPLETE, PROCESSING, FAILED, APPROVAL\_STATUS\_PENDING **items->updated\_at** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time that the Item was updated. Format: date-time **error** (nullable, object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (nullable, string) 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. **error->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. **error->causes** (array) 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. **error->status** (nullable, integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (nullable, string) Suggested steps for resolving the error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "items": [ { "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "institution_id": "ins_92", "institution_name": "ADP", "accounts": [ { "account_id": "GeooLPBGDEunl54q7N3ZcyD5aLPLEai1nkzM9", "rate_of_pay": { "pay_amount": 100000, "pay_rate": "ANNUAL" }, "pay_frequency": "BIWEEKLY" } ], "payroll_income": [ { "account_id": "GeooLPBGDEunl54q7N3ZcyD5aLPLEai1nkzM9", "pay_stubs": [ { "deductions": { "breakdown": [ { "current_amount": 123.45, "description": "taxes", "iso_currency_code": "USD", "unofficial_currency_code": null, "ytd_amount": 246.9 } ], "total": { "current_amount": 123.45, "iso_currency_code": "USD", "unofficial_currency_code": null, "ytd_amount": 246.9 } }, "document_metadata": { "document_type": "PAYSTUB", "name": "paystub.pdf", "status": "PROCESSING_COMPLETE", "download_url": null }, "document_id": "2jkflanbd", "earnings": { "breakdown": [ { "canonical_description": "REGULAR_PAY", "current_amount": 200.22, "description": "salary earned", "hours": 80, "iso_currency_code": "USD", "rate": null, "unofficial_currency_code": null, "ytd_amount": 400.44 }, { "canonical_description": "BONUS", "current_amount": 100, "description": "bonus earned", "hours": null, "iso_currency_code": "USD", "rate": null, "unofficial_currency_code": null, "ytd_amount": 100 } ], "total": { "current_amount": 300.22, "hours": 160, "iso_currency_code": "USD", "unofficial_currency_code": null, "ytd_amount": 500.44 } }, "employee": { "address": { "city": "SAN FRANCISCO", "country": "US", "postal_code": "94133", "region": "CA", "street": "2140 TAYLOR ST" }, "name": "ANNA CHARLESTON", "marital_status": "SINGLE", "taxpayer_id": { "id_type": "SSN", "id_mask": "3333" } }, "employer": { "name": "PLAID INC", "address": { "city": "SAN FRANCISCO", "country": "US", "postal_code": "94111", "region": "CA", "street": "1098 HARRISON ST" } }, "net_pay": { "current_amount": 123.34, "description": "TOTAL NET PAY", "iso_currency_code": "USD", "unofficial_currency_code": null, "ytd_amount": 253.54 }, "pay_period_details": { "distribution_breakdown": [ { "account_name": "Big time checking", "bank_name": "bank of plaid", "current_amount": 176.77, "iso_currency_code": "USD", "mask": "1223", "type": "checking", "unofficial_currency_code": null } ], "end_date": "2020-12-15", "gross_earnings": 4500, "iso_currency_code": "USD", "pay_amount": 1490.21, "pay_date": "2020-12-15", "pay_frequency": "BIWEEKLY", "start_date": "2020-12-01", "unofficial_currency_code": null } } ], "w2s": [ { "allocated_tips": "1000", "box_12": [ { "amount": "200", "code": "AA" } ], "box_9": "box9", "dependent_care_benefits": "1000", "document_metadata": { "document_type": "US_TAX_W2", "download_url": null, "name": "w_2.pdf", "status": "PROCESSING_COMPLETE" }, "document_id": "1pkflebk4", "employee": { "address": { "city": "San Francisco", "country": "US", "postal_code": "94103", "region": "CA", "street": "1234 Grand St" }, "name": "Josie Georgia Harrison", "marital_status": "SINGLE", "taxpayer_id": { "id_type": "SSN", "id_mask": "1234" } }, "employer": { "address": { "city": "New York", "country": "US", "postal_code": "10010", "region": "NY", "street": "456 Main St" }, "name": "Acme Inc" }, "employer_id_number": "12-1234567", "federal_income_tax_withheld": "1000", "medicare_tax_withheld": "1000", "medicare_wages_and_tips": "1000", "nonqualified_plans": "1000", "other": "other", "retirement_plan": "CHECKED", "social_security_tax_withheld": "1000", "social_security_tips": "1000", "social_security_wages": "1000", "state_and_local_wages": [ { "employer_state_id_number": "11111111111AAA", "local_income_tax": "200", "local_wages_and_tips": "200", "locality_name": "local", "state": "UT", "state_income_tax": "200", "state_wages_tips": "200" } ], "statutory_employee": "CHECKED", "tax_year": "2020", "third_party_sick_pay": "CHECKED", "wages_tips_other_comp": "1000" } ], "form1099s": [ { "april_amount": null, "august_amount": null, "card_not_present_transaction": null, "crop_insurance_proceeds": 1000, "december_amount": null, "document_id": "mvMZ59Z2a5", "document_metadata": { "document_type": "US_TAX_1099_MISC", "download_url": null, "name": "form_1099_misc.pdf", "status": "PROCESSING_COMPLETE" }, "excess_golden_parachute_payments": 1000, "february_amount": null, "federal_income_tax_withheld": 1000, "filer": { "address": { "city": null, "country": null, "postal_code": null, "region": null, "street": null }, "name": null, "tin": null, "type": null }, "fishing_boat_proceeds": 1000, "form_1099_type": "FORM_1099_TYPE_MISC", "gross_amount": 1000, "gross_proceeds_paid_to_an_attorney": 1000, "january_amount": null, "july_amount": null, "june_amount": null, "march_amount": null, "may_amount": null, "medical_and_healthcare_payments": 1000, "merchant_category_code": null, "nonemployee_compensation": 1000, "november_amount": null, "number_of_payment_transactions": null, "october_amount": null, "other_income": 1000, "payer": { "address": { "city": "SAN FRANCISCO", "country": "US", "postal_code": "94111", "region": "CA", "street": "1098 HARRISON ST" }, "name": "PLAID INC", "telephone_number": "(123)456-7890", "tin": "12-3456789" }, "payer_made_direct_sales_of_500_or_more_of_consumer_products_to_buyer": null, "payer_state_number": "CA 12345", "payer_state_number_lower": null, "primary_state": null, "primary_state_id": "CA 12345", "primary_state_income_tax": 1000, "pse_name": null, "pse_telephone_number": null, "recipient": { "account_number": "45678", "address": { "city": "SAN FRANCISCO", "country": "US", "postal_code": "94133", "region": "CA", "street": "2140 TAYLOR ST" }, "facta_filing_requirement": "CHECKED", "name": "Josie Georgia Harrison", "second_tin_exists": "NOT CHECKED", "tin": "12-3456789" }, "rents": 1000, "royalties": 1000, "secondary_state": null, "secondary_state_id": null, "secondary_state_income_tax": null, "section_409a_deferrals": 1000, "section_409a_income": 1000, "september_amount": null, "state_income": 1000, "state_income_lower": null, "state_tax_withheld": 1000, "state_tax_withheld_lower": null, "substitute_payments_in_lieu_of_dividends_or_interest": null, "tax_year": "2022", "transactions_reported": null } ] } ], "status": { "processing_status": "PROCESSING_COMPLETE" }, "updated_at": "2022-08-02T21:14:54Z" } ], "request_id": "2pxQ59buGdsHRef" } ``` \=\*=\*=\*= #### /credit/payroll\_income/risk\_signals/get  #### Retrieve fraud insights for a user's manually uploaded document(s).  [/credit/payroll\_income/risk\_signals/get](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerisk_signalsget) can be used as part of the Document Income flow to assess a user-uploaded document for signs of potential fraud or tampering. It returns a risk score for each uploaded document that indicates the likelihood of the document being fraudulent, in addition to details on the individual risk signals contributing to the score. To trigger risk signal generation for an Item, call [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) with `parsing_config` set to include `risk_signals`, or call [/credit/payroll\_income/parsing\_config/update](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomeparsing_configupdate) . Once risk signal generation has been triggered, [/credit/payroll\_income/risk\_signals/get](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerisk_signalsget) can be called at any time after the `INCOME_VERIFICATION_RISK_SIGNALS` webhook has been fired. [/credit/payroll\_income/risk\_signals/get](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerisk_signalsget) is offered as an add-on to Document Income and is billed separately. To request access to this endpoint, submit a product access request or contact your Plaid account manager. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. /credit/payroll\_income/risk\_signals/get Node▼ ```javascript const request: CreditPayrollIncomeRiskSignalsGetRequest = { user_token: 'user-sandbox-dd4c42bd-4a81-4089-8146-40671e81dd12', }; try { const response = await client.creditPayrollIncomeRiskSignalsGet(request); } catch (error) { // handle error } ``` #### Response fields  **items** (\[object\]) Array of payroll items. **items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **items->verification\_risk\_signals** (\[object\]) Array of payroll income document authenticity data retrieved for each of the user's accounts. **items->verification\_risk\_signals->account\_id** (nullable, string) ID of the payroll provider account. **items->verification\_risk\_signals->single\_document\_risk\_signals** (\[object\]) Array of document metadata and associated risk signals per document **items->verification\_risk\_signals->single\_document\_risk\_signals->document\_reference** (object) Object containing metadata for the document **items->verification\_risk\_signals->single\_document\_risk\_signals->document\_reference->document\_id** (nullable, string) An identifier of the document referenced by the document metadata. **items->verification\_risk\_signals->single\_document\_risk\_signals->document\_reference->document\_name** (string) The name of the document **items->verification\_risk\_signals->single\_document\_risk\_signals->document\_reference->status** (string) Status of a document for risk signal analysis Possible values: PROCESSING, PROCESSING\_COMPLETE, PROCESSING\_ERROR, PASSWORD\_PROTECTED, VIRUS\_DETECTED **items->verification\_risk\_signals->single\_document\_risk\_signals->document\_reference->document\_type** (nullable, string) Type of a document for risk signal analysis Possible values: UNKNOWN, BANK\_STATEMENT, BENEFITS\_STATEMENT, BUSINESS\_FILING, CHECK, DRIVING\_LICENSE, FINANCIAL\_STATEMENT, INVOICE, PAYSLIP, SOCIAL\_SECURITY\_CARD, TAX\_FORM, UTILITY\_BILL **items->verification\_risk\_signals->single\_document\_risk\_signals->document\_reference->file\_type** (nullable, string) The file type for risk signal analysis Possible values: UNKNOWN, IMAGE\_PDF, SCAN\_OCR, TRUE\_PDF, IMAGE, MIXED\_PAGE\_PDF, EMPTY\_PDF, FLATTENED\_PDF **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals** (\[object\]) Array of attributes that indicate whether or not there is fraud risk with a document **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->type** (nullable, string) The type of risk found in the risk signal check. Possible values: FONT, MASKING, OVERLAID\_TEXT, EDITED\_TEXT, TEXT\_COMPRESSION, ADDRESS\_FORMAT\_ANOMALY, DATE\_FORMAT\_ANOMALY, FONT\_ANOMALY, NAME\_FORMAT\_ANOMALY, PDF\_ALIGNMENT, BRUSH\_DETECTION, METADATA\_DATES\_OUTSIDE\_WINDOW, METADATA\_DATES\_INSIDE\_WINDOW, METADATA\_DATES\_MISSING, METADATA\_DATES\_MATCH, ADOBE\_FONTS, ANNOTATION\_DATES, ANNOTATIONS, EDITED\_WHILE\_SCANNED, EXIF\_DATA\_MODIFIED, HIGH\_USER\_ACCESS, MALFORMED\_DATE, QPDF, TEXT\_LAYER\_TEXT, TOUCHUP\_TEXT, FLATTENED\_PDF, BLACKLISTS, COPYCAT\_IMAGE, COPYCAT\_TEXT, REJECTED\_CUSTOMER, TEMPLATES, SOFTWARE\_BLACKLIST **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->field** (nullable, string) The field which the risk signal was computed for **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->has\_fraud\_risk** (nullable, boolean) A flag used to quickly identify if the signal indicates that this field is authentic or fraudulent **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->institution\_metadata** (nullable, object) An object which contains additional metadata about the institution used to compute the verification attribute **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->institution\_metadata->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->expected\_value** (nullable, string) The expected value of the field, as seen on the document **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->actual\_value** (nullable, string) The derived value obtained in the risk signal calculation process for this field **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->signal\_description** (nullable, string) A human-readable explanation providing more detail into the particular risk signal **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_signals->page\_number** (nullable, integer) The relevant page associated with the risk signal. If the risk signal is not associated with a specific page, the value will be 0. **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_summary** (object) A summary across all risk signals associated with a document **items->verification\_risk\_signals->single\_document\_risk\_signals->risk\_summary->risk\_score** (nullable, number) A number between 0 and 100, inclusive, where a score closer to 0 indicates a document is likely to be trustworthy and a score closer to 100 indicates a document is likely to be fraudulent. You can automatically reject documents with a high risk score, automatically accept documents with a low risk score, and manually review documents in between. We suggest starting with a threshold of 80 for auto-rejection and 20 for auto-acceptance. As you gather more data points on typical risk scores for your use case, you can tune these parameters to reduce the number of documents undergoing manual review. **items->verification\_risk\_signals->multi\_document\_risk\_signals** (\[object\]) Array of risk signals computed from a set of uploaded documents and the associated documents' metadata **items->verification\_risk\_signals->multi\_document\_risk\_signals->document\_references** (\[object\]) Array of objects containing attributes that could indicate if a document is fraudulent **items->verification\_risk\_signals->multi\_document\_risk\_signals->document\_references->document\_id** (nullable, string) An identifier of the document referenced by the document metadata. **items->verification\_risk\_signals->multi\_document\_risk\_signals->document\_references->document\_name** (string) The name of the document **items->verification\_risk\_signals->multi\_document\_risk\_signals->document\_references->status** (string) Status of a document for risk signal analysis Possible values: PROCESSING, PROCESSING\_COMPLETE, PROCESSING\_ERROR, PASSWORD\_PROTECTED, VIRUS\_DETECTED **items->verification\_risk\_signals->multi\_document\_risk\_signals->document\_references->document\_type** (nullable, string) Type of a document for risk signal analysis Possible values: UNKNOWN, BANK\_STATEMENT, BENEFITS\_STATEMENT, BUSINESS\_FILING, CHECK, DRIVING\_LICENSE, FINANCIAL\_STATEMENT, INVOICE, PAYSLIP, SOCIAL\_SECURITY\_CARD, TAX\_FORM, UTILITY\_BILL **items->verification\_risk\_signals->multi\_document\_risk\_signals->document\_references->file\_type** (nullable, string) The file type for risk signal analysis Possible values: UNKNOWN, IMAGE\_PDF, SCAN\_OCR, TRUE\_PDF, IMAGE, MIXED\_PAGE\_PDF, EMPTY\_PDF, FLATTENED\_PDF **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals** (\[object\]) Array of attributes that indicate whether or not there is fraud risk with a set of documents **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->type** (nullable, string) The type of risk found in the risk signal check. Possible values: FONT, MASKING, OVERLAID\_TEXT, EDITED\_TEXT, TEXT\_COMPRESSION, ADDRESS\_FORMAT\_ANOMALY, DATE\_FORMAT\_ANOMALY, FONT\_ANOMALY, NAME\_FORMAT\_ANOMALY, PDF\_ALIGNMENT, BRUSH\_DETECTION, METADATA\_DATES\_OUTSIDE\_WINDOW, METADATA\_DATES\_INSIDE\_WINDOW, METADATA\_DATES\_MISSING, METADATA\_DATES\_MATCH, ADOBE\_FONTS, ANNOTATION\_DATES, ANNOTATIONS, EDITED\_WHILE\_SCANNED, EXIF\_DATA\_MODIFIED, HIGH\_USER\_ACCESS, MALFORMED\_DATE, QPDF, TEXT\_LAYER\_TEXT, TOUCHUP\_TEXT, FLATTENED\_PDF, BLACKLISTS, COPYCAT\_IMAGE, COPYCAT\_TEXT, REJECTED\_CUSTOMER, TEMPLATES, SOFTWARE\_BLACKLIST **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->field** (nullable, string) The field which the risk signal was computed for **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->has\_fraud\_risk** (nullable, boolean) A flag used to quickly identify if the signal indicates that this field is authentic or fraudulent **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->institution\_metadata** (nullable, object) An object which contains additional metadata about the institution used to compute the verification attribute **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->institution\_metadata->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->expected\_value** (nullable, string) The expected value of the field, as seen on the document **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->actual\_value** (nullable, string) The derived value obtained in the risk signal calculation process for this field **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->signal\_description** (nullable, string) A human-readable explanation providing more detail into the particular risk signal **items->verification\_risk\_signals->multi\_document\_risk\_signals->risk\_signals->page\_number** (nullable, integer) The relevant page associated with the risk signal. If the risk signal is not associated with a specific page, the value will be 0. **error** (nullable, object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (nullable, string) 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. **error->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. **error->causes** (array) 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. **error->status** (nullable, integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (nullable, string) Suggested steps for resolving the error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "items": [ { "item_id": "testItemID", "verification_risk_signals": [ { "account_id": null, "multi_document_risk_signals": [], "single_document_risk_signals": [ { "document_reference": { "document_id": "lRepoQjxlJ1nz", "document_name": "Paystub.pdf", "file_type": "TRUE_PDF" }, "risk_summary": { "risk_score": 70 }, "risk_signals": [ { "actual_value": "0.00", "expected_value": "25.09", "field": null, "signal_description": null, "has_fraud_risk": true, "type": "MASKING", "page_number": 1, "institution_metadata": { "item_id": "testItemID" } }, { "actual_value": null, "expected_value": null, "field": null, "signal_description": "Creation date and modification date do not match", "has_fraud_risk": true, "institution_metadata": null, "type": "METADATA_DATES_OUTSIDE_WINDOW", "page_number": 0 } ] } ] } ] } ], "request_id": "LhQf0THi8SH1yJm" } ``` \=\*=\*=\*= #### /credit/employment/get  #### Retrieve a summary of an individual's employment information  [/credit/employment/get](https://plaid.com/docs/api/products/income/index.html.md#creditemploymentget) returns a list of items with employment information from a user's payroll provider that was verified by an end user. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. /credit/employment/get Node▼ ```javascript const request: CreditEmploymentGetRequest = { user_token: 'user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d', }; try { const response = await client.creditEmploymentGet(request); } catch (error) { // handle error } ``` #### Response fields  **items** (\[object\]) Array of employment items. **items->item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error nullable, string **items->employments** (\[object\]) ID of the payroll provider account. **items->employments->status** (nullable, string) Current employment status. Possible values: ACTIVE, INACTIVE, null **items->employments->start\_date** (nullable, string) Start of employment in ISO 8601 format (YYYY-MM-DD). Format: date **items->employments->end\_date** (nullable, string) End of employment, if applicable. Provided in ISO 8601 format (YYY-MM-DD). Format: date **items->employments->employer** (object) An object containing employer data. **items->employments->employer->name** (nullable, string) Name of employer. **items->employments->title** (nullable, string) Current title of employee. **items->employments->platform\_ids** (object) The object containing a set of ids related to an employee. **items->employments->platform\_ids->employee\_id** (nullable, string) The ID of an employee as given by their employer. **items->employments->platform\_ids->payroll\_id** (nullable, string) The ID of an employee as given by their payroll. **items->employments->platform\_ids->position\_id** (nullable, string) The ID of the position of the employee. **items->employments->employee\_type** (nullable, string) The type of employment for the individual. "FULL\_TIME": A full-time employee. "PART\_TIME": A part-time employee. "CONTRACTOR": An employee typically hired externally through a contracting group. "TEMPORARY": A temporary employee. "OTHER": The employee type is not one of the above defined types. Possible values: FULL\_TIME, PART\_TIME, CONTRACTOR, TEMPORARY, OTHER, null **items->employments->last\_paystub\_date** (nullable, string) The date of the employee's most recent paystub in ISO 8601 format (YYYY-MM-DD). Format: date **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "items": [ { "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "employments": [ { "account_id": "GeooLPBGDEunl54q7N3ZcyD5aLPLEai1nkzM9", "status": "ACTIVE", "start_date": "2020-01-01", "end_date": null, "employer": { "name": "Plaid Inc" }, "title": "Software Engineer", "platform_ids": { "employee_id": "1234567", "position_id": "8888", "payroll_id": "1234567" }, "employee_type": "FULL_TIME", "last_paystub_date": "2022-01-15" } ] } ], "request_id": "LhQf0THi8SH1yJm" } ``` \=\*=\*=\*= #### /credit/payroll\_income/parsing\_config/update  #### Update the parsing configuration for a document income verification  [/credit/payroll\_income/parsing\_config/update](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomeparsing_configupdate) updates the parsing configuration for a document income verification. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **parsing\_config** (required, \[string\]) The types of analysis to enable for the document income verification session Possible values: ocr, risk\_signals /credit/payroll\_income/parsing\_config/update Node▼ ```javascript const request: CreditPayrollIncomeParsingConfigUpdateRequest = { user_token: 'user-sandbox-dd4c42bd-4a81-4089-8146-40671e81dd12', parsing_config: ['fraud_risk'], }; try { const response = await client.creditPayrollIncomeParsingConfigUpdate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "LhQf0THi8SH1yJm" } ``` \=\*=\*=\*= #### /credit/payroll\_income/refresh  #### Refresh a digital payroll income verification  [/credit/payroll\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerefresh) refreshes a given digital payroll income verification. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. **options** (object) An optional object for /credit/payroll\_income/refresh request options. **options->item\_ids** (\[string\]) An array of item\_ids to be refreshed. Each item\_id should uniquely identify a payroll income item. If this field is not provided, all item\_ids associated with the user\_token will be refreshed. **options->webhook** (string) The URL where Plaid will send the payroll income refresh webhook. /credit/payroll\_income/refresh Node▼ ```javascript const request: PayrollIncomeRefreshRequest = { client_user_id: 'c0e2c4ee-b763-4af5-cfe9-46a46bce883d', }; try { const response = await client.userCreate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **verification\_refresh\_status** (string) The verification refresh status. One of the following: "USER\_PRESENCE\_REQUIRED" User presence is required to refresh an income verification. "SUCCESSFUL" The income verification refresh was successful. "NOT\_FOUND" No new data was found after the income verification refresh. Possible values: USER\_PRESENCE\_REQUIRED, SUCCESSFUL, NOT\_FOUND Response Object ```json { "request_id": "nTkbCH41HYmpbm5", "verification_refresh_status": "USER_PRESENCE_REQUIRED" } ``` ### Webhooks  Income webhooks are sent to indicate when an income verification or document fraud risk evaluation has finished processing. \=\*=\*=\*= #### INCOME\_VERIFICATION  Fired when the status of an income verification instance has changed. This webhook is fired for both the Document and Payroll Income flows, but not the Bank Income flow. It will typically take several minutes for this webhook to fire after the end user has uploaded their documents in the Document Income flow. #### Properties  **webhook\_type** (string) "INCOME" **webhook\_code** (string) INCOME\_VERIFICATION **item\_id** (string) The Item ID associated with the verification. **user\_id** (string) The Plaid user\_id of the User associated with this webhook, warning, or error. **verification\_status** (string) VERIFICATION\_STATUS\_PROCESSING\_COMPLETE: The income verification processing has completed. This indicates that the documents have been parsed successfully or that the documents were not parsable. If the user uploaded multiple documents, this webhook will fire when all documents have finished processing. Call the /credit/payroll\_income/get endpoint and check the document metadata to see which documents were successfully parsed. VERIFICATION\_STATUS\_PROCESSING\_FAILED: An unexpected internal error occurred when attempting to process the verification documentation. VERIFICATION\_STATUS\_PENDING\_APPROVAL: (deprecated) The income verification has been sent to the user for review. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "INCOME", "webhook_code": "INCOME_VERIFICATION", "item_id": "gAXlMgVEw5uEGoQnnXZ6tn9E7Mn3LBc4PJVKZ", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "verification_status": "VERIFICATION_STATUS_PROCESSING_COMPLETE", "environment": "production" } ``` \=\*=\*=\*= #### INCOME\_VERIFICATION\_RISK\_SIGNALS  Fired when risk signals have been processed for documents uploaded via Document Income. It will typically take a minute or two for this webhook to fire after the end user has uploaded their documents in the Document Income flow. Once this webhook has fired, [/credit/payroll\_income/risk\_signals/get](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerisk_signalsget) may then be called to determine whether the documents were successfully processed and to retrieve risk data. #### Properties  **webhook\_type** (string) "INCOME" **webhook\_code** (string) INCOME\_VERIFICATION\_RISK\_SIGNALS **item\_id** (string) The Item ID associated with the verification. **user\_id** (string) The Plaid user\_id of the User associated with this webhook, warning, or error. **risk\_signals\_status** (string) RISK\_SIGNALS\_PROCESSING\_COMPLETE: The income verification fraud detection processing has completed. If the user uploaded multiple documents, this webhook will fire when all documents have finished processing. Call the /credit/payroll\_income/risk\_signals/get endpoint to get all risk signal data. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "INCOME", "webhook_code": "INCOME_VERIFICATION_RISK_SIGNALS", "item_id": "gAXlMgVEw5uEGoQnnXZ6tn9E7Mn3LBc4PJVKZ", "user_id": "9eaba3c2fdc916bc197f279185b986607dd21682a5b04eab04a5a03e8b3f3334", "risk_signals_status": "RISK_SIGNALS_PROCESSING_COMPLETE", "environment": "production" } ``` \=\*=\*=\*= #### BANK\_INCOME\_REFRESH\_COMPLETE  Fired when a refreshed bank income report has finished generating or failed to generate, triggered by calling [/credit/bank\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditbank_incomerefresh) . To get this webhook, subscribe via the [Dashboard](https://dashboard.plaid.com/developers/webhooks) . #### Properties  **webhook\_type** (string) INCOME **webhook\_code** (string) BANK\_INCOME\_REFRESH\_COMPLETE **user\_id** (string) The user\_id corresponding to the user the webhook has fired for. **result** (string) The result of the bank income refresh report generation SUCCESS: The refreshed report was successfully generated and can be retrieved via /credit/bank\_income/get. FAILURE: The refreshed report failed to be generated Possible values: SUCCESS, FAILURE **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "INCOME", "webhook_code": "BANK_INCOME_REFRESH_COMPLETE", "user_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "result": "SUCCESS", "environment": "production" } ``` \=\*=\*=\*= #### INCOME\_VERIFICATION\_REFRESH\_RECONNECT\_NEEDED  Fired when the attempt to refresh Payroll Income data for a user via [/credit/payroll\_income/refresh](https://plaid.com/docs/api/products/income/index.html.md#creditpayroll_incomerefresh) failed because the user must re-connect their payroll account. #### Properties  **webhook\_type** (string) INCOME **webhook\_code** (string) INCOME\_VERIFICATION\_REFRESH\_RECONNECT\_NEEDED **user\_id** (string) The user\_id corresponding to the user the webhook has fired for. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "INCOME", "webhook_code": "INCOME_VERIFICATION_REFRESH_RECONNECT_NEEDED", "user_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "environment": "production" } ``` --- # API - Investments Move | Plaid Docs Investments Move  ================= #### API reference for Investments Move endpoints and webhooks  For how-to guidance, see the [Investments Move documentation](https://plaid.com/docs/investments-move/index.html.md) . | Endpoints | | | --- | --- | | [/investments/auth/get](https://plaid.com/docs/api/products/investments-move/index.html.md#investmentsauthget) | Fetch investments data required for ACATS or ATON transfer | \=\*=\*=\*= #### /investments/auth/get  #### Get data needed to authorize an investments transfer  The [/investments/auth/get](https://plaid.com/docs/api/products/investments-move/index.html.md#investmentsauthget) endpoint allows developers to receive user-authorized data to facilitate the transfer of holdings #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /investments/auth/get results. **options->account\_ids** (\[string\]) An array of account\_ids to retrieve for the Item. An error will be returned if a provided account\_id is not associated with the Item. /investments/auth/get Node▼ ```javascript const request: InvestmentsAuthGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.investmentsAuthGet(request); const investmentsAuthData = response.data; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) The accounts for which data is being retrieved **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **holdings** (\[object\]) The holdings belonging to investment accounts associated with the Item. Details of the securities in the holdings are provided in the securities field. **holdings->account\_id** (string) The Plaid account\_id associated with the holding. **holdings->security\_id** (string) The Plaid security\_id associated with the holding. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data. The security\_id for the same security will typically be the same across different institutions, but this is not guaranteed. The security\_id does not typically change, but may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **holdings->institution\_price** (number) The last price given by the institution for this security. Format: double **holdings->institution\_price\_as\_of** (nullable, string) The date at which institution\_price was current. Format: date **holdings->institution\_price\_datetime** (nullable, string) Date and time at which institution\_price was current, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). Format: date-time **holdings->institution\_value** (number) The value of the holding, as reported by the institution. Format: double **holdings->cost\_basis** (nullable, number) The total cost basis of the holding (e.g., the total amount spent to acquire all assets currently in the holding). Format: double **holdings->quantity** (number) The total quantity of the asset held, as reported by the financial institution. If the security is an option, quantity will reflect the total number of options (typically the number of contracts multiplied by 100), not the number of contracts. Format: double **holdings->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the holding. Always null if unofficial\_currency\_code is non-null. **holdings->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **holdings->vested\_quantity** (nullable, number) The total quantity of vested assets held, as reported by the financial institution. Vested assets are only associated with equities. Format: double **holdings->vested\_value** (nullable, number) The value of the vested holdings as reported by the institution. Format: double **securities** (\[object\]) Objects describing the securities held in the accounts associated with the Item. **securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **securities->isin** (nullable, string) 12-character ISIN, a globally unique securities identifier. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->cusip** (nullable, string) 9-character CUSIP, an identifier assigned to North American securities. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->sedol** (deprecated, nullable, string) (Deprecated) 7-character SEDOL, an identifier assigned to securities in the UK. **securities->institution\_security\_id** (nullable, string) An identifier given to the security by the institution **securities->institution\_id** (nullable, string) If institution\_security\_id is present, this field indicates the Plaid institution\_id of the institution to whom the identifier belongs. **securities->proxy\_security\_id** (nullable, string) In certain cases, Plaid will provide the ID of another security whose performance resembles this security, typically when the original security has low volume, or when a private security can be modeled with a publicly traded security. **securities->name** (nullable, string) A descriptive name for the security, suitable for display. **securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **securities->is\_cash\_equivalent** (nullable, boolean) Indicates that a security is a highly liquid asset and can be treated like cash. **securities->type** (nullable, string) The security type of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security type. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **securities->subtype** (nullable, string) The security subtype of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security subtype. Possible values: asset backed security, bill, bond, bond with warrants, cash, cash management bill, common stock, convertible bond, convertible equity, cryptocurrency, depositary receipt, depositary receipt on debt, etf, float rating note, fund of funds, hedge fund, limited partnership unit, medium term note, money market debt, mortgage backed security, municipal bond, mutual fund, note, option, other, preferred convertible, preferred equity, private equity fund, real estate investment trust, structured equity product, treasury inflation protected securities, unit, warrant. **securities->close\_price** (nullable, number) Price of the security at the close of the previous trading session. Null for non-public securities. If the security is a foreign currency this field will be updated daily and will be priced in USD. If the security is a cryptocurrency, this field will be updated multiple times a day. As crypto prices can fluctuate quickly and data may become stale sooner than other asset classes, refer to update\_datetime with the time when the price was last updated. Format: double **securities->close\_price\_as\_of** (nullable, string) Date for which close\_price is accurate. Always null if close\_price is null. Format: date **securities->update\_datetime** (nullable, string) Date and time at which close\_price is accurate, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Always null if close\_price is null. Format: date-time **securities->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the price given. Always null if unofficial\_currency\_code is non-null. **securities->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the security. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **securities->market\_identifier\_code** (nullable, string) The ISO-10383 Market Identifier Code of the exchange or market in which the security is being traded. **securities->sector** (nullable, string) The sector classification of the security, such as Finance, Health Technology, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->industry** (nullable, string) The industry classification of the security, such as Biotechnology, Airlines, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->option\_contract** (nullable, object) Details about the option security. For the Sandbox environment, this data is currently only available if the Item is using a custom Sandbox user and the ticker field of the custom security follows the OCC Option Symbol standard with no spaces. For an example of simulating this in Sandbox, see the custom Sandbox GitHub. **securities->option\_contract->contract\_type** (string) The type of this option contract. It is one of: put: for Put option contracts call: for Call option contracts **securities->option\_contract->expiration\_date** (string) The expiration date for this option contract, in ISO 8601 format. Format: date **securities->option\_contract->strike\_price** (number) The strike price for this option contract, per share of security. Format: double **securities->option\_contract->underlying\_security\_ticker** (string) The ticker of the underlying security for this option contract. **securities->fixed\_income** (nullable, object) Details about the fixed income security. **securities->fixed\_income->yield\_rate** (nullable, object) Details about a fixed income security's expected rate of return. **securities->fixed\_income->yield\_rate->percentage** (number) The fixed income security's expected rate of return. Format: double **securities->fixed\_income->yield\_rate->type** (nullable, string) The type of rate which indicates how the predicted yield was calculated. It is one of: coupon: the annualized interest rate for securities with a one-year term or longer, such as treasury notes and bonds. coupon\_equivalent: the calculated equivalent for the annualized interest rate factoring in the discount rate and time to maturity, for shorter term, non-interest-bearing securities such as treasury bills. discount: the rate at which the present value or cost is discounted from the future value upon maturity, also known as the face value. yield: the total predicted rate of return factoring in both the discount rate and the coupon rate, applicable to securities such as exchange-traded bonds which can both be interest-bearing as well as sold at a discount off its face value. Possible values: coupon, coupon\_equivalent, discount, yield, null **securities->fixed\_income->maturity\_date** (nullable, string) The maturity date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->issue\_date** (nullable, string) The issue date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->face\_value** (nullable, number) The face value that is paid upon maturity of the fixed income security, per unit of security. Format: double **owners** (\[object\]) Information about the account owners for the accounts associated with the Item. **owners->account\_id** (string) The ID of the account that this identity information pertains to **owners->names** (\[string\]) A list of names associated with the account by the financial institution. In the case of a joint account, Plaid will make a best effort to report the names of all account holders. If an Item contains multiple accounts with different owner names, some institutions will report all names associated with the Item in each account's names array. **numbers** (object) Identifying information for transferring holdings to an investments account. string **numbers->acats** (\[object\]) The Plaid account ID associated with the account numbers **numbers->acats->account** (string) The full account number for the account **numbers->acats->dtc\_numbers** (\[string\]) Identifiers for the clearinghouses that are associated with the account in order of relevance. If this array is empty, call /institutions/get\_by\_id with the item.institution\_id to get the DTC number. string **numbers->aton** (\[object\]) The Plaid account ID associated with the account numbers **numbers->aton->account** (string) The full account number for the account string **numbers->retirement\_401k** (\[object\]) The Plaid account ID associated with the account numbers **numbers->retirement\_401k->plan** (string) The plan number for the employer's 401k retirement plan **numbers->retirement\_401k->account** (string) The full account number for the account **data\_sources** (object) Object with metadata pertaining to the source of data for the account numbers, owners, and holdings that are returned. **data\_sources->numbers** (string) A description of the source of data for a given product/data type. INSTITUTION: The institution supports this product, and the data was provided by the institution. INSTITUTION\_MASK: The user manually provided the full account number, which was matched to the account mask provided by the institution. Only applicable to the numbers data type. USER: The institution does not support this product, and the data was manually provided by the user. Possible values: INSTITUTION, INSTITUTION\_MASK, USER **data\_sources->owners** (string) A description of the source of data for a given product/data type. INSTITUTION: The institution supports this product, and the data was provided by the institution. INSTITUTION\_MASK: The user manually provided the full account number, which was matched to the account mask provided by the institution. Only applicable to the numbers data type. USER: The institution does not support this product, and the data was manually provided by the user. Possible values: INSTITUTION, INSTITUTION\_MASK, USER **data\_sources->holdings** (string) A description of the source of data for a given product/data type. INSTITUTION: The institution supports this product, and the data was provided by the institution. INSTITUTION\_MASK: The user manually provided the full account number, which was matched to the account mask provided by the institution. Only applicable to the numbers data type. USER: The institution does not support this product, and the data was manually provided by the user. Possible values: INSTITUTION, INSTITUTION\_MASK, USER **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "31qEA6LPwGumkA4Z5mGbfyGwr4mL6nSZlQqpZ", "balances": { "available": 43200, "current": 43200, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "4444", "name": "Plaid Money Market", "official_name": "Plaid Platinum Standard 1.85% Interest Money Market", "subtype": "money market", "type": "depository" }, { "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "balances": { "available": null, "current": 415.57, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "5555", "name": "Plaid IRA", "official_name": null, "subtype": "ira", "type": "investment" } ], "holdings": [ { "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "cost_basis": 1, "institution_price": 1, "institution_price_as_of": "2021-05-25", "institution_price_datetime": null, "institution_value": 0.01, "iso_currency_code": "USD", "quantity": 0.01, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "unofficial_currency_code": null, "vested_quantity": 1, "vested_value": 1 }, { "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "cost_basis": 0.01, "institution_price": 0.011, "institution_price_as_of": "2021-05-25", "institution_price_datetime": null, "institution_value": 110, "iso_currency_code": "USD", "quantity": 10000, "security_id": "8E4L9XLl6MudjEpwPAAgivmdZRdBPJuvMPlPb", "unofficial_currency_code": null, "vested_quantity": null, "vested_value": null }, { "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "cost_basis": 94.808, "institution_price": 94.808, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 94.808, "iso_currency_code": "USD", "quantity": 1, "security_id": "Lxe4yz4XQEtwb2YArO7RFMpPDvPxy7FALRyea", "unofficial_currency_code": null }, { "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "cost_basis": 40, "institution_price": 42.15, "institution_price_as_of": "2021-05-25", "institution_price_datetime": null, "institution_value": 210.75, "iso_currency_code": "USD", "quantity": 5, "security_id": "abJamDazkgfvBkVGgnnLUWXoxnomp5up8llg4", "unofficial_currency_code": null, "vested_quantity": 7, "vested_value": 66 } ], "item": { "available_products": [ "assets", "balance", "beacon", "cra_base_report", "cra_income_insights", "signal", "identity", "identity_match", "income", "income_verification", "investments", "processor_identity", "recurring_transactions", "transactions" ], "billed_products": [ "investments_auth" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_115616", "institution_name": "Vanguard", "item_id": "7qBnDwLP3aIZkD7NKZ5ysk5X9xVxDWHg65oD5", "products": [ "investments_auth" ], "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook" }, "numbers": { "acats": [ { "account": "TR5555", "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "dtc_numbers": [ "1111", "2222", "3333" ] } ] }, "owners": [ { "account_id": "31qEA6LPwGumkA4Z5mGbfyGwr4mL6nSZlQqpZ", "names": [ "Alberta Bobbeth Charleson" ] }, { "account_id": "xlP8npRxwgCj48LQbjxWipkeL3gbyXf64knoy", "names": [ "Alberta Bobbeth Charleson" ] } ], "request_id": "hPCXou4mm9Qwzzu", "securities": [ { "close_price": 0.011, "close_price_as_of": null, "cusip": null, "industry": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "market_identifier_code": null, "name": "Nflx Feb 01'18 $355 Call", "option_contract": null, "fixed_income": null, "proxy_security_id": null, "sector": null, "security_id": "8E4L9XLl6MudjEpwPAAgivmdZRdBPJuvMPlPb", "sedol": null, "ticker_symbol": "NFLX180201C00355000", "type": "derivative", "subtype": "option", "unofficial_currency_code": null, "update_datetime": null }, { "close_price": 94.808, "close_price_as_of": "2023-11-02", "cusip": "912797HE0", "fixed_income": { "face_value": 100, "issue_date": "2023-11-02", "maturity_date": "2024-10-31", "yield_rate": { "percentage": 5.43, "type": "coupon_equivalent" } }, "industry": "Sovereign Government", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "market_identifier_code": null, "name": "US Treasury Bill - 5.43% 31/10/2024 USD 100", "option_contract": null, "proxy_security_id": null, "sector": "Government", "security_id": "Lxe4yz4XQEtwb2YArO7RFMpPDvPxy7FALRyea", "sedol": null, "ticker_symbol": null, "type": "fixed income", "subtype": "bill", "unofficial_currency_code": null, "update_datetime": null }, { "close_price": 9.08, "close_price_as_of": "2024-09-09", "cusip": null, "fixed_income": null, "industry": "Investment Trusts or Mutual Funds", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "market_identifier_code": null, "name": "DoubleLine Total Return Bond I", "option_contract": null, "proxy_security_id": null, "sector": "Miscellaneous", "security_id": "AE5rBXra1AuZLE34rkvvIyG8918m3wtRzElnJ", "sedol": null, "ticker_symbol": "DBLTX", "type": "mutual fund", "subtype": "mutual fund", "unofficial_currency_code": null, "update_datetime": null }, { "close_price": 42.15, "close_price_as_of": null, "cusip": null, "fixed_income": null, "industry": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "market_identifier_code": null, "name": "iShares Inc MSCI Brazil", "option_contract": null, "proxy_security_id": null, "sector": null, "security_id": "abJamDazkgfvBkVGgnnLUWXoxnomp5up8llg4", "sedol": null, "ticker_symbol": "EWZ", "type": "etf", "subtype": "etf", "unofficial_currency_code": null, "update_datetime": null }, { "close_price": 1, "close_price_as_of": null, "cusip": null, "fixed_income": null, "industry": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": true, "isin": null, "iso_currency_code": "USD", "market_identifier_code": null, "name": "U S Dollar", "option_contract": null, "proxy_security_id": null, "sector": null, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "sedol": null, "ticker_symbol": null, "type": "cash", "subtype": "cash", "unofficial_currency_code": null, "update_datetime": null } ], "data_sources": { "numbers": "INSTITUTION", "owners": "INSTITUTION", "holdings": "INSTITUTION" } } ``` --- # API - Investments | Plaid Docs Investments  ============ #### API reference for Investments endpoints and webhooks  For how-to guidance, see the [Investments documentation](https://plaid.com/docs/investments/index.html.md) . | Endpoints | | | --- | --- | | [/investments/holdings/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentsholdingsget) | Fetch investment holdings | | [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) | Fetch investment transactions | | [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) | Refresh investment transactions | | See also | | | --- | --- | | [/processor/investments/holdings/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentsholdingsget) | Fetch Investments Holdings data | | [/processor/investments/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorinvestmentstransactionsget) | Fetch Investments Transactions data | | Webhooks | | | --- | --- | | [HOLDINGS: DEFAULT\_UPDATE](https://plaid.com/docs/api/products/investments/index.html.md#holdings-default_update) | New holdings available | | [INVESTMENTS\_TRANSACTIONS: DEFAULT\_UPDATE](https://plaid.com/docs/api/products/investments/index.html.md#investments_transactions-default_update) | New transactions available | | [INVESTMENTS\_TRANSACTIONS: HISTORICAL\_UPDATE](https://plaid.com/docs/api/products/investments/index.html.md#investments_transactions-historical_update) | Investments data ready | ### Endpoints  \=\*=\*=\*= #### /investments/holdings/get  #### Get Investment holdings  The [/investments/holdings/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentsholdingsget) endpoint allows developers to receive user-authorized stock position data for `investment`\-type accounts. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /investments/holdings/get results. If provided, must not be null. **options->account\_ids** (\[string\]) An array of account\_ids to retrieve for the Item. An error will be returned if a provided account\_id is not associated with the Item. /investments/holdings/get Node▼ ```javascript // Pull Holdings for an Item const request: InvestmentsHoldingsGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.investmentsHoldingsGet(request); const holdings = response.data.holdings; const securities = response.data.securities; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) The accounts associated with the Item **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **holdings** (\[object\]) The holdings belonging to investment accounts associated with the Item. Details of the securities in the holdings are provided in the securities field. **holdings->account\_id** (string) The Plaid account\_id associated with the holding. **holdings->security\_id** (string) The Plaid security\_id associated with the holding. Security data is not specific to a user's account; any user who held the same security at the same financial institution at the same time would have identical security data. The security\_id for the same security will typically be the same across different institutions, but this is not guaranteed. The security\_id does not typically change, but may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **holdings->institution\_price** (number) The last price given by the institution for this security. Format: double **holdings->institution\_price\_as\_of** (nullable, string) The date at which institution\_price was current. Format: date **holdings->institution\_price\_datetime** (nullable, string) Date and time at which institution\_price was current, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). Format: date-time **holdings->institution\_value** (number) The value of the holding, as reported by the institution. Format: double **holdings->cost\_basis** (nullable, number) The total cost basis of the holding (e.g., the total amount spent to acquire all assets currently in the holding). Format: double **holdings->quantity** (number) The total quantity of the asset held, as reported by the financial institution. If the security is an option, quantity will reflect the total number of options (typically the number of contracts multiplied by 100), not the number of contracts. Format: double **holdings->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the holding. Always null if unofficial\_currency\_code is non-null. **holdings->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **holdings->vested\_quantity** (nullable, number) The total quantity of vested assets held, as reported by the financial institution. Vested assets are only associated with equities. Format: double **holdings->vested\_value** (nullable, number) The value of the vested holdings as reported by the institution. Format: double **securities** (\[object\]) Objects describing the securities held in the accounts associated with the Item. **securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **securities->isin** (nullable, string) 12-character ISIN, a globally unique securities identifier. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->cusip** (nullable, string) 9-character CUSIP, an identifier assigned to North American securities. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->sedol** (deprecated, nullable, string) (Deprecated) 7-character SEDOL, an identifier assigned to securities in the UK. **securities->institution\_security\_id** (nullable, string) An identifier given to the security by the institution **securities->institution\_id** (nullable, string) If institution\_security\_id is present, this field indicates the Plaid institution\_id of the institution to whom the identifier belongs. **securities->proxy\_security\_id** (nullable, string) In certain cases, Plaid will provide the ID of another security whose performance resembles this security, typically when the original security has low volume, or when a private security can be modeled with a publicly traded security. **securities->name** (nullable, string) A descriptive name for the security, suitable for display. **securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **securities->is\_cash\_equivalent** (nullable, boolean) Indicates that a security is a highly liquid asset and can be treated like cash. **securities->type** (nullable, string) The security type of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security type. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **securities->subtype** (nullable, string) The security subtype of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security subtype. Possible values: asset backed security, bill, bond, bond with warrants, cash, cash management bill, common stock, convertible bond, convertible equity, cryptocurrency, depositary receipt, depositary receipt on debt, etf, float rating note, fund of funds, hedge fund, limited partnership unit, medium term note, money market debt, mortgage backed security, municipal bond, mutual fund, note, option, other, preferred convertible, preferred equity, private equity fund, real estate investment trust, structured equity product, treasury inflation protected securities, unit, warrant. **securities->close\_price** (nullable, number) Price of the security at the close of the previous trading session. Null for non-public securities. If the security is a foreign currency this field will be updated daily and will be priced in USD. If the security is a cryptocurrency, this field will be updated multiple times a day. As crypto prices can fluctuate quickly and data may become stale sooner than other asset classes, refer to update\_datetime with the time when the price was last updated. Format: double **securities->close\_price\_as\_of** (nullable, string) Date for which close\_price is accurate. Always null if close\_price is null. Format: date **securities->update\_datetime** (nullable, string) Date and time at which close\_price is accurate, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Always null if close\_price is null. Format: date-time **securities->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the price given. Always null if unofficial\_currency\_code is non-null. **securities->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the security. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **securities->market\_identifier\_code** (nullable, string) The ISO-10383 Market Identifier Code of the exchange or market in which the security is being traded. **securities->sector** (nullable, string) The sector classification of the security, such as Finance, Health Technology, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->industry** (nullable, string) The industry classification of the security, such as Biotechnology, Airlines, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->option\_contract** (nullable, object) Details about the option security. For the Sandbox environment, this data is currently only available if the Item is using a custom Sandbox user and the ticker field of the custom security follows the OCC Option Symbol standard with no spaces. For an example of simulating this in Sandbox, see the custom Sandbox GitHub. **securities->option\_contract->contract\_type** (string) The type of this option contract. It is one of: put: for Put option contracts call: for Call option contracts **securities->option\_contract->expiration\_date** (string) The expiration date for this option contract, in ISO 8601 format. Format: date **securities->option\_contract->strike\_price** (number) The strike price for this option contract, per share of security. Format: double **securities->option\_contract->underlying\_security\_ticker** (string) The ticker of the underlying security for this option contract. **securities->fixed\_income** (nullable, object) Details about the fixed income security. **securities->fixed\_income->yield\_rate** (nullable, object) Details about a fixed income security's expected rate of return. **securities->fixed\_income->yield\_rate->percentage** (number) The fixed income security's expected rate of return. Format: double **securities->fixed\_income->yield\_rate->type** (nullable, string) The type of rate which indicates how the predicted yield was calculated. It is one of: coupon: the annualized interest rate for securities with a one-year term or longer, such as treasury notes and bonds. coupon\_equivalent: the calculated equivalent for the annualized interest rate factoring in the discount rate and time to maturity, for shorter term, non-interest-bearing securities such as treasury bills. discount: the rate at which the present value or cost is discounted from the future value upon maturity, also known as the face value. yield: the total predicted rate of return factoring in both the discount rate and the coupon rate, applicable to securities such as exchange-traded bonds which can both be interest-bearing as well as sold at a discount off its face value. Possible values: coupon, coupon\_equivalent, discount, yield, null **securities->fixed\_income->maturity\_date** (nullable, string) The maturity date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->issue\_date** (nullable, string) The issue date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->face\_value** (nullable, number) The face value that is paid upon maturity of the fixed income security, per unit of security. Format: double **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **is\_investments\_fallback\_item** (boolean) When true, this field indicates that the Item's portfolio was manually created with the Investments Fallback flow. Response Object ```json { "accounts": [ { "account_id": "5Bvpj4QknlhVWk7GygpwfVKdd133GoCxB814g", "balances": { "available": 43200, "current": 43200, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "4444", "name": "Plaid Money Market", "official_name": "Plaid Platinum Standard 1.85% Interest Money Market", "subtype": "money market", "type": "depository" }, { "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1", "balances": { "available": null, "current": 110.01, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "5555", "name": "Plaid IRA", "official_name": null, "subtype": "ira", "type": "investment" }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "balances": { "available": null, "current": 24580.0605, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "6666", "name": "Plaid 401k", "official_name": null, "subtype": "401k", "type": "investment" }, { "account_id": "ax0xgOBYRAIqOOjeLZr0iZBb8r6K88HZXpvmq", "balances": { "available": 48200.03, "current": 48200.03, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "4092", "name": "Plaid Crypto Exchange Account", "official_name": null, "subtype": "crypto exchange", "type": "investment" } ], "holdings": [ { "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1", "cost_basis": 1, "institution_price": 1, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 0.01, "iso_currency_code": "USD", "quantity": 0.01, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "unofficial_currency_code": null }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "cost_basis": 1.5, "institution_price": 2.11, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 2.11, "iso_currency_code": "USD", "quantity": 1, "security_id": "KDwjlXj1Rqt58dVvmzRguxJybmyQL8FgeWWAy", "unofficial_currency_code": null }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "cost_basis": 10, "institution_price": 10.42, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 20.84, "iso_currency_code": "USD", "quantity": 2, "security_id": "NDVQrXQoqzt5v3bAe8qRt4A7mK7wvZCLEBBJk", "unofficial_currency_code": null }, { "account_id": "JqMLm4rJwpF6gMPJwBqdh9ZjjPvvpDcb7kDK1", "cost_basis": 0.01, "institution_price": 0.011, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 110, "iso_currency_code": "USD", "quantity": 10000, "security_id": "8E4L9XLl6MudjEpwPAAgivmdZRdBPJuvMPlPb", "unofficial_currency_code": null }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "cost_basis": 23, "institution_price": 27, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 636.309, "iso_currency_code": "USD", "quantity": 23.567, "security_id": "JDdP7XPMklt5vwPmDN45t3KAoWAPmjtpaW7DP", "unofficial_currency_code": null }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "cost_basis": 15, "institution_price": 13.73, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 1373.6865, "iso_currency_code": "USD", "quantity": 100.05, "security_id": "nnmo8doZ4lfKNEDe3mPJipLGkaGw3jfPrpxoN", "unofficial_currency_code": null }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "cost_basis": 948.08, "institution_price": 94.808, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 948.08, "iso_currency_code": "USD", "quantity": 10, "security_id": "Lxe4yz4XQEtwb2YArO7RFMpPDvPxy7FALRyea", "unofficial_currency_code": null }, { "account_id": "k67E4xKvMlhmleEa4pg9hlwGGNnnEeixPolGm", "cost_basis": 1, "institution_price": 1, "institution_price_as_of": "2021-04-13", "institution_price_datetime": null, "institution_value": 12345.67, "iso_currency_code": "USD", "quantity": 12345.67, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "unofficial_currency_code": null }, { "account_id": "ax0xgOBYRAIqOOjeLZr0iZBb8r6K88HZXpvmq", "cost_basis": 92.47, "institution_price": 0.177494362, "institution_price_as_of": "2022-01-14", "institution_price_datetime": "2022-06-07T23:01:00Z", "institution_value": 4437.35905, "iso_currency_code": "USD", "quantity": 25000, "security_id": "vLRMV3MvY1FYNP91on35CJD5QN5rw9Fpa9qOL", "unofficial_currency_code": null } ], "item": { "available_products": [ "balance", "identity", "liabilities", "transactions" ], "billed_products": [ "assets", "auth", "investments" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "4z9LPae1nRHWy8pvg9jrsgbRP4ZNQvIdbLq7g", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "l68wb8zpS0hqmsJ", "securities": [ { "close_price": 0.011, "close_price_as_of": "2021-04-13", "cusip": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "name": "Nflx Feb 01'18 $355 Call", "proxy_security_id": null, "security_id": "8E4L9XLl6MudjEpwPAAgivmdZRdBPJuvMPlPb", "sedol": null, "ticker_symbol": "NFLX180201C00355000", "type": "derivative", "subtype": "option", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Technology Services", "industry": "Internet Software or Services", "option_contract": { "contract_type": "call", "expiration_date": "2018-02-01", "strike_price": 355, "underlying_security_ticker": "NFLX" }, "fixed_income": null }, { "close_price": 27, "close_price_as_of": null, "cusip": "577130834", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US5771308344", "iso_currency_code": "USD", "name": "Matthews Pacific Tiger Fund Insti Class", "proxy_security_id": null, "security_id": "JDdP7XPMklt5vwPmDN45t3KAoWAPmjtpaW7DP", "sedol": null, "ticker_symbol": "MIPTX", "type": "mutual fund", "subtype": "mutual fund", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Miscellaneous", "industry": "Investment Trusts or Mutual Funds", "option_contract": null, "fixed_income": null }, { "close_price": 2.11, "close_price_as_of": null, "cusip": "00448Q201", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US00448Q2012", "iso_currency_code": "USD", "name": "Achillion Pharmaceuticals Inc.", "proxy_security_id": null, "security_id": "KDwjlXj1Rqt58dVvmzRguxJybmyQL8FgeWWAy", "sedol": null, "ticker_symbol": "ACHN", "type": "equity", "subtype": "common stock", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Health Technology", "industry": "Major Pharmaceuticals", "option_contract": null, "fixed_income": null }, { "close_price": 10.42, "close_price_as_of": null, "cusip": "258620103", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US2586201038", "iso_currency_code": "USD", "name": "DoubleLine Total Return Bond Fund", "proxy_security_id": null, "security_id": "NDVQrXQoqzt5v3bAe8qRt4A7mK7wvZCLEBBJk", "sedol": null, "ticker_symbol": "DBLTX", "type": "mutual fund", "subtype": "mutual fund", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": null, "industry": null, "option_contract": null, "fixed_income": null }, { "close_price": 1, "close_price_as_of": null, "cusip": null, "institution_id": null, "institution_security_id": null, "is_cash_equivalent": true, "isin": null, "iso_currency_code": "USD", "name": "U S Dollar", "proxy_security_id": null, "security_id": "d6ePmbPxgWCWmMVv66q9iPV94n91vMtov5Are", "sedol": null, "ticker_symbol": "USD", "type": "cash", "subtype": "cash", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": null, "sector": null, "industry": null, "option_contract": null, "fixed_income": null }, { "close_price": 13.73, "close_price_as_of": null, "cusip": null, "institution_id": "ins_3", "institution_security_id": "NHX105509", "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "name": "NH PORTFOLIO 1055 (FIDELITY INDEX)", "proxy_security_id": null, "security_id": "nnmo8doZ4lfKNEDe3mPJipLGkaGw3jfPrpxoN", "sedol": null, "ticker_symbol": "NHX105509", "type": "etf", "subtype": "etf", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": null, "industry": null, "option_contract": null, "fixed_income": null }, { "close_price": 94.808, "close_price_as_of": "2023-11-02", "cusip": "912797HE0", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": null, "iso_currency_code": "USD", "name": "US Treasury Bill - 5.43% 31/10/2024 USD 100", "proxy_security_id": null, "security_id": "Lxe4yz4XQEtwb2YArO7RFMpPDvPxy7FALRyea", "sedol": null, "ticker_symbol": null, "type": "fixed income", "subtype": "bill", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": null, "sector": "Government", "industry": "Sovereign Government", "option_contract": null, "fixed_income": { "face_value": 100, "issue_date": "2023-11-02", "maturity_date": "2024-10-31", "yield_rate": { "percentage": 5.43, "type": "coupon_equivalent" } } }, { "close_price": 0.140034616, "close_price_as_of": "2022-01-24", "cusip": null, "institution_id": "ins_3", "institution_security_id": null, "is_cash_equivalent": true, "isin": null, "iso_currency_code": "USD", "name": "Dogecoin", "proxy_security_id": null, "security_id": "vLRMV3MvY1FYNP91on35CJD5QN5rw9Fpa9qOL", "sedol": null, "ticker_symbol": "DOGE", "type": "cryptocurrency", "subtype": "cryptocurrency", "unofficial_currency_code": null, "update_datetime": "2022-06-07T23:01:00Z", "market_identifier_code": "XNAS", "sector": null, "industry": null, "option_contract": null, "fixed_income": null } ] } ``` \=\*=\*=\*= #### /investments/transactions/get  #### Get investment transactions  The [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) endpoint allows developers to retrieve up to 24 months of user-authorized transaction data for investment accounts. Transactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Due to the potentially large number of investment transactions associated with an Item, results are paginated. Manipulate the count and offset parameters in conjunction with the `total_investment_transactions` response body field to fetch all available investment transactions. Note that Investments does not have a webhook to indicate when initial transaction data has loaded (unless you use the `async_update` option). Instead, if transactions data is not ready when [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) is first called, Plaid will wait for the data. For this reason, calling [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) immediately after Link may take up to one to two minutes to return. Data returned by the asynchronous investments extraction flow (when `async_update` is set to true) may not be immediately available to [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) . To be alerted when the data is ready to be fetched, listen for the `HISTORICAL_UPDATE` webhook. If no investments history is ready when [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) is called, it will return a `PRODUCT_NOT_READY` error. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **start\_date** (required, string) The earliest date for which to fetch transaction history. Dates should be formatted as YYYY-MM-DD. Format: date **end\_date** (required, string) The most recent date for which to fetch transaction history. Dates should be formatted as YYYY-MM-DD. Format: date **options** (object) An optional object to filter /investments/transactions/get results. If provided, must be non-null. **options->account\_ids** (\[string\]) An array of account\_ids to retrieve for the Item. **options->count** (integer) The number of transactions to fetch. Default: 100 Minimum: 1 Maximum: 500 **options->offset** (integer) The number of transactions to skip when fetching transaction history Default: 0 Minimum: 0 **options->async\_update** (boolean) If the Item was not initialized with the investments product via the products, required\_if\_supported\_products, or optional\_products array when calling /link/token/create, and async\_update is set to true, the initial Investments extraction will happen asynchronously. Plaid will subsequently fire a HISTORICAL\_UPDATE webhook when the extraction completes. When false, Plaid will wait to return a response until extraction completion and no HISTORICAL\_UPDATE webhook will fire. Note that while the extraction is happening asynchronously, calls to /investments/transactions/get and /investments/refresh will return PRODUCT\_NOT\_READY errors until the extraction completes. Default: false /investments/transactions/get Node▼ ```javascript const request: InvestmentsTransactionsGetRequest = { access_token: accessToken, start_date: '2019-01-01', end_date: '2019-06-10', }; try { const response = await plaidClient.investmentsTransactionsGet(request); const investmentTransactions = response.data.investment_transactions; } catch (error) { // handle error } ``` #### Response fields  **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **accounts** (\[object\]) The accounts for which transaction history is being fetched. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **securities** (\[object\]) All securities for which there is a corresponding transaction being fetched. **securities->security\_id** (string) A unique, Plaid-specific identifier for the security, used to associate securities with holdings. Like all Plaid identifiers, the security\_id is case sensitive. The security\_id may change if inherent details of the security change due to a corporate action, for example, in the event of a ticker symbol change or CUSIP change. **securities->isin** (nullable, string) 12-character ISIN, a globally unique securities identifier. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->cusip** (nullable, string) 9-character CUSIP, an identifier assigned to North American securities. A verified CUSIP Global Services license is required to receive this data. This field will be null by default for new customers, and null for existing customers starting March 12, 2024. If you would like access to this field, please start the verification process here. **securities->sedol** (deprecated, nullable, string) (Deprecated) 7-character SEDOL, an identifier assigned to securities in the UK. **securities->institution\_security\_id** (nullable, string) An identifier given to the security by the institution **securities->institution\_id** (nullable, string) If institution\_security\_id is present, this field indicates the Plaid institution\_id of the institution to whom the identifier belongs. **securities->proxy\_security\_id** (nullable, string) In certain cases, Plaid will provide the ID of another security whose performance resembles this security, typically when the original security has low volume, or when a private security can be modeled with a publicly traded security. **securities->name** (nullable, string) A descriptive name for the security, suitable for display. **securities->ticker\_symbol** (nullable, string) The security’s trading symbol for publicly traded securities, and otherwise a short identifier if available. **securities->is\_cash\_equivalent** (nullable, boolean) Indicates that a security is a highly liquid asset and can be treated like cash. **securities->type** (nullable, string) The security type of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security type. Valid security types are: cash: Cash, currency, and money market funds cryptocurrency: Digital or virtual currencies derivative: Options, warrants, and other derivative instruments equity: Domestic and foreign equities etf: Multi-asset exchange-traded investment funds fixed income: Bonds and certificates of deposit (CDs) loan: Loans and loan receivables mutual fund: Open- and closed-end vehicles pooling funds of multiple investors other: Unknown or other investment types **securities->subtype** (nullable, string) The security subtype of the holding. In rare instances, a null value is returned when institutional data is insufficient to determine the security subtype. Possible values: asset backed security, bill, bond, bond with warrants, cash, cash management bill, common stock, convertible bond, convertible equity, cryptocurrency, depositary receipt, depositary receipt on debt, etf, float rating note, fund of funds, hedge fund, limited partnership unit, medium term note, money market debt, mortgage backed security, municipal bond, mutual fund, note, option, other, preferred convertible, preferred equity, private equity fund, real estate investment trust, structured equity product, treasury inflation protected securities, unit, warrant. **securities->close\_price** (nullable, number) Price of the security at the close of the previous trading session. Null for non-public securities. If the security is a foreign currency this field will be updated daily and will be priced in USD. If the security is a cryptocurrency, this field will be updated multiple times a day. As crypto prices can fluctuate quickly and data may become stale sooner than other asset classes, refer to update\_datetime with the time when the price was last updated. Format: double **securities->close\_price\_as\_of** (nullable, string) Date for which close\_price is accurate. Always null if close\_price is null. Format: date **securities->update\_datetime** (nullable, string) Date and time at which close\_price is accurate, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Always null if close\_price is null. Format: date-time **securities->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the price given. Always null if unofficial\_currency\_code is non-null. **securities->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the security. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **securities->market\_identifier\_code** (nullable, string) The ISO-10383 Market Identifier Code of the exchange or market in which the security is being traded. **securities->sector** (nullable, string) The sector classification of the security, such as Finance, Health Technology, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->industry** (nullable, string) The industry classification of the security, such as Biotechnology, Airlines, etc. For a complete list of possible values, please refer to the "Sectors and Industries" spreadsheet. **securities->option\_contract** (nullable, object) Details about the option security. For the Sandbox environment, this data is currently only available if the Item is using a custom Sandbox user and the ticker field of the custom security follows the OCC Option Symbol standard with no spaces. For an example of simulating this in Sandbox, see the custom Sandbox GitHub. **securities->option\_contract->contract\_type** (string) The type of this option contract. It is one of: put: for Put option contracts call: for Call option contracts **securities->option\_contract->expiration\_date** (string) The expiration date for this option contract, in ISO 8601 format. Format: date **securities->option\_contract->strike\_price** (number) The strike price for this option contract, per share of security. Format: double **securities->option\_contract->underlying\_security\_ticker** (string) The ticker of the underlying security for this option contract. **securities->fixed\_income** (nullable, object) Details about the fixed income security. **securities->fixed\_income->yield\_rate** (nullable, object) Details about a fixed income security's expected rate of return. **securities->fixed\_income->yield\_rate->percentage** (number) The fixed income security's expected rate of return. Format: double **securities->fixed\_income->yield\_rate->type** (nullable, string) The type of rate which indicates how the predicted yield was calculated. It is one of: coupon: the annualized interest rate for securities with a one-year term or longer, such as treasury notes and bonds. coupon\_equivalent: the calculated equivalent for the annualized interest rate factoring in the discount rate and time to maturity, for shorter term, non-interest-bearing securities such as treasury bills. discount: the rate at which the present value or cost is discounted from the future value upon maturity, also known as the face value. yield: the total predicted rate of return factoring in both the discount rate and the coupon rate, applicable to securities such as exchange-traded bonds which can both be interest-bearing as well as sold at a discount off its face value. Possible values: coupon, coupon\_equivalent, discount, yield, null **securities->fixed\_income->maturity\_date** (nullable, string) The maturity date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->issue\_date** (nullable, string) The issue date for this fixed income security, in ISO 8601 format. Format: date **securities->fixed\_income->face\_value** (nullable, number) The face value that is paid upon maturity of the fixed income security, per unit of security. Format: double **investment\_transactions** (\[object\]) The transactions being fetched **investment\_transactions->investment\_transaction\_id** (string) The ID of the Investment transaction, unique across all Plaid transactions. Like all Plaid identifiers, the investment\_transaction\_id is case sensitive. **investment\_transactions->account\_id** (string) The account\_id of the account against which this transaction posted. **investment\_transactions->security\_id** (nullable, string) The security\_id to which this transaction is related. **investment\_transactions->date** (string) The ISO 8601 posting date for the transaction. This is typically the settlement date. Format: date **investment\_transactions->transaction\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) representing when the order type was initiated. This field is returned for select financial institutions and reflects the value provided by the institution. Format: date-time **investment\_transactions->name** (string) The institution’s description of the transaction. **investment\_transactions->quantity** (number) The number of units of the security involved in this transaction. Positive for buy transactions; negative for sell transactions. Format: double **investment\_transactions->amount** (number) The complete value of the transaction. Positive values when cash is debited, e.g. purchases of stock; negative values when cash is credited, e.g. sales of stock. Treatment remains the same for cash-only movements unassociated with securities. Format: double **investment\_transactions->price** (number) The price of the security at which this transaction occurred. Format: double **investment\_transactions->fees** (nullable, number) The combined value of all fees applied to this transaction Format: double **investment\_transactions->type** (string) Value is one of the following: buy: Buying an investment sell: Selling an investment cancel: A cancellation of a pending transaction cash: Activity that modifies a cash position fee: A fee on the account transfer: Activity which modifies a position, but not through buy/sell activity e.g. options exercise, portfolio transfer For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: buy, sell, cancel, cash, fee, transfer **investment\_transactions->subtype** (string) For descriptions of possible transaction types and subtypes, see the Investment transaction types schema. Possible values: account fee, adjustment, assignment, buy, buy to cover, contribution, deposit, distribution, dividend, dividend reinvestment, exercise, expire, fund fee, interest, interest receivable, interest reinvestment, legal fee, loan payment, long-term capital gain, long-term capital gain reinvestment, management fee, margin expense, merger, miscellaneous fee, non-qualified dividend, non-resident tax, pending credit, pending debit, qualified dividend, rebalance, return of principal, request, sell, sell short, send, short-term capital gain, short-term capital gain reinvestment, spin off, split, stock distribution, tax, tax withheld, trade, transfer, transfer fee, trust fee, unqualified gain, withdrawal **investment\_transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **investment\_transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the holding. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **total\_investment\_transactions** (integer) The total number of transactions available within the date range specified. If total\_investment\_transactions is larger than the size of the transactions array, more transactions are available and can be fetched via manipulating the offset parameter. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **is\_investments\_fallback\_item** (boolean) When true, this field indicates that the Item's portfolio was manually created with the Investments Fallback flow. Response Object ```json { "accounts": [ { "account_id": "5e66Dl6jNatx3nXPGwZ7UkJed4z6KBcZA4Rbe", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, { "account_id": "KqZZMoZmBWHJlz7yKaZjHZb78VNpaxfVa7e5z", "balances": { "available": null, "current": 320.76, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "5555", "name": "Plaid IRA", "official_name": null, "subtype": "ira", "type": "investment" }, { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "balances": { "available": null, "current": 23631.9805, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "6666", "name": "Plaid 401k", "official_name": null, "subtype": "401k", "type": "investment" } ], "investment_transactions": [ { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "amount": -8.72, "cancel_transaction_id": null, "date": "2020-05-29", "transaction_datetime": null, "fees": 0, "investment_transaction_id": "oq99Pz97joHQem4BNjXECev1E4B6L6sRzwANW", "iso_currency_code": "USD", "name": "INCOME DIV DIVIDEND RECEIVED", "price": 0, "quantity": 0, "security_id": "eW4jmnjd6AtjxXVrjmj6SX1dNEdZp3Cy8RnRQ", "subtype": "dividend", "type": "cash", "unofficial_currency_code": null }, { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "amount": -1289.01, "cancel_transaction_id": null, "date": "2020-05-28", "transaction_datetime": "2020-05-28T15:10:09Z", "fees": 7.99, "investment_transaction_id": "pK99jB9e7mtwjA435GpVuMvmWQKVbVFLWme57", "iso_currency_code": "USD", "name": "SELL Matthews Pacific Tiger Fund Insti Class", "price": 27.53, "quantity": -47.74104242992852, "security_id": "JDdP7XPMklt5vwPmDN45t3KAoWAPmjtpaW7DP", "subtype": "sell", "type": "sell", "unofficial_currency_code": null }, { "account_id": "rz99ex9ZQotvnjXdgQLEsR81e3ArPgulVWjGj", "amount": 7.7, "cancel_transaction_id": null, "date": "2020-05-27", "transaction_datetime": "2020-05-27T17:23:22Z", "fees": 7.99, "investment_transaction_id": "LKoo1ko93wtreBwM7yQnuQ3P5DNKbKSPRzBNv", "iso_currency_code": "USD", "name": "BUY DoubleLine Total Return Bond Fund", "price": 10.42, "quantity": 0.7388014749727547, "security_id": "NDVQrXQoqzt5v3bAe8qRt4A7mK7wvZCLEBBJk", "subtype": "buy", "type": "buy", "unofficial_currency_code": null } ], "item": { "available_products": [ "assets", "balance", "identity", "transactions" ], "billed_products": [ "auth", "investments" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_12", "item_id": "8Mqq5rqQ7Pcxq9MGDv3JULZ6yzZDLMCwoxGDq", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook" }, "request_id": "iv4q3ZlytOOthkv", "securities": [ { "close_price": 27, "close_price_as_of": null, "cusip": "577130834", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US5771308344", "iso_currency_code": "USD", "name": "Matthews Pacific Tiger Fund Insti Class", "proxy_security_id": null, "security_id": "JDdP7XPMklt5vwPmDN45t3KAoWAPmjtpaW7DP", "sedol": null, "ticker_symbol": "MIPTX", "type": "mutual fund", "subtype": "mutual fund", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Miscellaneous", "industry": "Investment Trusts or Mutual Funds", "option_contract": null, "fixed_income": null }, { "close_price": 10.42, "close_price_as_of": null, "cusip": "258620103", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US2586201038", "iso_currency_code": "USD", "name": "DoubleLine Total Return Bond Fund", "proxy_security_id": null, "security_id": "NDVQrXQoqzt5v3bAe8qRt4A7mK7wvZCLEBBJk", "sedol": null, "ticker_symbol": "DBLTX", "type": "mutual fund", "subtype": "mutual fund", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": null, "industry": null, "option_contract": null, "fixed_income": null }, { "close_price": 34.73, "close_price_as_of": null, "cusip": "84470P109", "institution_id": null, "institution_security_id": null, "is_cash_equivalent": false, "isin": "US84470P1093", "iso_currency_code": "USD", "name": "Southside Bancshares Inc.", "proxy_security_id": null, "security_id": "eW4jmnjd6AtjxXVrjmj6SX1dNEdZp3Cy8RnRQ", "sedol": null, "ticker_symbol": "SBSI", "type": "equity", "subtype": "common stock", "unofficial_currency_code": null, "update_datetime": null, "market_identifier_code": "XNAS", "sector": "Finance", "industry": "Regional Banks", "option_contract": null, "fixed_income": null } ], "total_investment_transactions": 3 } ``` \=\*=\*=\*= #### /investments/refresh  #### Refresh investment data  [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) is an optional endpoint for users of the Investments product. It initiates an on-demand extraction to fetch the newest investment holdings and transactions for an Item. This on-demand extraction takes place in addition to the periodic extractions that automatically occur one or more times per day for any Investments-enabled Item. If changes to investments are discovered after calling [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) , Plaid will fire webhooks: [HOLDINGS: DEFAULT\_UPDATE](https://plaid.com/docs/api/products/investments/index.html.md#holdings-default_update) if any new holdings are detected, and [INVESTMENTS\_TRANSACTIONS: DEFAULT\_UPDATE](https://plaid.com/docs/api/products/investments/index.html.md#investments_transactions-default_update) if any new investment transactions are detected. This webhook will typically not fire in the Sandbox environment, due to the lack of dynamic investment transactions and holdings data. To test this webhook in Sandbox, call [/sandbox/item/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) . Updated holdings and investment transactions can be fetched by calling [/investments/holdings/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentsholdingsget) and [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) . Note that the [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) endpoint is not supported by all institutions. If called on an Item from an institution that does not support this functionality, it will return a `PRODUCT_NOT_SUPPORTED` error. As this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests. [/investments/refresh](https://plaid.com/docs/api/products/investments/index.html.md#investmentsrefresh) is offered as an add-on to Investments and has a separate [fee model](https://plaid.com/docs/account/billing/index.html.md#per-request-flat-fee) . To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager. #### Request fields  **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. **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. /investments/refresh Node▼ ```javascript const request: InvestmentsRefreshRequest = { access_token: accessToken, }; try { await plaidClient.investmentsRefresh(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "1vwmF5TBQwiqfwP" } ``` ### Webhooks  Updates are sent to indicate that new holdings or investment transactions are available. \=\*=\*=\*= #### HOLDINGS: DEFAULT\_UPDATE  Fired when new or updated holdings have been detected on an investment account. The webhook typically fires in response to any newly added holdings or price changes to existing holdings, most commonly after market close. #### Properties  **webhook\_type** (string) HOLDINGS **webhook\_code** (string) DEFAULT\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **new\_holdings** (number) The number of new holdings reported since the last time this webhook was fired. **updated\_holdings** (number) The number of updated holdings reported since the last time this webhook was fired. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "HOLDINGS", "webhook_code": "DEFAULT_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_holdings": 19, "updated_holdings": 0, "environment": "production" } ``` \=\*=\*=\*= #### INVESTMENTS\_TRANSACTIONS: DEFAULT\_UPDATE  Fired when new transactions have been detected on an investment account. #### Properties  **webhook\_type** (string) INVESTMENTS\_TRANSACTIONS **webhook\_code** (string) DEFAULT\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **new\_investments\_transactions** (number) The number of new transactions reported since the last time this webhook was fired. **canceled\_investments\_transactions** (number) The number of canceled transactions reported since the last time this webhook was fired. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "INVESTMENTS_TRANSACTIONS", "webhook_code": "DEFAULT_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_investments_transactions": 16, "canceled_investments_transactions": 0, "environment": "production" } ``` \=\*=\*=\*= #### INVESTMENTS\_TRANSACTIONS: HISTORICAL\_UPDATE  Fired after an asynchronous extraction on an investments account. #### Properties  **webhook\_type** (string) INVESTMENTS\_TRANSACTIONS **webhook\_code** (string) HISTORICAL\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **new\_investments\_transactions** (number) The number of new transactions reported since the last time this webhook was fired. **canceled\_investments\_transactions** (number) The number of canceled transactions reported since the last time this webhook was fired. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "INVESTMENTS_TRANSACTIONS", "webhook_code": "HISTORICAL_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_investments_transactions": 16, "canceled_investments_transactions": 0, "environment": "production" } ``` --- # API - Layer | Plaid Docs Layer  ====== #### API reference for Layer endpoints  For how-to guidance, see the [Layer documentation](https://plaid.com/docs/layer/index.html.md) . | Endpoints | | | --- | --- | | [/session/token/create](https://plaid.com/docs/api/products/layer/index.html.md#sessiontokencreate) | Creates a Link token for a Layer session | | [/user\_account/session/get](https://plaid.com/docs/api/products/layer/index.html.md#user_accountsessionget) | Returns user permissioned account data | | Webhooks | | | --- | --- | | [LAYER\_AUTHENTICATION\_PASSED](https://plaid.com/docs/api/products/layer/index.html.md#layer_authentication_passed) | A user has been authenticated | | [SESSION\_FINISHED](https://plaid.com/docs/api/products/layer/index.html.md#session_finished) | A Layer session has finished | ### Endpoints  \=\*=\*=\*= #### /session/token/create  #### Create a Session Token  [/session/token/create](https://plaid.com/docs/api/products/layer/index.html.md#sessiontokencreate) is used to create a Link token for Layer. The returned Link token is used as an parameter when initializing the Link SDK. For more details, see the [Link flow overview](https://plaid.com/docs/link/index.html.md#link-flow-overview) . #### Request fields  **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. **template\_id** (required, string) The id of a template defined in Plaid Dashboard **user** (object) SessionTokenCreateRequestUser defines per-session user-specific data for /session/token/create. Required if the root-level user\_id field isn't included. **user->client\_user\_id** (required, string) 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. **user->user\_id** (string) The Plaid user\_id of the User associated with this webhook, warning, or error. **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 another app. The redirect\_uri should not contain any query parameters. When used in Production, 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. **android\_package\_name** (string) The name of your app's Android package. Required if using the session token to initialize Layer 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 session token for initializing Layer on other platforms, android\_package\_name must be left blank and redirect\_uri should be used instead. **webhook** (string) The destination URL to which any webhooks should be sent. If you use the same webhook listener for all Sandbox or all Production activity, set this value in the Layer template editor in the Dashboard instead. Only provide a value in this field if you need to use multiple webhook URLs per environment (an uncommon use case). If provided, a value in this field will take priority over webhook values set in the Layer template editor. Format: url /session/token/create Node▼ ```javascript const request: SessionTokenCreateRequest = { user: { client_user_id: 'user-abc' }, template_id: 'template_4uinBNe4B2x9' }; try { const response = await client.sessionTokenCreate(request); const linkToken = response.data.link.link_token; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **link** (object) Response data for /session/token/create intended for use with the Link SDK. **link->link\_token** (string) A Link token, which can be supplied to Link in order to initialize it and receive a public\_token. **link->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 **link->user\_id** (string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. Response Object ```json { "link": { "link_token": "link-sandbox-af1a0311-da53-4636-b754-dd15cc058176", "expiration": "2020-03-27T12:56:34Z" }, "request_id": "XQVgFigpGHXkb0b" } ``` \=\*=\*=\*= #### /user\_account/session/get  #### Retrieve User Account  This endpoint returns user permissioned account data, including identity and Item access tokens, for use with [Plaid Layer](https://plaid.com/docs/layer/index.html.md) . Note that end users are permitted to edit the prefilled identity data in the Link flow before sharing it with you; you should treat any identity data returned by this endpoint as user-submitted, unverified data. For a verification layer, you can add [Identity Verification](https://plaid.com/docs/identity-verification/index.html.md) to your flow, or check the submitted identity data against bank account data from linked accounts using [Identity Match](https://plaid.com/docs/identity/index.html.md#identity-match) . #### Request fields  **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** (required, string) The public token generated by the end user Layer session. /user\_account/session/get Node▼ ```javascript const request: UserAccountSessionGetRequest = { public_token: 'profile-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce992d', }; try { const response = await client.userAccountSessionGet(request); } catch (error) { // handle error } ``` #### Response fields  **identity** (nullable, object) The identity data permissioned by the end user during the authorization flow. **identity->name** (nullable, object) The user's first name and last name. string string **identity->address** (nullable, object) The user's address. **identity->address->city** (nullable, string) The full city name **identity->address->region** (nullable, string) The region or state. Example: "NC" **identity->address->street** (nullable, string) The full street address Example: "564 Main Street, APT 15" **identity->address->street2** (nullable, string) The second line street address **identity->address->postal\_code** (nullable, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **identity->address->country** (nullable, string) The ISO 3166-1 alpha-2 country code **identity->phone\_number** (string) The user's phone number in E.164 format **identity->email** (nullable, string) The user's email address. Note: email is currently not returned for users, and will be added later in 2025. **identity->date\_of\_birth** (nullable, string) The user's date of birth. **identity->ssn** (nullable, string) The user's social security number. **identity->ssn\_last\_4** (nullable, string) The last 4 digits of the user's social security number. string **items** (\[object\]) 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. **items->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. Response Object ```json { "identity": { "name": { "first_name": "Leslie", "last_name": "Knope" }, "address": { "street": "123 Main St.", "street2": "", "city": "Pawnee", "region": "IN", "postal_code": "41006", "country": "US" }, "email": "leslie@knope.com", "phone_number": "+14157452130", "date_of_birth": "1975-01-18", "ssn": "987654321", "ssn_last_4": "4321" }, "items": [ { "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "access_token": "access-sandbox-435beced-94e8-4df3-a181-1dde1cfa19f0" } ], "request_id": "m8MDnv9okwxFNBV" } ``` ### Webhooks  \=\*=\*=\*= #### LAYER\_AUTHENTICATION\_PASSED  Indicates that Plaid's authentication process has completed for a user and that Plaid has verified that the user owns their phone number. If you receive this webhook, you should skip your own OTP phone number verification flow for the user, even if the user does not complete the entire Link flow. If the user doesn't complete the full Link flow (as verified by your being able to successfully call [/user\_account/session/get](https://plaid.com/docs/api/products/layer/index.html.md#user_accountsessionget) using the `public_token` from the `onSuccess` callback) it is recommended that you implement [webhook verification](https://plaid.com/docs/api/webhooks/webhook-verification/index.html.md) or another technique to avoid webhook spoofing attacks. #### Properties  **webhook\_type** (string) LAYER **webhook\_code** (string) LAYER\_AUTHENTICATION\_PASSED **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production **link\_session\_id** (string) An identifier for the Link session these events occurred in **link\_token** (string) The Link token used to create the Link session these events are from API Object ```json { "webhook_type": "LAYER", "webhook_code": "LAYER_AUTHENTICATION_PASSED", "environment": "production", "link_session_id": "1daca4d5-9a0d-4e85-a2e9-1e905ecaa32e", "link_token": "link-sandbox-79e723b0-0e04-4248-8a33-15ceb6828a45" } ``` \=\*=\*=\*= #### SESSION\_FINISHED  Contains the state of a completed Link session, along with the public token(s) if available. By default, this webhook is sent only for sessions enabled for the Hosted Link flow (including Link Recovery flows), a Multi-Item Link flow, or a Layer flow. If you would like to receive this webhook for other sessions, contact your Account Manager or Support. This enablement will also enable the `EVENTS` webhook for all Link sessions and the ability to use [/link/token/get](https://plaid.com/docs/api/link/index.html.md#linktokenget) to retrieve events for non-Hosted-Link sessions. #### Properties  **webhook\_type** (string) LINK **webhook\_code** (string) SESSION\_FINISHED **status** (string) The final status of the Link session. Will always be "SUCCESS" or "EXITED". **link\_session\_id** (string) The identifier for the Link session. **link\_token** (string) The link token used to create the Link session. **public\_token** (deprecated, string) The public token generated by the Link session. This field has been deprecated; please use public\_tokens instead. **public\_tokens** (\[string\]) The public tokens generated by the Link session. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "LINK", "webhook_code": "SESSION_FINISHED", "status": "SUCCESS", "link_session_id": "356dbb28-7f98-44d1-8e6d-0cec580f3171", "link_token": "link-sandbox-af1a0311-da53-4636-b754-dd15cc058176", "public_tokens": [ "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d" ], "environment": "sandbox" } ``` --- # API - Liabilities | Plaid Docs Liabilities  ============ #### API reference for Liabilities endpoints and webhooks  For how-to guidance, see the [Liabilities documentation](https://plaid.com/docs/liabilities/index.html.md) . | Endpoints | | | --- | --- | | [/liabilities/get](https://plaid.com/docs/api/products/liabilities/index.html.md#liabilitiesget) | Fetch liabilities data | | Webhooks | | | --- | --- | | [DEFAULT\_UPDATE](https://plaid.com/docs/api/products/liabilities/index.html.md#default_update) | New or updated liabilities available | ### Endpoints  \=\*=\*=\*= #### /liabilities/get  #### Retrieve Liabilities data  The [/liabilities/get](https://plaid.com/docs/api/products/liabilities/index.html.md#liabilitiesget) endpoint returns various details about an Item with loan or credit accounts. Liabilities data is available primarily for US financial institutions, with some limited coverage of Canadian institutions. Currently supported account types are account type `credit` with account subtype `credit card` or `paypal`, and account type `loan` with account subtype `student` or `mortgage`. To limit accounts listed in Link to types and subtypes supported by Liabilities, you can use the `account_filters` parameter when [creating a Link token](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . The types of information returned by Liabilities can include balances and due dates, loan terms, and account details such as original loan amount and guarantor. Data is refreshed approximately once per day; the latest data can be retrieved by calling [/liabilities/get](https://plaid.com/docs/api/products/liabilities/index.html.md#liabilitiesget) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **options** (object) An optional object to filter /liabilities/get results. If provided, options cannot be null. **options->account\_ids** (\[string\]) A list of accounts to retrieve for the Item. An error will be returned if a provided account\_id is not associated with the Item /liabilities/get Node▼ ```javascript // Retrieve Liabilities data for an Item const request: LiabilitiesGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.liabilitiesGet(request); const liabilities = response.data.liabilities; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) An array of accounts associated with the Item **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **liabilities** (object) An object containing liability accounts **liabilities->credit** (nullable, \[object\]) The credit accounts returned. **liabilities->credit->account\_id** (nullable, string) The ID of the account that this liability belongs to. **liabilities->credit->aprs** (\[object\]) The various interest rates that apply to the account. APR information is not provided by all card issuers; if APR data is not available, this array will be empty. **liabilities->credit->aprs->apr\_percentage** (number) Annual Percentage Rate applied. Format: double **liabilities->credit->aprs->apr\_type** (string) The type of balance to which the APR applies. Possible values: balance\_transfer\_apr, cash\_apr, purchase\_apr, special **liabilities->credit->aprs->balance\_subject\_to\_apr** (nullable, number) Amount of money that is subjected to the APR if a balance was carried beyond payment due date. How it is calculated can vary by card issuer. It is often calculated as an average daily balance. Format: double **liabilities->credit->aprs->interest\_charge\_amount** (nullable, number) Amount of money charged due to interest from last statement. Format: double **liabilities->credit->is\_overdue** (nullable, boolean) true if a payment is currently overdue. Availability for this field is limited. **liabilities->credit->last\_payment\_amount** (nullable, number) The amount of the last payment. Format: double **liabilities->credit->last\_payment\_date** (nullable, string) The date of the last payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Availability for this field is limited. Format: date **liabilities->credit->last\_statement\_issue\_date** (nullable, string) The date of the last statement. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->credit->last\_statement\_balance** (nullable, number) The total amount owed as of the last statement issued Format: double **liabilities->credit->minimum\_payment\_amount** (nullable, number) The minimum payment due for the next billing cycle. Format: double **liabilities->credit->next\_payment\_due\_date** (nullable, string) The due date for the next payment. The due date is null if a payment is not expected. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage** (nullable, \[object\]) The mortgage accounts returned. **liabilities->mortgage->account\_id** (string) The ID of the account that this liability belongs to. **liabilities->mortgage->account\_number** (nullable, string) The account number of the loan. **liabilities->mortgage->current\_late\_fee** (nullable, number) The current outstanding amount charged for late payment. Format: double **liabilities->mortgage->escrow\_balance** (nullable, number) Total amount held in escrow to pay taxes and insurance on behalf of the borrower. Format: double **liabilities->mortgage->has\_pmi** (nullable, boolean) Indicates whether the borrower has private mortgage insurance in effect. **liabilities->mortgage->has\_prepayment\_penalty** (nullable, boolean) Indicates whether the borrower will pay a penalty for early payoff of mortgage. **liabilities->mortgage->interest\_rate** (object) Object containing metadata about the interest rate for the mortgage. **liabilities->mortgage->interest\_rate->percentage** (nullable, number) Percentage value (interest rate of current mortgage, not APR) of interest payable on a loan. Format: double **liabilities->mortgage->interest\_rate->type** (nullable, string) The type of interest charged (fixed or variable). **liabilities->mortgage->last\_payment\_amount** (nullable, number) The amount of the last payment. Format: double **liabilities->mortgage->last\_payment\_date** (nullable, string) The date of the last payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->loan\_type\_description** (nullable, string) Description of the type of loan, for example conventional, fixed, or variable. This field is provided directly from the loan servicer and does not have an enumerated set of possible values. **liabilities->mortgage->loan\_term** (nullable, string) Full duration of mortgage as at origination (e.g. 10 year). **liabilities->mortgage->maturity\_date** (nullable, string) Original date on which mortgage is due in full. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->next\_monthly\_payment** (nullable, number) The amount of the next payment. Format: double **liabilities->mortgage->next\_payment\_due\_date** (nullable, string) The due date for the next payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->origination\_date** (nullable, string) The date on which the loan was initially lent. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->mortgage->origination\_principal\_amount** (nullable, number) The original principal balance of the mortgage. Format: double **liabilities->mortgage->past\_due\_amount** (nullable, number) Amount of loan (principal + interest) past due for payment. Format: double **liabilities->mortgage->property\_address** (object) Object containing fields describing property address. **liabilities->mortgage->property\_address->city** (nullable, string) The city name. **liabilities->mortgage->property\_address->country** (nullable, string) The ISO 3166-1 alpha-2 country code. **liabilities->mortgage->property\_address->postal\_code** (nullable, string) The five or nine digit postal code. **liabilities->mortgage->property\_address->region** (nullable, string) The region or state (example "NC"). **liabilities->mortgage->property\_address->street** (nullable, string) The full street address (example "564 Main Street, Apt 15"). **liabilities->mortgage->ytd\_interest\_paid** (nullable, number) The year to date (YTD) interest paid. Format: double **liabilities->mortgage->ytd\_principal\_paid** (nullable, number) The YTD principal paid. Format: double **liabilities->student** (nullable, \[object\]) The student loan accounts returned. **liabilities->student->account\_id** (nullable, string) The ID of the account that this liability belongs to. Each account can only contain one liability. **liabilities->student->account\_number** (nullable, string) The account number of the loan. For some institutions, this may be a masked version of the number (e.g., the last 4 digits instead of the entire number). **liabilities->student->disbursement\_dates** (nullable, \[string\]) The dates on which loaned funds were disbursed or will be disbursed. These are often in the past. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->expected\_payoff\_date** (nullable, string) The date when the student loan is expected to be paid off. Availability for this field is limited. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->guarantor** (nullable, string) The guarantor of the student loan. **liabilities->student->interest\_rate\_percentage** (number) The interest rate on the loan as a percentage. Format: double **liabilities->student->is\_overdue** (nullable, boolean) true if a payment is currently overdue. Availability for this field is limited. **liabilities->student->last\_payment\_amount** (nullable, number) The amount of the last payment. Format: double **liabilities->student->last\_payment\_date** (nullable, string) The date of the last payment. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->last\_statement\_balance** (nullable, number) The total amount owed as of the last statement issued Format: double **liabilities->student->last\_statement\_issue\_date** (nullable, string) The date of the last statement. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->loan\_name** (nullable, string) The type of loan, e.g., "Consolidation Loans". **liabilities->student->loan\_status** (object) An object representing the status of the student loan **liabilities->student->loan\_status->end\_date** (nullable, string) The date until which the loan will be in its current status. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->loan\_status->type** (nullable, string) The status type of the student loan Possible values: cancelled, charged off, claim, consolidated, deferment, delinquent, discharged, extension, forbearance, in grace, in military, in school, not fully disbursed, other, paid in full, refunded, repayment, transferred, pending idr **liabilities->student->minimum\_payment\_amount** (nullable, number) The minimum payment due for the next billing cycle. There are some exceptions: Some institutions require a minimum payment across all loans associated with an account number. Our API presents that same minimum payment amount on each loan. The institutions that do this are: Great Lakes ( ins\_116861), Firstmark (ins\_116295), Commonbond Firstmark Services (ins\_116950), Granite State (ins\_116308), and Oklahoma Student Loan Authority (ins\_116945). Firstmark (ins\_116295 ) and Navient (ins\_116248) will display as $0 if there is an autopay program in effect. Format: double **liabilities->student->next\_payment\_due\_date** (nullable, string) The due date for the next payment. The due date is null if a payment is not expected. A payment is not expected if loan\_status.type is deferment, in\_school, consolidated, paid in full, or transferred. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->origination\_date** (nullable, string) The date on which the loan was initially lent. Dates are returned in an ISO 8601 format (YYYY-MM-DD). Format: date **liabilities->student->origination\_principal\_amount** (nullable, number) The original principal balance of the loan. Format: double **liabilities->student->outstanding\_interest\_amount** (nullable, number) The total dollar amount of the accrued interest balance. For Sallie Mae ( ins\_116944), this amount is included in the current balance of the loan, so this field will return as null. Format: double **liabilities->student->payment\_reference\_number** (nullable, string) The relevant account number that should be used to reference this loan for payments. In the majority of cases, payment\_reference\_number will match account\_number, but in some institutions, such as Great Lakes (ins\_116861), it will be different. **liabilities->student->repayment\_plan** (object) An object representing the repayment plan for the student loan **liabilities->student->repayment\_plan->description** (nullable, string) The description of the repayment plan as provided by the servicer. **liabilities->student->repayment\_plan->type** (nullable, string) The type of the repayment plan. Possible values: extended graduated, extended standard, graduated, income-contingent repayment, income-based repayment, income-sensitive repayment, interest-only, other, pay as you earn, revised pay as you earn, standard, saving on a valuable education, null **liabilities->student->sequence\_number** (nullable, string) The sequence number of the student loan. Heartland ECSI (ins\_116948) does not make this field available. **liabilities->student->servicer\_address** (object) The address of the student loan servicer. This is generally the remittance address to which payments should be sent. **liabilities->student->servicer\_address->city** (nullable, string) The full city name **liabilities->student->servicer\_address->region** (nullable, string) The region or state Example: "NC" **liabilities->student->servicer\_address->street** (nullable, string) The full street address Example: "564 Main Street, APT 15" **liabilities->student->servicer\_address->postal\_code** (nullable, string) The postal code **liabilities->student->servicer\_address->country** (nullable, string) The ISO 3166-1 alpha-2 country code **liabilities->student->ytd\_interest\_paid** (nullable, number) The year to date (YTD) interest paid. Availability for this field is limited. Format: double **liabilities->student->ytd\_principal\_paid** (nullable, number) The year to date (YTD) principal paid. Availability for this field is limited. Format: double **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "balances": { "available": null, "current": 410, "iso_currency_code": "USD", "limit": 2000, "unofficial_currency_code": null }, "mask": "3333", "name": "Plaid Credit Card", "official_name": "Plaid Diamond 12.5% APR Interest Credit Card", "subtype": "credit card", "type": "credit" }, { "account_id": "Pp1Vpkl9w8sajvK6oEEKtr7vZxBnGpf7LxxLE", "balances": { "available": null, "current": 65262, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "7777", "name": "Plaid Student Loan", "official_name": null, "subtype": "student", "type": "loan" }, { "account_id": "BxBXxLj1m4HMXBm9WZJyUg9XLd4rKEhw8Pb1J", "balances": { "available": null, "current": 56302.06, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "8888", "name": "Plaid Mortgage", "official_name": null, "subtype": "mortgage", "type": "loan" } ], "item": { "available_products": [ "balance", "investments" ], "billed_products": [ "assets", "auth", "identity", "liabilities", "transactions" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "liabilities": { "credit": [ { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "aprs": [ { "apr_percentage": 15.24, "apr_type": "balance_transfer_apr", "balance_subject_to_apr": 1562.32, "interest_charge_amount": 130.22 }, { "apr_percentage": 27.95, "apr_type": "cash_apr", "balance_subject_to_apr": 56.22, "interest_charge_amount": 14.81 }, { "apr_percentage": 12.5, "apr_type": "purchase_apr", "balance_subject_to_apr": 157.01, "interest_charge_amount": 25.66 }, { "apr_percentage": 0, "apr_type": "special", "balance_subject_to_apr": 1000, "interest_charge_amount": 0 } ], "is_overdue": false, "last_payment_amount": 168.25, "last_payment_date": "2019-05-22", "last_statement_issue_date": "2019-05-28", "last_statement_balance": 1708.77, "minimum_payment_amount": 20, "next_payment_due_date": "2020-05-28" } ], "mortgage": [ { "account_id": "BxBXxLj1m4HMXBm9WZJyUg9XLd4rKEhw8Pb1J", "account_number": "3120194154", "current_late_fee": 25, "escrow_balance": 3141.54, "has_pmi": true, "has_prepayment_penalty": true, "interest_rate": { "percentage": 3.99, "type": "fixed" }, "last_payment_amount": 3141.54, "last_payment_date": "2019-08-01", "loan_term": "30 year", "loan_type_description": "conventional", "maturity_date": "2045-07-31", "next_monthly_payment": 3141.54, "next_payment_due_date": "2019-11-15", "origination_date": "2015-08-01", "origination_principal_amount": 425000, "past_due_amount": 2304, "property_address": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "ytd_interest_paid": 12300.4, "ytd_principal_paid": 12340.5 } ], "student": [ { "account_id": "Pp1Vpkl9w8sajvK6oEEKtr7vZxBnGpf7LxxLE", "account_number": "4277075694", "disbursement_dates": [ "2002-08-28" ], "expected_payoff_date": "2032-07-28", "guarantor": "DEPT OF ED", "interest_rate_percentage": 5.25, "is_overdue": false, "last_payment_amount": 138.05, "last_payment_date": "2019-04-22", "last_statement_issue_date": "2019-04-28", "last_statement_balance": 1708.77, "loan_name": "Consolidation", "loan_status": { "end_date": "2032-07-28", "type": "repayment" }, "minimum_payment_amount": 25, "next_payment_due_date": "2019-05-28", "origination_date": "2002-08-28", "origination_principal_amount": 25000, "outstanding_interest_amount": 6227.36, "payment_reference_number": "4277075694", "pslf_status": { "estimated_eligibility_date": "2021-01-01", "payments_made": 200, "payments_remaining": 160 }, "repayment_plan": { "description": "Standard Repayment", "type": "standard" }, "sequence_number": "1", "servicer_address": { "city": "San Matias", "country": "US", "postal_code": "99415", "region": "CA", "street": "123 Relaxation Road" }, "ytd_interest_paid": 280.55, "ytd_principal_paid": 271.65 } ] }, "request_id": "dTnnm60WgKGLnKL" } ``` ### Webhooks  Liabilities webhooks are sent to indicate that new loans or updated loan fields for existing accounts are available. \=\*=\*=\*= #### DEFAULT\_UPDATE  The webhook of type `LIABILITIES` and code `DEFAULT_UPDATE` will be fired when new or updated liabilities have been detected on a liabilities item. #### Properties  **webhook\_type** (string) LIABILITIES **webhook\_code** (string) DEFAULT\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **account\_ids\_with\_new\_liabilities** (\[string\]) An array of account\_id's for accounts that contain new liabilities.' **account\_ids\_with\_updated\_liabilities** (object) An object with keys of account\_id's that are mapped to their respective liabilities fields that changed. Example: { "XMBvvyMGQ1UoLbKByoMqH3nXMj84ALSdE5B58": \["past\_amount\_due"\] } **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "LIABILITIES", "webhook_code": "DEFAULT_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "account_ids_with_new_liabilities": [ "XMBvvyMGQ1UoLbKByoMqH3nXMj84ALSdE5B58", "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp" ], "account_ids_with_updated_liabilities": { "XMBvvyMGQ1UoLbKByoMqH3nXMj84ALSdE5B58": [ "past_amount_due" ] }, "environment": "production" } ``` --- # API - Monitor | Plaid Docs Monitor  ======== #### API reference for Monitor endpoints and webhooks  For how-to guidance, see the [Monitor documentation](https://plaid.com/docs/monitor/index.html.md) . | Endpoints | | | --- | --- | | [/watchlist\_screening/individual/create](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualcreate) | Create a watchlist screening for a person | | [/watchlist\_screening/individual/get](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualget) | Retrieve an individual watchlist screening | | [/watchlist\_screening/individual/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividuallist) | List individual watchlist screenings | | [/watchlist\_screening/individual/update](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualupdate) | Update individual watchlist screening | | [/watchlist\_screening/individual/history/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualhistorylist) | List history for entity watchlist screenings | | [/watchlist\_screening/individual/review/create](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualreviewcreate) | Create a review for an individual watchlist screening | | [/watchlist\_screening/individual/review/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualreviewlist) | List reviews for individual watchlist screenings | | [/watchlist\_screening/individual/hit/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualhitlist) | List hits for individual watchlist screenings | | [/watchlist\_screening/individual/program/get](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualprogramget) | Get individual watchlist screening programs | | [/watchlist\_screening/individual/program/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningindividualprogramlist) | List individual watchlist screening programs | | [/watchlist\_screening/entity/create](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentitycreate) | Create a watchlist screening for an entity | | [/watchlist\_screening/entity/get](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityget) | Retrieve an individual watchlist screening | | [/watchlist\_screening/entity/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentitylist) | List individual watchlist screenings | | [/watchlist\_screening/entity/update](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityupdate) | Update individual watchlist screening | | [/watchlist\_screening/entity/history/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityhistorylist) | List history for individual watchlist screenings | | [/watchlist\_screening/entity/review/create](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityreviewcreate) | Create a review for an individual watchlist screening | | [/watchlist\_screening/entity/review/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityreviewlist) | List reviews for individual watchlist screenings | | [/watchlist\_screening/entity/hit/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityhitlist) | List hits for individual watchlist screenings | | [/watchlist\_screening/entity/program/get](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityprogramget) | Get individual watchlist screening programs | | [/watchlist\_screening/entity/program/list](https://plaid.com/docs/api/products/monitor/index.html.md#watchlist_screeningentityprogramlist) | List individual watchlist screening programs | | See also | | | --- | --- | | [/dashboard\_user/get](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userget) | Retrieve information about a dashboard user | | [/dashboard\_user/list](https://plaid.com/docs/api/kyc-aml-users/index.html.md#dashboard_userlist) | List dashboard users | | Webhooks | | | --- | --- | | [SCREENING: STATUS\_UPDATED](https://plaid.com/docs/api/products/monitor/index.html.md#screening-status_updated) | The status of an individual watchlist screening has changed | | [ENTITY\_SCREENING: STATUS\_UPDATED](https://plaid.com/docs/api/products/monitor/index.html.md#entity_screening-status_updated) | The status of an entity watchlist screening has changed | ### Endpoints  \=\*=\*=\*= #### /watchlist\_screening/individual/create  #### Create a watchlist screening for a person  Create a new Watchlist Screening to check your customer against watchlists defined in the associated Watchlist Program. If your associated program has ongoing screening enabled, this is the profile information that will be used to monitor your customer over time. #### Request fields  **search\_terms** (required, object) Search inputs for creating a watchlist screening **search\_terms->watchlist\_program\_id** (required, string) ID of the associated program. **search\_terms->legal\_name** (required, string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **search\_terms->document\_number** (string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **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. /watchlist\_screening/individual/create Node▼ ```javascript const request: WatchlistScreeningIndividualCreateRequest = { search_terms: { watchlist_program_id: 'prg_2eRPsDnL66rZ7H', legal_name: 'Aleksey Potemkin', date_of_birth: '1990-05-29', document_number: 'C31195855', country: 'US', }, client_user_id: 'example-client-user-id-123', }; try { const response = await client.watchlistScreeningIndividualCreate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated screening. **search\_terms** (object) Search terms for creating an individual watchlist screening **search\_terms->watchlist\_program\_id** (string) ID of the associated program. **search\_terms->legal\_name** (string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "scr_52xR9LKo77r1Np", "search_terms": { "watchlist_program_id": "prg_2eRPsDnL66rZ7H", "legal_name": "Aleksey Potemkin", "date_of_birth": "1990-05-29", "document_number": "C31195855", "country": "US", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/get  #### Retrieve an individual watchlist screening  Retrieve a previously created individual watchlist screening #### Request fields  **watchlist\_screening\_id** (required, string) ID of the associated screening. **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\_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. /watchlist\_screening/individual/get\` Node▼ ```javascript const request: WatchlistScreeningIndividualGetRequest = { watchlist_screening_id: 'scr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningIndividualGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated screening. **search\_terms** (object) Search terms for creating an individual watchlist screening **search\_terms->watchlist\_program\_id** (string) ID of the associated program. **search\_terms->legal\_name** (string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "scr_52xR9LKo77r1Np", "search_terms": { "watchlist_program_id": "prg_2eRPsDnL66rZ7H", "legal_name": "Aleksey Potemkin", "date_of_birth": "1990-05-29", "document_number": "C31195855", "country": "US", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/list  #### List Individual Watchlist Screenings  List previously created watchlist screenings for individuals #### Request fields  **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\_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. **watchlist\_program\_id** (required, string) ID of the associated program. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **assignee** (string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/individual/list Node▼ ```javascript const request: WatchlistScreeningIndividualListRequest = { watchlist_program_id: 'prg_2eRPsDnL66rZ7H', client_user_id: 'example-client-user-id-123', }; try { const response = await client.watchlistScreeningIndividualList(request); } catch (error) { // handle error } ``` #### Response fields  **watchlist\_screenings** (\[object\]) List of individual watchlist screenings **watchlist\_screenings->id** (string) ID of the associated screening. **watchlist\_screenings->search\_terms** (object) Search terms for creating an individual watchlist screening **watchlist\_screenings->search\_terms->watchlist\_program\_id** (string) ID of the associated program. **watchlist\_screenings->search\_terms->legal\_name** (string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **watchlist\_screenings->search\_terms->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **watchlist\_screenings->search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **watchlist\_screenings->search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **watchlist\_screenings->search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **watchlist\_screenings->assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **watchlist\_screenings->status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **watchlist\_screenings->client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **watchlist\_screenings->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **watchlist\_screenings->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **watchlist\_screenings->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **watchlist\_screenings->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "watchlist_screenings": [ { "id": "scr_52xR9LKo77r1Np", "search_terms": { "watchlist_program_id": "prg_2eRPsDnL66rZ7H", "legal_name": "Aleksey Potemkin", "date_of_birth": "1990-05-29", "document_number": "C31195855", "country": "US", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/update  #### Update individual watchlist screening  Update a specific individual watchlist screening. This endpoint can be used to add additional customer information, correct outdated information, add a reference id, assign the individual to a reviewer, and update which program it is associated with. Please note that you may not update `search_terms` and `status` at the same time since editing `search_terms` may trigger an automatic `status` change. #### Request fields  **watchlist\_screening\_id** (required, string) ID of the associated screening. **search\_terms** (object) Search terms for editing an individual watchlist screening **search\_terms->watchlist\_program\_id** (string) ID of the associated program. **search\_terms->legal\_name** (string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->date\_of\_birth** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **search\_terms->document\_number** (string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **assignee** (string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **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. **reset\_fields** (\[string\]) A list of fields to reset back to null Possible values: assignee /watchlist\_screening/individual/update Node▼ ```javascript const request: WatchlistScreeningIndividualUpdateRequest = { watchlist_screening_id: 'scr_52xR9LKo77r1Np', status: 'cleared', }; try { const response = await client.watchlistScreeningIndividualUpdate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated screening. **search\_terms** (object) Search terms for creating an individual watchlist screening **search\_terms->watchlist\_program\_id** (string) ID of the associated program. **search\_terms->legal\_name** (string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "scr_52xR9LKo77r1Np", "search_terms": { "watchlist_program_id": "prg_2eRPsDnL66rZ7H", "legal_name": "Aleksey Potemkin", "date_of_birth": "1990-05-29", "document_number": "C31195855", "country": "US", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/history/list  #### List history for individual watchlist screenings  List all changes to the individual watchlist screening in reverse-chronological order. If the watchlist screening has not been edited, no history will be returned. #### Request fields  **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\_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. **watchlist\_screening\_id** (required, string) ID of the associated screening. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/individual/history/list Node▼ ```javascript const request: WatchlistScreeningIndividualHistoryListRequest = { watchlist_screening_id: 'scr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningIndividualHistoryList( request, ); } catch (error) { // handle error } ``` #### Response fields  **watchlist\_screenings** (\[object\]) List of individual watchlist screenings **watchlist\_screenings->id** (string) ID of the associated screening. **watchlist\_screenings->search\_terms** (object) Search terms for creating an individual watchlist screening **watchlist\_screenings->search\_terms->watchlist\_program\_id** (string) ID of the associated program. **watchlist\_screenings->search\_terms->legal\_name** (string) The legal name of the individual being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **watchlist\_screenings->search\_terms->date\_of\_birth** (nullable, string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **watchlist\_screenings->search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **watchlist\_screenings->search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **watchlist\_screenings->search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **watchlist\_screenings->assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **watchlist\_screenings->status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **watchlist\_screenings->client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **watchlist\_screenings->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **watchlist\_screenings->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **watchlist\_screenings->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **watchlist\_screenings->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "watchlist_screenings": [ { "id": "scr_52xR9LKo77r1Np", "search_terms": { "watchlist_program_id": "prg_2eRPsDnL66rZ7H", "legal_name": "Aleksey Potemkin", "date_of_birth": "1990-05-29", "document_number": "C31195855", "country": "US", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/review/create  #### Create a review for an individual watchlist screening  Create a review for the individual watchlist screening. Reviews are compliance reports created by users in your organization regarding the relevance of potential hits found by Plaid. #### Request fields  **confirmed\_hits** (required, \[string\]) Hits to mark as a true positive after thorough manual review. These hits will never recur or be updated once dismissed. In most cases, confirmed hits indicate that the customer should be rejected. **dismissed\_hits** (required, \[string\]) Hits to mark as a false positive after thorough manual review. These hits will never recur or be updated once dismissed. **comment** (string) A comment submitted by a team member as part of reviewing a watchlist screening. **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. **watchlist\_screening\_id** (required, string) ID of the associated screening. /watchlist\_screening/individual/review/create Node▼ ```javascript const request: WatchlistScreeningIndividualReviewCreateRequest = { confirmed_hits: ['scrhit_52xR9LKo77r1Np'], dismissed_hits: [], watchlist_screening_id: 'scr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningIndividualReviewCreate( request, ); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated review. **confirmed\_hits** (\[string\]) Hits marked as a true positive after thorough manual review. These hits will never recur or be updated once dismissed. In most cases, confirmed hits indicate that the customer should be rejected. **dismissed\_hits** (\[string\]) Hits marked as a false positive after thorough manual review. These hits will never recur or be updated once dismissed. **comment** (nullable, string) A comment submitted by a team member as part of reviewing a watchlist screening. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "rev_aCLNRxK3UVzn2r", "confirmed_hits": [ "scrhit_52xR9LKo77r1Np" ], "dismissed_hits": [ "scrhit_52xR9LKo77r1Np" ], "comment": "These look like legitimate matches, rejecting the customer.", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/review/list  #### List reviews for individual watchlist screenings  List all reviews for the individual watchlist screening. #### Request fields  **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\_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. **watchlist\_screening\_id** (required, string) ID of the associated screening. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/individual/review/list Node▼ ```javascript const request: WatchlistScreeningIndividualReviewListRequest = { watchlist_screening_id: 'scr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningIndividualReviewList(request); } catch (error) { // handle error } ``` #### Response fields  **watchlist\_screening\_reviews** (\[object\]) List of screening reviews **watchlist\_screening\_reviews->id** (string) ID of the associated review. **watchlist\_screening\_reviews->confirmed\_hits** (\[string\]) Hits marked as a true positive after thorough manual review. These hits will never recur or be updated once dismissed. In most cases, confirmed hits indicate that the customer should be rejected. **watchlist\_screening\_reviews->dismissed\_hits** (\[string\]) Hits marked as a false positive after thorough manual review. These hits will never recur or be updated once dismissed. **watchlist\_screening\_reviews->comment** (nullable, string) A comment submitted by a team member as part of reviewing a watchlist screening. **watchlist\_screening\_reviews->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **watchlist\_screening\_reviews->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **watchlist\_screening\_reviews->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **watchlist\_screening\_reviews->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "watchlist_screening_reviews": [ { "id": "rev_aCLNRxK3UVzn2r", "confirmed_hits": [ "scrhit_52xR9LKo77r1Np" ], "dismissed_hits": [ "scrhit_52xR9LKo77r1Np" ], "comment": "These look like legitimate matches, rejecting the customer.", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/hit/list  #### List hits for individual watchlist screening  List all hits found by Plaid for a particular individual watchlist screening. #### Request fields  **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\_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. **watchlist\_screening\_id** (required, string) ID of the associated screening. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/individual/hit/list Node▼ ```javascript const request: WatchlistScreeningIndividualHitListRequest = { watchlist_screening_id: 'scr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningIndividualHitList(request); } catch (error) { // handle error } ``` #### Response fields  **watchlist\_screening\_hits** (\[object\]) List of individual watchlist screening hits **watchlist\_screening\_hits->id** (string) ID of the associated screening hit. **watchlist\_screening\_hits->review\_status** (string) The current state of review. All watchlist screening hits begin in a pending\_review state but can be changed by creating a review. When a hit is in the pending\_review state, it will always show the latest version of the watchlist data Plaid has available and be compared against the latest customer information saved in the watchlist screening. Once a hit has been marked as confirmed or dismissed it will no longer be updated so that the state is as it was when the review was first conducted. Possible values: confirmed, pending\_review, dismissed **watchlist\_screening\_hits->first\_active** (string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_screening\_hits->inactive\_since** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_screening\_hits->historical\_since** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_screening\_hits->list\_code** (string) Shorthand identifier for a specific screening list for individuals. AU\_CON: Australia Department of Foreign Affairs and Trade Consolidated List CA\_CON: Government of Canada Consolidated List of Sanctions EU\_CON: European External Action Service Consolidated List IZ\_CIA: CIA List of Chiefs of State and Cabinet Members IZ\_IPL: Interpol Red Notices for Wanted Persons List IZ\_PEP: Politically Exposed Persons List IZ\_UNC: United Nations Consolidated Sanctions IZ\_WBK: World Bank Listing of Ineligible Firms and Individuals UK\_HMC: UK HM Treasury Consolidated List US\_DPL: Bureau of Industry and Security Denied Persons List US\_DTC: US Department of State AECA Debarred US\_FBI: US Department of Justice FBI Wanted List US\_FSE: US OFAC Foreign Sanctions Evaders US\_ISN: US Department of State Nonproliferation Sanctions US\_PLC: US OFAC Palestinian Legislative Council US\_SAM: US System for Award Management Exclusion List US\_SDN: US OFAC Specially Designated Nationals List US\_SSI: US OFAC Sectoral Sanctions Identifications SG\_SOF: Government of Singapore Terrorists and Terrorist Entities TR\_TWL: Government of Turkey Terrorist Wanted List TR\_DFD: Government of Turkey Domestic Freezing Decisions TR\_FOR: Government of Turkey Foreign Freezing Requests TR\_WMD: Government of Turkey Weapons of Mass Destruction TR\_CMB: Government of Turkey Capital Markets Board Possible values: AU\_CON, CA\_CON, EU\_CON, IZ\_CIA, IZ\_IPL, IZ\_PEP, IZ\_UNC, IZ\_WBK, UK\_HMC, US\_DPL, US\_DTC, US\_FBI, US\_FSE, US\_ISN, US\_MBS, US\_PLC, US\_SAM, US\_SDN, US\_SSI, SG\_SOF, TR\_TWL, TR\_DFD, TR\_FOR, TR\_WMD, TR\_CMB **watchlist\_screening\_hits->plaid\_uid** (string) A universal identifier for a watchlist individual that is stable across searches and updates. **watchlist\_screening\_hits->source\_uid** (nullable, string) The identifier provided by the source sanction or watchlist. When one is not provided by the source, this is null. **watchlist\_screening\_hits->analysis** (object) Analysis information describing why a screening hit matched the provided user information **watchlist\_screening\_hits->analysis->dates\_of\_birth** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->analysis->documents** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->analysis->locations** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->analysis->names** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->analysis->search\_terms\_version** (integer) The version of the screening's search\_terms that were compared when the screening hit was added. screening hits are immutable once they have been reviewed. If changes are detected due to updates to the screening's search\_terms, the associated program, or the list's source data prior to review, the screening hit will be updated to reflect those changes. **watchlist\_screening\_hits->data** (object) Information associated with the watchlist hit **watchlist\_screening\_hits->data->dates\_of\_birth** (\[object\]) Dates of birth associated with the watchlist hit **watchlist\_screening\_hits->data->dates\_of\_birth->analysis** (object) Summary object reflecting the match result of the associated data **watchlist\_screening\_hits->data->dates\_of\_birth->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->data->dates\_of\_birth->data** (object) A date range with a start and end date **watchlist\_screening\_hits->data->dates\_of\_birth->data->beginning** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **watchlist\_screening\_hits->data->dates\_of\_birth->data->ending** (string) A date in the format YYYY-MM-DD (RFC 3339 Section 5.6). Format: date **watchlist\_screening\_hits->data->documents** (\[object\]) Documents associated with the watchlist hit **watchlist\_screening\_hits->data->documents->analysis** (object) Summary object reflecting the match result of the associated data **watchlist\_screening\_hits->data->documents->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->data->documents->data** (object) An official document, usually issued by a governing body or institution, with an associated identifier. **watchlist\_screening\_hits->data->documents->data->type** (string) The kind of official document represented by this object. birth\_certificate - A certificate of birth drivers\_license - A license to operate a motor vehicle immigration\_number - Immigration or residence documents military\_id - Identification issued by a military group other - Any document not covered by other categories passport - An official passport issue by a government personal\_identification - Any generic personal identification that is not covered by other categories ration\_card - Identification that entitles the holder to rations ssn - United States Social Security Number student\_id - Identification issued by an educational institution tax\_id - Identification issued for the purpose of collecting taxes travel\_document - Visas, entry permits, refugee documents, etc. voter\_id - Identification issued for the purpose of voting Possible values: birth\_certificate, drivers\_license, immigration\_number, military\_id, other, passport, personal\_identification, ration\_card, ssn, student\_id, tax\_id, travel\_document, voter\_id **watchlist\_screening\_hits->data->documents->data->number** (string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **watchlist\_screening\_hits->data->locations** (\[object\]) Locations associated with the watchlist hit **watchlist\_screening\_hits->data->locations->analysis** (object) Summary object reflecting the match result of the associated data **watchlist\_screening\_hits->data->locations->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->data->locations->data** (object) Location information for the associated individual watchlist hit **watchlist\_screening\_hits->data->locations->data->full** (string) The full location string, potentially including elements like street, city, postal codes and country codes. Note that this is not necessarily a complete or well-formatted address. **watchlist\_screening\_hits->data->locations->data->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **watchlist\_screening\_hits->data->names** (\[object\]) Names associated with the watchlist hit **watchlist\_screening\_hits->data->names->analysis** (object) Summary object reflecting the match result of the associated data **watchlist\_screening\_hits->data->names->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **watchlist\_screening\_hits->data->names->data** (object) Name information for the associated individual watchlist hit **watchlist\_screening\_hits->data->names->data->full** (string) The full name of the individual, including all parts. **watchlist\_screening\_hits->data->names->data->is\_primary** (boolean) Primary names are those most commonly used to refer to this person. Only one name will ever be marked as primary. **watchlist\_screening\_hits->data->names->data->weak\_alias\_determination** (string) Names that are explicitly marked as low quality either by their source list, or by plaid by a series of additional checks done by Plaid. Plaid does not ever surface a hit as a result of a weak name alone. If a name has no quality issues, this value will be none. Possible values: none, source, plaid **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "watchlist_screening_hits": [ { "id": "scrhit_52xR9LKo77r1Np", "review_status": "pending_review", "first_active": "2020-07-24T03:26:02Z", "inactive_since": "2020-07-24T03:26:02Z", "historical_since": "2020-07-24T03:26:02Z", "list_code": "US_SDN", "plaid_uid": "uid_3NggckTimGSJHS", "source_uid": "26192ABC", "analysis": { "dates_of_birth": "match", "documents": "match", "locations": "match", "names": "match", "search_terms_version": 1 }, "data": { "dates_of_birth": [ { "analysis": { "summary": "match" }, "data": { "beginning": "1990-05-29", "ending": "1990-05-29" } } ], "documents": [ { "analysis": { "summary": "match" }, "data": { "type": "passport", "number": "C31195855" } } ], "locations": [ { "analysis": { "summary": "match" }, "data": { "full": "Florida, US", "country": "US" } } ], "names": [ { "analysis": { "summary": "match" }, "data": { "full": "Aleksey Potemkin", "is_primary": false, "weak_alias_determination": "none" } } ] } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/program/get  #### Get individual watchlist screening program  Get an individual watchlist screening program #### Request fields  **watchlist\_program\_id** (required, string) ID of the associated program. **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\_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. /watchlist\_screening/individual/program/get Node▼ ```javascript const request: WatchlistScreeningIndividualProgramGetRequest = { watchlist_program_id: 'prg_2eRPsDnL66rZ7H', }; try { const response = await client.watchlistScreeningIndividualProgramGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated program. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **is\_rescanning\_enabled** (boolean) Indicator specifying whether the program is enabled and will perform daily rescans. **lists\_enabled** (\[string\]) Watchlists enabled for the associated program Possible values: AU\_CON, CA\_CON, EU\_CON, IZ\_CIA, IZ\_IPL, IZ\_PEP, IZ\_UNC, IZ\_WBK, UK\_HMC, US\_DPL, US\_DTC, US\_FBI, US\_FSE, US\_ISN, US\_MBS, US\_PLC, US\_SAM, US\_SDN, US\_SSI, SG\_SOF, TR\_TWL, TR\_DFD, TR\_FOR, TR\_WMD, TR\_CMB **name** (string) A name for the program to define its purpose. For example, "High Risk Individuals", "US Cardholders", or "Applicants". **name\_sensitivity** (string) The valid name matching sensitivity configurations for a screening program. Note that while certain matching techniques may be more prevalent on less strict settings, all matching algorithms are enabled for every sensitivity. coarse - See more potential matches. This sensitivity will see more broad phonetic matches across alphabets that make missing a potential hit very unlikely. This setting is noisier and will require more manual review. balanced - A good default for most companies. This sensitivity is balanced to show high quality hits with reduced noise. strict - Aggressive false positive reduction. This sensitivity will require names to be more similar than coarse and balanced settings, relying less on phonetics, while still accounting for character transpositions, missing tokens, and other common permutations. exact - Matches must be nearly exact. This sensitivity will only show hits with exact or nearly exact name matches with only basic correction such as extraneous symbols and capitalization. This setting is generally not recommended unless you have a very specific use case. Possible values: coarse, balanced, strict, exact **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **is\_archived** (boolean) Archived programs are read-only and cannot screen new customers nor participate in ongoing monitoring. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "prg_2eRPsDnL66rZ7H", "created_at": "2020-07-24T03:26:02Z", "is_rescanning_enabled": true, "lists_enabled": [ "US_SDN" ], "name": "Sample Program", "name_sensitivity": "balanced", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "is_archived": false, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/individual/program/list  #### List individual watchlist screening programs  List all individual watchlist screening programs #### Request fields  **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\_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. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/individual/program/list Node▼ ```javascript try { const response = await client.watchlistScreeningIndividualProgramList({}); } catch (error) { // handle error } ``` #### Response fields  **watchlist\_programs** (\[object\]) List of individual watchlist screening programs **watchlist\_programs->id** (string) ID of the associated program. **watchlist\_programs->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_programs->is\_rescanning\_enabled** (boolean) Indicator specifying whether the program is enabled and will perform daily rescans. **watchlist\_programs->lists\_enabled** (\[string\]) Watchlists enabled for the associated program Possible values: AU\_CON, CA\_CON, EU\_CON, IZ\_CIA, IZ\_IPL, IZ\_PEP, IZ\_UNC, IZ\_WBK, UK\_HMC, US\_DPL, US\_DTC, US\_FBI, US\_FSE, US\_ISN, US\_MBS, US\_PLC, US\_SAM, US\_SDN, US\_SSI, SG\_SOF, TR\_TWL, TR\_DFD, TR\_FOR, TR\_WMD, TR\_CMB **watchlist\_programs->name** (string) A name for the program to define its purpose. For example, "High Risk Individuals", "US Cardholders", or "Applicants". **watchlist\_programs->name\_sensitivity** (string) The valid name matching sensitivity configurations for a screening program. Note that while certain matching techniques may be more prevalent on less strict settings, all matching algorithms are enabled for every sensitivity. coarse - See more potential matches. This sensitivity will see more broad phonetic matches across alphabets that make missing a potential hit very unlikely. This setting is noisier and will require more manual review. balanced - A good default for most companies. This sensitivity is balanced to show high quality hits with reduced noise. strict - Aggressive false positive reduction. This sensitivity will require names to be more similar than coarse and balanced settings, relying less on phonetics, while still accounting for character transpositions, missing tokens, and other common permutations. exact - Matches must be nearly exact. This sensitivity will only show hits with exact or nearly exact name matches with only basic correction such as extraneous symbols and capitalization. This setting is generally not recommended unless you have a very specific use case. Possible values: coarse, balanced, strict, exact **watchlist\_programs->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **watchlist\_programs->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **watchlist\_programs->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **watchlist\_programs->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **watchlist\_programs->is\_archived** (boolean) Archived programs are read-only and cannot screen new customers nor participate in ongoing monitoring. **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "watchlist_programs": [ { "id": "prg_2eRPsDnL66rZ7H", "created_at": "2020-07-24T03:26:02Z", "is_rescanning_enabled": true, "lists_enabled": [ "US_SDN" ], "name": "Sample Program", "name_sensitivity": "balanced", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "is_archived": false } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/create  #### Create a watchlist screening for an entity  Create a new entity watchlist screening to check your customer against watchlists defined in the associated entity watchlist program. If your associated program has ongoing screening enabled, this is the profile information that will be used to monitor your customer over time. #### Request fields  **search\_terms** (required, object) Search inputs for creating an entity watchlist screening **search\_terms->entity\_watchlist\_program\_id** (required, string) ID of the associated entity program. **search\_terms->legal\_name** (required, string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->document\_number** (string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **search\_terms->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->phone\_number** (string) A phone number in E.164 format. **search\_terms->url** (string) An 'http' or 'https' URL (must begin with either of those). Format: uri **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **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. /watchlist\_screening/entity/create Node▼ ```javascript const request: WatchlistScreeningEntityCreateRequest = { search_terms: { entity_watchlist_program_id: 'entprg_2eRPsDnL66rZ7H', legal_name: 'Example Screening Entity', document_number: 'C31195855', email_address: 'user@example.com', country: 'US', phone_number: '+14025671234', url: 'https://example.com', }, client_user_id: 'example-client-user-id-123', }; try { const response = await client.watchlistScreeningEntityCreate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated entity screening. **search\_terms** (object) Search terms associated with an entity used for searching against watchlists **search\_terms->entity\_watchlist\_program\_id** (string) ID of the associated entity program. **search\_terms->legal\_name** (string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->phone\_number** (nullable, string) A phone number in E.164 format. **search\_terms->url** (nullable, string) An 'http' or 'https' URL (must begin with either of those). Format: uri **search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "entscr_52xR9LKo77r1Np", "search_terms": { "entity_watchlist_program_id": "entprg_2eRPsDnL66rZ7H", "legal_name": "Al-Qaida", "document_number": "C31195855", "email_address": "user@example.com", "country": "US", "phone_number": "+14025671234", "url": "https://example.com", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/get  #### Get an entity screening  Retrieve an entity watchlist screening. #### Request fields  **entity\_watchlist\_screening\_id** (required, string) ID of the associated entity screening. **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\_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. /watchlist\_screening/entity/get Node▼ ```javascript const request: WatchlistScreeningEntityGetRequest = { entity_watchlist_screening_id: 'entscr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningEntityGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated entity screening. **search\_terms** (object) Search terms associated with an entity used for searching against watchlists **search\_terms->entity\_watchlist\_program\_id** (string) ID of the associated entity program. **search\_terms->legal\_name** (string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->phone\_number** (nullable, string) A phone number in E.164 format. **search\_terms->url** (nullable, string) An 'http' or 'https' URL (must begin with either of those). Format: uri **search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "entscr_52xR9LKo77r1Np", "search_terms": { "entity_watchlist_program_id": "entprg_2eRPsDnL66rZ7H", "legal_name": "Al-Qaida", "document_number": "C31195855", "email_address": "user@example.com", "country": "US", "phone_number": "+14025671234", "url": "https://example.com", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/list  #### List entity watchlist screenings  List all entity screenings. #### Request fields  **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\_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. **entity\_watchlist\_program\_id** (required, string) ID of the associated entity program. **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **assignee** (string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/entity/list Node▼ ```javascript const request: WatchlistScreeningEntityListRequest = { entity_watchlist_program_id: 'entprg_2eRPsDnL66rZ7H', }; try { const response = await client.watchlistScreeningEntityList(request); } catch (error) { // handle error } ``` #### Response fields  **entity\_watchlist\_screenings** (\[object\]) List of entity watchlist screening **entity\_watchlist\_screenings->id** (string) ID of the associated entity screening. **entity\_watchlist\_screenings->search\_terms** (object) Search terms associated with an entity used for searching against watchlists **entity\_watchlist\_screenings->search\_terms->entity\_watchlist\_program\_id** (string) ID of the associated entity program. **entity\_watchlist\_screenings->search\_terms->legal\_name** (string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **entity\_watchlist\_screenings->search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **entity\_watchlist\_screenings->search\_terms->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **entity\_watchlist\_screenings->search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **entity\_watchlist\_screenings->search\_terms->phone\_number** (nullable, string) A phone number in E.164 format. **entity\_watchlist\_screenings->search\_terms->url** (nullable, string) An 'http' or 'https' URL (must begin with either of those). Format: uri **entity\_watchlist\_screenings->search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **entity\_watchlist\_screenings->assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **entity\_watchlist\_screenings->status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **entity\_watchlist\_screenings->client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **entity\_watchlist\_screenings->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **entity\_watchlist\_screenings->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **entity\_watchlist\_screenings->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **entity\_watchlist\_screenings->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "entity_watchlist_screenings": [ { "id": "entscr_52xR9LKo77r1Np", "search_terms": { "entity_watchlist_program_id": "entprg_2eRPsDnL66rZ7H", "legal_name": "Al-Qaida", "document_number": "C31195855", "email_address": "user@example.com", "country": "US", "phone_number": "+14025671234", "url": "https://example.com", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/update  #### Update an entity screening  Update an entity watchlist screening. #### Request fields  **entity\_watchlist\_screening\_id** (required, string) ID of the associated entity screening. **search\_terms** (object) Search terms for editing an entity watchlist screening **search\_terms->entity\_watchlist\_program\_id** (required, string) ID of the associated entity program. **search\_terms->legal\_name** (string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->document\_number** (string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **search\_terms->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->phone\_number** (string) A phone number in E.164 format. **search\_terms->url** (string) An 'http' or 'https' URL (must begin with either of those). Format: uri **assignee** (string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **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. **reset\_fields** (\[string\]) A list of fields to reset back to null Possible values: assignee /watchlist\_screening/entity/update Node▼ ```javascript const request: WatchlistScreeningEntityUpdateRequest = { entity_watchlist_screening_id: 'entscr_52xR9LKo77r1Np', status: 'cleared', }; try { const response = await client.watchlistScreeningEntityUpdate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated entity screening. **search\_terms** (object) Search terms associated with an entity used for searching against watchlists **search\_terms->entity\_watchlist\_program\_id** (string) ID of the associated entity program. **search\_terms->legal\_name** (string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **search\_terms->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **search\_terms->phone\_number** (nullable, string) A phone number in E.164 format. **search\_terms->url** (nullable, string) An 'http' or 'https' URL (must begin with either of those). Format: uri **search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "entscr_52xR9LKo77r1Np", "search_terms": { "entity_watchlist_program_id": "entprg_2eRPsDnL66rZ7H", "legal_name": "Al-Qaida", "document_number": "C31195855", "email_address": "user@example.com", "country": "US", "phone_number": "+14025671234", "url": "https://example.com", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/history/list  #### List history for entity watchlist screenings  List all changes to the entity watchlist screening in reverse-chronological order. If the watchlist screening has not been edited, no history will be returned. #### Request fields  **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\_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. **entity\_watchlist\_screening\_id** (required, string) ID of the associated entity screening. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/entity/history/list Node▼ ```javascript const request: WatchlistScreeningEntityHistoryListRequest = { entity_watchlist_screening_id: 'entscr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningEntityHistoryList(request); } catch (error) { // handle error } ``` #### Response fields  **entity\_watchlist\_screenings** (\[object\]) List of entity watchlist screening **entity\_watchlist\_screenings->id** (string) ID of the associated entity screening. **entity\_watchlist\_screenings->search\_terms** (object) Search terms associated with an entity used for searching against watchlists **entity\_watchlist\_screenings->search\_terms->entity\_watchlist\_program\_id** (string) ID of the associated entity program. **entity\_watchlist\_screenings->search\_terms->legal\_name** (string) The name of the organization being screened. Must have at least one alphabetical character, have a maximum length of 100 characters, and not include leading or trailing spaces. **entity\_watchlist\_screenings->search\_terms->document\_number** (nullable, string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **entity\_watchlist\_screenings->search\_terms->email\_address** (nullable, string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **entity\_watchlist\_screenings->search\_terms->country** (nullable, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **entity\_watchlist\_screenings->search\_terms->phone\_number** (nullable, string) A phone number in E.164 format. **entity\_watchlist\_screenings->search\_terms->url** (nullable, string) An 'http' or 'https' URL (must begin with either of those). Format: uri **entity\_watchlist\_screenings->search\_terms->version** (integer) The current version of the search terms. Starts at 1 and increments with each edit to search\_terms. **entity\_watchlist\_screenings->assignee** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **entity\_watchlist\_screenings->status** (string) A status enum indicating whether a screening is still pending review, has been rejected, or has been cleared. Possible values: rejected, pending\_review, cleared **entity\_watchlist\_screenings->client\_user\_id** (nullable, string) A unique ID that identifies the end user in your system. This ID can also be used to associate user-specific data from other Plaid products. Financial Account Matching requires this field and the /link/token/create client\_user\_id to be consistent. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **entity\_watchlist\_screenings->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **entity\_watchlist\_screenings->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **entity\_watchlist\_screenings->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **entity\_watchlist\_screenings->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "entity_watchlist_screenings": [ { "id": "entscr_52xR9LKo77r1Np", "search_terms": { "entity_watchlist_program_id": "entprg_2eRPsDnL66rZ7H", "legal_name": "Al-Qaida", "document_number": "C31195855", "email_address": "user@example.com", "country": "US", "phone_number": "+14025671234", "url": "https://example.com", "version": 1 }, "assignee": "54350110fedcbaf01234ffee", "status": "cleared", "client_user_id": "your-db-id-3b24110", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/review/create  #### Create a review for an entity watchlist screening  Create a review for an entity watchlist screening. Reviews are compliance reports created by users in your organization regarding the relevance of potential hits found by Plaid. #### Request fields  **confirmed\_hits** (required, \[string\]) Hits to mark as a true positive after thorough manual review. These hits will never recur or be updated once dismissed. In most cases, confirmed hits indicate that the customer should be rejected. **dismissed\_hits** (required, \[string\]) Hits to mark as a false positive after thorough manual review. These hits will never recur or be updated once dismissed. **comment** (string) A comment submitted by a team member as part of reviewing a watchlist screening. **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. **entity\_watchlist\_screening\_id** (required, string) ID of the associated entity screening. /watchlist\_screening/entity/review/create Node▼ ```javascript const request: WatchlistScreeningEntityReviewCreateRequest = { entity_watchlist_screening_id: 'entscr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningEntityReviewCreate(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated entity review. **confirmed\_hits** (\[string\]) Hits marked as a true positive after thorough manual review. These hits will never recur or be updated once dismissed. In most cases, confirmed hits indicate that the customer should be rejected. **dismissed\_hits** (\[string\]) Hits marked as a false positive after thorough manual review. These hits will never recur or be updated once dismissed. **comment** (nullable, string) A comment submitted by a team member as part of reviewing a watchlist screening. **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. 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. Response Object ```json { "id": "entrev_aCLNRxK3UVzn2r", "confirmed_hits": [ "enthit_52xR9LKo77r1Np" ], "dismissed_hits": [ "enthit_52xR9LKo77r1Np" ], "comment": "These look like legitimate matches, rejecting the customer.", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/review/list  #### List reviews for entity watchlist screenings  List all reviews for a particular entity watchlist screening. Reviews are compliance reports created by users in your organization regarding the relevance of potential hits found by Plaid. #### Request fields  **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\_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. **entity\_watchlist\_screening\_id** (required, string) ID of the associated entity screening. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/entity/review/list Node▼ ```javascript const request: WatchlistScreeningEntityReviewListRequest = { entity_watchlist_screening_id: 'entscr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningEntityReviewList(request); } catch (error) { // handle error } ``` #### Response fields  **entity\_watchlist\_screening\_reviews** (\[object\]) List of entity watchlist screening reviews **entity\_watchlist\_screening\_reviews->id** (string) ID of the associated entity review. **entity\_watchlist\_screening\_reviews->confirmed\_hits** (\[string\]) Hits marked as a true positive after thorough manual review. These hits will never recur or be updated once dismissed. In most cases, confirmed hits indicate that the customer should be rejected. **entity\_watchlist\_screening\_reviews->dismissed\_hits** (\[string\]) Hits marked as a false positive after thorough manual review. These hits will never recur or be updated once dismissed. **entity\_watchlist\_screening\_reviews->comment** (nullable, string) A comment submitted by a team member as part of reviewing a watchlist screening. **entity\_watchlist\_screening\_reviews->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **entity\_watchlist\_screening\_reviews->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **entity\_watchlist\_screening\_reviews->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **entity\_watchlist\_screening\_reviews->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "entity_watchlist_screening_reviews": [ { "id": "entrev_aCLNRxK3UVzn2r", "confirmed_hits": [ "enthit_52xR9LKo77r1Np" ], "dismissed_hits": [ "enthit_52xR9LKo77r1Np" ], "comment": "These look like legitimate matches, rejecting the customer.", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/hit/list  #### List hits for entity watchlist screenings  List all hits for the entity watchlist screening. #### Request fields  **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\_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. **entity\_watchlist\_screening\_id** (required, string) ID of the associated entity screening. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/entity/hit/list Node▼ ```javascript const request: WatchlistScreeningEntityHitListRequest = { entity_watchlist_screening_id: 'entscr_52xR9LKo77r1Np', }; try { const response = await client.watchlistScreeningEntityHitList(request); } catch (error) { // handle error } ``` #### Response fields  **entity\_watchlist\_screening\_hits** (\[object\]) List of entity watchlist screening hits **entity\_watchlist\_screening\_hits->id** (string) ID of the associated entity screening hit. **entity\_watchlist\_screening\_hits->review\_status** (string) The current state of review. All watchlist screening hits begin in a pending\_review state but can be changed by creating a review. When a hit is in the pending\_review state, it will always show the latest version of the watchlist data Plaid has available and be compared against the latest customer information saved in the watchlist screening. Once a hit has been marked as confirmed or dismissed it will no longer be updated so that the state is as it was when the review was first conducted. Possible values: confirmed, pending\_review, dismissed **entity\_watchlist\_screening\_hits->first\_active** (string) An ISO8601 formatted timestamp. Format: date-time **entity\_watchlist\_screening\_hits->inactive\_since** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **entity\_watchlist\_screening\_hits->historical\_since** (nullable, string) An ISO8601 formatted timestamp. Format: date-time **entity\_watchlist\_screening\_hits->list\_code** (string) Shorthand identifier for a specific screening list for entities. AU\_CON: Australia Department of Foreign Affairs and Trade Consolidated List CA\_CON: Government of Canada Consolidated List of Sanctions EU\_CON: European External Action Service Consolidated List IZ\_SOE: State Owned Enterprise List IZ\_UNC: United Nations Consolidated Sanctions IZ\_WBK: World Bank Listing of Ineligible Firms and Individuals US\_CAP: US OFAC Correspondent Account or Payable-Through Account Sanctions US\_FSE: US OFAC Foreign Sanctions Evaders US\_MBS: US Non-SDN Menu-Based Sanctions US\_SDN: US Specially Designated Nationals List US\_SSI: US OFAC Sectoral Sanctions Identifications US\_CMC: US OFAC Non-SDN Chinese Military-Industrial Complex List US\_UVL: Bureau of Industry and Security Unverified List US\_SAM: US System for Award Management Exclusion List US\_TEL: US Terrorist Exclusion List UK\_HMC: UK HM Treasury Consolidated List Possible values: CA\_CON, EU\_CON, IZ\_SOE, IZ\_UNC, IZ\_WBK, US\_CAP, US\_FSE, US\_MBS, US\_SDN, US\_SSI, US\_CMC, US\_UVL, US\_SAM, US\_TEL, AU\_CON, UK\_HMC **entity\_watchlist\_screening\_hits->plaid\_uid** (string) A universal identifier for a watchlist individual that is stable across searches and updates. **entity\_watchlist\_screening\_hits->source\_uid** (nullable, string) The identifier provided by the source sanction or watchlist. When one is not provided by the source, this is null. **entity\_watchlist\_screening\_hits->analysis** (object) Analysis information describing why a screening hit matched the provided entity information **entity\_watchlist\_screening\_hits->analysis->documents** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->analysis->email\_addresses** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->analysis->locations** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->analysis->names** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->analysis->phone\_numbers** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->analysis->urls** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->analysis->search\_terms\_version** (integer) The version of the entity screening's search\_terms that were compared when the entity screening hit was added. entity screening hits are immutable once they have been reviewed. If changes are detected due to updates to the entity screening's search\_terms, the associated entity program, or the list's source data prior to review, the entity screening hit will be updated to reflect those changes. **entity\_watchlist\_screening\_hits->data** (object) Information associated with the entity watchlist hit **entity\_watchlist\_screening\_hits->data->documents** (\[object\]) Documents associated with the watchlist hit **entity\_watchlist\_screening\_hits->data->documents->analysis** (object) Summary object reflecting the match result of the associated data **entity\_watchlist\_screening\_hits->data->documents->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->data->documents->data** (object) An official document, usually issued by a governing body or institution, with an associated identifier. **entity\_watchlist\_screening\_hits->data->documents->data->type** (string) The kind of official document represented by this object. bik - Russian bank code business\_number - A number that uniquely identifies the business within a category of businesses imo - Number assigned to the entity by the International Maritime Organization other - Any document not covered by other categories swift - Number identifying a bank and branch. tax\_id - Identification issued for the purpose of collecting taxes Possible values: bik, business\_number, imo, other, swift, tax\_id **entity\_watchlist\_screening\_hits->data->documents->data->number** (string) The numeric or alphanumeric identifier associated with this document. Must be between 4 and 32 characters long, and cannot have leading or trailing spaces. **entity\_watchlist\_screening\_hits->data->email\_addresses** (\[object\]) Email addresses associated with the watchlist hit **entity\_watchlist\_screening\_hits->data->email\_addresses->analysis** (object) Summary object reflecting the match result of the associated data **entity\_watchlist\_screening\_hits->data->email\_addresses->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->data->email\_addresses->data** (object) Email address information for the associated entity watchlist hit **entity\_watchlist\_screening\_hits->data->email\_addresses->data->email\_address** (string) A valid email address. Must not have leading or trailing spaces and address must be RFC compliant. For more information, see RFC 3696. Format: email **entity\_watchlist\_screening\_hits->data->locations** (\[object\]) Locations associated with the watchlist hit **entity\_watchlist\_screening\_hits->data->locations->analysis** (object) Summary object reflecting the match result of the associated data **entity\_watchlist\_screening\_hits->data->locations->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->data->locations->data** (object) Location information for the associated individual watchlist hit **entity\_watchlist\_screening\_hits->data->locations->data->full** (string) The full location string, potentially including elements like street, city, postal codes and country codes. Note that this is not necessarily a complete or well-formatted address. **entity\_watchlist\_screening\_hits->data->locations->data->country** (string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **entity\_watchlist\_screening\_hits->data->names** (\[object\]) Names associated with the watchlist hit **entity\_watchlist\_screening\_hits->data->names->analysis** (object) Summary object reflecting the match result of the associated data **entity\_watchlist\_screening\_hits->data->names->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->data->names->data** (object) Name information for the associated entity watchlist hit **entity\_watchlist\_screening\_hits->data->names->data->full** (string) The full name of the entity. **entity\_watchlist\_screening\_hits->data->names->data->is\_primary** (boolean) Primary names are those most commonly used to refer to this entity. Only one name will ever be marked as primary. **entity\_watchlist\_screening\_hits->data->names->data->weak\_alias\_determination** (string) Names that are explicitly marked as low quality either by their source list, or by plaid by a series of additional checks done by Plaid. Plaid does not ever surface a hit as a result of a weak name alone. If a name has no quality issues, this value will be none. Possible values: none, source, plaid **entity\_watchlist\_screening\_hits->data->phone\_numbers** (\[object\]) Phone numbers associated with the watchlist hit **entity\_watchlist\_screening\_hits->data->phone\_numbers->analysis** (object) Summary object reflecting the match result of the associated data **entity\_watchlist\_screening\_hits->data->phone\_numbers->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->data->phone\_numbers->data** (object) Phone number information associated with the entity screening hit **entity\_watchlist\_screening\_hits->data->phone\_numbers->data->type** (string) An enum indicating whether a phone number is a phone line or a fax line. Possible values: phone, fax **entity\_watchlist\_screening\_hits->data->phone\_numbers->data->phone\_number** (string) A phone number in E.164 format. **entity\_watchlist\_screening\_hits->data->urls** (\[object\]) URLs associated with the watchlist hit **entity\_watchlist\_screening\_hits->data->urls->analysis** (object) Summary object reflecting the match result of the associated data **entity\_watchlist\_screening\_hits->data->urls->analysis->summary** (string) An enum indicating the match type between data provided by user and data checked against an external data source. match indicates that the provided input data was a strong match against external data. partial\_match indicates the data approximately matched against external data. For example, "Knope" vs. "Knope-Wyatt" for last name. no\_match indicates that Plaid was able to perform a check against an external data source and it did not match the provided input data. no\_data indicates that Plaid was unable to find external data to compare against the provided input data. no\_input indicates that Plaid was unable to perform a check because no information was provided for this field by the end user. Possible values: match, partial\_match, no\_match, no\_data, no\_input **entity\_watchlist\_screening\_hits->data->urls->data** (object) URLs associated with the entity screening hit **entity\_watchlist\_screening\_hits->data->urls->data->url** (string) An 'http' or 'https' URL (must begin with either of those). Format: uri **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "entity_watchlist_screening_hits": [ { "id": "enthit_52xR9LKo77r1Np", "review_status": "pending_review", "first_active": "2020-07-24T03:26:02Z", "inactive_since": "2020-07-24T03:26:02Z", "historical_since": "2020-07-24T03:26:02Z", "list_code": "EU_CON", "plaid_uid": "uid_3NggckTimGSJHS", "source_uid": "26192ABC", "analysis": { "documents": "match", "email_addresses": "match", "locations": "match", "names": "match", "phone_numbers": "match", "urls": "match", "search_terms_version": 1 }, "data": { "documents": [ { "analysis": { "summary": "match" }, "data": { "type": "swift", "number": "C31195855" } } ], "email_addresses": [ { "analysis": { "summary": "match" }, "data": { "email_address": "user@example.com" } } ], "locations": [ { "analysis": { "summary": "match" }, "data": { "full": "Florida, US", "country": "US" } } ], "names": [ { "analysis": { "summary": "match" }, "data": { "full": "Al Qaida", "is_primary": false, "weak_alias_determination": "none" } } ], "phone_numbers": [ { "analysis": { "summary": "match" }, "data": { "type": "phone", "phone_number": "+14025671234" } } ], "urls": [ { "analysis": { "summary": "match" }, "data": { "url": "https://example.com" } } ] } } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/program/get  #### Get entity watchlist screening program  Get an entity watchlist screening program #### Request fields  **entity\_watchlist\_program\_id** (required, string) ID of the associated entity program. **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\_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. /watchlist\_screening/entity/program/get Node▼ ```javascript const request: WatchlistScreeningEntityProgramGetRequest = { entity_watchlist_program_id: 'entprg_2eRPsDnL66rZ7H', }; try { const response = await client.watchlistScreeningEntityProgramGet(request); } catch (error) { // handle error } ``` #### Response fields  **id** (string) ID of the associated entity program. **created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **is\_rescanning\_enabled** (boolean) Indicator specifying whether the program is enabled and will perform daily rescans. **lists\_enabled** (\[string\]) Watchlists enabled for the associated program Possible values: CA\_CON, EU\_CON, IZ\_SOE, IZ\_UNC, IZ\_WBK, US\_CAP, US\_FSE, US\_MBS, US\_SDN, US\_SSI, US\_CMC, US\_UVL, US\_SAM, US\_TEL, AU\_CON, UK\_HMC **name** (string) A name for the entity program to define its purpose. For example, "High Risk Organizations" or "Applicants". **name\_sensitivity** (string) The valid name matching sensitivity configurations for a screening program. Note that while certain matching techniques may be more prevalent on less strict settings, all matching algorithms are enabled for every sensitivity. coarse - See more potential matches. This sensitivity will see more broad phonetic matches across alphabets that make missing a potential hit very unlikely. This setting is noisier and will require more manual review. balanced - A good default for most companies. This sensitivity is balanced to show high quality hits with reduced noise. strict - Aggressive false positive reduction. This sensitivity will require names to be more similar than coarse and balanced settings, relying less on phonetics, while still accounting for character transpositions, missing tokens, and other common permutations. exact - Matches must be nearly exact. This sensitivity will only show hits with exact or nearly exact name matches with only basic correction such as extraneous symbols and capitalization. This setting is generally not recommended unless you have a very specific use case. Possible values: coarse, balanced, strict, exact **audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **is\_archived** (boolean) Archived programs are read-only and cannot screen new customers nor participate in ongoing monitoring. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "id": "entprg_2eRPsDnL66rZ7H", "created_at": "2020-07-24T03:26:02Z", "is_rescanning_enabled": true, "lists_enabled": [ "EU_CON" ], "name": "Sample Program", "name_sensitivity": "balanced", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "is_archived": false, "request_id": "saKrIBuEB9qJZng" } ``` \=\*=\*=\*= #### /watchlist\_screening/entity/program/list  #### List entity watchlist screening programs  List all entity watchlist screening programs #### Request fields  **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\_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. **cursor** (string) An identifier that determines which page of results you receive. /watchlist\_screening/entity/program/list Node▼ ```javascript try { const response = await client.watchlistScreeningEntityProgramList({}); } catch (error) { // handle error } ``` #### Response fields  **entity\_watchlist\_programs** (\[object\]) List of entity watchlist screening programs **entity\_watchlist\_programs->id** (string) ID of the associated entity program. **entity\_watchlist\_programs->created\_at** (string) An ISO8601 formatted timestamp. Format: date-time **entity\_watchlist\_programs->is\_rescanning\_enabled** (boolean) Indicator specifying whether the program is enabled and will perform daily rescans. **entity\_watchlist\_programs->lists\_enabled** (\[string\]) Watchlists enabled for the associated program Possible values: CA\_CON, EU\_CON, IZ\_SOE, IZ\_UNC, IZ\_WBK, US\_CAP, US\_FSE, US\_MBS, US\_SDN, US\_SSI, US\_CMC, US\_UVL, US\_SAM, US\_TEL, AU\_CON, UK\_HMC **entity\_watchlist\_programs->name** (string) A name for the entity program to define its purpose. For example, "High Risk Organizations" or "Applicants". **entity\_watchlist\_programs->name\_sensitivity** (string) The valid name matching sensitivity configurations for a screening program. Note that while certain matching techniques may be more prevalent on less strict settings, all matching algorithms are enabled for every sensitivity. coarse - See more potential matches. This sensitivity will see more broad phonetic matches across alphabets that make missing a potential hit very unlikely. This setting is noisier and will require more manual review. balanced - A good default for most companies. This sensitivity is balanced to show high quality hits with reduced noise. strict - Aggressive false positive reduction. This sensitivity will require names to be more similar than coarse and balanced settings, relying less on phonetics, while still accounting for character transpositions, missing tokens, and other common permutations. exact - Matches must be nearly exact. This sensitivity will only show hits with exact or nearly exact name matches with only basic correction such as extraneous symbols and capitalization. This setting is generally not recommended unless you have a very specific use case. Possible values: coarse, balanced, strict, exact **entity\_watchlist\_programs->audit\_trail** (object) Information about the last change made to the parent object specifying what caused the change as well as when it occurred. **entity\_watchlist\_programs->audit\_trail->source** (string) A type indicating whether a dashboard user, an API-based user, or Plaid last touched this object. Possible values: dashboard, link, api, system **entity\_watchlist\_programs->audit\_trail->dashboard\_user\_id** (nullable, string) ID of the associated user. To retrieve the email address or other details of the person corresponding to this id, use /dashboard\_user/get. **entity\_watchlist\_programs->audit\_trail->timestamp** (string) An ISO8601 formatted timestamp. Format: date-time **entity\_watchlist\_programs->is\_archived** (boolean) Archived programs are read-only and cannot screen new customers nor participate in ongoing monitoring. **next\_cursor** (nullable, string) An identifier that determines which page of results you receive. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "entity_watchlist_programs": [ { "id": "entprg_2eRPsDnL66rZ7H", "created_at": "2020-07-24T03:26:02Z", "is_rescanning_enabled": true, "lists_enabled": [ "EU_CON" ], "name": "Sample Program", "name_sensitivity": "balanced", "audit_trail": { "source": "dashboard", "dashboard_user_id": "54350110fedcbaf01234ffee", "timestamp": "2020-07-24T03:26:02Z" }, "is_archived": false } ], "next_cursor": "eyJkaXJlY3Rpb24iOiJuZXh0Iiwib2Zmc2V0IjoiMTU5NDM", "request_id": "saKrIBuEB9qJZng" } ``` ### Webhooks  \=\*=\*=\*= #### SCREENING: STATUS\_UPDATED  Fired when an individual screening status has changed, which can occur manually via the dashboard or during ongoing monitoring. #### Properties  **webhook\_type** (string) SCREENING **webhook\_code** (string) STATUS\_UPDATED **screening\_id** (string) The ID of the associated screening. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "SCREENING", "webhook_code": "STATUS_UPDATED", "screening_id": "scr_52xR9LKo77r1Np", "environment": "production" } ``` \=\*=\*=\*= #### ENTITY\_SCREENING: STATUS\_UPDATED  Fired when an entity screening status has changed, which can occur manually via the dashboard or during ongoing monitoring. #### Properties  **webhook\_type** (string) ENTITY\_SCREENING **webhook\_code** (string) STATUS\_UPDATED **entity\_screening\_id** (string) The ID of the associated entity screening. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "ENTITY_SCREENING", "webhook_code": "STATUS_UPDATED", "screening_id": "entscr_52xR9LKo77r1Np", "environment": "production" } ``` --- # API - Payment Initiation (Europe) | Plaid Docs Payment Initiation (UK and Europe)  =================================== #### API reference for Payment Initiation endpoints and webhooks  Make payment transfers from your app. Plaid supports both domestic payments denominated in local currencies and international payments, generally denominated in Euro. Domestic payments can be made in pound sterling (typically via the Faster Payments network), Euro (via SEPA Credit Transfer or SEPA Instant) and other local currencies (Polish Zloty, Danish Krone, Swedish Krona, Norwegian Krone), typically via local payment schemes. For payments in the US, see [Transfer](https://plaid.com/docs/api/products/transfer/index.html.md) . Looking for guidance on how to integrate using these endpoints? Check out the [Payment Initiation documentation](https://plaid.com/docs/payment-initiation/index.html.md) . | Endpoints | | | --- | --- | | [/payment\_initiation/recipient/create](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationrecipientcreate) | Create a recipient | | [/payment\_initiation/recipient/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationrecipientget) | Fetch recipient data | | [/payment\_initiation/recipient/list](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationrecipientlist) | List all recipients | | [/payment\_initiation/payment/create](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentcreate) | Create a payment | | [/payment\_initiation/payment/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentget) | Fetch a payment | | [/payment\_initiation/payment/list](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentlist) | List all payments | | [/payment\_initiation/payment/reverse](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentreverse) | Refund a payment from a virtual account | | [/payment\_initiation/consent/create](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentcreate) | Create a payment consent | | [/payment\_initiation/consent/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentget) | Fetch a payment consent | | [/payment\_initiation/consent/revoke](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentrevoke) | Revoke a payment consent | | [/payment\_initiation/consent/payment/execute](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentpaymentexecute) | Execute a payment using payment consent | Users will be prompted to authorise the payment once you [initialise Link](https://plaid.com/docs/link/index.html.md#initializing-link) . See [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) for more information on how to obtain a payments `link_token`. | See also | | | --- | --- | | [/sandbox/payment/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpaymentsimulate) | Simulate a payment in Sandbox | | [/wallet/create](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#walletcreate) | Create a virtual account | | [/wallet/get](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#walletget) | Fetch a virtual account | | [/wallet/list](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#walletlist) | List all virtual accounts | | [/wallet/transaction/execute](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallettransactionexecute) | Execute a transaction | | [/wallet/transaction/get](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallettransactionget) | Fetch a transaction | | [/wallet/transaction/list](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallettransactionlist) | List all transactions | | [WALLET\_TRANSACTION\_STATUS\_UPDATE](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallet_transaction_status_update) | The status of a transaction has changed | | Webhooks | | | --- | --- | | [PAYMENT\_STATUS\_UPDATE](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_status_update) | The status of a payment has changed | | [CONSENT\_STATUS\_UPDATE](https://plaid.com/docs/api/products/payment-initiation/index.html.md#consent_status_update) | The status of a consent has changed | ### Endpoints  \=\*=\*=\*= #### /payment\_initiation/recipient/create  #### Create payment recipient  Create a payment recipient for payment initiation. The recipient must be in Europe, within a country that is a member of the Single Euro Payment Area (SEPA) or a non-Eurozone country [supported](https://plaid.com/global) by Plaid. For a standing order (recurring) payment, the recipient must be in the UK. It is recommended to use `bacs` in the UK and `iban` in EU. The endpoint is idempotent: if a developer has already made a request with the same payment details, Plaid will return the same `recipient_id`. #### Request fields  **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. **name** (required, string) The name of the recipient. We recommend using strings of length 18 or less and avoid special characters to ensure compatibility with all institutions. Min length: 1 **iban** (string) The International Bank Account Number (IBAN) for the recipient. If BACS data is not provided, an IBAN is required. Min length: 15 Max length: 34 **bacs** (object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **address** (object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **address->street** (required, \[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **address->city** (required, string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **address->postal\_code** (required, string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **address->country** (required, string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 /payment\_initiation/recipient/create Node▼ ```javascript // Using BACS, without IBAN or address const request: PaymentInitiationRecipientCreateRequest = { name: 'John Doe', bacs: { account: '26207729', sort_code: '560029', }, }; try { const response = await plaidClient.paymentInitiationRecipientCreate(request); const recipientID = response.data.recipient_id; } catch (error) { // handle error } ``` #### Response fields  **recipient\_id** (string) A unique ID identifying the recipient **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6", "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /payment\_initiation/recipient/get  #### Get payment recipient  Get details about a payment recipient you have previously created. #### Request fields  **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. **recipient\_id** (required, string) The ID of the recipient Node▼ ```javascript const request: PaymentInitiationRecipientGetRequest = { recipient_id: recipientID, }; try { const response = await plaidClient.paymentInitiationRecipientGet(request); const recipientID = response.data.recipient_id; const name = response.data.name; const iban = response.data.iban; const address = response.data.address; } catch (error) { // handle error } ``` #### Response fields  **recipient\_id** (string) The ID of the recipient. **name** (string) The name of the recipient. **address** (nullable, object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **address->street** (\[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **address->city** (string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **address->postal\_code** (string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **address->country** (string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **iban** (nullable, string) The International Bank Account Number (IBAN) for the recipient. **bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6", "name": "Wonder Wallet", "iban": "GB29NWBK60161331926819", "address": { "street": [ "96 Guild Street", "9th Floor" ], "city": "London", "postal_code": "SE14 8JW", "country": "GB" }, "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /payment\_initiation/recipient/list  #### List payment recipients  The [/payment\_initiation/recipient/list](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationrecipientlist) endpoint list the payment recipients that you have previously created. #### Request fields  **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. **count** (integer) The maximum number of recipients to return. If count is not specified, a maximum of 100 recipients will be returned, beginning with the recipient at the cursor (if specified). Minimum: 1 Maximum: 100 Default: 100 **cursor** (string) A value representing the latest recipient to be included in the response. Set this from next\_cursor received from the previous /payment\_initiation/recipient/list request. If provided, the response will only contain that recipient and recipients created before it. If omitted, the response will contain recipients starting from the most recent, and in descending order by the created\_at time. Max length: 256 Node▼ ```javascript try { const response = await plaidClient.paymentInitiationRecipientList({}); const recipients = response.data.recipients; } catch (error) { // handle error } ``` #### Response fields  **recipients** (\[object\]) An array of payment recipients created for Payment Initiation **recipients->recipient\_id** (string) The ID of the recipient. **recipients->name** (string) The name of the recipient. **recipients->address** (nullable, object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **recipients->address->street** (\[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **recipients->address->city** (string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **recipients->address->postal\_code** (string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **recipients->address->country** (string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **recipients->iban** (nullable, string) The International Bank Account Number (IBAN) for the recipient. **recipients->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **recipients->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **recipients->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **next\_cursor** (string) The value that, when used as the optional cursor parameter to /payment\_initiation/recipient/list, will return the corresponding recipient as its first recipient. Max length: 256 Response Object ```json { "recipients": [ { "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6", "name": "Wonder Wallet", "iban": "GB29NWBK60161331926819", "address": { "street": [ "96 Guild Street", "9th Floor" ], "city": "London", "postal_code": "SE14 8JW", "country": "GB" } } ], "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /payment\_initiation/payment/create  #### Create a payment  After creating a payment recipient, you can use the [/payment\_initiation/payment/create](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentcreate) endpoint to create a payment to that recipient. Payments can be one-time or standing order (recurring) and can be denominated in either EUR, GBP or other chosen [currency](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiation-payment-create-request-amount-currency) . If making domestic GBP-denominated payments, your recipient must have been created with BACS numbers. In general, EUR-denominated payments will be sent via SEPA Credit Transfer, GBP-denominated payments will be sent via the Faster Payments network and for non-Eurozone markets typically via the local payment scheme, but the payment network used will be determined by the institution. Payments sent via Faster Payments will typically arrive immediately, while payments sent via SEPA Credit Transfer or other local payment schemes will typically arrive in one business day. Standing orders (recurring payments) must be denominated in GBP and can only be sent to recipients in the UK. Once created, standing order payments cannot be modified or canceled via the API. An end user can cancel or modify a standing order directly on their banking application or website, or by contacting the bank. Standing orders will follow the payment rules of the underlying rails (Faster Payments in UK). Payments can be sent Monday to Friday, excluding bank holidays. If the pre-arranged date falls on a weekend or bank holiday, the payment is made on the next working day. It is not possible to guarantee the exact time the payment will reach the recipient’s account, although at least 90% of standing order payments are sent by 6am. In Limited Production, payments must be below 5 GBP or other chosen [currency](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiation-payment-create-request-amount-currency) , and standing orders, variable recurring payments, and Virtual Accounts are not supported. #### Request fields  **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. **recipient\_id** (required, string) The ID of the recipient the payment is for. **reference** (required, string) A reference for the payment. This must be an alphanumeric string with at most 18 characters and must not contain any special characters (since not all institutions support them). In order to track settlement via Payment Confirmation, each payment must have a unique reference. If the reference provided through the API is not unique, Plaid will adjust it. Some institutions may limit the reference to less than 18 characters. If necessary, Plaid will adjust the reference by truncating it to fit the institution's requirements. Both the originally provided and automatically adjusted references (if any) can be found in the reference and adjusted\_reference fields, respectively. Min length: 1 Max length: 18 **amount** (required, object) The amount and currency of a payment **amount->currency** (required, string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **amount->value** (required, number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **schedule** (object) The schedule that the payment will be executed on. If a schedule is provided, the payment is automatically set up as a standing order. If no schedule is specified, the payment will be executed only once. **schedule->interval** (required, string) The frequency interval of the payment. Possible values: WEEKLY, MONTHLYMin length: 1 **schedule->interval\_execution\_day** (required, integer) The day of the interval on which to schedule the payment. If the payment interval is weekly, interval\_execution\_day should be an integer from 1 (Monday) to 7 (Sunday). If the payment interval is monthly, interval\_execution\_day should be an integer indicating which day of the month to make the payment on. Integers from 1 to 28 can be used to make a payment on that day of the month. Negative integers from -1 to -5 can be used to make a payment relative to the end of the month. To make a payment on the last day of the month, use -1; to make the payment on the second-to-last day, use -2, and so on. **schedule->start\_date** (required, string) A date in ISO 8601 format (YYYY-MM-DD). Standing order payments will begin on the first interval\_execution\_day on or after the start\_date. If the first interval\_execution\_day on or after the start date is also the same day that /payment\_initiation/payment/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **schedule->end\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). Standing order payments will end on the last interval\_execution\_day on or before the end\_date. If the only interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /payment\_initiation/payment/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **schedule->adjusted\_start\_date** (string) The start date sent to the bank after adjusting for holidays or weekends. Will be provided in ISO 8601 format (YYYY-MM-DD). If the start date did not require adjustment, this field will be null. Format: date **options** (object) Additional payment options **options->request\_refund\_details** (boolean) When true, Plaid will attempt to request refund details from the payee's financial institution. Support varies between financial institutions and will not always be available. If refund details could be retrieved, they will be available in the /payment\_initiation/payment/get response. **options->iban** (string) The International Bank Account Number (IBAN) for the payer's account. Where possible, the end user will be able to send payments only from the specified bank account if provided. Min length: 15 Max length: 34 **options->bacs** (object) An optional object used to restrict the accounts used for payments. If provided, the end user will be able to send payments only from the specified bank account. **options->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **options->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **options->scheme** (string) Payment scheme. If not specified - the default in the region will be used (e.g. SEPA\_CREDIT\_TRANSFER for EU). Using unsupported values will result in a failed payment. LOCAL\_DEFAULT: The default payment scheme for the selected market and currency will be used. LOCAL\_INSTANT: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks. Possible values: null, LOCAL\_DEFAULT, LOCAL\_INSTANT, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT Node▼ ```javascript const request: PaymentInitiationPaymentCreateRequest = { recipient_id: recipientID, reference: 'TestPayment', amount: { currency: 'GBP', value: 100.0, }, }; try { const response = await plaidClient.paymentInitiationPaymentCreate(request); const paymentID = response.data.payment_id; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **payment\_id** (string) A unique ID identifying the payment **status** (string) For a payment returned by this endpoint, there is only one possible value: PAYMENT\_STATUS\_INPUT\_NEEDED: The initial phase of the payment Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "status": "PAYMENT_STATUS_INPUT_NEEDED", "request_id": "4ciYVmesrySiUAB" } ``` \=\*=\*=\*= #### /payment\_initiation/payment/get  #### Get payment details  The [/payment\_initiation/payment/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentget) endpoint can be used to check the status of a payment, as well as to receive basic information such as recipient and payment amount. In the case of standing orders, the [/payment\_initiation/payment/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentget) endpoint will provide information about the status of the overall standing order itself; the API cannot be used to retrieve payment status for individual payments within a standing order. Polling for status updates in Production is highly discouraged. Repeatedly calling [/payment\_initiation/payment/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentget) to check a payment's status is unreliable and may trigger API rate limits. Only the `payment_status_update` webhook should be used to receive real-time status updates in Production. In the case of standing orders, the [/payment\_initiation/payment/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentget) endpoint will provide information about the status of the overall standing order itself; the API cannot be used to retrieve payment status for individual payments within a standing order. #### Request fields  **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. **payment\_id** (required, string) The payment\_id returned from /payment\_initiation/payment/create. /payment\_initiation/payment/create Node▼ ```javascript const request: PaymentInitiationPaymentGetRequest = { payment_id: paymentID, }; try { const response = await plaidClient.paymentInitiationPaymentGet(request); const paymentID = response.data.payment_id; const paymentToken = response.data.payment_token; const reference = response.data.reference; const amount = response.data.amount; const status = response.data.status; const lastStatusUpdate = response.data.last_status_update; const paymentTokenExpirationTime = response.data.payment_token_expiration_time; const recipientID = response.data.recipient_id; } catch (error) { // handle error } ``` #### Response fields  **payment\_id** (string) The ID of the payment. Like all Plaid identifiers, the payment\_id is case sensitive. **amount** (object) The amount and currency of a payment **amount->currency** (string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **amount->value** (number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED **recipient\_id** (string) The ID of the recipient **reference** (string) A reference for the payment. **adjusted\_reference** (nullable, string) The value of the reference sent to the bank after adjustment to pass bank validation rules. **last\_status\_update** (string) The date and time of the last time the status was updated, in IS0 8601 format Format: date-time **schedule** (nullable, object) The schedule that the payment will be executed on. If a schedule is provided, the payment is automatically set up as a standing order. If no schedule is specified, the payment will be executed only once. **schedule->interval** (string) The frequency interval of the payment. Possible values: WEEKLY, MONTHLYMin length: 1 **schedule->interval\_execution\_day** (integer) The day of the interval on which to schedule the payment. If the payment interval is weekly, interval\_execution\_day should be an integer from 1 (Monday) to 7 (Sunday). If the payment interval is monthly, interval\_execution\_day should be an integer indicating which day of the month to make the payment on. Integers from 1 to 28 can be used to make a payment on that day of the month. Negative integers from -1 to -5 can be used to make a payment relative to the end of the month. To make a payment on the last day of the month, use -1; to make the payment on the second-to-last day, use -2, and so on. **schedule->start\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). Standing order payments will begin on the first interval\_execution\_day on or after the start\_date. If the first interval\_execution\_day on or after the start date is also the same day that /payment\_initiation/payment/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **schedule->end\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). Standing order payments will end on the last interval\_execution\_day on or before the end\_date. If the only interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /payment\_initiation/payment/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **schedule->adjusted\_start\_date** (nullable, string) The start date sent to the bank after adjusting for holidays or weekends. Will be provided in ISO 8601 format (YYYY-MM-DD). If the start date did not require adjustment, this field will be null. Format: date **refund\_details** (nullable, object) Details about external payment refund **refund\_details->name** (string) The name of the account holder. **refund\_details->iban** (nullable, string) The International Bank Account Number (IBAN) for the account. **refund\_details->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **refund\_details->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **refund\_details->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **iban** (nullable, string) The International Bank Account Number (IBAN) for the sender, if specified in the /payment\_initiation/payment/create call. **refund\_ids** (nullable, \[string\]) Refund IDs associated with the payment. **amount\_refunded** (nullable, object) The amount and currency of a payment **amount\_refunded->currency** (string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **amount\_refunded->value** (number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Format: double Minimum: 0.01 **wallet\_id** (nullable, string) The EMI (E-Money Institution) wallet that this payment is associated with, if any. This wallet is used as an intermediary account to enable Plaid to reconcile the settlement of funds for Payment Initiation requests. **scheme** (nullable, string) Payment scheme. If not specified - the default in the region will be used (e.g. SEPA\_CREDIT\_TRANSFER for EU). Using unsupported values will result in a failed payment. LOCAL\_DEFAULT: The default payment scheme for the selected market and currency will be used. LOCAL\_INSTANT: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks. Possible values: null, LOCAL\_DEFAULT, LOCAL\_INSTANT, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT **adjusted\_scheme** (nullable, string) Payment scheme. If not specified - the default in the region will be used (e.g. SEPA\_CREDIT\_TRANSFER for EU). Using unsupported values will result in a failed payment. LOCAL\_DEFAULT: The default payment scheme for the selected market and currency will be used. LOCAL\_INSTANT: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks. Possible values: null, LOCAL\_DEFAULT, LOCAL\_INSTANT, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT **consent\_id** (nullable, string) The payment consent ID that this payment was initiated with. Is present only when payment was initiated using the payment consent. **transaction\_id** (nullable, string) The transaction ID that this payment is associated with, if any. This is present only when a payment was initiated using virtual accounts. **end\_to\_end\_id** (nullable, string) A unique identifier assigned by Plaid to each payment for tracking and reconciliation purposes. Note: Not all banks handle end\_to\_end\_id consistently. To ensure accurate matching, clients should convert both the incoming end\_to\_end\_id and the one provided by Plaid to the same case (either lower or upper) before comparison. For virtual account payments, Plaid manages this field automatically. **error** (nullable, object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (nullable, string) 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. **error->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. **error->causes** (array) 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. **error->status** (nullable, integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (nullable, string) Suggested steps for resolving the error **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "payment_token": "payment-token-sandbox-c6a26505-42b4-46fe-8ecf-bf9edcafbebb", "reference": "Account Funding 99744", "amount": { "currency": "GBP", "value": 100 }, "status": "PAYMENT_STATUS_INPUT_NEEDED", "last_status_update": "2019-11-06T21:10:52Z", "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6", "bacs": { "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" }, "iban": null, "request_id": "aEAQmewMzlVa1k6" } ``` \=\*=\*=\*= #### /payment\_initiation/payment/list  #### List payments  The [/payment\_initiation/payment/list](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentlist) endpoint can be used to retrieve all created payments. By default, the 10 most recent payments are returned. You can request more payments and paginate through the results using the optional `count` and `cursor` parameters. #### Request fields  **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. **count** (integer) The maximum number of payments to return. If count is not specified, a maximum of 10 payments will be returned, beginning with the most recent payment before the cursor (if specified). Minimum: 1 Maximum: 200 Default: 10 **cursor** (string) A string in RFC 3339 format (i.e. "2019-12-06T22:35:49Z"). Only payments created before the cursor will be returned. Format: date-time **consent\_id** (string) The consent ID. If specified, only payments, executed using this consent, will be returned. /payment\_initiation/payment/list Node▼ ```javascript const request: PaymentInitiationPaymentListRequest = { count: 10, cursor: '2019-12-06T22:35:49Z', }; try { const response = await plaidClient.paymentInitiationPaymentList(request); const payments = response.data.payments; const nextCursor = response.data.next_cursor; } catch (error) { // handle error } ``` #### Response fields  **payments** (\[object\]) An array of payments that have been created, associated with the given client\_id. **payments->payment\_id** (string) The ID of the payment. Like all Plaid identifiers, the payment\_id is case sensitive. **payments->amount** (object) The amount and currency of a payment **payments->amount->currency** (string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **payments->amount->value** (number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **payments->status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED **payments->recipient\_id** (string) The ID of the recipient **payments->reference** (string) A reference for the payment. **payments->adjusted\_reference** (nullable, string) The value of the reference sent to the bank after adjustment to pass bank validation rules. **payments->last\_status\_update** (string) The date and time of the last time the status was updated, in IS0 8601 format Format: date-time **payments->schedule** (nullable, object) The schedule that the payment will be executed on. If a schedule is provided, the payment is automatically set up as a standing order. If no schedule is specified, the payment will be executed only once. **payments->schedule->interval** (string) The frequency interval of the payment. Possible values: WEEKLY, MONTHLYMin length: 1 **payments->schedule->interval\_execution\_day** (integer) The day of the interval on which to schedule the payment. If the payment interval is weekly, interval\_execution\_day should be an integer from 1 (Monday) to 7 (Sunday). If the payment interval is monthly, interval\_execution\_day should be an integer indicating which day of the month to make the payment on. Integers from 1 to 28 can be used to make a payment on that day of the month. Negative integers from -1 to -5 can be used to make a payment relative to the end of the month. To make a payment on the last day of the month, use -1; to make the payment on the second-to-last day, use -2, and so on. **payments->schedule->start\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). Standing order payments will begin on the first interval\_execution\_day on or after the start\_date. If the first interval\_execution\_day on or after the start date is also the same day that /payment\_initiation/payment/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **payments->schedule->end\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). Standing order payments will end on the last interval\_execution\_day on or before the end\_date. If the only interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /payment\_initiation/payment/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **payments->schedule->adjusted\_start\_date** (nullable, string) The start date sent to the bank after adjusting for holidays or weekends. Will be provided in ISO 8601 format (YYYY-MM-DD). If the start date did not require adjustment, this field will be null. Format: date **payments->refund\_details** (nullable, object) Details about external payment refund **payments->refund\_details->name** (string) The name of the account holder. **payments->refund\_details->iban** (nullable, string) The International Bank Account Number (IBAN) for the account. **payments->refund\_details->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **payments->refund\_details->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **payments->refund\_details->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **payments->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **payments->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **payments->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **payments->iban** (nullable, string) The International Bank Account Number (IBAN) for the sender, if specified in the /payment\_initiation/payment/create call. **payments->refund\_ids** (nullable, \[string\]) Refund IDs associated with the payment. **payments->amount\_refunded** (nullable, object) The amount and currency of a payment **payments->amount\_refunded->currency** (string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **payments->amount\_refunded->value** (number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Format: double Minimum: 0.01 **payments->wallet\_id** (nullable, string) The EMI (E-Money Institution) wallet that this payment is associated with, if any. This wallet is used as an intermediary account to enable Plaid to reconcile the settlement of funds for Payment Initiation requests. **payments->scheme** (nullable, string) Payment scheme. If not specified - the default in the region will be used (e.g. SEPA\_CREDIT\_TRANSFER for EU). Using unsupported values will result in a failed payment. LOCAL\_DEFAULT: The default payment scheme for the selected market and currency will be used. LOCAL\_INSTANT: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks. Possible values: null, LOCAL\_DEFAULT, LOCAL\_INSTANT, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT **payments->adjusted\_scheme** (nullable, string) Payment scheme. If not specified - the default in the region will be used (e.g. SEPA\_CREDIT\_TRANSFER for EU). Using unsupported values will result in a failed payment. LOCAL\_DEFAULT: The default payment scheme for the selected market and currency will be used. LOCAL\_INSTANT: The instant payment scheme for the selected market and currency will be used (if applicable). Fees may be applied by the institution. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment within the SEPA area. May involve additional fees and may not be available at some banks. Possible values: null, LOCAL\_DEFAULT, LOCAL\_INSTANT, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT **payments->consent\_id** (nullable, string) The payment consent ID that this payment was initiated with. Is present only when payment was initiated using the payment consent. **payments->transaction\_id** (nullable, string) The transaction ID that this payment is associated with, if any. This is present only when a payment was initiated using virtual accounts. **payments->end\_to\_end\_id** (nullable, string) A unique identifier assigned by Plaid to each payment for tracking and reconciliation purposes. Note: Not all banks handle end\_to\_end\_id consistently. To ensure accurate matching, clients should convert both the incoming end\_to\_end\_id and the one provided by Plaid to the same case (either lower or upper) before comparison. For virtual account payments, Plaid manages this field automatically. **payments->error** (nullable, object) 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. **payments->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **payments->error->error\_code** (string) The particular error code. Safe for programmatic use. **payments->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **payments->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **payments->error->display\_message** (nullable, string) 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. **payments->error->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. **payments->error->causes** (array) 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. **payments->error->status** (nullable, integer) 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. **payments->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **payments->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **next\_cursor** (nullable, string) The value that, when used as the optional cursor parameter to /payment\_initiation/payment/list, will return the next unreturned payment as its first payment. 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. Response Object ```json { "payments": [ { "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "reference": "Account Funding 99744", "amount": { "currency": "GBP", "value": 100 }, "status": "PAYMENT_STATUS_INPUT_NEEDED", "last_status_update": "2019-11-06T21:10:52Z", "recipient_id": "recipient-id-sandbox-9b6b4679-914b-445b-9450-efbdb80296f6", "bacs": { "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" }, "iban": null } ], "next_cursor": "2020-01-01T00:00:00Z", "request_id": "aEAQmewMzlVa1k6" } ``` \=\*=\*=\*= #### /payment\_initiation/payment/reverse  #### Reverse an existing payment  Reverse a settled payment from a Plaid virtual account. The original payment must be in a settled state to be refunded. To refund partially, specify the amount as part of the request. If the amount is not specified, the refund amount will be equal to all of the remaining payment amount that has not been refunded yet. The refund will go back to the source account that initiated the payment. The original payment must have been initiated to a Plaid virtual account so that this account can be used to initiate the refund. Providing counterparty information such as date of birth and address increases the likelihood of refund being successful without human intervention. #### Request fields  **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. **payment\_id** (required, string) The ID of the payment to reverse **idempotency\_key** (required, string) A random key provided by the client, per unique wallet transaction. Maximum of 128 characters. The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. If a request to execute a wallet transaction fails due to a network connection error, then after a minimum delay of one minute, you can retry the request with the same idempotency key to guarantee that only a single wallet transaction is created. If the request was successfully processed, it will prevent any transaction that uses the same idempotency key, and was received within 24 hours of the first request, from being processed. Max length: 128 Min length: 1 **reference** (required, string) A reference for the refund. This must be an alphanumeric string with 6 to 18 characters and must not contain any special characters or spaces. Max length: 18 Min length: 6 **amount** (object) The amount and currency of a payment **amount->currency** (required, string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **amount->value** (required, number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Format: double Minimum: 0.01 **counterparty\_date\_of\_birth** (string) The counterparty's birthdate, in ISO 8601 (YYYY-MM-DD) format. Format: date **counterparty\_address** (object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **counterparty\_address->street** (required, \[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **counterparty\_address->city** (required, string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **counterparty\_address->postal\_code** (required, string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **counterparty\_address->country** (required, string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 /payment\_initiation/payment/reverse Node▼ ```javascript const request: PaymentInitiationPaymentReverseRequest = { payment_id: paymentID, reference: 'Refund for purchase ABC123', idempotency_key: 'ae009325-df8d-4f52-b1e0-53ff26c23912', }; try { const response = await plaidClient.paymentInitiationPaymentReverse(request); const refundID = response.data.refund_id; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **refund\_id** (string) A unique ID identifying the refund **status** (string) The status of the transaction. AUTHORISING: The transaction is being processed for validation and compliance. INITIATED: The transaction has been initiated and is currently being processed. EXECUTED: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions. SETTLED: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used. FAILED: The transaction failed to process successfully. This is a terminal status. BLOCKED: The transaction has been blocked for violating compliance rules. This is a terminal status. Possible values: AUTHORISING, INITIATED, EXECUTED, SETTLED, BLOCKED, FAILED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "refund_id": "wallet-transaction-id-production-c5f8cd31-6cae-4cad-9b0d-f7c10be9cc4b", "request_id": "HtlKzBX0fMeF7mU", "status": "INITIATED" } ``` \=\*=\*=\*= #### /payment\_initiation/consent/create  #### Create payment consent  The [/payment\_initiation/consent/create](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentcreate) endpoint is used to create a payment consent, which can be used to initiate payments on behalf of the user. Payment consents are created with `UNAUTHORISED` status by default and must be authorised by the user before payments can be initiated. Consents can be limited in time and scope, and have constraints that describe limitations for payments. #### Request fields  **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. **recipient\_id** (required, string) The ID of the recipient the payment consent is for. The created consent can be used to transfer funds to this recipient only. **reference** (required, string) A reference for the payment consent. This must be an alphanumeric string with at most 18 characters and must not contain any special characters. Min length: 1 Max length: 18 **scopes** (deprecated, \[string\]) An array of payment consent scopes. Min items: 1 Possible values: ME\_TO\_ME, EXTERNAL **type** (string) Payment consent type. Defines possible use case for payments made with the given consent. SWEEPING: Allows moving money between accounts owned by the same user. COMMERCIAL: Allows initiating payments from the user's account to third parties. Possible values: SWEEPING, COMMERCIAL **constraints** (required, object) Limitations that will be applied to payments initiated using the payment consent. **constraints->valid\_date\_time** (object) Life span for the payment consent. After the to date the payment consent expires and can no longer be used for payment initiation. **constraints->valid\_date\_time->from** (string) The date and time from which the consent should be active, in ISO 8601 format. Format: date-time **constraints->valid\_date\_time->to** (string) The date and time at which the consent expires, in ISO 8601 format. Format: date-time **constraints->max\_payment\_amount** (required, object) Maximum amount of a single payment initiated using the payment consent. **constraints->max\_payment\_amount->currency** (required, string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **constraints->max\_payment\_amount->value** (required, number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **constraints->periodic\_amounts** (required, \[object\]) A list of amount limitations per period of time. Min items: 1 **constraints->periodic\_amounts->amount** (required, object) Maximum cumulative amount for all payments in the specified interval. **constraints->periodic\_amounts->amount->currency** (required, string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **constraints->periodic\_amounts->amount->value** (required, number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **constraints->periodic\_amounts->interval** (required, string) Payment consent periodic interval. Possible values: DAY, WEEK, MONTH, YEAR **constraints->periodic\_amounts->alignment** (required, string) Where the payment consent period should start. If the institution is Monzo, only CONSENT alignments are supported. CALENDAR: line up with a calendar. CONSENT: on the date of consent creation. Possible values: CALENDAR, CONSENT **options** (deprecated, object) (Deprecated) Additional payment consent options. Please use payer\_details to specify the account. **options->request\_refund\_details** (boolean) When true, Plaid will attempt to request refund details from the payee's financial institution. Support varies between financial institutions and will not always be available. If refund details could be retrieved, they will be available in the /payment\_initiation/payment/get response. **options->iban** (string) The International Bank Account Number (IBAN) for the payer's account. Where possible, the end user will be able to set up payment consent using only the specified bank account if provided. Min length: 15 Max length: 34 **options->bacs** (object) An optional object used to restrict the accounts used for payments. If provided, the end user will be able to send payments only from the specified bank account. **options->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **options->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **payer\_details** (object) An object representing the payment consent payer details. Payer name and account numbers are required to lock the account to which the consent can be created. **payer\_details->name** (required, string) The name of the payer as it appears in their bank account Min length: 1 **payer\_details->numbers** (required, object) The counterparty's bank account numbers. Exactly one of IBAN or BACS data is required. **payer\_details->numbers->bacs** (object) An optional object used to restrict the accounts used for payments. If provided, the end user will be able to send payments only from the specified bank account. **payer\_details->numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **payer\_details->numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **payer\_details->numbers->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **payer\_details->address** (object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **payer\_details->address->street** (required, \[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **payer\_details->address->city** (required, string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **payer\_details->address->postal\_code** (required, string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **payer\_details->address->country** (required, string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **payer\_details->date\_of\_birth** (string) The payer's birthdate, in ISO 8601 (YYYY-MM-DD) format. Format: date **payer\_details->phone\_numbers** (\[string\]) The payer's phone numbers in E.164 format: +{countrycode}{number} **payer\_details->emails** (\[string\]) The payer's emails /payment\_initiation/consent/create Node▼ ```javascript const request: PaymentInitiationConsentCreateRequest = { recipient_id: recipientID, reference: 'TestPaymentConsent', type: PaymentInitiationConsentType.Commercial, constraints: { valid_date_time: { to: '2024-12-31T23:59:59Z', }, max_payment_amount: { currency: PaymentAmountCurrency.Gbp, value: 15, }, periodic_amounts: [ { amount: { currency: PaymentAmountCurrency.Gbp, value: 40, }, alignment: PaymentConsentPeriodicAlignment.Calendar, interval: PaymentConsentPeriodicInterval.Month, }, ], }, }; try { const response = await plaidClient.paymentInitiationConsentCreate(request); const consentID = response.data.consent_id; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **consent\_id** (string) A unique ID identifying the payment consent. **status** (string) The status of the payment consent. UNAUTHORISED: Consent created, but requires user authorisation. REJECTED: Consent authorisation was rejected by the bank. AUTHORISED: Consent is active and ready to be used. REVOKED: Consent has been revoked and can no longer be used. EXPIRED: Consent is no longer valid. Possible values: UNAUTHORISED, AUTHORISED, REVOKED, REJECTED, EXPIRED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "consent_id": "consent-id-production-feca8a7a-5491-4444-9999-f3062bb735d3", "status": "UNAUTHORISED", "request_id": "4ciYmmesdqSiUAB" } ``` \=\*=\*=\*= #### /payment\_initiation/consent/get  #### Get payment consent  The [/payment\_initiation/consent/get](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentget) endpoint can be used to check the status of a payment consent, as well as to receive basic information such as recipient and constraints. #### Request fields  **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. **consent\_id** (required, string) The consent\_id returned from /payment\_initiation/consent/create. Node▼ ```javascript const request: PaymentInitiationConsentGetRequest = { consent_id: consentID, }; try { const response = await plaidClient.paymentInitiationConsentGet(request); const consentID = response.data.consent_id; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **consent\_id** (string) The consent ID. Min length: 1 **status** (string) The status of the payment consent. UNAUTHORISED: Consent created, but requires user authorisation. REJECTED: Consent authorisation was rejected by the bank. AUTHORISED: Consent is active and ready to be used. REVOKED: Consent has been revoked and can no longer be used. EXPIRED: Consent is no longer valid. Possible values: UNAUTHORISED, AUTHORISED, REVOKED, REJECTED, EXPIRED **created\_at** (string) Consent creation timestamp, in ISO 8601 format. Format: date-time **recipient\_id** (string) The ID of the recipient the payment consent is for. Min length: 1 **reference** (string) A reference for the payment consent. **constraints** (object) Limitations that will be applied to payments initiated using the payment consent. **constraints->valid\_date\_time** (nullable, object) Life span for the payment consent. After the to date the payment consent expires and can no longer be used for payment initiation. **constraints->valid\_date\_time->from** (nullable, string) The date and time from which the consent should be active, in ISO 8601 format. Format: date-time **constraints->valid\_date\_time->to** (nullable, string) The date and time at which the consent expires, in ISO 8601 format. Format: date-time **constraints->max\_payment\_amount** (object) Maximum amount of a single payment initiated using the payment consent. **constraints->max\_payment\_amount->currency** (string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **constraints->max\_payment\_amount->value** (number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **constraints->periodic\_amounts** (\[object\]) A list of amount limitations per period of time. Min items: 1 **constraints->periodic\_amounts->amount** (object) Maximum cumulative amount for all payments in the specified interval. **constraints->periodic\_amounts->amount->currency** (string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **constraints->periodic\_amounts->amount->value** (number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **constraints->periodic\_amounts->interval** (string) Payment consent periodic interval. Possible values: DAY, WEEK, MONTH, YEAR **constraints->periodic\_amounts->alignment** (string) Where the payment consent period should start. If the institution is Monzo, only CONSENT alignments are supported. CALENDAR: line up with a calendar. CONSENT: on the date of consent creation. Possible values: CALENDAR, CONSENT **scopes** (deprecated, \[string\]) Deprecated, use the 'type' field instead. Possible values: ME\_TO\_ME, EXTERNAL **type** (string) Payment consent type. Defines possible use case for payments made with the given consent. SWEEPING: Allows moving money between accounts owned by the same user. COMMERCIAL: Allows initiating payments from the user's account to third parties. Possible values: SWEEPING, COMMERCIAL **payer\_details** (nullable, object) Details about external payment refund **payer\_details->name** (string) The name of the account holder. **payer\_details->iban** (nullable, string) The International Bank Account Number (IBAN) for the account. **payer\_details->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if this recipient needs to accept domestic GBP-denominated payments, BACS data is required. **payer\_details->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **payer\_details->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "4ciYuuesdqSiUAB", "consent_id": "consent-id-production-feca8a7a-5491-4aef-9298-f3062bb735d3", "status": "AUTHORISED", "created_at": "2021-10-30T15:26:48Z", "recipient_id": "recipient-id-production-9b6b4679-914b-445b-9450-efbdb80296f6", "reference": "ref-00001", "constraints": { "valid_date_time": { "from": "2021-12-25T11:12:13Z", "to": "2022-12-31T15:26:48Z" }, "max_payment_amount": { "currency": "GBP", "value": 100 }, "periodic_amounts": [ { "amount": { "currency": "GBP", "value": 300 }, "interval": "WEEK", "alignment": "CALENDAR" } ] }, "type": "SWEEPING" } ``` \=\*=\*=\*= #### /payment\_initiation/consent/revoke  #### Revoke payment consent  The [/payment\_initiation/consent/revoke](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentrevoke) endpoint can be used to revoke the payment consent. Once the consent is revoked, it is not possible to initiate payments using it. #### Request fields  **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. **consent\_id** (required, string) The consent ID. Node▼ ```javascript const request: PaymentInitiationConsentRevokeRequest = { consent_id: consentID, }; try { const response = await plaidClient.paymentInitiationConsentRevoke(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "4ciYaaesdqSiUAB" } ``` \=\*=\*=\*= #### /payment\_initiation/consent/payment/execute  #### Execute a single payment using consent  The [/payment\_initiation/consent/payment/execute](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationconsentpaymentexecute) endpoint can be used to execute payments using payment consent. #### Request fields  **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. **consent\_id** (required, string) The consent ID. **amount** (required, object) The amount and currency of a payment **amount->currency** (required, string) The ISO-4217 currency code of the payment. For standing orders and payment consents, "GBP" must be used. For Poland, Denmark, Sweden and Norway, only the local currency is currently supported. Possible values: GBP, EUR, PLN, SEK, DKK, NOKMin length: 3 Max length: 3 **amount->value** (required, number) The amount of the payment. Must contain at most two digits of precision e.g. 1.23. Minimum accepted value is 1. Format: double **idempotency\_key** (required, string) A random key provided by the client, per unique consent payment. Maximum of 128 characters. The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. If a request to execute a consent payment fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single payment is created. If the request was successfully processed, it will prevent any payment that uses the same idempotency key, and was received within 48 hours of the first request, from being processed. Max length: 128 Min length: 1 **reference** (string) A reference for the payment. This must be an alphanumeric string with at most 18 characters and must not contain any special characters (since not all institutions support them). If not provided, Plaid will automatically fall back to the reference from consent. In order to track settlement via Payment Confirmation, each payment must have a unique reference. If the reference provided through the API is not unique, Plaid will adjust it. Some institutions may limit the reference to less than 18 characters. If necessary, Plaid will adjust the reference by truncating it to fit the institution's requirements. Both the originally provided and automatically adjusted references (if any) can be found in the reference and adjusted\_reference fields, respectively. Min length: 1 Max length: 18 **scope** (deprecated, string) Deprecated, payments will be executed within the type of the consent. A scope of the payment. Must be one of the scopes mentioned in the consent. Optional if the appropriate consent has only one scope defined, required otherwise. Possible values: ME\_TO\_ME, EXTERNAL **processing\_mode** (string) Decides the mode under which the payment processing should be performed, using IMMEDIATE as default. IMMEDIATE: Will immediately execute the payment, waiting for a response from the ASPSP before returning the result of the payment initiation. This is ideal for user-present flows. ASYNC: Will accept a payment execution request and schedule it for processing, immediately returning the new payment\_id. Listen for webhooks to obtain real-time updates on the payment status. This is ideal for non user-present flows. Possible values: ASYNC, IMMEDIATE /payment\_initiation/consent/payment/execute Node▼ ```javascript const request: PaymentInitiationConsentPaymentExecuteRequest = { consent_id: consentID, amount: { currency: PaymentAmountCurrency.Gbp, value: 7.99, }, reference: 'Payment1', idempotency_key: idempotencyKey, }; try { const response = await plaidClient.paymentInitiationConsentPaymentExecute( request, ); const paymentID = response.data.payment_id; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **payment\_id** (string) A unique ID identifying the payment **status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **error** (nullable, object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (nullable, string) 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. **error->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. **error->causes** (array) 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. **error->status** (nullable, integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (nullable, string) Suggested steps for resolving the error Response Object ```json { "payment_id": "payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "request_id": "4ciYccesdqSiUAB", "status": "PAYMENT_STATUS_INITIATED" } ``` ### Webhooks  Updates are sent to indicate that the status of an initiated payment has changed. All Payment Initiation webhooks have a `webhook_type` of `PAYMENT_INITIATION`. \=\*=\*=\*= #### PAYMENT\_STATUS\_UPDATE  Fired when the status of a payment has changed. #### Properties  **webhook\_type** (string) PAYMENT\_INITIATION **webhook\_code** (string) PAYMENT\_STATUS\_UPDATE **payment\_id** (string) The payment\_id for the payment being updated **transaction\_id** (string) The transaction ID that this payment is associated with, if any. This is present only when a payment was initiated using virtual accounts. **new\_payment\_status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED **old\_payment\_status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED **original\_reference** (string) The original value of the reference when creating the payment. **adjusted\_reference** (string) The value of the reference sent to the bank after adjustment to pass bank validation rules. **original\_start\_date** (string) The original value of the start\_date provided during the creation of a standing order. If the payment is not a standing order, this field will be null. Format: date **adjusted\_start\_date** (string) The start date sent to the bank after adjusting for holidays or weekends. Will be provided in ISO 8601 format (YYYY-MM-DD). If the start date did not require adjustment, or if the payment is not a standing order, this field will be null. Format: date **timestamp** (string) The timestamp of the update, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "PAYMENT_INITIATION", "webhook_code": "PAYMENT_STATUS_UPDATE", "payment_id": "payment-id-production-2ba30780-d549-4335-b1fe-c2a938aa39d2", "new_payment_status": "PAYMENT_STATUS_INITIATED", "old_payment_status": "PAYMENT_STATUS_PROCESSING", "original_reference": "Account Funding 99744", "adjusted_reference": "Account Funding 99", "original_start_date": "2017-09-14", "adjusted_start_date": "2017-09-15", "timestamp": "2017-09-14T14:42:19.350Z", "environment": "production" } ``` \=\*=\*=\*= #### CONSENT\_STATUS\_UPDATE  Fired when the status of a payment consent has changed. #### Properties  **webhook\_type** (string) PAYMENT\_INITIATION **webhook\_code** (string) CONSENT\_STATUS\_UPDATE **consent\_id** (string) The id for the consent being updated **old\_status** (string) The status of the payment consent. UNAUTHORISED: Consent created, but requires user authorisation. REJECTED: Consent authorisation was rejected by the bank. AUTHORISED: Consent is active and ready to be used. REVOKED: Consent has been revoked and can no longer be used. EXPIRED: Consent is no longer valid. Possible values: UNAUTHORISED, AUTHORISED, REVOKED, REJECTED, EXPIRED **new\_status** (string) The status of the payment consent. UNAUTHORISED: Consent created, but requires user authorisation. REJECTED: Consent authorisation was rejected by the bank. AUTHORISED: Consent is active and ready to be used. REVOKED: Consent has been revoked and can no longer be used. EXPIRED: Consent is no longer valid. Possible values: UNAUTHORISED, AUTHORISED, REVOKED, REJECTED, EXPIRED **timestamp** (string) The timestamp of the update, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "PAYMENT_INITIATION", "webhook_code": "CONSENT_STATUS_UPDATE", "consent_id": "payment-consent-id-production-e7258765-69f9-46b1-9c67-d2800448e5ff", "old_status": "UNAUTHORISED", "new_status": "AUTHORISED", "timestamp": "2017-09-14T14:42:19.350Z", "environment": "production" } ``` --- # API - Protect | Plaid Docs #### This page is not available  ##### Log in to view this page   If you believe this is a mistake, please contact your Account Manager --- # API - Signal and Balance | Plaid Docs Signal Transaction Scores and Balance endpoints  ================================================ #### API Reference guide for the Signal Transaction Scores and Balance products  For how-to guidance, see the [Balance documentation](https://plaid.com/docs/balance/index.html.md) and [Signal Transaction Scores documentation](https://plaid.com/docs/signal/index.html.md) . | Plaid Signal endpoints (for both Balance and Signal Transaction Scores) | | | --- | --- | | [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) | Evaluate a proposed ACH transaction for return risk | | [/signal/decision/report](https://plaid.com/docs/api/products/signal/index.html.md#signaldecisionreport) | Report whether you initiated an ACH transaction | | [/signal/return/report](https://plaid.com/docs/api/products/signal/index.html.md#signalreturnreport) | Report a return for an ACH transaction | | Signal Transaction Scores-only endpoints | | | --- | --- | | [/signal/prepare](https://plaid.com/docs/api/products/signal/index.html.md#signalprepare) | Enable an existing Item for Signal Transaction Scores | | Balance-only endpoints | | | --- | --- | | [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) | Fetch real-time balances | | See also | | | --- | --- | | [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) | Create a token for using Plaid Signal Transaction Scores with a processor partner | | [/processor/signal/evaluate](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalevaluate) | Evaluate a proposed ACH transaction for return risk as a processor partner | | [/processor/signal/decision/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignaldecisionreport) | Report whether you initiated an ACH transaction as a processor partner | | [/processor/signal/return/report](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalreturnreport) | Report a return for an ACH transaction as a processor partner | | [/processor/signal/prepare](https://plaid.com/docs/api/processor-partners/index.html.md#processorsignalprepare) | Enable an existing processor token for Signal Transaction Scores | | [/processor/balance/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorbalanceget) | Fetch real-time balances as a processor partner | \=\*=\*=\*= #### /signal/evaluate  #### Evaluate a planned ACH transaction  Use [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) to evaluate a planned ACH transaction to get a return risk assessment and additional risk signals. Before using [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) , you must first [create a ruleset](https://plaid.com/docs/signal/signal-rules/index.html.md) in the Dashboard under [Signal->Rules](https://dashboard.plaid.com/signal/risk-profiles) . [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) can be used with either Signal Transaction Scores or the Balance product. Which product is used will be determined by the `ruleset_key` that you provide. For more details, see [Signal Rules](https://plaid.com/docs/signal/signal-rules/index.html.md) . Note: This request may have higher latency when using a Balance-only ruleset. This is because Plaid must communicate directly with the institution to request data. Balance-only rulesets may have latency of up to 30 seconds or more; if you encounter errors, you may find it necessary to adjust your timeout period when making requests. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **account\_id** (required, string) The Plaid account\_id of the account that is the funding source for the proposed transaction. The account\_id is returned in the /accounts/get endpoint as well as the onSuccess callback metadata. This will return an INVALID\_ACCOUNT\_ID error if the account has been removed at the bank or if the account\_id is no longer valid. **client\_transaction\_id** (required, string) The unique ID that you would like to use to refer to this evaluation attempt - for example, a payment attempt ID. You will use this later to debug this evaluation, and/or report an ACH return, etc. The max length for this field is 36 characters. Min length: 1 Max length: 36 **amount** (required, number) The transaction amount, in USD (e.g. 102.05) Format: double **client\_user\_id** (string) A unique ID that identifies the end user in your system. This ID is used to correlate requests by a user with multiple Items. Personally identifiable information, such as an email address or phone number, should not be used in the client\_user\_id. **is\_recurring** (boolean) Use true if the ACH transaction is a part of recurring schedule (for example, a monthly repayment); false otherwise. When using a Balance-only ruleset, this field is ignored. **default\_payment\_method** (string) The default ACH payment method to complete the transaction. When using a Balance-only ruleset, this field is ignored. SAME\_DAY\_ACH: Same Day ACH by Nacha. The debit transaction is processed and settled on the same day. STANDARD\_ACH: Standard ACH by Nacha. MULTIPLE\_PAYMENT\_METHODS: If there is no default debit rail or there are multiple payment methods. Possible values: SAME\_DAY\_ACH, STANDARD\_ACH, MULTIPLE\_PAYMENT\_METHODS **user** (object) Details about the end user initiating the transaction (i.e., the account holder). These fields are optional, but strongly recommended to increase the accuracy of results when using Signal Transaction Scores. When using a Balance-only ruleset, if the Signal Addendum has been signed, these fields are ignored; if the Addendum has not been signed, using these fields will result in an error. **user->name** (object) The user's legal name **user->name->prefix** (string) The user's name prefix (e.g. "Mr.") **user->name->given\_name** (string) The user's given name. If the user has a one-word name, it should be provided in this field. **user->name->middle\_name** (string) The user's middle name **user->name->family\_name** (string) The user's family name / surname **user->name->suffix** (string) The user's name suffix (e.g. "II") **user->phone\_number** (string) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14151234567" **user->email\_address** (string) The user's email address. **user->address** (object) Data about the components comprising an address. **user->address->city** (string) The full city name **user->address->region** (string) The region or state Example: "NC" **user->address->street** (string) The full street address Example: "564 Main Street, APT 15" **user->address->postal\_code** (string) The postal code **user->address->country** (string) The ISO 3166-1 alpha-2 country code **device** (object) Details about the end user's device. These fields are optional, but strongly recommended to increase the accuracy of results when using Signal Transaction Scores. When using a Balance-only Ruleset, these fields are ignored if the Signal Addendum has been signed; if it has not been signed, using these fields will result in an error. **device->ip\_address** (string) The IP address of the device that initiated the transaction **device->user\_agent** (string) The user agent of the device that initiated the transaction (e.g. "Mozilla/5.0") **ruleset\_key** (string) The key of the ruleset to use for evaluating this transaction. You can create a ruleset using the Plaid Dashboard, under Signal->Rules. If not provided, for all new customers as of October 15, 2025, the default ruleset will be used. For existing Signal Transaction Scores customers as of October 15, 2025, by default, no ruleset will be used if the ruleset\_key is not provided. For more information, or to opt out of using rulesets, see Signal Rules. /signal/evaluate Node▼ ```javascript const eval_request = { access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', client_transaction_id: 'txn12345', amount: 123.45, client_user_id: 'user1234', user: { name: { prefix: 'Ms.', given_name: 'Jane', middle_name: 'Leah', family_name: 'Doe', suffix: 'Jr.', }, phone_number: '+14152223333', email_address: 'jane.doe@example.com', address: { street: '2493 Leisure Lane', city: 'San Matias', region: 'CA', postal_code: '93405-2255', country: 'US', }, }, device: { ip_address: '198.30.2.2', user_agent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', }, }; try { const eval_response = await plaidClient.signalEvaluate(eval_request); const core_attributes = eval_response.data.core_attributes; const scores = eval_response.data.scores; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **scores** (nullable, object) Risk scoring details broken down by risk category. When using a Balance-only ruleset, this object will not be returned. **scores->customer\_initiated\_return\_risk** (object) The object contains a risk score and a risk tier that evaluate the transaction return risk of an unauthorized debit. Common return codes in this category include: "R05", "R07", "R10", "R11", "R29". These returns typically have a return time frame of up to 60 calendar days. During this period, the customer of financial institutions can dispute a transaction as unauthorized. **scores->customer\_initiated\_return\_risk->score** (integer) A score from 1-99 that indicates the transaction return risk: a higher risk score suggests a higher return likelihood. Minimum: 1 Maximum: 99 **scores->bank\_initiated\_return\_risk** (object) The object contains a risk score and a risk tier that evaluate the transaction return risk because an account is overdrawn or because an ineligible account is used. Common return codes in this category include: "R01", "R02", "R03", "R04", "R06", "R08", "R09", "R13", "R16", "R17", "R20", "R23". These returns have a turnaround time of 2 banking days. **scores->bank\_initiated\_return\_risk->score** (integer) A score from 1-99 that indicates the transaction return risk: a higher risk score suggests a higher return likelihood. Minimum: 1 Maximum: 99 **core\_attributes** (object) The core attributes object contains additional data that can be used to assess the ACH return risk. If using a Balance-only ruleset, only available\_balance and current\_balance will be returned as core attributes. If using a Signal Transaction Scores ruleset, over 80 core attributes will be returned. Examples of attributes include: available\_balance and current\_balance: The balance in the ACH transaction funding account days\_since\_first\_plaid\_connection: The number of days since the first time the Item was connected to an application via Plaid plaid\_connections\_count\_7d: The number of times the Item has been connected to applications via Plaid over the past 7 days plaid\_connections\_count\_30d: The number of times the Item has been connected to applications via Plaid over the past 30 days total\_plaid\_connections\_count: The number of times the Item has been connected to applications via Plaid is\_savings\_or\_money\_market\_account: Indicates whether the ACH transaction funding account is a savings/money market account For the full list and detailed documentation of core attributes available, or to request that core attributes not be returned, contact Sales or your Plaid account manager. **ruleset** (nullable, object) Details about the transaction result after evaluation by the requested Ruleset. If a ruleset\_key is not provided, for customers who began using Signal Transaction Scores before October 15, 2025, by default, this field will be omitted. To learn more, see Signal Rules. **ruleset->ruleset\_key** (string) The key of the Ruleset used for this transaction. **ruleset->result** (string) The result of the rule that was triggered for this transaction. ACCEPT: Accept the transaction for processing. REROUTE: Reroute the transaction to a different payment method, as this transaction is too risky. REVIEW: Review the transaction before proceeding. Possible values: ACCEPT, REROUTE, REVIEW **ruleset->triggered\_rule\_details** (nullable, object) Rules are run in numerical order. The first rule with a logic match is triggered. These are the details of that rule. **ruleset->triggered\_rule\_details->internal\_note** (string) An optional message attached to the triggered rule, defined within the Dashboard, for your internal use. Useful for debugging, such as “Account appears to be closed.” **ruleset->triggered\_rule\_details->custom\_action\_key** (string) A string key, defined within the Dashboard, used to trigger programmatic behavior for a certain result. For instance, you could optionally choose to define a "3-day-hold" custom\_action\_key for an ACCEPT result. **warnings** (\[object\]) If bank information was not available to be used in the Signal Transaction Scores model, this array contains warnings describing why bank data is missing. If you want to receive an API error instead of results in the case of missing bank data, file a support ticket or contact your Plaid account manager. **warnings->warning\_type** (string) A broad categorization of the warning. Safe for programmatic use. **warnings->warning\_code** (string) The warning code identifies a specific kind of warning that pertains to the error causing bank data to be missing. Safe for programmatic use. For more details on warning codes, please refer to Plaid standard error codes documentation. If you receive the ITEM\_LOGIN\_REQUIRED warning, we recommend re-authenticating your user by implementing Link's update mode. This will guide your user to fix their credentials, allowing Plaid to start fetching data again for future requests. **warnings->warning\_message** (string) A developer-friendly representation of the warning type. This may change over time and is not safe for programmatic use. Response Object ```json { "scores": { "customer_initiated_return_risk": { "score": 9, "risk_tier": 1 }, "bank_initiated_return_risk": { "score": 82, "risk_tier": 7 } }, "core_attributes": { "available_balance": 2200, "current_balance": 2000 }, "ruleset": { "ruleset_key": "onboarding_flow", "result": "REROUTE", "triggered_rule_details": { "internal_note": "Rerouting customer to different payment method, since bank risk score is too high" } }, "warnings": [], "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /signal/decision/report  #### Report whether you initiated an ACH transaction  After you call [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) , Plaid will normally infer the outcome from your Signal Rules. However, if you are not using Signal Rules, if the Signal Rules outcome was `REVIEW`, or if you take a different action than the one determined by the Signal Rules, you will need to call [/signal/decision/report](https://plaid.com/docs/api/products/signal/index.html.md#signaldecisionreport) . This helps improve Signal Transaction Score accuracy for your account and is necessary for proper functioning of the rule performance and rule tuning capabilities in the Dashboard. If your effective decision changes after calling [/signal/decision/report](https://plaid.com/docs/api/products/signal/index.html.md#signaldecisionreport) (for example, you indicated that you accepted a transaction, but later on, your payment processor rejected it, so it was never initiated), call [/signal/decision/report](https://plaid.com/docs/api/products/signal/index.html.md#signaldecisionreport) again for the transaction to correct Plaid's records. If you are using Plaid Transfer as your payment processor, you also do not need to call [/signal/decision/report](https://plaid.com/docs/api/products/signal/index.html.md#signaldecisionreport) , as Plaid can infer outcomes from your Transfer activity. If using a Balance-only ruleset, this endpoint will not impact scores (Balance does not use scores), but is necessary to view accurate transaction outcomes and tune rule logic in the Dashboard. #### Request fields  **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\_transaction\_id** (required, string) Must be the same as the client\_transaction\_id supplied when calling /signal/evaluate Min length: 1 Max length: 36 **initiated** (required, boolean) true if the ACH transaction was initiated, false otherwise. This field must be returned as a boolean. If formatted incorrectly, this will result in an INVALID\_FIELD error. **days\_funds\_on\_hold** (integer) The actual number of days (hold time) since the ACH debit transaction that you wait before making funds available to your customers. The holding time could affect the ACH return rate. For example, use 0 if you make funds available to your customers instantly or the same day following the debit transaction, or 1 if you make funds available the next day following the debit initialization. Minimum: 0 **decision\_outcome** (string) The payment decision from the risk assessment. APPROVE: approve the transaction without requiring further actions from your customers. For example, use this field if you are placing a standard hold for all the approved transactions before making funds available to your customers. You should also use this field if you decide to accelerate the fund availability for your customers. REVIEW: the transaction requires manual review REJECT: reject the transaction TAKE\_OTHER\_RISK\_MEASURES: for example, placing a longer hold on funds than those approved transactions or introducing customer frictions such as step-up verification/authentication NOT\_EVALUATED: if only logging the results without using them Possible values: APPROVE, REVIEW, REJECT, TAKE\_OTHER\_RISK\_MEASURES, NOT\_EVALUATED **payment\_method** (string) The payment method to complete the transaction after the risk assessment. It may be different from the default payment method. SAME\_DAY\_ACH: Same Day ACH by Nacha. The debit transaction is processed and settled on the same day. STANDARD\_ACH: Standard ACH by Nacha. MULTIPLE\_PAYMENT\_METHODS: if there is no default debit rail or there are multiple payment methods. Possible values: SAME\_DAY\_ACH, STANDARD\_ACH, MULTIPLE\_PAYMENT\_METHODS **amount\_instantly\_available** (number) The amount (in USD) made available to your customers instantly following the debit transaction. It could be a partial amount of the requested transaction (example: 102.05). Format: double /signal/decision/report Node▼ ```javascript const decision_report_request = { client_transaction_id: 'txn12345', initiated: true, days_funds_on_hold: 3, }; try { const decision_report_response = await plaidClient.signalDecisionReport( decision_report_request, ); const decision_request_id = decision_report_response.data.request_id; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /signal/return/report  #### Report a return for an ACH transaction  Call the [/signal/return/report](https://plaid.com/docs/api/products/signal/index.html.md#signalreturnreport) endpoint to report a returned transaction that was previously sent to the [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) endpoint. Your feedback will be used by the model to incorporate the latest risk trends into your scores and tune rule logic. If using a Balance-only ruleset, this endpoint will not impact scores (as Balance does not use scores), but is necessary to view accurate transaction outcomes and tune rule logic in the Dashboard. #### Request fields  **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\_transaction\_id** (required, string) Must be the same as the client\_transaction\_id supplied when calling /signal/evaluate or /accounts/balance/get. Min length: 1 Max length: 36 **return\_code** (required, string) Must be a valid ACH return code (e.g. "R01") If formatted incorrectly, this will result in an INVALID\_FIELD error. **returned\_at** (string) Date and time when you receive the returns from your payment processors, in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ). Format: date-time /signal/return/report Node▼ ```javascript const return_report_request = { client_transaction_id: 'txn12345', return_code: 'R01', }; try { const return_report_response = await plaidClient.signalReturnReport( return_report_request, ); const request_id = return_report_response.data.request_id; console.log(request_id); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /signal/prepare  #### Opt-in an Item to Signal Transaction Scores  When an Item is not initialized with `signal`, call [/signal/prepare](https://plaid.com/docs/api/products/signal/index.html.md#signalprepare) to opt-in that Item to the data collection process used to develop a Signal Transaction Score. This should be done on Items where `signal` was added in the `additional_consented_products` array but not in the `products`, `optional_products`, or `required_if_supported_products` array. If [/signal/prepare](https://plaid.com/docs/api/products/signal/index.html.md#signalprepare) is skipped on an Item that is not initialized with `signal`, the initial call to [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) on that Item will be less accurate, because Plaid will have access to less data for computing the Signal Transaction Score. If your integration is purely Balance-only, this endpoint will have no effect, as Balance-only rulesets do not calculate a Signal Transaction Score. If run on an Item that is already initialized with `signal`, this endpoint will return a 200 response and will not modify the Item. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. /signal/prepare Node▼ ```javascript const prepare_request = { client_id: '7f57eb3d2a9j6480121fx361', secret: '79g03eoofwl8240v776r2h667442119', access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', }; try { const prepare_response = await plaidClient.signalPrepare(prepare_request); const request_id = prepare_response.data.request_id; console.log(request_id); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /accounts/balance/get  #### Retrieve real-time balance data  The [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) endpoint returns the real-time balance for each of an Item's accounts. While other endpoints, such as [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) , return a balance object, [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) forces the available and current balance fields to be refreshed rather than cached. This endpoint can be used for existing Items that were added via any of Plaid’s other products. This endpoint can be used as long as Link has been initialized with any other product, `balance` itself is not a product that can be used to initialize Link. As this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests. Note: If you are getting real-time balance for the purpose of assessing the return risk of a proposed ACH transaction, it is recommended to use [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) instead of [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) . [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) returns the same real-time balance information and also provides access to Signal Rules, which provides no-code transaction business logic configuration, backtesting and recommendations for tuning your transaction acceptance logic, and the ability to easily switch between Balance and Signal Transaction Scores as needed for ultra-low-latency, ML-powered risk assessments. For more details, see the [Balance documentation](https://plaid.com/docs/balance/index.html.md#balance-integration-options) . #### Request fields  **access\_token** (required, string) The access token associated with the Item data is being requested for. **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\_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. **options** (object) Optional parameters to /accounts/balance/get. **options->account\_ids** (\[string\]) A list of account\_ids to retrieve for the Item. The default value is null. Note: An error will be returned if a provided account\_id is not associated with the Item. **options->min\_last\_updated\_datetime** (string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the oldest acceptable balance when making a request to /accounts/balance/get. This field is only necessary when the institution is ins\_128026 (Capital One), and one or more account types being requested is a non-depository account (such as a credit card) as Capital One does not provide real-time balance for non-depository accounts. In this case, a value must be provided or an INVALID\_REQUEST error with the code of INVALID\_FIELD will be returned. For all other institutions, as well as for depository accounts at Capital One (including all checking and savings accounts) this field is ignored and real-time balance information will be fetched. If this field is not ignored, and no acceptable balance is available, an INVALID\_RESULT error with the code LAST\_UPDATED\_DATETIME\_OUT\_OF\_RANGE will be returned. Format: date-time /accounts/balance/get Node▼ ```javascript // Pull real-time balance information for each account associated // with the Item const request: AccountsGetRequest = { access_token: accessToken, }; try { const response = await plaidClient.accountsBalanceGet(request); const accounts = response.data.accounts; } catch (error) { // handle error } ``` #### Response fields  **accounts** (\[object\]) An array of financial institution accounts associated with the Item. If /accounts/balance/get was called, each account will include real-time balance information. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "holder_category": "personal", "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" }, { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "balances": { "available": null, "current": 410, "iso_currency_code": "USD", "limit": 2000, "unofficial_currency_code": null }, "mask": "3333", "name": "Plaid Credit Card", "official_name": "Plaid Diamond 12.5% APR Interest Credit Card", "subtype": "credit card", "type": "credit" }, { "account_id": "Pp1Vpkl9w8sajvK6oEEKtr7vZxBnGpf7LxxLE", "balances": { "available": null, "current": 65262, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "7777", "name": "Plaid Student Loan", "official_name": null, "subtype": "student", "type": "loan" } ], "item": { "available_products": [ "balance", "identity", "investments" ], "billed_products": [ "assets", "auth", "liabilities", "transactions" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "request_id": "qk5Bxes3gDfv4F2" } ``` --- # API - Statements | Plaid Docs Statements  =========== #### API reference for Statements endpoints and webhooks  For how-to guidance, see the [Statements documentation](https://plaid.com/docs/statements/index.html.md) . | Endpoint | Description | | --- | --- | | [/statements/list](https://plaid.com/docs/api/products/statements/index.html.md#statementslist) | Get a list of statements available to download | | [/statements/download](https://plaid.com/docs/api/products/statements/index.html.md#statementsdownload) | Download a single bank statement | | [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) | Trigger on-demand statement extractions | | Webhook Name | Description | | --- | --- | | [STATEMENTS\_REFRESH\_COMPLETE](https://plaid.com/docs/api/products/statements/index.html.md#statements_refresh_complete) | Statements refresh completed | ### Endpoints  \=\*=\*=\*= #### /statements/list  #### Retrieve a list of all statements associated with an item.  The [/statements/list](https://plaid.com/docs/api/products/statements/index.html.md#statementslist) endpoint retrieves a list of all statements associated with an item. #### Request fields  **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. /statements/list Node▼ ```javascript const listRequest: StatementsListRequest = { access_token: access_token, }; const listResponse = await plaidClient.statementsList(listRequest); accounts = listResponse.accounts; statements = listResponse.accounts[0].statements; ``` #### Response fields  string **accounts** (\[object\]) Plaid's unique identifier for the account. **accounts->account\_mask** (string) 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, and it may also not match the mask that the bank displays to the user. **accounts->account\_name** (string) The name of the account, either assigned by the user or by the financial institution itself. **accounts->account\_official\_name** (string) The official name of the account as given by the financial institution. **accounts->account\_subtype** (string) The subtype of the account. For a full list of valid types and subtypes, see the Account schema. **accounts->account\_type** (string) The type of account. For a full list of valid types and subtypes, see the Account schema. **accounts->statements** (\[object\]) The list of statements' metadata associated with this account. **accounts->statements->statement\_id** (string) Plaid's unique identifier for the statement. **accounts->statements->date\_posted** (nullable, string) Date when the statement was posted by the FI, if known Format: date **accounts->statements->month** (integer) Month of the year. Possible values: 1 through 12 (January through December). **accounts->statements->year** (integer) The year of statement. Minimum: 2010 **institution\_id** (string) The Plaid Institution ID associated with the Item. **institution\_name** (string) The name of the institution associated with the Item. **item\_id** (string) 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. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "institution_id": "ins_3", "institution_name": "Chase", "accounts": [ { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "account_mask": "0000", "account_name": "Plaid Saving", "account_official_name": "Plaid Silver Standard 0.1% Interest Saving", "account_subtype": "savings", "account_type": "depository", "statements": [ { "statement_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "month": 5, "year": 2023, "date_posted": "2023-05-01" } ] } ], "request_id": "eYupqX1mZkEuQRx" } ``` \=\*=\*=\*= #### /statements/download  #### Retrieve a single statement.  The [/statements/download](https://plaid.com/docs/api/products/statements/index.html.md#statementsdownload) endpoint retrieves a single statement PDF in binary format. The response will contain a `Plaid-Content-Hash` header containing a SHA 256 checksum of the statement. This can be used to verify that the file being sent by Plaid is the same file that was downloaded to your system. #### Request fields  **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. **statement\_id** (required, string) Plaid's unique identifier for the statements. /statements/download Node▼ ```javascript let downloadRequest: StatementsDownloadRequest = { access_token: accessToken, statement_id: statement.statement_id, }; let downloadResponse = await plaidClient.statementsDownload( downloadRequest, {responseType: 'arraybuffer'}, ); let pdf = downloadResponse.data.toString('base64'); ``` ##### Response  This endpoint returns a single statement, exactly as provided by the financial institution, in the form of binary PDF data. \=\*=\*=\*= #### /statements/refresh  #### Refresh statements data.  [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) initiates an on-demand extraction to fetch the statements for the provided dates. #### Request fields  **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. **start\_date** (required, string) The start date for statements, in "YYYY-MM-DD" format, e.g. "2023-08-30". To determine whether a statement falls within the specified date range, Plaid will use the statement posted date. The statement posted date is typically either the last day of the statement period, or the following day. Format: date **end\_date** (required, string) The end date for statements, in "YYYY-MM-DD" format, e.g. "2023-10-30". You can request up to two years of data. To determine whether a statement falls within the specified date range, Plaid will use the statement posted date. The statement posted date is typically either the last day of the statement period, or the following day. Format: date /statements/refresh Node▼ ```javascript const refreshRequest: StatementsRefreshRequest = { access_token: accessToken, start_date: '2023-11-01', end_date: '2024-02-01', }; const refreshResponse = await plaidClient.statementsRefresh(refreshRequest); ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "eYupqX1mZkEuQRx" } ``` ### Webhooks  Statement webhooks are sent to indicate that statements refresh has finished processing. All webhooks related to statements have a `webhook_type` of `STATEMENTS`. \=\*=\*=\*= #### STATEMENTS\_REFRESH\_COMPLETE  Fired when refreshed statements extraction is completed or failed to be completed. Triggered by calling [/statements/refresh](https://plaid.com/docs/api/products/statements/index.html.md#statementsrefresh) . #### Properties  **webhook\_type** (string) STATEMENTS **webhook\_code** (string) STATEMENTS\_REFRESH\_COMPLETE **item\_id** (string) 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. **result** (string) The result of the statement refresh extraction SUCCESS: The statements were successfully extracted and can be listed via /statements/list/ and downloaded via /statements/download/. FAILURE: The statements failed to be extracted. Possible values: SUCCESS, FAILURE **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "STATEMENTS", "webhook_code": "STATEMENTS_REFRESH_COMPLETE", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "result": "SUCCESS", "environment": "production" } ``` --- # API - Transactions | Plaid Docs Transactions  ============= #### API reference for Transactions endpoints and webhooks  Retrieve and refresh up to 24 months of historical transaction data, including geolocation, merchant, and category information. For how-to guidance, see the [Transactions documentation](https://plaid.com/docs/transactions/index.html.md) . | Endpoints | | | --- | --- | | [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) | Get transaction data or incremental transaction updates | | [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) | Fetch transaction data | | [/transactions/recurring/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrecurringget) | Fetch recurring transaction data | | [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) | Refresh transaction data | | [/categories/get](https://plaid.com/docs/api/products/transactions/index.html.md#categoriesget) | Fetch all transaction categories | | See also | | | --- | --- | | [/processor/transactions/sync](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionssync) | Get transaction data or incremental transaction updates | | [/processor/transactions/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsget) | Fetch transaction data | | [/processor/transactions/recurring/get](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrecurringget) | Fetch recurring transaction data | | [/processor/transactions/refresh](https://plaid.com/docs/api/processor-partners/index.html.md#processortransactionsrefresh) | Refresh transaction data | | [/sandbox/transactions/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransactionscreate) | Create custom transactions for testing | | Webhooks | | | --- | --- | | [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#sync_updates_available) | New updates available | | [RECURRING\_TRANSACTIONS\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#recurring_transactions_update) | New recurring updates available | | [INITIAL\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#initial_update) | Initial transactions ready | | [HISTORICAL\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#historical_update) | Historical transactions ready | | [DEFAULT\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#default_update) | New transactions available | | [TRANSACTIONS\_REMOVED](https://plaid.com/docs/api/products/transactions/index.html.md#transactions_removed) | Deleted transactions detected | ### Endpoints  \=\*=\*=\*= #### /transactions/sync  If you are migrating to [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) from an existing [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) integration, also refer to the [Transactions Sync migration guide](https://plaid.com/docs/transactions/sync-migration/index.html.md) . #### Get incremental transaction updates on an Item  The [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoint retrieves transactions associated with an Item and can fetch updates using a cursor to track which updates have already been seen. For important instructions on integrating with [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) , see the [Transactions integration overview](https://plaid.com/docs/transactions/index.html.md#integration-overview) . If you are migrating from an existing integration using [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) , see the [Transactions Sync migration guide](https://plaid.com/docs/transactions/sync-migration/index.html.md) . This endpoint supports `credit`, `depository`, and some `loan`\-type accounts (only those with account subtype `student`). For `investments` accounts, use [/investments/transactions/get](https://plaid.com/docs/api/products/investments/index.html.md#investmentstransactionsget) instead. When retrieving paginated updates, track both the `next_cursor` from the latest response and the original cursor from the first call in which `has_more` was `true`; if a call to [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) fails when retrieving a paginated update (e.g due to the [TRANSACTIONS\_SYNC\_MUTATION\_DURING\_PAGINATION](https://plaid.com/docs/errors/transactions/index.html.md#transactions_sync_mutation_during_pagination) error), the entire pagination request loop must be restarted beginning with the cursor for the first page of the update, rather than retrying only the single request that failed. If transactions data is not yet available for the Item, which can happen if the Item was not initialized with transactions during the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call or if [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) was called within a few seconds of Item creation, [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) will return empty transactions arrays. Plaid typically checks for new transactions data between one and four times per day, depending on the institution. To find out when transactions were last updated for an Item, use the [Item Debugger](https://plaid.com/docs/account/activity/index.html.md#troubleshooting-with-item-debugger) or call [/item/get](https://plaid.com/docs/api/items/index.html.md#itemget) ; the `item.status.transactions.last_successful_update` field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, use the [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) endpoint. To be alerted when new transactions are available, listen for the [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#sync_updates_available) webhook. #### Request fields  **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. **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. **cursor** (string) The cursor value represents the last update requested. Providing it will cause the response to only return changes after this update. If omitted, the entire history of updates will be returned, starting with the first-added transactions on the Item. The cursor also accepts the special value of "now", which can be used to fast-forward the cursor as part of migrating an existing Item from /transactions/get to /transactions/sync. For more information, see the Transactions sync migration guide. Note that using the "now" value is not supported for any use case other than migrating existing Items from /transactions/get. The upper-bound length of this cursor is 256 characters of base64. **count** (integer) The number of transaction updates to fetch. Default: 100 Minimum: 1 Maximum: 500 Exclusive min: false **options** (object) An optional object to be used with the request. If specified, options must not be null. **options->include\_original\_description** (boolean) Include the raw unparsed transaction description from the financial institution. Default: false **options->personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **options->days\_requested** (integer) This field only applies to calls for Items where the Transactions product has not already been initialized (i.e., by specifying transactions in the products, required\_if\_supported\_products, or optional\_products array when calling /link/token/create or by making a previous call to /transactions/sync or /transactions/get). In those cases, the field controls the maximum number of days of transaction history that Plaid will request from the financial institution. The more transaction history is requested, the longer the historical update poll will take. If no value is specified, 90 days of history will be requested by default. If you are initializing your Items with transactions during the /link/token/create call (e.g. by including transactions in the /link/token/create products array), you must use the transactions.days\_requested field in the /link/token/create request instead of in the /transactions/sync request. If the Item has already been initialized with the Transactions product, this field will have no effect. The maximum amount of transaction history to request on an Item cannot be updated if Transactions has already been added to the Item. To request older transaction history on an Item where Transactions has already been added, you must delete the Item via /item/remove and send the user through Link to create a new Item. Customers using Recurring Transactions should request at least 180 days of history for optimal results. Minimum: 1 Maximum: 730 Default: 90 **options->account\_id** (string) If provided, the returned updates and cursor will only reflect the specified account's transactions. Omitting account\_id returns updates for all accounts under the Item. Note that specifying an account\_id effectively creates a separate incremental update stream—and therefore a separate cursor—for that account. If multiple accounts are queried this way, you will maintain multiple cursors, one per account\_id. If you decide to begin filtering by account\_id after using no account\_id, start fresh with a null cursor and maintain separate (account\_id, cursor) pairs going forward. Do not reuse any previously saved cursors, as this can cause pagination errors or incomplete data. Note: An error will be returned if a provided account\_id is not associated with the Item. /transactions/sync Node▼ ```javascript // Provide a cursor from your database if you've previously // received one for the Item. Leave null if this is your // first sync call for this Item. The first request will // return a cursor. let cursor = database.getLatestCursorOrNull(itemId); // New transaction updates since "cursor" let added: Array = []; let modified: Array = []; // Removed transaction ids let removed: Array = []; let hasMore = true; // Iterate through each page of new transaction updates for item while (hasMore) { const request: TransactionsSyncRequest = { access_token: accessToken, cursor: cursor, }; const response = await client.transactionsSync(request); const data = response.data; // Add this page of results added = added.concat(data.added); modified = modified.concat(data.modified); removed = removed.concat(data.removed); hasMore = data.has_more; // Update cursor to the next cursor cursor = data.next_cursor; } // Persist cursor and updated data database.applyUpdates(itemId, added, modified, removed, cursor); ``` #### Response fields  **transactions\_update\_status** (string) A description of the update status for transaction pulls of an Item. This field contains the same information provided by transactions webhooks, and may be helpful for webhook troubleshooting or when recovering from missed webhooks. TRANSACTIONS\_UPDATE\_STATUS\_UNKNOWN: Unable to fetch transactions update status for Item. NOT\_READY: The Item is pending transaction pull. INITIAL\_UPDATE\_COMPLETE: Initial pull for the Item is complete, historical pull is pending. HISTORICAL\_UPDATE\_COMPLETE: Both initial and historical pull for Item are complete. Possible values: TRANSACTIONS\_UPDATE\_STATUS\_UNKNOWN, NOT\_READY, INITIAL\_UPDATE\_COMPLETE, HISTORICAL\_UPDATE\_COMPLETE **accounts** (\[object\]) An array of accounts at a financial institution associated with the transactions in this response. Only accounts that have associated transactions will be shown. For example, investment-type accounts will be omitted. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **added** (\[object\]) Transactions that have been added to the Item since cursor ordered by ascending last modified time. **added->account\_id** (string) The ID of the account in which this transaction occurred. **added->amount** (number) The settled value of the transaction, denominated in the transactions's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. For all products except Income: Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. For Income endpoints, values are positive when representing income. Format: double **added->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **added->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **added->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **added->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). To receive information about the date that a posted transaction was initiated, see the authorized\_date field. Format: date **added->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **added->location->address** (nullable, string) The street address where the transaction occurred. **added->location->city** (nullable, string) The city where the transaction occurred. **added->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **added->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **added->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **added->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **added->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **added->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **added->name** (deprecated, string) The merchant name or transaction description. Note: While Plaid does not currently plan to remove this field, it is a legacy field that is not actively maintained. Use merchant\_name instead for the merchant name. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, this field will always appear. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **added->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **added->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include\_original\_description to true. **added->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **added->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **added->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **added->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **added->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **added->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **added->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **added->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **added->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **added->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. Not all institutions provide pending transactions. **added->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. Not all institutions provide pending transactions. **added->account\_owner** (nullable, string) This field is not typically populated and only relevant when dealing with sub-accounts. A sub-account most commonly exists in cases where a single account is linked to multiple cards, each with its own card number and card holder name; each card will be considered a sub-account. If the account does have sub-accounts, this field will typically be some combination of the sub-account owner's name and/or the sub-account mask. The format of this field is not standardized and will vary based on institution. **added->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **added->transaction\_type** (deprecated, string) Please use the payment\_channel field, transaction\_type will be deprecated in the future. digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **added->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **added->website** (nullable, string) The website associated with this transaction, if available. **added->authorized\_date** (nullable, string) The date that the transaction was authorized. For posted transactions, the date field will indicate the posted date, but authorized\_date will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_date, when available, is generally preferable to use over the date field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **added->authorized\_datetime** (nullable, string) Date and time when a transaction was authorized in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For posted transactions, the datetime field will indicate the posted date, but authorized\_datetime will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_datetime, when available, is generally preferable to use over the datetime field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **added->datetime** (nullable, string) Date and time when a transaction was posted in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For the date that the transaction was initiated, rather than posted, see the authorized\_datetime field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **added->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. This field replaces the transaction\_type field. Possible values: online, in store, other **added->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **added->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **added->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **added->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **added->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **added->transaction\_code** (nullable, string) An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to null. adjustment: Bank adjustment atm: Cash deposit or withdrawal via an automated teller machine bank charge: Charge or fee levied by the institution bill payment: Payment of a bill cash: Cash deposit or withdrawal cashback: Cash withdrawal while making a debit card purchase cheque: Document ordering the payment of money to another person or organization direct debit: Automatic withdrawal of funds initiated by a third party at a regular interval interest: Interest earned or incurred purchase: Purchase made with a debit or credit card standing order: Payment instructed by the account holder to a third party at a regular interval transfer: Transfer of money between accounts Possible values: adjustment, atm, bank charge, bill payment, cash, cashback, cheque, direct debit, interest, purchase, standing order, transfer, null **added->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **added->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **added->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **added->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **added->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **added->counterparties->website** (nullable, string) The website associated with the counterparty. **added->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **added->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **added->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **added->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **added->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **added->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **added->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **added->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **added->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **added->merchant\_entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store. **modified** (\[object\]) Transactions that have been modified on the Item since cursor ordered by ascending last modified time. **modified->account\_id** (string) The ID of the account in which this transaction occurred. **modified->amount** (number) The settled value of the transaction, denominated in the transactions's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. For all products except Income: Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. For Income endpoints, values are positive when representing income. Format: double **modified->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **modified->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **modified->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **modified->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). To receive information about the date that a posted transaction was initiated, see the authorized\_date field. Format: date **modified->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **modified->location->address** (nullable, string) The street address where the transaction occurred. **modified->location->city** (nullable, string) The city where the transaction occurred. **modified->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **modified->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **modified->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **modified->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **modified->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **modified->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **modified->name** (deprecated, string) The merchant name or transaction description. Note: While Plaid does not currently plan to remove this field, it is a legacy field that is not actively maintained. Use merchant\_name instead for the merchant name. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, this field will always appear. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **modified->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **modified->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include\_original\_description to true. **modified->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **modified->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **modified->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **modified->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **modified->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **modified->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **modified->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **modified->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **modified->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **modified->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. Not all institutions provide pending transactions. **modified->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. Not all institutions provide pending transactions. **modified->account\_owner** (nullable, string) This field is not typically populated and only relevant when dealing with sub-accounts. A sub-account most commonly exists in cases where a single account is linked to multiple cards, each with its own card number and card holder name; each card will be considered a sub-account. If the account does have sub-accounts, this field will typically be some combination of the sub-account owner's name and/or the sub-account mask. The format of this field is not standardized and will vary based on institution. **modified->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **modified->transaction\_type** (deprecated, string) Please use the payment\_channel field, transaction\_type will be deprecated in the future. digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **modified->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **modified->website** (nullable, string) The website associated with this transaction, if available. **modified->authorized\_date** (nullable, string) The date that the transaction was authorized. For posted transactions, the date field will indicate the posted date, but authorized\_date will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_date, when available, is generally preferable to use over the date field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **modified->authorized\_datetime** (nullable, string) Date and time when a transaction was authorized in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For posted transactions, the datetime field will indicate the posted date, but authorized\_datetime will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_datetime, when available, is generally preferable to use over the datetime field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **modified->datetime** (nullable, string) Date and time when a transaction was posted in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For the date that the transaction was initiated, rather than posted, see the authorized\_datetime field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **modified->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. This field replaces the transaction\_type field. Possible values: online, in store, other **modified->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **modified->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **modified->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **modified->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **modified->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **modified->transaction\_code** (nullable, string) An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to null. adjustment: Bank adjustment atm: Cash deposit or withdrawal via an automated teller machine bank charge: Charge or fee levied by the institution bill payment: Payment of a bill cash: Cash deposit or withdrawal cashback: Cash withdrawal while making a debit card purchase cheque: Document ordering the payment of money to another person or organization direct debit: Automatic withdrawal of funds initiated by a third party at a regular interval interest: Interest earned or incurred purchase: Purchase made with a debit or credit card standing order: Payment instructed by the account holder to a third party at a regular interval transfer: Transfer of money between accounts Possible values: adjustment, atm, bank charge, bill payment, cash, cashback, cheque, direct debit, interest, purchase, standing order, transfer, null **modified->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **modified->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **modified->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **modified->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **modified->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **modified->counterparties->website** (nullable, string) The website associated with the counterparty. **modified->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **modified->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **modified->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **modified->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **modified->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **modified->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **modified->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **modified->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **modified->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **modified->merchant\_entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store. **removed** (\[object\]) Transactions that have been removed from the Item since cursor ordered by ascending last modified time. **removed->transaction\_id** (string) The ID of the removed transaction. **removed->account\_id** (string) The ID of the account of the removed transaction. **next\_cursor** (string) Cursor used for fetching any future updates after the latest update provided in this response. The cursor obtained after all pages have been pulled (indicated by has\_more being false) will be valid for at least 1 year. This cursor should be persisted for later calls. If transactions are not yet available, this will be an empty string. If account\_id is included in the request, the returned cursor will reflect updates for that specific account. **has\_more** (boolean) Represents if more than requested count of transaction updates exist. If true, the additional updates can be fetched by making an additional request with cursor set to next\_cursor. If has\_more is true, it’s important to pull all available pages, to make it less likely for underlying data changes to conflict with pagination. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 110.94, "current": 110.94, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" } ], "added": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 72.1, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "Walmart", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-24", "datetime": "2023-09-24T11:01:01Z", "authorized_date": "2023-09-22", "authorized_datetime": "2023-09-22T10:34:50Z", "location": { "address": "13425 Community Rd", "city": "Poway", "region": "CA", "postal_code": "92064", "country": "US", "lat": 32.959068, "lon": -117.037666, "store_number": "1700" }, "name": "PURCHASE WM SUPERCENTER #1700", "merchant_name": "Walmart", "merchant_entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "in store", "pending": false, "pending_transaction_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nc", "personal_finance_category": { "primary": "GENERAL_MERCHANDISE", "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_GENERAL_MERCHANDISE.png", "transaction_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "transaction_code": null, "transaction_type": "place" } ], "modified": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 28.34, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "DoorDash", "type": "marketplace", "logo_url": "https://plaid-counterparty-logos.plaid.com/doordash_1.png", "website": "doordash.com", "entity_id": "YNRJg5o2djJLv52nBA1Yn1KpL858egYVo4dpm", "confidence_level": "HIGH" }, { "name": "Burger King", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-28", "datetime": "2023-09-28T15:10:09Z", "authorized_date": "2023-09-27", "authorized_datetime": "2023-09-27T08:01:58Z", "location": { "address": null, "city": null, "region": null, "postal_code": null, "country": null, "lat": null, "lon": null, "store_number": null }, "name": "Dd Doordash Burgerkin", "merchant_name": "Burger King", "merchant_entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "online", "pending": true, "pending_transaction_id": null, "personal_finance_category": { "primary": "FOOD_AND_DRINK", "detailed": "FOOD_AND_DRINK_FAST_FOOD", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_FOOD_AND_DRINK.png", "transaction_id": "yhnUVvtcGGcCKU0bcz8PDQr5ZUxUXebUvbKC0", "transaction_code": null, "transaction_type": "digital" } ], "removed": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "transaction_id": "CmdQTNgems8BT1B7ibkoUXVPyAeehT3Tmzk0l" } ], "next_cursor": "tVUUL15lYQN5rBnfDIc1I8xudpGdIlw9nsgeXWvhOfkECvUeR663i3Dt1uf/94S8ASkitgLcIiOSqNwzzp+bh89kirazha5vuZHBb2ZA5NtCDkkV", "has_more": false, "request_id": "Wvhy9PZHQLV8njG", "transactions_update_status": "HISTORICAL_UPDATE_COMPLETE" } ``` \=\*=\*=\*= #### /transactions/get  #### Get transaction data  Note: All new implementations are encouraged to use [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) rather than [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) . [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) provides the same functionality as [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) and improves developer ease-of-use for handling transactions updates. The [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) endpoint allows developers to receive user-authorized transaction data for credit, depository, and some loan-type accounts (only those with account subtype `student`; coverage may be limited). For transaction history from investments accounts, use the [Investments endpoint](https://plaid.com/docs/api/products/investments/index.html.md) instead. Transaction data is standardized across financial institutions, and in many cases transactions are linked to a clean name, entity type, location, and category. Similarly, account data is standardized and returned with a clean name, number, balance, and other meta information where available. Transactions are returned in reverse-chronological order, and the sequence of transaction ordering is stable and will not shift. Transactions are not immutable and can also be removed altogether by the institution; a removed transaction will no longer appear in [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) . For more details, see [Pending and posted transactions](https://plaid.com/docs/transactions/transactions-data/index.html.md#pending-and-posted-transactions) . Due to the potentially large number of transactions associated with an Item, results are paginated. Manipulate the `count` and `offset` parameters in conjunction with the `total_transactions` response body field to fetch all available transactions. Data returned by [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) will be the data available for the Item as of the most recent successful check for new transactions. Plaid typically checks for new data multiple times a day, but these checks may occur less frequently, such as once a day, depending on the institution. To find out when the Item was last updated, use the [Item Debugger](https://plaid.com/docs/account/activity/index.html.md#troubleshooting-with-item-debugger) or call [/item/get](https://plaid.com/docs/api/items/index.html.md#itemget) ; the `item.status.transactions.last_successful_update` field will show the timestamp of the most recent successful update. To force Plaid to check for new transactions, you can use the [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) endpoint. Note that data may not be immediately available to [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) . Plaid will begin to prepare transactions data upon Item link, if Link was initialized with `transactions`, or upon the first call to [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) , if it wasn't. To be alerted when transaction data is ready to be fetched, listen for the [INITIAL\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#initial_update) and [HISTORICAL\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#historical_update) webhooks. If no transaction history is ready when [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) is called, it will return a `PRODUCT_NOT_READY` error. #### Request fields  **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. **options** (object) An optional object to be used with the request. If specified, options must not be null. **options->account\_ids** (\[string\]) A list of account\_ids to retrieve for the Item Note: An error will be returned if a provided account\_id is not associated with the Item. **options->count** (integer) The number of transactions to fetch. Default: 100 Minimum: 1 Maximum: 500 Exclusive min: false **options->offset** (integer) The number of transactions to skip. The default value is 0. Default: 0 Minimum: 0 **options->include\_original\_description** (boolean) Include the raw unparsed transaction description from the financial institution. Default: false **options->personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **options->days\_requested** (integer) This field only applies to calls for Items where the Transactions product has not already been initialized (i.e. by specifying transactions in the products, optional\_products, or required\_if\_consented\_products array when calling /link/token/create or by making a previous call to /transactions/sync or /transactions/get). In those cases, the field controls the maximum number of days of transaction history that Plaid will request from the financial institution. The more transaction history is requested, the longer the historical update poll will take. If no value is specified, 90 days of history will be requested by default. If a value under 30 is provided, a minimum of 30 days of history will be requested. If you are initializing your Items with transactions during the /link/token/create call (e.g. by including transactions in the /link/token/create products array), you must use the transactions.days\_requested field in the /link/token/create request instead of in the /transactions/get request. If the Item has already been initialized with the Transactions product, this field will have no effect. The maximum amount of transaction history to request on an Item cannot be updated if Transactions has already been added to the Item. To request older transaction history on an Item where Transactions has already been added, you must delete the Item via /item/remove and send the user through Link to create a new Item. Customers using Recurring Transactions should request at least 180 days of history for optimal results. Minimum: 1 Maximum: 730 Default: 90 **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. **start\_date** (required, string) The earliest date for which data should be returned. Dates should be formatted as YYYY-MM-DD. Format: date **end\_date** (required, string) The latest date for which data should be returned. Dates should be formatted as YYYY-MM-DD. Format: date /transactions/get Node▼ ```javascript const request: TransactionsGetRequest = { access_token: accessToken, start_date: '2018-01-01', end_date: '2020-02-01' }; try { const response = await client.transactionsGet(request); let transactions = response.data.transactions; const total_transactions = response.data.total_transactions; // Manipulate the offset parameter to paginate // transactions and retrieve all available data while (transactions.length < total_transactions) { const paginatedRequest: TransactionsGetRequest = { access_token: accessToken, start_date: '2018-01-01', end_date: '2020-02-01', options: { offset: transactions.length }, }; const paginatedResponse = await client.transactionsGet(paginatedRequest); transactions = transactions.concat( paginatedResponse.data.transactions, ); } } catch((err) => { // handle error } ``` #### Response fields  **accounts** (\[object\]) An array containing the accounts associated with the Item for which transactions are being returned. Each transaction can be mapped to its corresponding account via the account\_id field. **accounts->account\_id** (string) Plaid’s unique identifier for the account. This value will not change unless Plaid can't reconcile the account with the data returned by the financial institution. This may occur, for example, when the name of the account changes. If this happens a new account\_id will be assigned to the account. The account\_id can also change if the access\_token is deleted and the same credentials that were used to generate that access\_token are used to generate a new access\_token on a later date. In that case, the new account\_id will be different from the old account\_id. If an account with a specific account\_id disappears instead of changing, the account is likely closed. Closed accounts are not returned by the Plaid API. When using a CRA endpoint (an endpoint associated with Plaid Check Consumer Report, i.e. any endpoint beginning with /cra/), the account\_id returned will not match the account\_id returned by a non-CRA endpoint. Like all Plaid identifiers, the account\_id is case sensitive. **accounts->balances** (object) A set of fields describing the balance for an account. Balance information may be cached unless the balance object was returned by /accounts/balance/get or /signal/evaluate (using a Balance-only ruleset). **accounts->balances->available** (nullable, number) The amount of funds available to be withdrawn from the account, as determined by the financial institution. For credit-type accounts, the available balance typically equals the limit less the current balance, less any pending outflows plus any pending inflows. For depository-type accounts, the available balance typically equals the current balance less any pending outflows plus any pending inflows. For depository-type accounts, the available balance does not include the overdraft limit. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the available balance is the total cash available to withdraw as presented by the institution. Note that not all institutions calculate the available balance. In the event that available balance is unavailable, Plaid will return an available balance value of null. Available balance may be cached and is not guaranteed to be up-to-date in realtime unless the value was returned by /accounts/balance/get, or by /signal/evaluate with a Balance-only ruleset. If current is null this field is guaranteed not to be null. Format: double **accounts->balances->current** (nullable, number) The total amount of funds in or owed by the account. For credit-type accounts, a positive balance indicates the amount owed; a negative amount indicates the lender owing the account holder. For loan-type accounts, the current balance is the principal remaining on the loan, except in the case of student loan accounts at Sallie Mae (ins\_116944). For Sallie Mae student loans, the account's balance includes both principal and any outstanding interest. Similar to credit-type accounts, a positive balance is typically expected, while a negative amount indicates the lender owing the account holder. For investment-type accounts (or brokerage-type accounts for API versions 2018-05-22 and earlier), the current balance is the total value of assets as presented by the institution. Note that balance information may be cached unless the value was returned by /accounts/balance/get or by /signal/evaluate with a Balance-only ruleset; if the Item is enabled for Transactions, the balance will be at least as recent as the most recent Transaction update. If you require realtime balance information, use the available balance as provided by /accounts/balance/get or /signal/evaluate called with a Balance-only ruleset\_key. When returned by /accounts/balance/get, this field may be null. When this happens, available is guaranteed not to be null. Format: double **accounts->balances->limit** (nullable, number) For credit-type accounts, this represents the credit limit. For depository-type accounts, this represents the pre-arranged overdraft limit, which is common for current (checking) accounts in Europe. In North America, this field is typically only available for credit-type accounts. Format: double **accounts->balances->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the balance. Always null if unofficial\_currency\_code is non-null. **accounts->balances->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the balance. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported unofficial\_currency\_codes. **accounts->balances->last\_updated\_datetime** (nullable, string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time the balance was updated. This field is returned only when the institution is ins\_128026 (Capital One). Format: date-time **accounts->mask** (nullable, string) The last 2-4 alphanumeric characters of either the account’s displayed mask or the account’s official account number. Note that the mask may be non-unique between an Item’s accounts. **accounts->name** (string) The name of the account, either assigned by the user or by the financial institution itself **accounts->official\_name** (nullable, string) The official name of the account as given by the financial institution **accounts->type** (string) investment: Investment account. In API versions 2018-05-22 and earlier, this type is called brokerage instead. credit: Credit card depository: Depository account loan: Loan account other: Non-specified account type See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: investment, credit, depository, loan, brokerage, other **accounts->subtype** (nullable, string) See the Account type schema for a full listing of account types and corresponding subtypes. Possible values: 401a, 401k, 403B, 457b, 529, auto, brokerage, business, cash isa, cash management, cd, checking, commercial, construction, consumer, credit card, crypto exchange, ebt, education savings account, fixed annuity, gic, health reimbursement arrangement, home equity, hsa, isa, ira, keogh, lif, life insurance, line of credit, lira, loan, lrif, lrsp, money market, mortgage, mutual fund, non-custodial wallet, non-taxable brokerage account, other, other insurance, other annuity, overdraft, paypal, payroll, pension, prepaid, prif, profit sharing plan, rdsp, resp, retirement, rlif, roth, roth 401k, rrif, rrsp, sarsep, savings, sep ira, simple ira, sipp, stock plan, student, thrift savings plan, tfsa, trust, ugma, utma, variable annuity **accounts->verification\_status** (string) 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. Possible values: automatically\_verified, pending\_automatic\_verification, pending\_manual\_verification, unsent, manually\_verified, verification\_expired, verification\_failed, database\_matched, database\_insights\_pass, database\_insights\_pass\_with\_caution, database\_insights\_fail **accounts->verification\_name** (string) The account holder name that was used for micro-deposit and/or database verification. Only returned for Auth Items created via micro-deposit or database verification. This name was manually-entered by the user during Link, unless it was otherwise provided via the user.legal\_name request field in /link/token/create for the Link session that created the Item. **accounts->verification\_insights** (object) Insights from performing database verification for the account. Only returned for Auth Items using Database Auth. **accounts->verification\_insights->name\_match\_score** (nullable, integer) Indicates the score of the name match between the given name provided during database verification (available in the verification\_name field) and matched Plaid network accounts. If defined, will be a value between 0 and 100. Will be undefined if name matching was not enabled for the database verification session or if there were no eligible Plaid network matches to compare the given name with. **accounts->verification\_insights->network\_status** (object) Status information about the account and routing number in the Plaid network. **accounts->verification\_insights->network\_status->has\_numbers\_match** (boolean) Indicates whether we found at least one matching account for the ACH account and routing number. **accounts->verification\_insights->network\_status->is\_numbers\_match\_verified** (boolean) Indicates if at least one matching account for the ACH account and routing number is already verified. **accounts->verification\_insights->previous\_returns** (object) Information about known ACH returns for the account and routing number. **accounts->verification\_insights->previous\_returns->has\_previous\_administrative\_return** (boolean) Indicates whether Plaid's data sources include a known administrative ACH return for account and routing number. **accounts->verification\_insights->account\_number\_format** (string) Indicator of account number format validity for institution. valid: indicates that the account number has a correct format for the institution. invalid: indicates that the account number has an incorrect format for the institution. unknown: indicates that there was not enough information to determine whether the format is correct for the institution. Possible values: valid, invalid, unknown **accounts->persistent\_account\_id** (string) A unique and persistent identifier for accounts that can be used to trace multiple instances of the same account across different Items for depository accounts. This field is currently supported only for Items at institutions that use Tokenized Account Numbers (i.e., Chase and PNC, and in May 2025 US Bank). Because these accounts have a different account number each time they are linked, this field may be used instead of the account number to uniquely identify an account across multiple Items for payments use cases, helping to reduce duplicate Items or attempted fraud. In Sandbox, this field is populated for TAN-based institutions (ins\_56, ins\_13) as well as the OAuth Sandbox institution (ins\_127287); in Production, it will only be populated for accounts at applicable institutions. **accounts->holder\_category** (nullable, string) Indicates the account's categorization as either a personal or a business account. This field is currently in beta; to request access, contact your account manager. Possible values: business, personal, unrecognized **transactions** (\[object\]) An array containing transactions from the account. Transactions are returned in reverse chronological order, with the most recent at the beginning of the array. The maximum number of transactions returned is determined by the count parameter. **transactions->account\_id** (string) The ID of the account in which this transaction occurred. **transactions->amount** (number) The settled value of the transaction, denominated in the transactions's currency, as stated in iso\_currency\_code or unofficial\_currency\_code. For all products except Income: Positive values when money moves out of the account; negative values when money moves in. For example, debit card purchases are positive; credit card payments, direct deposits, and refunds are negative. For Income endpoints, values are positive when representing income. Format: double **transactions->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the transaction. Always null if unofficial\_currency\_code is non-null. **transactions->unofficial\_currency\_code** (nullable, string) The unofficial currency code associated with the transaction. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. See the currency code schema for a full listing of supported iso\_currency\_codes. **transactions->check\_number** (nullable, string) The check number of the transaction. This field is only populated for check transactions. **transactions->date** (string) For pending transactions, the date that the transaction occurred; for posted transactions, the date that the transaction posted. Both dates are returned in an ISO 8601 format ( YYYY-MM-DD ). To receive information about the date that a posted transaction was initiated, see the authorized\_date field. Format: date **transactions->location** (object) A representation of where a transaction took place. Location data is provided only for transactions at physical locations, not for online transactions. Location data availability depends primarily on the merchant and is most likely to be populated for transactions at large retail chains; small, local businesses are less likely to have location data available. **transactions->location->address** (nullable, string) The street address where the transaction occurred. **transactions->location->city** (nullable, string) The city where the transaction occurred. **transactions->location->region** (nullable, string) The region or state where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called state. **transactions->location->postal\_code** (nullable, string) The postal code where the transaction occurred. In API versions 2018-05-22 and earlier, this field is called zip. **transactions->location->country** (nullable, string) The ISO 3166-1 alpha-2 country code where the transaction occurred. **transactions->location->lat** (nullable, number) The latitude where the transaction occurred. Format: double **transactions->location->lon** (nullable, number) The longitude where the transaction occurred. Format: double **transactions->location->store\_number** (nullable, string) The merchant defined store number where the transaction occurred. **transactions->name** (deprecated, string) The merchant name or transaction description. Note: While Plaid does not currently plan to remove this field, it is a legacy field that is not actively maintained. Use merchant\_name instead for the merchant name. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, this field will always appear. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **transactions->merchant\_name** (nullable, string) The merchant name, as enriched by Plaid from the name field. This is typically a more human-readable version of the merchant counterparty in the transaction. For some bank transactions (such as checks or account transfers) where there is no meaningful merchant name, this value will be null. **transactions->original\_description** (nullable, string) The string returned by the financial institution to describe the transaction. For transactions returned by /transactions/sync or /transactions/get, this field will only be included if the client has set options.include\_original\_description to true. **transactions->payment\_meta** (object) Transaction information specific to inter-bank transfers. If the transaction was not an inter-bank transfer, all fields will be null. If the transactions object was returned by a Transactions endpoint such as /transactions/sync or /transactions/get, the payment\_meta key will always appear, but no data elements are guaranteed. If the transactions object was returned by an Assets endpoint such as /asset\_report/get/ or /asset\_report/pdf/get, this field will only appear in an Asset Report with Insights. **transactions->payment\_meta->reference\_number** (nullable, string) The transaction reference number supplied by the financial institution. **transactions->payment\_meta->ppd\_id** (nullable, string) The ACH PPD ID for the payer. **transactions->payment\_meta->payee** (nullable, string) For transfers, the party that is receiving the transaction. **transactions->payment\_meta->by\_order\_of** (nullable, string) The party initiating a wire transfer. Will be null if the transaction is not a wire transfer. **transactions->payment\_meta->payer** (nullable, string) For transfers, the party that is paying the transaction. **transactions->payment\_meta->payment\_method** (nullable, string) The type of transfer, e.g. 'ACH' **transactions->payment\_meta->payment\_processor** (nullable, string) The name of the payment processor **transactions->payment\_meta->reason** (nullable, string) The payer-supplied description of the transfer. **transactions->pending** (boolean) When true, identifies the transaction as pending or unsettled. Pending transaction details (name, type, amount, category ID) may change before they are settled. Not all institutions provide pending transactions. **transactions->pending\_transaction\_id** (nullable, string) The ID of a posted transaction's associated pending transaction, where applicable. Not all institutions provide pending transactions. **transactions->account\_owner** (nullable, string) This field is not typically populated and only relevant when dealing with sub-accounts. A sub-account most commonly exists in cases where a single account is linked to multiple cards, each with its own card number and card holder name; each card will be considered a sub-account. If the account does have sub-accounts, this field will typically be some combination of the sub-account owner's name and/or the sub-account mask. The format of this field is not standardized and will vary based on institution. **transactions->transaction\_id** (string) The unique ID of the transaction. Like all Plaid identifiers, the transaction\_id is case sensitive. **transactions->transaction\_type** (deprecated, string) Please use the payment\_channel field, transaction\_type will be deprecated in the future. digital: transactions that took place online. place: transactions that were made at a physical location. special: transactions that relate to banks, e.g. fees or deposits. unresolved: transactions that do not fit into the other three types. Possible values: digital, place, special, unresolved **transactions->logo\_url** (nullable, string) The URL of a logo associated with this transaction, if available. The logo will always be 100×100 pixel PNG file. **transactions->website** (nullable, string) The website associated with this transaction, if available. **transactions->authorized\_date** (nullable, string) The date that the transaction was authorized. For posted transactions, the date field will indicate the posted date, but authorized\_date will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_date, when available, is generally preferable to use over the date field for posted transactions, as it will generally represent the date the user actually made the transaction. Dates are returned in an ISO 8601 format ( YYYY-MM-DD ). Format: date **transactions->authorized\_datetime** (nullable, string) Date and time when a transaction was authorized in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For posted transactions, the datetime field will indicate the posted date, but authorized\_datetime will indicate the day the transaction was authorized by the financial institution. If presenting transactions to the user in a UI, the authorized\_datetime, when available, is generally preferable to use over the datetime field for posted transactions, as it will generally represent the date the user actually made the transaction. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **transactions->datetime** (nullable, string) Date and time when a transaction was posted in ISO 8601 format ( YYYY-MM-DDTHH:mm:ssZ ). For the date that the transaction was initiated, rather than posted, see the authorized\_datetime field. This field is returned for select financial institutions and comes as provided by the institution. It may contain default time values (such as 00:00:00). This field is only populated in API version 2019-05-29 and later. Format: date-time **transactions->payment\_channel** (string) The channel used to make a payment. online: transactions that took place online. in store: transactions that were made at a physical location. other: transactions that relate to banks, e.g. fees or deposits. This field replaces the transaction\_type field. Possible values: online, in store, other **transactions->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **transactions->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **transactions->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **transactions->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **transactions->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **transactions->transaction\_code** (nullable, string) An identifier classifying the transaction type. This field is only populated for European institutions. For institutions in the US and Canada, this field is set to null. adjustment: Bank adjustment atm: Cash deposit or withdrawal via an automated teller machine bank charge: Charge or fee levied by the institution bill payment: Payment of a bill cash: Cash deposit or withdrawal cashback: Cash withdrawal while making a debit card purchase cheque: Document ordering the payment of money to another person or organization direct debit: Automatic withdrawal of funds initiated by a third party at a regular interval interest: Interest earned or incurred purchase: Purchase made with a debit or credit card standing order: Payment instructed by the account holder to a third party at a regular interval transfer: Transfer of money between accounts Possible values: adjustment, atm, bank charge, bill payment, cash, cashback, cheque, direct debit, interest, purchase, standing order, transfer, null **transactions->personal\_finance\_category\_icon\_url** (string) The URL of an icon associated with the primary personal finance category. The icon will always be 100×100 pixel PNG file. **transactions->counterparties** (\[object\]) The counterparties present in the transaction. Counterparties, such as the merchant or the financial institution, are extracted by Plaid from the raw description. **transactions->counterparties->name** (string) The name of the counterparty, such as the merchant or the financial institution, as extracted by Plaid from the raw description. **transactions->counterparties->entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the counterparty. **transactions->counterparties->type** (string) The counterparty type. merchant: a provider of goods or services for purchase financial\_institution: a financial entity (bank, credit union, BNPL, fintech) payment\_app: a transfer or P2P app (e.g. Zelle) marketplace: a marketplace (e.g DoorDash, Google Play Store) payment\_terminal: a point-of-sale payment terminal (e.g Square, Toast) income\_source: the payer in an income transaction (e.g., an employer, client, or government agency) Possible values: merchant, financial\_institution, payment\_app, marketplace, payment\_terminal, income\_source **transactions->counterparties->website** (nullable, string) The website associated with the counterparty. **transactions->counterparties->logo\_url** (nullable, string) The URL of a logo associated with the counterparty, if available. The logo will always be 100×100 pixel PNG file. **transactions->counterparties->confidence\_level** (nullable, string) A description of how confident we are that the provided counterparty is involved in the transaction. VERY\_HIGH: We recognize this counterparty and we are more than 98% confident that it is involved in this transaction. HIGH: We recognize this counterparty and we are more than 90% confident that it is involved in this transaction. MEDIUM: We are moderately confident that this counterparty was involved in this transaction, but some details may differ from our records. LOW: We didn’t find a matching counterparty in our records, so we are returning a cleansed name parsed out of the request description. UNKNOWN: We don’t know the confidence level for this counterparty. **transactions->counterparties->account\_numbers** (nullable, object) Account numbers associated with the counterparty, when available. This field is currently only filled in for select financial institutions in Europe. **transactions->counterparties->account\_numbers->bacs** (nullable, object) Identifying information for a UK bank account via BACS. **transactions->counterparties->account\_numbers->bacs->account** (nullable, string) The BACS account number for the account. **transactions->counterparties->account\_numbers->bacs->sort\_code** (nullable, string) The BACS sort code for the account. **transactions->counterparties->account\_numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **transactions->counterparties->account\_numbers->international->iban** (nullable, string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **transactions->counterparties->account\_numbers->international->bic** (nullable, string) Bank identifier code (BIC) for this counterparty. Min length: 8 Max length: 11 **transactions->merchant\_entity\_id** (nullable, string) A unique, stable, Plaid-generated ID that maps to the merchant. In the case of a merchant with multiple retail locations, this field will map to the broader merchant, not a specific location or store. **total\_transactions** (integer) The total number of transactions available within the date range specified. If total\_transactions is larger than the size of the transactions array, more transactions are available and can be fetched via manipulating the offset parameter. **item** (object) Metadata about the Item. **item->item\_id** (string) 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. **item->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **item->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **item->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **item->error** (nullable, object) 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. **item->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **item->error->error\_code** (string) The particular error code. Safe for programmatic use. **item->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **item->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **item->error->display\_message** (nullable, string) 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. **item->error->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. **item->error->causes** (array) 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. **item->error->status** (nullable, integer) 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. **item->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **item->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **item->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **item->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **item->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **item->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "accounts": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "balances": { "available": 110.94, "current": 110.94, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "subtype": "checking", "type": "depository" } ], "transactions": [ { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 28.34, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "DoorDash", "type": "marketplace", "logo_url": "https://plaid-counterparty-logos.plaid.com/doordash_1.png", "website": "doordash.com", "entity_id": "YNRJg5o2djJLv52nBA1Yn1KpL858egYVo4dpm", "confidence_level": "HIGH" }, { "name": "Burger King", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-28", "datetime": "2023-09-28T15:10:09Z", "authorized_date": "2023-09-27", "authorized_datetime": "2023-09-27T08:01:58Z", "location": { "address": null, "city": null, "region": null, "postal_code": null, "country": null, "lat": null, "lon": null, "store_number": null }, "name": "Dd Doordash Burgerkin", "merchant_name": "Burger King", "merchant_entity_id": "mVrw538wamwdm22mK8jqpp7qd5br0eeV9o4a1", "logo_url": "https://plaid-merchant-logos.plaid.com/burger_king_155.png", "website": "burgerking.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "online", "pending": true, "pending_transaction_id": null, "personal_finance_category": { "primary": "FOOD_AND_DRINK", "detailed": "FOOD_AND_DRINK_FAST_FOOD", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_FOOD_AND_DRINK.png", "transaction_id": "yhnUVvtcGGcCKU0bcz8PDQr5ZUxUXebUvbKC0", "transaction_code": null, "transaction_type": "digital" }, { "account_id": "BxBXxLj1m4HMXBm9WZZmCWVbPjX16EHwv99vp", "account_owner": null, "amount": 72.1, "iso_currency_code": "USD", "unofficial_currency_code": null, "check_number": null, "counterparties": [ { "name": "Walmart", "type": "merchant", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "confidence_level": "VERY_HIGH" } ], "date": "2023-09-24", "datetime": "2023-09-24T11:01:01Z", "authorized_date": "2023-09-22", "authorized_datetime": "2023-09-22T10:34:50Z", "location": { "address": "13425 Community Rd", "city": "Poway", "region": "CA", "postal_code": "92064", "country": "US", "lat": 32.959068, "lon": -117.037666, "store_number": "1700" }, "name": "PURCHASE WM SUPERCENTER #1700", "merchant_name": "Walmart", "merchant_entity_id": "O5W5j4dN9OR3E6ypQmjdkWZZRoXEzVMz2ByWM", "logo_url": "https://plaid-merchant-logos.plaid.com/walmart_1100.png", "website": "walmart.com", "payment_meta": { "by_order_of": null, "payee": null, "payer": null, "payment_method": null, "payment_processor": null, "ppd_id": null, "reason": null, "reference_number": null }, "payment_channel": "in store", "pending": false, "pending_transaction_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nc", "personal_finance_category": { "primary": "GENERAL_MERCHANDISE", "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "confidence_level": "VERY_HIGH" }, "personal_finance_category_icon_url": "https://plaid-category-icons.plaid.com/PFC_GENERAL_MERCHANDISE.png", "transaction_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "transaction_code": null, "transaction_type": "place" } ], "item": { "available_products": [ "balance", "identity", "investments" ], "billed_products": [ "assets", "auth", "liabilities", "transactions" ], "consent_expiration_time": null, "error": null, "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "update_type": "background", "webhook": "https://www.genericwebhookurl.com/webhook", "auth_method": "INSTANT_AUTH" }, "total_transactions": 1, "request_id": "45QSn" } ``` \=\*=\*=\*= #### /transactions/recurring/get  #### Fetch recurring transaction streams  The [/transactions/recurring/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrecurringget) endpoint allows developers to receive a summary of the recurring outflow and inflow streams (expenses and deposits) from a user’s checking, savings or credit card accounts. Additionally, Plaid provides key insights about each recurring stream including the category, merchant, last amount, and more. Developers can use these insights to build tools and experiences that help their users better manage cash flow, monitor subscriptions, reduce spend, and stay on track with bill payments. This endpoint is offered as an add-on to Transactions. To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager. This endpoint can only be called on an Item that has already been initialized with Transactions (either during Link, by specifying it in [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) ; or after Link, by calling [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) or [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) ). When using Recurring Transactions, for best results, make sure to use the [days\_requested](https://plaid.com/docs/api/link/index.html.md#link-token-create-request-transactions-days-requested) parameter to request at least 180 days of history when initializing Items with Transactions. Once all historical transactions have been fetched, call [/transactions/recurring/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrecurringget) to receive the Recurring Transactions streams and subscribe to the [RECURRING\_TRANSACTIONS\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#recurring_transactions_update) webhook. To know when historical transactions have been fetched, if you are using [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) listen for the [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#SyncUpdatesAvailableWebhook-historical-update-complete) webhook and check that the `historical_update_complete` field in the payload is `true`. If using [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) , listen for the [HISTORICAL\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#historical_update) webhook. After the initial call, you can call [/transactions/recurring/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrecurringget) endpoint at any point in the future to retrieve the latest summary of recurring streams. Listen to the [RECURRING\_TRANSACTIONS\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#recurring_transactions_update) webhook to be notified when new updates are available. #### Request fields  **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. **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. **options** (object) An optional object to be used with the request. If specified, options must not be null. **options->personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **account\_ids** (\[string\]) An optional list of account\_ids to retrieve for the Item. Retrieves all active accounts on item if no account\_ids are provided. Note: An error will be returned if a provided account\_id is not associated with the Item. /transactions/recurring/get Node▼ ```javascript const request: TransactionsGetRequest = { access_token: accessToken, account_ids : accountIds }; try { const response = await client.transactionsRecurringGet(request); let inflowStreams = response.data.inflowStreams; let outflowStreams = response.data.outflowStreams; } } catch((err) => { // handle error } ``` #### Response fields  **inflow\_streams** (\[object\]) An array of depository transaction streams. **inflow\_streams->account\_id** (string) The ID of the account to which the stream belongs **inflow\_streams->stream\_id** (string) A unique id for the stream **inflow\_streams->description** (string) A description of the transaction stream. **inflow\_streams->merchant\_name** (nullable, string) The merchant associated with the transaction stream. **inflow\_streams->first\_date** (string) The posted date of the earliest transaction in the stream. Format: date **inflow\_streams->last\_date** (string) The posted date of the latest transaction in the stream. Format: date **inflow\_streams->predicted\_next\_date** (nullable, string) The predicted date of the next payment. This will only be set if the next payment date can be predicted. Format: date **inflow\_streams->frequency** (string) Describes the frequency of the transaction stream. WEEKLY: Assigned to a transaction stream that occurs approximately every week. BIWEEKLY: Assigned to a transaction stream that occurs approximately every 2 weeks. SEMI\_MONTHLY: Assigned to a transaction stream that occurs approximately twice per month. This frequency is typically seen for inflow transaction streams. MONTHLY: Assigned to a transaction stream that occurs approximately every month. ANNUALLY: Assigned to a transaction stream that occurs approximately every year. UNKNOWN: Assigned to a transaction stream that does not fit any of the pre-defined frequencies. Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, ANNUALLY **inflow\_streams->transaction\_ids** (\[string\]) An array of Plaid transaction IDs belonging to the stream, sorted by posted date. **inflow\_streams->average\_amount** (object) Object with data pertaining to an amount on the transaction stream. **inflow\_streams->average\_amount->amount** (number) Represents the numerical value of an amount. Format: double **inflow\_streams->average\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **inflow\_streams->average\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **inflow\_streams->last\_amount** (object) Object with data pertaining to an amount on the transaction stream. **inflow\_streams->last\_amount->amount** (number) Represents the numerical value of an amount. Format: double **inflow\_streams->last\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **inflow\_streams->last\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **inflow\_streams->is\_active** (boolean) Indicates whether the transaction stream is still live. **inflow\_streams->status** (string) The current status of the transaction stream. MATURE: A MATURE recurring stream should have at least 3 transactions and happen on a regular cadence (For Annual recurring stream, we will mark it MATURE after 2 instances). EARLY\_DETECTION: When a recurring transaction first appears in the transaction history and before it fulfills the requirement of a mature stream, the status will be EARLY\_DETECTION. TOMBSTONED: A stream that was previously in the EARLY\_DETECTION status will move to the TOMBSTONED status when no further transactions were found at the next expected date. UNKNOWN: A stream is assigned an UNKNOWN status when none of the other statuses are applicable. Possible values: UNKNOWN, MATURE, EARLY\_DETECTION, TOMBSTONED **inflow\_streams->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **inflow\_streams->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **inflow\_streams->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **inflow\_streams->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **inflow\_streams->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **inflow\_streams->is\_user\_modified** (deprecated, boolean) As the ability to modify transactions streams has been discontinued, this field will always be false. **outflow\_streams** (\[object\]) An array of expense transaction streams. **outflow\_streams->account\_id** (string) The ID of the account to which the stream belongs **outflow\_streams->stream\_id** (string) A unique id for the stream **outflow\_streams->description** (string) A description of the transaction stream. **outflow\_streams->merchant\_name** (nullable, string) The merchant associated with the transaction stream. **outflow\_streams->first\_date** (string) The posted date of the earliest transaction in the stream. Format: date **outflow\_streams->last\_date** (string) The posted date of the latest transaction in the stream. Format: date **outflow\_streams->predicted\_next\_date** (nullable, string) The predicted date of the next payment. This will only be set if the next payment date can be predicted. Format: date **outflow\_streams->frequency** (string) Describes the frequency of the transaction stream. WEEKLY: Assigned to a transaction stream that occurs approximately every week. BIWEEKLY: Assigned to a transaction stream that occurs approximately every 2 weeks. SEMI\_MONTHLY: Assigned to a transaction stream that occurs approximately twice per month. This frequency is typically seen for inflow transaction streams. MONTHLY: Assigned to a transaction stream that occurs approximately every month. ANNUALLY: Assigned to a transaction stream that occurs approximately every year. UNKNOWN: Assigned to a transaction stream that does not fit any of the pre-defined frequencies. Possible values: UNKNOWN, WEEKLY, BIWEEKLY, SEMI\_MONTHLY, MONTHLY, ANNUALLY **outflow\_streams->transaction\_ids** (\[string\]) An array of Plaid transaction IDs belonging to the stream, sorted by posted date. **outflow\_streams->average\_amount** (object) Object with data pertaining to an amount on the transaction stream. **outflow\_streams->average\_amount->amount** (number) Represents the numerical value of an amount. Format: double **outflow\_streams->average\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **outflow\_streams->average\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **outflow\_streams->last\_amount** (object) Object with data pertaining to an amount on the transaction stream. **outflow\_streams->last\_amount->amount** (number) Represents the numerical value of an amount. Format: double **outflow\_streams->last\_amount->iso\_currency\_code** (nullable, string) The ISO-4217 currency code of the amount. Always null if unofficial\_currency\_code is non-null. See the currency code schema for a full listing of supported iso\_currency\_codes. **outflow\_streams->last\_amount->unofficial\_currency\_code** (nullable, string) The unofficial currency code of the amount. Always null if iso\_currency\_code is non-null. Unofficial currency codes are used for currencies that do not have official ISO currency codes, such as cryptocurrencies and the currencies of certain countries. **outflow\_streams->is\_active** (boolean) Indicates whether the transaction stream is still live. **outflow\_streams->status** (string) The current status of the transaction stream. MATURE: A MATURE recurring stream should have at least 3 transactions and happen on a regular cadence (For Annual recurring stream, we will mark it MATURE after 2 instances). EARLY\_DETECTION: When a recurring transaction first appears in the transaction history and before it fulfills the requirement of a mature stream, the status will be EARLY\_DETECTION. TOMBSTONED: A stream that was previously in the EARLY\_DETECTION status will move to the TOMBSTONED status when no further transactions were found at the next expected date. UNKNOWN: A stream is assigned an UNKNOWN status when none of the other statuses are applicable. Possible values: UNKNOWN, MATURE, EARLY\_DETECTION, TOMBSTONED **outflow\_streams->personal\_finance\_category** (nullable, object) Information describing the intent of the transaction. Most relevant for personal finance use cases, but not limited to such use cases. See the taxonomy CSV file for a full list of personal finance categories. If you are migrating to personal finance categories from the legacy categories, also refer to the migration guide. **outflow\_streams->personal\_finance\_category->primary** (string) A high level category that communicates the broad category of the transaction. **outflow\_streams->personal\_finance\_category->detailed** (string) A granular category conveying the transaction's intent. This field can also be used as a unique identifier for the category. **outflow\_streams->personal\_finance\_category->confidence\_level** (nullable, string) A description of how confident we are that the provided categories accurately describe the transaction intent. VERY\_HIGH: We are more than 98% confident that this category reflects the intent of the transaction. HIGH: We are more than 90% confident that this category reflects the intent of the transaction. MEDIUM: We are moderately confident that this category reflects the intent of the transaction. LOW: This category may reflect the intent, but there may be other categories that are more accurate. UNKNOWN: We don’t know the confidence level for this category. **outflow\_streams->personal\_finance\_category->version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **outflow\_streams->is\_user\_modified** (deprecated, boolean) As the ability to modify transactions streams has been discontinued, this field will always be false. **updated\_datetime** (string) Timestamp in ISO 8601 format (YYYY-MM-DDTHH:mm:ssZ) indicating the last time transaction streams for the given account were updated on Format: date-time **personal\_finance\_category\_version** (string) Indicates which version of the personal finance category taxonomy is being used. View PFCv2 and PFCv1 taxonomies. If you enabled Transactions or Enrich before December 2025 you will receive the v1 taxonomy by default and may request v2 by explicitly setting this field to v2 in the request. If you enabled Transactions or Enrich on or after December 2025, you may only receive the v2 taxonomy. Existing customers in the EWA industry who were enabled for Transactions or Enrich on or before December 2025 must use the v2 taxonomy in order to receive the transactions accuracy improvements that were released in December 2025. All other customers will receive these improvements by default. Possible values: v1, v2 **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "updated_datetime": "2022-05-01T00:00:00Z", "inflow_streams": [ { "account_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "stream_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nc", "category": null, "category_id": null, "description": "Platypus Payroll", "merchant_name": null, "personal_finance_category": { "primary": "INCOME", "detailed": "INCOME_WAGES", "confidence_level": "UNKNOWN" }, "first_date": "2022-02-28", "last_date": "2022-04-30", "predicted_next_date": "2022-05-15", "frequency": "SEMI_MONTHLY", "transaction_ids": [ "nkeaNrDGrhdo6c4qZWDA8ekuIPuJ4Avg5nKfw", "EfC5ekksdy30KuNzad2tQupW8WIPwvjXGbGHL", "ozfvj3FFgp6frbXKJGitsDzck5eWQH7zOJBYd", "QvdDE8AqVWo3bkBZ7WvCd7LskxVix8Q74iMoK", "uQozFPfMzibBouS9h9tz4CsyvFll17jKLdPAF" ], "average_amount": { "amount": -800, "iso_currency_code": "USD", "unofficial_currency_code": null }, "last_amount": { "amount": -1000, "iso_currency_code": "USD", "unofficial_currency_code": null }, "is_active": true, "status": "MATURE", "is_user_modified": false } ], "outflow_streams": [ { "account_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDff", "stream_id": "no86Eox18VHMvaOVL7gPUM9ap3aR1LsAVZ5nd", "category": null, "category_id": null, "description": "ConEd Bill Payment", "merchant_name": "ConEd", "personal_finance_category": { "primary": "RENT_AND_UTILITIES", "detailed": "RENT_AND_UTILITIES_GAS_AND_ELECTRICITY", "confidence_level": "UNKNOWN" }, "first_date": "2022-02-04", "last_date": "2022-05-02", "predicted_next_date": "2022-06-02", "frequency": "MONTHLY", "transaction_ids": [ "yhnUVvtcGGcCKU0bcz8PDQr5ZUxUXebUvbKC0", "HPDnUVgI5Pa0YQSl0rxwYRwVXeLyJXTWDAvpR", "jEPoSfF8xzMClE9Ohj1he91QnvYoSdwg7IT8L", "CmdQTNgems8BT1B7ibkoUXVPyAeehT3Tmzk0l" ], "average_amount": { "amount": 85, "iso_currency_code": "USD", "unofficial_currency_code": null }, "last_amount": { "amount": 100, "iso_currency_code": "USD", "unofficial_currency_code": null }, "is_active": true, "status": "MATURE", "is_user_modified": false }, { "account_id": "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDff", "stream_id": "SrBNJZDuUMweodmPmSOeOImwsWt53ZXfJQAfC", "category": null, "category_id": null, "description": "Costco Annual Membership", "merchant_name": "Costco", "personal_finance_category": { "primary": "GENERAL_MERCHANDISE", "detailed": "GENERAL_MERCHANDISE_SUPERSTORES", "confidence_level": "UNKNOWN" }, "first_date": "2022-01-23", "last_date": "2023-01-22", "predicted_next_date": "2024-01-22", "frequency": "ANNUALLY", "transaction_ids": [ "yqEBJ72cS4jFwcpxJcDuQr94oAQ1R1lMC33D4", "Kz5Hm3cZCgpn4tMEKUGAGD6kAcxMBsEZDSwJJ" ], "average_amount": { "amount": 120, "iso_currency_code": "USD", "unofficial_currency_code": null }, "last_amount": { "amount": 120, "iso_currency_code": "USD", "unofficial_currency_code": null }, "is_active": true, "status": "MATURE", "is_user_modified": false } ], "request_id": "tbFyCEqkU775ZGG" } ``` \=\*=\*=\*= #### /transactions/refresh  #### Refresh transaction data  [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) is an optional endpoint that initiates an on-demand extraction to fetch the newest transactions for an Item. The on-demand extraction takes place in addition to the periodic extractions that automatically occur one or more times per day for any Transactions-enabled Item. The Item must already have Transactions added as a product in order to call [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) . If changes to transactions are discovered after calling [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) , Plaid will fire a webhook: for [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) users, [SYNC\_UPDATES\_AVAILABLE](https://plaid.com/docs/api/products/transactions/index.html.md#sync_updates_available) will be fired if there are any transactions updated, added, or removed. For users of both [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) and [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) , [TRANSACTIONS\_REMOVED](https://plaid.com/docs/api/products/transactions/index.html.md#transactions_removed) will be fired if any removed transactions are detected, and [DEFAULT\_UPDATE](https://plaid.com/docs/api/products/transactions/index.html.md#default_update) will be fired if any new transactions are detected. New transactions can be fetched by calling [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) or [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) . Note that the [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) endpoint is not supported for Capital One (`ins_128026`) non-depository accounts and will result in a `PRODUCTS_NOT_SUPPORTED` error if called on an Item that contains only non-depository accounts from that institution. As this endpoint triggers a synchronous request for fresh data, latency may be higher than for other Plaid endpoints (typically less than 10 seconds, but occasionally up to 30 seconds or more); if you encounter errors, you may find it necessary to adjust your timeout period when making requests. [/transactions/refresh](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrefresh) is offered as an optional add-on to Transactions and has a separate [fee model](https://plaid.com/docs/account/billing/index.html.md#per-request-flat-fee) . To request access to this endpoint, submit a [product access request](https://dashboard.plaid.com/team/products) or contact your Plaid account manager. #### Request fields  **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. **access\_token** (required, string) The access token associated with the Item data is being requested for. **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. /transactions/refresh Node▼ ```javascript const request: TransactionsRefreshRequest = { access_token: accessToken, }; try { await plaidClient.transactionsRefresh(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "1vwmF5TBQwiqfwP" } ``` \=\*=\*=\*= #### /categories/get  #### (Deprecated) Get legacy categories  Send a request to the [/categories/get](https://plaid.com/docs/api/products/transactions/index.html.md#categoriesget) endpoint to get detailed information on legacy categories returned by Plaid. This endpoint does not require authentication. All implementations are recommended to [use the newer personal\_finance\_category taxonomy](https://plaid.com/docs/transactions/pfc-migration/index.html.md) instead of the legacy `category` taxonomy supported by this endpoint. #### Request fields  This endpoint or method takes an empty request body. /categories/get Node▼ ```javascript try { const response = await plaidClient.categoriesGet({}); const categories = response.data.categories; } catch (error) { // handle error } ``` #### Response fields  **categories** (\[object\]) An array of all of the transaction categories used by Plaid. **categories->category\_id** (string) An identifying number for the category. category\_id is a Plaid-specific identifier and does not necessarily correspond to merchant category codes. **categories->group** (string) place for physical transactions or special for other transactions such as bank charges. **categories->hierarchy** (\[string\]) A hierarchical array of the categories to which this category\_id belongs. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "categories": [ { "category_id": "10000000", "group": "special", "hierarchy": [ "Bank Fees" ] }, { "category_id": "10001000", "group": "special", "hierarchy": [ "Bank Fees", "Overdraft" ] }, { "category_id": "12001000", "group": "place", "hierarchy": [ "Community", "Animal Shelter" ] } ], "request_id": "ixTBLZGvhD4NnmB" } ``` ### Webhooks  You can receive notifications via a webhook whenever there are new transactions associated with an Item, including when Plaid’s initial and historical transaction pull are completed. All webhooks related to transactions have a `webhook_type` of `TRANSACTIONS`. \=\*=\*=\*= #### SYNC\_UPDATES\_AVAILABLE  Fired when an Item's transactions change. This can be due to any event resulting in new changes, such as an initial 30-day transactions fetch upon the initialization of an Item with transactions, the backfill of historical transactions that occurs shortly after, or when changes are populated from a regularly-scheduled transactions update job. It is recommended to listen for the `SYNC_UPDATES_AVAILABLE` webhook when using the [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoint. Note that when using [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) the older webhooks `INITIAL_UPDATE`, `HISTORICAL_UPDATE`, `DEFAULT_UPDATE`, and `TRANSACTIONS_REMOVED`, which are intended for use with [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) , will also continue to be sent in order to maintain backwards compatibility. It is not necessary to listen for and respond to those webhooks when using [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) . After receipt of this webhook, the new changes can be fetched for the Item from [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) . Note that to receive this webhook for an Item, [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) must have been called at least once on that Item. This means that, unlike the `INITIAL_UPDATE` and `HISTORICAL_UPDATE` webhooks, it will not fire immediately upon Item creation. If [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) is called on an Item that was _not_ initialized with Transactions, the webhook will fire twice: once the first 30 days of transactions data has been fetched, and a second time when all available historical transactions data has been fetched. This webhook will fire in the Sandbox environment as it would in Production. It can also be manually triggered in Sandbox by calling [/sandbox/item/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) . #### Properties  **webhook\_type** (string) TRANSACTIONS **webhook\_code** (string) SYNC\_UPDATES\_AVAILABLE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **initial\_update\_complete** (boolean) Indicates if initial pull information (most recent 30 days of transaction history) is available. **historical\_update\_complete** (boolean) Indicates if historical pull information (maximum transaction history requested, up to 2 years) is available. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSACTIONS", "webhook_code": "SYNC_UPDATES_AVAILABLE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "initial_update_complete": true, "historical_update_complete": false, "environment": "production" } ``` \=\*=\*=\*= #### RECURRING\_TRANSACTIONS\_UPDATE  Fired when recurring transactions data is updated. This includes when a new recurring stream is detected or when a new transaction is added to an existing recurring stream. The `RECURRING_TRANSACTIONS_UPDATE` webhook will also fire when one or more attributes of the recurring stream changes, which is usually a result of the addition, update, or removal of transactions to the stream. After receipt of this webhook, the updated data can be fetched from [/transactions/recurring/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsrecurringget) . #### Properties  **webhook\_type** (string) TRANSACTIONS **webhook\_code** (string) RECURRING\_TRANSACTIONS\_UPDATE **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **account\_ids** (\[string\]) A list of account\_ids for accounts that have new or updated recurring transactions data. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSACTIONS", "webhook_code": "RECURRING_TRANSACTIONS_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "account_ids": [ "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDje", "lPNjeW1nR6CDn5okmGQ6hEpMo4lLNoSrzqDff" ], "environment": "production" } ``` \=\*=\*=\*= #### INITIAL\_UPDATE  Fired when an Item's initial transaction pull is completed. Once this webhook has been fired, transaction data for the most recent 30 days can be fetched for the Item. This webhook will also be fired if account selections for the Item are updated, with `new_transactions` set to the number of net new transactions pulled after the account selection update. This webhook is intended for use with [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) ; if you are using the newer [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoint, this webhook will still be fired to maintain backwards compatibility, but it is recommended to listen for and respond to the `SYNC_UPDATES_AVAILABLE` webhook instead. #### Properties  **webhook\_type** (string) TRANSACTIONS **webhook\_code** (string) INITIAL\_UPDATE **error** (string) The error code associated with the webhook. **new\_transactions** (number) The number of new transactions available. **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSACTIONS", "webhook_code": "INITIAL_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_transactions": 19, "environment": "production" } ``` \=\*=\*=\*= #### HISTORICAL\_UPDATE  Fired when an Item's historical transaction pull is completed and Plaid has prepared as much historical transaction data as possible for the Item. Once this webhook has been fired, transaction data beyond the most recent 30 days can be fetched for the Item. This webhook will also be fired if account selections for the Item are updated, with `new_transactions` set to the number of net new transactions pulled after the account selection update. This webhook is intended for use with [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) ; if you are using the newer [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoint, this webhook will still be fired to maintain backwards compatibility, but it is recommended to listen for and respond to the `SYNC_UPDATES_AVAILABLE` webhook instead. #### Properties  **webhook\_type** (string) TRANSACTIONS **webhook\_code** (string) HISTORICAL\_UPDATE **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **new\_transactions** (number) The number of new transactions available **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSACTIONS", "webhook_code": "HISTORICAL_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_transactions": 231, "environment": "production" } ``` \=\*=\*=\*= #### DEFAULT\_UPDATE  Fired when new transaction data is available for an Item. Plaid will typically check for new transaction data several times a day. This webhook is intended for use with [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) ; if you are using the newer [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoint, this webhook will still be fired to maintain backwards compatibility, but it is recommended to listen for and respond to the `SYNC_UPDATES_AVAILABLE` webhook instead. #### Properties  **webhook\_type** (string) TRANSACTIONS **webhook\_code** (string) DEFAULT\_UPDATE **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **new\_transactions** (number) The number of new transactions detected since the last time this webhook was fired. **item\_id** (string) The item\_id of the Item the webhook relates to. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSACTIONS", "webhook_code": "DEFAULT_UPDATE", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "error": null, "new_transactions": 3, "environment": "production" } ``` \=\*=\*=\*= #### TRANSACTIONS\_REMOVED  Fired when transaction(s) for an Item are deleted. The deleted transaction IDs are included in the webhook payload. Plaid will typically check for deleted transaction data several times a day. This webhook is intended for use with [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) ; if you are using the newer [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoint, this webhook will still be fired to maintain backwards compatibility, but it is recommended to listen for and respond to the `SYNC_UPDATES_AVAILABLE` webhook instead. #### Properties  **webhook\_type** (string) TRANSACTIONS **webhook\_code** (string) TRANSACTIONS\_REMOVED **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **removed\_transactions** (\[string\]) An array of transaction\_ids corresponding to the removed transactions **item\_id** (string) The item\_id of the Item associated with this webhook, warning, or error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSACTIONS", "webhook_code": "TRANSACTIONS_REMOVED", "item_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "removed_transactions": [ "yBVBEwrPyJs8GvR77N7QTxnGg6wG74H7dEDN6", "kgygNvAVPzSX9KkddNdWHaVGRVex1MHm3k9no" ], "error": null, "environment": "production" } ``` --- # API - Account Linking | Plaid Docs Transfer  ========= #### API reference for Transfer account linking endpoints  For how-to guidance, see the [Transfer documentation](https://plaid.com/docs/transfer/index.html.md) . \=\*=\*=\*= #### Account Linking  | Account Linking | | | --- | --- | | [/transfer/capabilities/get](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfercapabilitiesget) | Determine RTP eligibility for a Plaid Item | | [/transfer/intent/create](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transferintentcreate) | Create a transfer intent and invoke Transfer UI (Transfer UI only) | | [/transfer/intent/get](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transferintentget) | Retrieve information about a transfer intent (Transfer UI only) | | [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) | Create an Item to use with Transfer from known account and routing numbers | \=\*=\*=\*= #### /transfer/capabilities/get  #### Get RTP eligibility information of a transfer  Use the [/transfer/capabilities/get](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfercapabilitiesget) endpoint to determine the RTP eligibility information of an account to be used with Transfer. This endpoint works on all Transfer-capable Items, including those created by [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) . #### Request fields  **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** (required, string) The Plaid access\_token for the account that will be debited or credited. **account\_id** (required, string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. /transfer/capabilities/get Node▼ ```javascript const request: TransferCapabilitiesGetRequest = { access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', }; try { const response = await client.transferCapabilitiesGet(request); } catch (error) { // handle error } ``` #### Response fields  **institution\_supported\_networks** (object) Contains the RTP and RfP network and types supported by the linked Item's institution. **institution\_supported\_networks->rtp** (object) Contains the supported service types in RTP **institution\_supported\_networks->rtp->credit** (boolean) When true, the linked Item's institution supports RTP credit transfer. Default: false **institution\_supported\_networks->rfp** (object) Contains the supported service types in RfP **institution\_supported\_networks->rfp->debit** (boolean) When true, the linked Item's institution supports RfP debit transfer. Default: false **institution\_supported\_networks->rfp->max\_amount** (nullable, string) The maximum amount (decimal string with two digits of precision e.g. "10.00") for originating RfP transfers with the given institution. **institution\_supported\_networks->rfp->iso\_currency\_code** (nullable, string) The currency of the max\_amount, e.g. "USD". **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "institution_supported_networks": { "rtp": { "credit": true }, "rfp": { "debit": true } }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/intent/create  #### Create a transfer intent object to invoke the Transfer UI  Use the [/transfer/intent/create](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transferintentcreate) endpoint to generate a transfer intent object and invoke the Transfer UI. #### Request fields  **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. **account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **mode** (required, string) The direction of the flow of transfer funds. PAYMENT: Transfers funds from an end user's account to your business account. DISBURSEMENT: Transfers funds from your business account to an end user's account. Possible values: PAYMENT, DISBURSEMENT **network** (string) The network or rails used for the transfer. Defaults to same-day-ach. For transfers submitted using ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted using same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges. For transfers submitted using rtp, in the case that the account being credited does not support RTP, the transfer will be sent over ACH as long as an ach\_class is provided in the request. If RTP isn't supported by the account and no ach\_class is provided, the transfer will fail to be submitted. Possible values: ach, same-day-ach, rtpDefault: same-day-ach **amount** (required, string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **description** (required, string) A description for the underlying transfer. Maximum of 15 characters. Min length: 1 Max length: 15 **ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **user** (required, object) The legal name and other information for the account holder. **user->legal\_name** (required, string) The user's legal name. **user->phone\_number** (string) The user's phone number. Phone number input may be validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **user->email\_address** (string) The user's email address. **user->address** (object) The address associated with the account holder. **user->address->street** (string) The street number and name (i.e., "100 Market St."). **user->address->city** (string) Ex. "San Francisco" **user->address->region** (string) The state or province (e.g., "CA"). **user->address->postal\_code** (string) The postal code (e.g., "94103"). **user->address->country** (string) A two-letter country code (e.g., "US"). **metadata** (object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" /transfer/intent/create Node▼ ```javascript const request: TransferIntentCreateRequest = { account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', mode: 'PAYMENT' amount: '12.34', description: 'Desc', ach_class: 'ppd', origination_account_id: '9853defc-e703-463d-86b1-dc0607a45359', user: { legal_name: 'Anne Charleston', }, }; try { const response = await client.transferIntentCreate(request); } catch (error) { // handle error } ``` #### Response fields  **transfer\_intent** (object) Represents a transfer intent within Transfer UI. **transfer\_intent->id** (string) Plaid's unique identifier for the transfer intent object. **transfer\_intent->created** (string) The datetime the transfer was created. This will be of the form 2006-01-02T15:04:05Z. Format: date-time **transfer\_intent->status** (string) The status of the transfer intent. PENDING: The transfer intent is pending. SUCCEEDED: The transfer intent was successfully created. FAILED: The transfer intent was unable to be created. Possible values: PENDING, SUCCEEDED, FAILED **transfer\_intent->account\_id** (nullable, string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. Returned only if account\_id was set on intent creation. **transfer\_intent->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **transfer\_intent->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **transfer\_intent->mode** (string) The direction of the flow of transfer funds. PAYMENT: Transfers funds from an end user's account to your business account. DISBURSEMENT: Transfers funds from your business account to an end user's account. Possible values: PAYMENT, DISBURSEMENT **transfer\_intent->network** (string) The network or rails used for the transfer. Defaults to same-day-ach. For transfers submitted using ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted using same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges. For transfers submitted using rtp, in the case that the account being credited does not support RTP, the transfer will be sent over ACH as long as an ach\_class is provided in the request. If RTP isn't supported by the account and no ach\_class is provided, the transfer will fail to be submitted. Possible values: ach, same-day-ach, rtpDefault: same-day-ach **transfer\_intent->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **transfer\_intent->user** (object) The legal name and other information for the account holder. **transfer\_intent->user->legal\_name** (string) The user's legal name. **transfer\_intent->user->phone\_number** (nullable, string) The user's phone number. **transfer\_intent->user->email\_address** (nullable, string) The user's email address. **transfer\_intent->user->address** (nullable, object) The address associated with the account holder. **transfer\_intent->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **transfer\_intent->user->address->city** (nullable, string) Ex. "San Francisco" **transfer\_intent->user->address->region** (nullable, string) The state or province (e.g., "CA"). **transfer\_intent->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **transfer\_intent->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **transfer\_intent->description** (string) A description for the underlying transfer. Maximum of 8 characters. **transfer\_intent->metadata** (nullable, object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **transfer\_intent->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfer_intent": { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "9853defc-e703-463d-86b1-dc0607a45359", "ach_class": "ppd", "amount": "12.34", "iso_currency_code": "USD", "created": "2020-08-06T17:27:15Z", "description": "Desc", "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "metadata": { "key1": "value1", "key2": "value2" }, "mode": "PAYMENT", "origination_account_id": "9853defc-e703-463d-86b1-dc0607a45359", "status": "PENDING", "user": { "address": { "street": "100 Market Street", "city": "San Francisco", "region": "CA", "postal_code": "94103", "country": "US" }, "email_address": "acharleston@email.com", "legal_name": "Anne Charleston", "phone_number": "123-456-7890" } }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/intent/get  #### Retrieve more information about a transfer intent  Use the [/transfer/intent/get](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transferintentget) endpoint to retrieve more information about a transfer intent. #### Request fields  **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. **transfer\_intent\_id** (required, string) Plaid's unique identifier for a transfer intent object. /transfer/intent/get Node▼ ```javascript const request: TransferIntentGetRequest = { transfer_intent_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', }; try { const response = await client.transferIntentGet(request); } catch (error) { // handle error } ``` #### Response fields  **transfer\_intent** (object) Represents a transfer intent within Transfer UI. **transfer\_intent->id** (string) Plaid's unique identifier for a transfer intent object. **transfer\_intent->created** (string) The datetime the transfer was created. This will be of the form 2006-01-02T15:04:05Z. Format: date-time **transfer\_intent->status** (string) The status of the transfer intent. PENDING: The transfer intent is pending. SUCCEEDED: The transfer intent was successfully created. FAILED: The transfer intent was unable to be created. Possible values: PENDING, SUCCEEDED, FAILED **transfer\_intent->transfer\_id** (nullable, string) Plaid's unique identifier for the transfer created through the UI. Returned only if the transfer was successfully created. Null value otherwise. **transfer\_intent->failure\_reason** (nullable, object) The reason for a failed transfer intent. Returned only if the transfer intent status is failed. Null otherwise. **transfer\_intent->failure\_reason->error\_type** (string) A broad categorization of the error. **transfer\_intent->failure\_reason->error\_code** (string) A code representing the reason for a failed transfer intent (i.e., an API error or the authorization being declined). **transfer\_intent->failure\_reason->error\_message** (string) A human-readable description of the code associated with a failed transfer intent. **transfer\_intent->authorization\_decision** (nullable, string) A decision regarding the proposed transfer. APPROVED – The proposed transfer has received the end user's consent and has been approved for processing by Plaid. The decision\_rationale field is set if Plaid was unable to fetch the account information. You may proceed with the transfer, but further review is recommended (i.e., use Link in update mode to re-authenticate your user when decision\_rationale.code is ITEM\_LOGIN\_REQUIRED). Refer to the code field in the decision\_rationale object for details. DECLINED – Plaid reviewed the proposed transfer and declined processing. Refer to the code field in the decision\_rationale object for details. Possible values: APPROVED, DECLINED **transfer\_intent->authorization\_decision\_rationale** (nullable, object) The rationale for Plaid's decision regarding a proposed transfer. It is always set for declined decisions, and may or may not be null for approved decisions. **transfer\_intent->authorization\_decision\_rationale->code** (string) A code representing the rationale for approving or declining the proposed transfer. If the rationale\_code is null, the transfer passed the authorization check. Any non-null value for an approved transfer indicates that the the authorization check could not be run and that you should perform your own risk assessment on the transfer. The code will indicate why the check could not be run. Possible values for an approved transfer are: MANUALLY\_VERIFIED\_ITEM – Item created via a manual entry flow (i.e. Same Day Micro-deposit, Instant Micro-deposit, or database-based verification), limited information available. ITEM\_LOGIN\_REQUIRED – Unable to collect the account information due to Item staleness. Can be resolved by using Link and setting transfer.authorization\_id in the request to /link/token/create. MIGRATED\_ACCOUNT\_ITEM - Item created via /transfer/migrate\_account endpoint, limited information available. ERROR – Unable to collect the account information due to an unspecified error. The following codes indicate that the authorization decision was declined: NSF – Transaction likely to result in a return due to insufficient funds. RISK - Transaction is high-risk. TRANSFER\_LIMIT\_REACHED - One or several transfer limits are reached, e.g. monthly transfer limit. Check the accompanying description field to understand which limit has been reached. Possible values: NSF, RISK, TRANSFER\_LIMIT\_REACHED, MANUALLY\_VERIFIED\_ITEM, ITEM\_LOGIN\_REQUIRED, PAYMENT\_PROFILE\_LOGIN\_REQUIRED, ERROR, MIGRATED\_ACCOUNT\_ITEM, null **transfer\_intent->authorization\_decision\_rationale->description** (string) A human-readable description of the code associated with a transfer approval or transfer decline. **transfer\_intent->account\_id** (nullable, string) The Plaid account\_id for the account that will be debited or credited. Returned only if account\_id was set on intent creation. **transfer\_intent->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **transfer\_intent->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **transfer\_intent->mode** (string) The direction of the flow of transfer funds. PAYMENT: Transfers funds from an end user's account to your business account. DISBURSEMENT: Transfers funds from your business account to an end user's account. Possible values: PAYMENT, DISBURSEMENT **transfer\_intent->network** (string) The network or rails used for the transfer. Defaults to same-day-ach. For transfers submitted using ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted using same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges. For transfers submitted using rtp, in the case that the account being credited does not support RTP, the transfer will be sent over ACH as long as an ach\_class is provided in the request. If RTP isn't supported by the account and no ach\_class is provided, the transfer will fail to be submitted. Possible values: ach, same-day-ach, rtpDefault: same-day-ach **transfer\_intent->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **transfer\_intent->user** (object) The legal name and other information for the account holder. **transfer\_intent->user->legal\_name** (string) The user's legal name. **transfer\_intent->user->phone\_number** (nullable, string) The user's phone number. **transfer\_intent->user->email\_address** (nullable, string) The user's email address. **transfer\_intent->user->address** (nullable, object) The address associated with the account holder. **transfer\_intent->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **transfer\_intent->user->address->city** (nullable, string) Ex. "San Francisco" **transfer\_intent->user->address->region** (nullable, string) The state or province (e.g., "CA"). **transfer\_intent->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **transfer\_intent->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **transfer\_intent->description** (string) A description for the underlying transfer. Maximum of 8 characters. **transfer\_intent->metadata** (nullable, object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **transfer\_intent->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfer_intent": { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "9853defc-e703-463d-86b1-dc0607a45359", "ach_class": "ppd", "amount": "12.34", "iso_currency_code": "USD", "authorization_decision": "APPROVED", "authorization_decision_rationale": null, "created": "2019-12-09T17:27:15Z", "description": "Desc", "failure_reason": null, "guarantee_decision": null, "guarantee_decision_rationale": null, "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "metadata": { "key1": "value1", "key2": "value2" }, "mode": "DISBURSEMENT", "origination_account_id": "9853defc-e703-463d-86b1-dc0607a45359", "status": "SUCCEEDED", "transfer_id": "590ecd12-1dcc-7eae-4ad6-c28d1ec90df2", "user": { "address": { "street": "123 Main St.", "city": "San Francisco", "region": "California", "postal_code": "94053", "country": "US" }, "email_address": "acharleston@email.com", "legal_name": "Anne Charleston", "phone_number": "510-555-0128" } }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/migrate\_account  #### Migrate account into Transfers  As an alternative to adding Items via Link, you can also use the [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) endpoint to migrate previously-verified account and routing numbers to Plaid Items. This endpoint is also required when adding an Item for use with wire transfers; if you intend to create wire transfers on this account, you must provide `wire_routing_number`. Note that Items created in this way are not compatible with endpoints for other products, such as [/accounts/balance/get](https://plaid.com/docs/api/products/signal/index.html.md#accountsbalanceget) , and can only be used with Transfer endpoints. If you require access to other endpoints, create the Item through Link instead. Access to [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) is not enabled by default; to obtain access, contact your Plaid Account Manager or [Support](https://dashboard.plaid.com/support) . #### Request fields  **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. **account\_number** (required, string) The user's account number. **routing\_number** (required, string) The user's routing number. **wire\_routing\_number** (string) The user's wire transfer routing number. This is the ABA number; for some institutions, this may differ from the ACH number used in routing\_number. This field must be set for the created item to be eligible for wire transfers. **account\_type** (required, string) The type of the bank account (checking or savings). /transfer/migrate\_account Node▼ ```javascript const request: TransferMigrateAccountRequest = { account_number: '100000000', routing_number: '121122676', account_type: 'checking', }; try { const response = await plaidClient.transferMigrateAccount(request); const access_token = response.data.access_token; } catch (error) { // handle error } ``` #### Response fields  **access\_token** (string) The Plaid access\_token for the newly created Item. **account\_id** (string) The Plaid account\_id for the newly created Item. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "access_token": "access-sandbox-435beced-94e8-4df3-a181-1dde1cfa19f0", "account_id": "zvyDgbeeDluZ43AJP6m5fAxDlgoZXDuoy5gjN", "request_id": "mdqfuVxeoza6mhu" } ``` --- # API - Transfer | Plaid Docs Transfer  ========= #### API reference for Transfer endpoints and webhooks  For how-to guidance, see the [Transfer documentation](https://plaid.com/docs/transfer/index.html.md) . | Initiating Transfers | | | --- | --- | | [/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) | Create a transfer authorization | | [/transfer/authorization/cancel](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcancel) | Cancel a transfer authorization | | [/transfer/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercreate) | Create a transfer | | [/transfer/cancel](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercancel) | Cancel a transfer | | Reading Transfers | | | --- | --- | | [/transfer/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferget) | Retrieve information about a transfer | | [/transfer/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferlist) | Retrieve a list of transfers and their statuses | | [/transfer/event/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventlist) | Retrieve a list of transfer events | | [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) | Sync transfer events | | [/transfer/sweep/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfersweepget) | Retrieve information about a sweep | | [/transfer/sweep/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfersweeplist) | Retrieve a list of sweeps | | Account Linking | | | --- | --- | | [/transfer/capabilities/get](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfercapabilitiesget) | Determine RTP eligibility for a Plaid Item | | [/transfer/intent/create](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transferintentcreate) | Create a transfer intent and invoke Transfer UI (Transfer UI only) | | [/transfer/intent/get](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transferintentget) | Retrieve information about a transfer intent (Transfer UI only) | | [/transfer/migrate\_account](https://plaid.com/docs/api/products/transfer/account-linking/index.html.md#transfermigrate_account) | Create an Item to use with Transfer from known account and routing numbers | | Recurring Transfers | | | --- | --- | | [/transfer/recurring/create](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringcreate) | Create a recurring transfer | | [/transfer/recurring/cancel](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringcancel) | Cancel a recurring transfer | | [/transfer/recurring/get](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringget) | Retrieve information about a recurring transfer | | [/transfer/recurring/list](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringlist) | Retrieve a list of recurring transfers | | Refunds | | | --- | --- | | [/transfer/refund/create](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundcreate) | Create a refund for a transfer | | [/transfer/refund/cancel](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundcancel) | Cancel a refund | | [/transfer/refund/get](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundget) | Retrieve information about a refund | | Transfer for Platforms | | | --- | --- | | [/transfer/platform/originator/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformoriginatorcreate) | Pass transfer specific onboarding info for the originator | | [/transfer/platform/person/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformpersoncreate) | Create each individual who is a beneficial owner or control person of the business | | [/transfer/platform/requirement/submit](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformrequirementsubmit) | Pass additional data Plaid needs to make an onboarding decision for the originator | | [/transfer/platform/document/submit](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformdocumentsubmit) | Submit documents Plaid needs to verify information about the originator | | [/transfer/originator/get](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorget) | Get the status of an originator's onboarding | | [/transfer/originator/list](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorlist) | Get the status of all originators' onboarding | | [/transfer/originator/funding\_account/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorfunding_accountcreate) | Create a new funding account for an originator | | Plaid Ledger | | | --- | --- | | [/transfer/ledger/deposit](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerdeposit) | Deposit funds into a ledger balance held with Plaid | | [/transfer/ledger/distribute](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerdistribute) | Move available balance between platform and its originator | | [/transfer/ledger/get](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerget) | Retrieve information about the ledger balance held with Plaid | | [/transfer/ledger/withdraw](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerwithdraw) | Withdraw funds from a ledger balance held with Plaid | | [/transfer/ledger/event/list](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgereventlist) | Retrieve a list of ledger balance events | | Program Metrics | | | --- | --- | | [/transfer/metrics/get](https://plaid.com/docs/api/products/transfer/metrics/index.html.md#transfermetricsget) | Get transfer product usage metrics | | [/transfer/configuration/get](https://plaid.com/docs/api/products/transfer/metrics/index.html.md#transferconfigurationget) | Get transfer product configuration | | Sandbox | | | --- | --- | | [/sandbox/transfer/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfersimulate) | Simulate a transfer event | | [/sandbox/transfer/refund/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferrefundsimulate) | Simulate a refund event | | [/sandbox/transfer/sweep/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfersweepsimulate) | Simulate creating a sweep | | [/sandbox/transfer/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferfire_webhook) | Simulate a transfer webhook | | [/sandbox/transfer/ledger/deposit/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgerdepositsimulate) | Simulate a deposit sweep event | | [/sandbox/transfer/ledger/simulate\_available](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgersimulate_available) | Simulate converting pending balance into available balance | | [/sandbox/transfer/ledger/withdraw/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgerwithdrawsimulate) | Simulate a withdrawal sweep event | | [/sandbox/transfer/test\_clock/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockcreate) | Create a test clock | | [/sandbox/transfer/test\_clock/advance](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockadvance) | Advance a test clock | | [/sandbox/transfer/test\_clock/get](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockget) | Retrieve information about a test clock | | [/sandbox/transfer/test\_clock/list](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clocklist) | Retrieve a list of test clocks | | Webhooks | | | --- | --- | | [TRANSFER\_EVENTS\_UPDATE](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfer_events_update) | New transfer events available | | [RECURRING\_CANCELLED](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#recurring_cancelled) | A recurring transfer has been cancelled by Plaid | | [RECURRING\_NEW\_TRANSFER](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#recurring_new_transfer) | A new transfer of a recurring transfer has been originated | | [RECURRING\_TRANSFER\_SKIPPED](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#recurring_transfer_skipped) | An instance of a scheduled recurring transfer could not be created | --- # API - Initiating Transfers | Plaid Docs Initiating transfers  ===================== #### API reference for Transfer initiation endpoints  For how-to guidance, see the [Transfer creation documentation](https://plaid.com/docs/transfer/creating-transfers/index.html.md) . | Initiating Transfers | | | --- | --- | | [/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) | Create a transfer authorization | | [/transfer/authorization/cancel](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcancel) | Cancel a transfer authorization | | [/transfer/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercreate) | Create a transfer | | [/transfer/cancel](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercancel) | Cancel a transfer | \=\*=\*=\*= #### /transfer/authorization/create  #### Create a transfer authorization  Use the [/transfer/authorization/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcreate) endpoint to authorize a transfer. This endpoint must be called prior to calling [/transfer/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercreate) . The transfer authorization will expire if not used after one hour. (You can contact your account manager to change the default authorization lifetime.) There are four possible outcomes to calling this endpoint: \- If the `authorization.decision` in the response is `declined`, the proposed transfer has failed the risk check and you cannot proceed with the transfer. \- If the `authorization.decision` is `user_action_required`, additional user input is needed, usually to fix a broken bank connection, before Plaid can properly assess the risk. You need to launch Link in update mode to complete the required user action. When calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) to get a new Link token, instead of providing `access_token` in the request, you should set [transfer.authorization\_id](https://plaid.com/docs/api/link/index.html.md#link-token-create-request-transfer-authorization-id) as the `authorization.id`. After the Link flow is completed, you may re-attempt the authorization. \- If the `authorization.decision` is `approved`, and the `authorization.rationale_code` is `null`, the transfer has passed the risk check and you can proceed to call [/transfer/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercreate) . \- If the `authorization.decision` is `approved` and the `authorization.rationale_code` is non-`null`, the risk check could not be run: you may proceed with the transfer, but should perform your own risk evaluation. For more details, see the response schema. In Plaid's Sandbox environment the decisions will be returned as follows: \- To approve a transfer with `null` rationale code, make an authorization request with an `amount` less than the available balance in the account. \- To approve a transfer with the rationale code `MANUALLY_VERIFIED_ITEM`, create an Item in Link through the [Same Day Micro-deposits flow](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-same-day-micro-deposits) . \- To get an authorization decision of `user_action_required`, [reset the login for an Item](https://plaid.com/docs/sandbox/index.html.md#item_login_required) . \- To decline a transfer with the rationale code `NSF`, the available balance on the account must be less than the authorization `amount`. See [Create Sandbox test data](https://plaid.com/docs/sandbox/user-custom/index.html.md) for details on how to customize data in Sandbox. \- To decline a transfer with the rationale code `RISK`, the available balance on the account must be exactly $0. See [Create Sandbox test data](https://plaid.com/docs/sandbox/user-custom/index.html.md) for details on how to customize data in Sandbox. #### Request fields  **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** (required, string) The Plaid access\_token for the account that will be debited or credited. **account\_id** (required, string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **ledger\_id** (string) Specify which ledger balance should be used to fund the transfer. You can find a list of ledger\_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance. **type** (required, string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **network** (required, string) The network or rails used for the transfer. For transfers submitted as ach or same-day-ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted as same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail. For transfers submitted as rtp, Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as rtp and the counterparty account is not eligible for RTP, the /transfer/authorization/create request will fail with an INVALID\_FIELD error code. To pre-check to determine whether a counterparty account can support RTP, call /transfer/capabilities/get before calling /transfer/authorization/create. Wire transfers are currently in early availability. To request access to wire as a payment network, contact your Account Manager. For transfers submitted as wire, the type must be credit; wire debits are not supported. The cutoff to submit a wire payment is 6:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail. Possible values: ach, same-day-ach, rtp, wire **amount** (required, string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **wire\_details** (object) Information specific to wire transfers. **wire\_details->message\_to\_beneficiary** (string) Additional information from the wire originator to the beneficiary. Max 140 characters. **wire\_details->wire\_return\_fee** (string) The fee amount deducted from the original transfer during a wire return, if applicable. **user** (required, object) The legal name and other information for the account holder. If the account has multiple account holders, provide the information for the account holder on whose behalf the authorization is being requested. The user.legal\_name field is required. Other fields are not currently used and are present to support planned future functionality. **user->legal\_name** (required, string) The user's legal name. If the user is a business, provide the business name. **user->phone\_number** (string) The user's phone number. **user->email\_address** (string) The user's email address. **user->address** (object) The address associated with the account holder. **user->address->street** (string) The street number and name (i.e., "100 Market St."). **user->address->city** (string) Ex. "San Francisco" **user->address->region** (string) The state or province (e.g., "CA"). **user->address->postal\_code** (string) The postal code (e.g., "94103"). **user->address->country** (string) A two-letter country code (e.g., "US"). **device** (object) Information about the device being used to initiate the authorization. These fields are not currently incorporated into the risk check. **device->ip\_address** (string) The IP address of the device being used to initiate the authorization. **device->user\_agent** (string) The user agent of the device being used to initiate the authorization. **iso\_currency\_code** (string) The currency of the transfer amount. The default value is "USD". **idempotency\_key** (string) A random key provided by the client, per unique authorization, which expires after 48 hours. Maximum of 50 characters. The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. For example, if a request to create an authorization fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single authorization is created. Idempotency does not apply to authorizations whose decisions are user\_action\_required. Therefore you may re-attempt the authorization after completing the required user action without changing idempotency\_key. This idempotency key expires after 48 hours, after which the same key can be reused. Failure to provide this key may result in duplicate charges. Max length: 50 **user\_present** (boolean) If the end user is initiating the specific transfer themselves via an interactive UI, this should be true; for automatic recurring payments where the end user is not actually initiating each individual transfer, it should be false. This field is not currently used and is present to support planned future functionality. **originator\_client\_id** (string) The Plaid client ID that is the originator of this transfer. Only needed if creating transfers on behalf of another client as a Platform customer. **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. This field may only be used when using sandbox environment. If provided, the authorization is created at the virtual\_time on the provided test clock. **ruleset\_key** (string) The key of the Ruleset for the transaction. This feature is currently in closed beta; to request access, contact your account manager. /transfer/authorization/create Node▼ ```javascript const request: TransferAuthorizationCreateRequest = { access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', type: 'debit', network: 'ach', amount: '12.34', ach_class: 'ppd', user: { legal_name: 'Anne Charleston', }, }; try { const response = await client.transferAuthorizationCreate(request); const authorizationId = response.data.authorization.id; } catch (error) { // handle error } ``` #### Response fields  **authorization** (object) Contains the authorization decision for a proposed transfer. **authorization->id** (string) Plaid’s unique identifier for a transfer authorization. **authorization->created** (string) The datetime representing when the authorization was created, in the format 2006-01-02T15:04:05Z. Format: date-time **authorization->decision** (string) A decision regarding the proposed transfer. approved – The proposed transfer has received the end user's consent and has been approved for processing by Plaid. The decision\_rationale field is set if Plaid was unable to fetch the account information. You may proceed with the transfer, but further review is recommended. Refer to the code field in the decision\_rationale object for details. declined – Plaid reviewed the proposed transfer and declined processing. Refer to the code field in the decision\_rationale object for details. user\_action\_required – An action is required before Plaid can assess the transfer risk and make a decision. The most common scenario is to update authentication for an Item. To complete the required action, initialize Link by setting transfer.authorization\_id in the request of /link/token/create. After Link flow is completed, you may re-attempt the authorization request. Possible values: approved, declined, user\_action\_required **authorization->decision\_rationale** (nullable, object) The rationale for Plaid's decision regarding a proposed transfer. It is always set for declined decisions, and may or may not be null for approved decisions. **authorization->decision\_rationale->code** (string) A code representing the rationale for approving or declining the proposed transfer. If the rationale\_code is null, the transfer passed the authorization check. Any non-null value for an approved transfer indicates that the the authorization check could not be run and that you should perform your own risk assessment on the transfer. The code will indicate why the check could not be run. Possible values for an approved transfer are: MANUALLY\_VERIFIED\_ITEM – Item created via a manual entry flow (i.e. Same Day Micro-deposit, Instant Micro-deposit, or database-based verification), limited information available. ITEM\_LOGIN\_REQUIRED – Unable to collect the account information due to Item staleness. Can be resolved by using Link and setting transfer.authorization\_id in the request to /link/token/create. MIGRATED\_ACCOUNT\_ITEM - Item created via /transfer/migrate\_account endpoint, limited information available. ERROR – Unable to collect the account information due to an unspecified error. The following codes indicate that the authorization decision was declined: NSF – Transaction likely to result in a return due to insufficient funds. RISK - Transaction is high-risk. TRANSFER\_LIMIT\_REACHED - One or several transfer limits are reached, e.g. monthly transfer limit. Check the accompanying description field to understand which limit has been reached. Possible values: NSF, RISK, TRANSFER\_LIMIT\_REACHED, MANUALLY\_VERIFIED\_ITEM, ITEM\_LOGIN\_REQUIRED, PAYMENT\_PROFILE\_LOGIN\_REQUIRED, ERROR, MIGRATED\_ACCOUNT\_ITEM, null **authorization->decision\_rationale->description** (string) A human-readable description of the code associated with a transfer approval or transfer decline. **authorization->proposed\_transfer** (object) Details regarding the proposed transfer. **authorization->proposed\_transfer->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **authorization->proposed\_transfer->account\_id** (string) The Plaid account\_id for the account that will be debited or credited. **authorization->proposed\_transfer->funding\_account\_id** (nullable, string) The id of the associated funding account, available in the Plaid Dashboard. If present, this indicates which of your business checking accounts will be credited or debited. **authorization->proposed\_transfer->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **authorization->proposed\_transfer->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **authorization->proposed\_transfer->user** (object) The legal name and other information for the account holder. **authorization->proposed\_transfer->user->legal\_name** (string) The user's legal name. **authorization->proposed\_transfer->user->phone\_number** (nullable, string) The user's phone number. **authorization->proposed\_transfer->user->email\_address** (nullable, string) The user's email address. **authorization->proposed\_transfer->user->address** (nullable, object) The address associated with the account holder. **authorization->proposed\_transfer->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **authorization->proposed\_transfer->user->address->city** (nullable, string) Ex. "San Francisco" **authorization->proposed\_transfer->user->address->region** (nullable, string) The state or province (e.g., "CA"). **authorization->proposed\_transfer->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **authorization->proposed\_transfer->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **authorization->proposed\_transfer->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **authorization->proposed\_transfer->network** (string) The network or rails used for the transfer. **authorization->proposed\_transfer->wire\_details** (nullable, object) Information specific to wire transfers. **authorization->proposed\_transfer->wire\_details->message\_to\_beneficiary** (nullable, string) Additional information from the wire originator to the beneficiary. Max 140 characters. **authorization->proposed\_transfer->wire\_details->wire\_return\_fee** (nullable, string) The fee amount deducted from the original transfer during a wire return, if applicable. **authorization->proposed\_transfer->iso\_currency\_code** (string) The currency of the transfer amount. The default value is "USD". **authorization->proposed\_transfer->originator\_client\_id** (nullable, string) The Plaid client ID that is the originator of this transfer. Only present if created on behalf of another client as a Platform customer. **authorization->proposed\_transfer->credit\_funds\_source** (deprecated, nullable, string) This field is now deprecated. You may ignore it for transfers created on and after 12/01/2023. Specifies the source of funds for the transfer. Only valid for credit transfers, and defaults to sweep if not specified. This field is not specified for debit transfers. sweep - Sweep funds from your funding account prefunded\_rtp\_credits - Use your prefunded RTP credit balance with Plaid prefunded\_ach\_credits - Use your prefunded ACH credit balance with Plaid Possible values: sweep, prefunded\_rtp\_credits, prefunded\_ach\_credits, null **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "authorization": { "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "created": "2020-08-06T17:27:15Z", "decision": "approved", "decision_rationale": null, "guarantee_decision": null, "guarantee_decision_rationale": null, "payment_risk": null, "proposed_transfer": { "ach_class": "ppd", "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "type": "credit", "user": { "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "email_address": "acharleston@email.com", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "amount": "12.34", "network": "ach", "iso_currency_code": "USD", "origination_account_id": "", "originator_client_id": null, "credit_funds_source": "sweep" } }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/authorization/cancel  #### Cancel a transfer authorization  Use the [/transfer/authorization/cancel](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transferauthorizationcancel) endpoint to cancel a transfer authorization. A transfer authorization is eligible for cancellation if it has not yet been used to create a transfer. #### Request fields  **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. **authorization\_id** (required, string) Plaid’s unique identifier for a transfer authorization. /transfer/authorization/cancel Node▼ ```javascript const request: TransferAuthorizationCancelRequest = { authorization_id: '123004561178933', }; try { const response = await plaidClient.transferAuthorizationCancel(request); const request_id = response.data.request_id; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/create  #### Create a transfer  Use the [/transfer/create](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercreate) endpoint to initiate a new transfer. This endpoint is retryable and idempotent; if a transfer with the provided `transfer_id` has already been created, it will return the transfer details without creating a new transfer. A transfer may still be created if a 500 error is returned; to detect this scenario, use [Transfer events](https://plaid.com/docs/transfer/reconciling-transfers/index.html.md) . #### Request fields  **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** (required, string) The Plaid access\_token for the account that will be debited or credited. **account\_id** (required, string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **authorization\_id** (required, string) Plaid’s unique identifier for a transfer authorization. This parameter also serves the purpose of acting as an idempotency identifier. **amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **description** (required, string) The transfer description, maximum of 15 characters (RTP transactions) or 10 characters (ACH transactions). Should represent why the money is moving, not your company name. For recommendations on setting the description field to avoid ACH returns, see Description field recommendations. If reprocessing a returned transfer, the description field must be "Retry 1" or "Retry 2". You may retry a transfer up to 2 times, within 180 days of creating the original transfer. Only transfers that were returned with code R01 or R09 may be retried. Max length: 15 **metadata** (object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. This field may only be used when using sandbox environment. If provided, the transfer is created at the virtual\_time on the provided test\_clock. **facilitator\_fee** (string) The amount to deduct from transfer.amount and distribute to the platform’s Ledger balance as a facilitator fee (decimal string with two digits of precision e.g. "10.00"). The remainder will go to the end-customer’s Ledger balance. This must be value greater than 0 and less than or equal to the transfer.amount. /transfer/create Node▼ ```javascript const request: TransferCreateRequest = { access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', description: 'payment', authorization_id: '231h012308h3101z21909sw', }; try { const response = await client.transferCreate(request); const transfer = response.data.transfer; } catch (error) { // handle error } ``` #### Response fields  **transfer** (object) Represents a transfer within the Transfers API. **transfer->id** (string) Plaid’s unique identifier for a transfer. **transfer->authorization\_id** (string) Plaid’s unique identifier for a transfer authorization. **transfer->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **transfer->account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **transfer->funding\_account\_id** (nullable, string) The id of the associated funding account, available in the Plaid Dashboard. If present, this indicates which of your business checking accounts will be credited or debited. **transfer->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfer->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **transfer->user** (object) The legal name and other information for the account holder. **transfer->user->legal\_name** (string) The user's legal name. **transfer->user->phone\_number** (nullable, string) The user's phone number. **transfer->user->email\_address** (nullable, string) The user's email address. **transfer->user->address** (nullable, object) The address associated with the account holder. **transfer->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **transfer->user->address->city** (nullable, string) Ex. "San Francisco" **transfer->user->address->region** (nullable, string) The state or province (e.g., "CA"). **transfer->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **transfer->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **transfer->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **transfer->description** (string) The description of the transfer. **transfer->created** (string) The datetime when this transfer was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **transfer->status** (string) The status of the transfer. pending: A new transfer was created; it is in the pending state. posted: The transfer has been successfully submitted to the payment network. settled: The transfer was successfully completed by the payment network. Note that funds from received debits are not available to be moved out of the Ledger until the transfer reaches funds\_available status. For credit transactions, settled means the funds have been delivered to the receiving bank account. This is the terminal state of a successful credit transfer. funds\_available: Funds from the transfer have been released from hold and applied to the ledger's available balance. (Only applicable to ACH debits.) This is the terminal state of a successful debit transfer. cancelled: The transfer was cancelled by the client. This is the terminal state of a cancelled transfer. failed: The transfer failed, no funds were moved. This is the terminal state of a failed transfer. returned: A posted transfer was returned. This is the terminal state of a returned transfer. Possible values: pending, posted, settled, funds\_available, cancelled, failed, returned **transfer->sweep\_status** (nullable, string) The status of the sweep for the transfer. unswept: The transfer hasn't been swept yet. swept: The transfer was swept to the sweep account. swept\_settled: Credits are available to be withdrawn or debits have been deducted from the customer’s business checking account. return\_swept: The transfer was returned, funds were pulled back or pushed back to the sweep account. null: The transfer will never be swept (e.g. if the transfer is cancelled or returned before being swept) Possible values: null, unswept, swept, swept\_settled, return\_swept **transfer->network** (string) The network or rails used for the transfer. For transfers submitted as ach or same-day-ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted as same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail. For transfers submitted as rtp, Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as rtp and the counterparty account is not eligible for RTP, the /transfer/authorization/create request will fail with an INVALID\_FIELD error code. To pre-check to determine whether a counterparty account can support RTP, call /transfer/capabilities/get before calling /transfer/authorization/create. Wire transfers are currently in early availability. To request access to wire as a payment network, contact your Account Manager. For transfers submitted as wire, the type must be credit; wire debits are not supported. The cutoff to submit a wire payment is 6:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail. Possible values: ach, same-day-ach, rtp, wire **transfer->wire\_details** (nullable, object) Information specific to wire transfers. **transfer->wire\_details->message\_to\_beneficiary** (nullable, string) Additional information from the wire originator to the beneficiary. Max 140 characters. **transfer->wire\_details->wire\_return\_fee** (nullable, string) The fee amount deducted from the original transfer during a wire return, if applicable. **transfer->cancellable** (boolean) When true, you can still cancel this transfer. **transfer->failure\_reason** (nullable, object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **transfer->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfer->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **transfer->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfer->metadata** (nullable, object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **transfer->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **transfer->standard\_return\_window** (nullable, string) The date 3 business days from settlement date indicating the following ACH returns can no longer happen: R01, R02, R03, R29. This will be of the form YYYY-MM-DD. Format: date **transfer->unauthorized\_return\_window** (nullable, string) The date 61 business days from settlement date indicating the following ACH returns can no longer happen: R05, R07, R10, R11, R51, R33, R37, R38, R51, R52, R53. This will be of the form YYYY-MM-DD. Format: date **transfer->expected\_settlement\_date** (deprecated, nullable, string) Deprecated for Plaid Ledger clients, use expected\_funds\_available\_date instead. Format: date **transfer->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a transfer will be made available and can be withdrawn from the associated ledger balance, assuming the debit does not return before this date. If the transfer does return before this date, this field will be null. Only applies to debit transfers. This will be of the form YYYY-MM-DD. Format: date **transfer->originator\_client\_id** (nullable, string) The Plaid client ID that is the originator of this transfer. Only present if created on behalf of another client as a Platform customer. **transfer->refunds** (\[object\]) A list of refunds associated with this transfer. **transfer->refunds->id** (string) Plaid’s unique identifier for a refund. **transfer->refunds->transfer\_id** (string) The ID of the transfer to refund. **transfer->refunds->amount** (string) The amount of the refund (decimal string with two digits of precision e.g. "10.00"). **transfer->refunds->status** (string) The status of the refund. pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned. Possible values: pending, posted, cancelled, failed, settled, returned **transfer->refunds->failure\_reason** (nullable, object) The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise. **transfer->refunds->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfer->refunds->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure\_code, which encompasses non-ACH failure codes as well. **transfer->refunds->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfer->refunds->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfer->refunds->created** (string) The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **transfer->refunds->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **transfer->recurring\_transfer\_id** (nullable, string) The id of the recurring transfer if this transfer belongs to a recurring transfer. **transfer->expected\_sweep\_settlement\_schedule** (\[object\]) The expected sweep settlement schedule of this transfer, assuming this transfer is not returned. Only applies to ACH debit transfers. **transfer->expected\_sweep\_settlement\_schedule->sweep\_settlement\_date** (string) The settlement date of a sweep for this transfer. Format: date **transfer->expected\_sweep\_settlement\_schedule->swept\_settled\_amount** (string) The accumulated amount that has been swept by sweep\_settlement\_date. **transfer->credit\_funds\_source** (deprecated, nullable, string) This field is now deprecated. You may ignore it for transfers created on and after 12/01/2023. Specifies the source of funds for the transfer. Only valid for credit transfers, and defaults to sweep if not specified. This field is not specified for debit transfers. sweep - Sweep funds from your funding account prefunded\_rtp\_credits - Use your prefunded RTP credit balance with Plaid prefunded\_ach\_credits - Use your prefunded ACH credit balance with Plaid Possible values: sweep, prefunded\_rtp\_credits, prefunded\_ach\_credits, null **transfer->facilitator\_fee** (string) The amount to deduct from transfer.amount and distribute to the platform’s Ledger balance as a facilitator fee (decimal string with two digits of precision e.g. "10.00"). The remainder will go to the end-customer’s Ledger balance. This must be value greater than 0 and less than or equal to the transfer.amount. **transfer->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfer": { "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "authorization_id": "c9f90aa1-2949-c799-e2b6-ea05c89bb586", "ach_class": "ppd", "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "type": "credit", "user": { "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "email_address": "acharleston@email.com", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "amount": "12.34", "description": "payment", "created": "2020-08-06T17:27:15Z", "refunds": [], "status": "pending", "network": "ach", "cancellable": true, "guarantee_decision": null, "guarantee_decision_rationale": null, "failure_reason": null, "metadata": { "key1": "value1", "key2": "value2" }, "origination_account_id": "", "iso_currency_code": "USD", "standard_return_window": "2023-08-07", "unauthorized_return_window": "2023-10-07", "expected_settlement_date": "2023-08-04", "originator_client_id": "569ed2f36b3a3a021713abc1", "recurring_transfer_id": null, "credit_funds_source": "sweep", "facilitator_fee": "1.23", "network_trace_id": null }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/cancel  #### Cancel a transfer  Use the [/transfer/cancel](https://plaid.com/docs/api/products/transfer/initiating-transfers/index.html.md#transfercancel) endpoint to cancel a transfer. A transfer is eligible for cancellation if the `cancellable` property returned by [/transfer/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferget) is `true`. #### Request fields  **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. **transfer\_id** (required, string) Plaid’s unique identifier for a transfer. **reason\_code** (string) Specifies the reason for cancelling transfer. This is required for RfP transfers, and will be ignored for other networks. "AC03" - Invalid Creditor Account Number "AM09" - Incorrect Amount "CUST" - Requested By Customer - Cancellation requested "DUPL" - Duplicate Payment "FRAD" - Fraudulent Payment - Unauthorized or fraudulently induced "TECH" - Technical Problem - Cancellation due to system issues "UPAY" - Undue Payment - Payment was made through another channel "AC14" - Invalid or Missing Creditor Account Type "AM06" - Amount Too Low "BE05" - Unrecognized Initiating Party "FOCR" - Following Refund Request "MS02" - No Specified Reason - Customer "MS03" - No Specified Reason - Agent "RR04" - Regulatory Reason "RUTA" - Return Upon Unable To Apply Possible values: AC03, AM09, CUST, DUPL, FRAD, TECH, UPAY, AC14, AM06, BE05, FOCR, MS02, MS03, RR04, RUTA /transfer/cancel Node▼ ```javascript const request: TransferCancelRequest = { transfer_id: '123004561178933', }; try { const response = await plaidClient.transferCancel(request); const request_id = response.data.request_id; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` --- # API - Plaid Ledger | Plaid Docs Plaid Ledger  ============= #### API reference for Plaid Ledger  For how-to guidance, see the [Ledger documentation](https://plaid.com/docs/transfer/flow-of-funds/index.html.md) . | Plaid Ledger | | | --- | --- | | [/transfer/ledger/deposit](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerdeposit) | Deposit funds into a ledger balance held with Plaid | | [/transfer/ledger/distribute](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerdistribute) | Move available balance between platform and its originator | | [/transfer/ledger/get](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerget) | Retrieve information about the ledger balance held with Plaid | | [/transfer/ledger/withdraw](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerwithdraw) | Withdraw funds from a ledger balance held with Plaid | | [/transfer/ledger/event/list](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgereventlist) | Retrieve a list of ledger balance events | \=\*=\*=\*= #### /transfer/ledger/deposit  #### Deposit funds into a Plaid Ledger balance  Use the [/transfer/ledger/deposit](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerdeposit) endpoint to deposit funds into Plaid Ledger. #### Request fields  **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. **originator\_client\_id** (string) Client ID of the customer that owns the Ledger balance. This is so Plaid knows which of your customers to payout or collect funds. Only applicable for Platform customers. Do not include if you’re paying out to yourself. **funding\_account\_id** (string) Specify which funding account to use. Customers can find a list of funding\_account\_ids in the Accounts page of the Plaid Dashboard, under the "Account ID" column. If this field is left blank, the funding account associated with the specified Ledger will be used. If an originator\_client\_id is specified, the funding\_account\_id must belong to the specified originator. **ledger\_id** (string) Specify which ledger balance to deposit to. Customers can find a list of ledger\_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance. **amount** (required, string) A positive amount of how much will be deposited into ledger (decimal string with two digits of precision e.g. "5.50"). **description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. Max length: 10 **idempotency\_key** (required, string) A unique key provided by the client, per unique ledger deposit. Maximum of 50 characters. The API supports idempotency for safely retrying the request without accidentally performing the same operation twice. For example, if a request to create a ledger deposit fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single deposit is created. Max length: 50 **network** (required, string) The ACH networks used for the funds flow. For requests submitted as either ach or same-day-ach the cutoff for Same Day ACH is 3:30 PM Eastern Time and the cutoff for Standard ACH transfers is 8:30 PM Eastern Time. It is recommended to submit a request at least 15 minutes before the cutoff time in order to ensure that it will be processed before the cutoff. Any request that is indicated as same-day-ach and that misses the Same Day ACH cutoff, but is submitted in time for the Standard ACH cutoff, will be sent over Standard ACH rails and will not incur same-day charges. Possible values: ach, same-day-ach /transfer/ledger/deposit Node▼ ```javascript const request: TransferLedgerDepositRequest = { amount: '12.34', network: 'ach', idempotency_key: 'test_deposit_abc', description: 'deposit', }; try { const response = await client.transferLedgerDeposit(request); const sweep = response.data.sweep; } catch (error) { // handle error } ``` #### Response fields  **sweep** (object) Describes a sweep of funds to / from the sweep account. A sweep is associated with many sweep events (events of type swept or return\_swept) which can be retrieved by invoking the /transfer/event/list endpoint with the corresponding sweep\_id. swept events occur when the transfer amount is credited or debited from your sweep account, depending on the type of the transfer. return\_swept events occur when a transfer is returned and Plaid undoes the credit or debit. The total sum of the swept and return\_swept events is equal to the amount of the sweep Plaid creates and matches the amount of the entry on your sweep account ledger. **sweep->id** (string) Identifier of the sweep. **sweep->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **sweep->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **sweep->created** (string) The datetime when the sweep occurred, in RFC 3339 format. Format: date-time **sweep->amount** (string) Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00") If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced. **sweep->iso\_currency\_code** (string) The currency of the sweep, e.g. "USD". **sweep->settled** (nullable, string) The date when the sweep settled, in the YYYY-MM-DD format. Format: date **sweep->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD. Format: date **sweep->status** (nullable, string) The status of a sweep transfer "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds\_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep. Possible values: pending, posted, settled, funds\_available, returned, failed, null **sweep->trigger** (nullable, string) The trigger of the sweep "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance\_threshold" - The sweep is created by balance threshold setting "automatic\_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance. Possible values: manual, incoming, balance\_threshold, automatic\_aggregate **sweep->description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. **sweep->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **sweep->failure\_reason** (nullable, object) The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise. **sweep->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **sweep->failure\_reason->description** (nullable, string) A human-readable description of the reason for the failure or reversal. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "sweep": { "id": "8c2fda9a-aa2f-4735-a00f-f4e0d2d2faee", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "created": "2020-08-06T17:27:15Z", "amount": "-12.34", "iso_currency_code": "USD", "settled": null, "status": "pending", "trigger": "manual", "description": "deposit", "network_trace_id": null }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/ledger/distribute  #### Move available balance between ledgers  Use the [/transfer/ledger/distribute](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerdistribute) endpoint to move available balance between ledgers, if you have multiple. If you’re a platform, you can move funds between one of your ledgers and one of your customer’s ledger. #### Request fields  **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. **from\_ledger\_id** (required, string) The Ledger to pull money from. **to\_ledger\_id** (required, string) The Ledger to credit money to. **amount** (required, string) The amount to move (decimal string with two digits of precision e.g. "10.00"). Amount must be positive. **idempotency\_key** (required, string) A unique key provided by the client, per unique ledger distribute. Maximum of 50 characters. The API supports idempotency for safely retrying the request without accidentally performing the same operation twice. For example, if a request to create a ledger distribute fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single distribute is created. Max length: 50 **description** (string) An optional description for the ledger distribute operation. /transfer/ledger/distribute Node▼ ```javascript const request: TransferLedgerDistributeRequest = { from_client_id: '6a65dh3d1h0d1027121ak184', to_client_id: '415ab64b87ec47401d000002' amount: '12.34', idempotency_key: 'test_distribute_abc', description: 'distribute', }; try { const response = await client.transferLedgerDistribute(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/ledger/get  #### Retrieve Plaid Ledger balance  Use the [/transfer/ledger/get](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerget) endpoint to view a balance on the ledger held with Plaid. #### Request fields  **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. **ledger\_id** (string) Specify which ledger balance to get. Customers can find a list of ledger\_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance. **originator\_client\_id** (string) Client ID of the end customer. /transfer/ledger/get Node▼ ```javascript try { const response = await client.transferLedgerGet({}}); const available_balance = response.data.balance.available; const pending_balance = response.data.balance.pending; } catch (error) { // handle error } ``` #### Response fields  **ledger\_id** (string) The unique identifier of the Ledger that was returned. **balance** (object) Information about the balance of the ledger held with Plaid. **balance->available** (string) The amount of this balance available for use (decimal string with two digits of precision e.g. "10.00"). **balance->pending** (string) The amount of pending funds that are in processing (decimal string with two digits of precision e.g. "10.00"). **name** (string) The name of the Ledger **is\_default** (boolean) Whether this Ledger is the client's default ledger. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "name": "Default", "is_default": true, "balance": { "available": "1721.70", "pending": "123.45" }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/ledger/withdraw  #### Withdraw funds from a Plaid Ledger balance  Use the [/transfer/ledger/withdraw](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgerwithdraw) endpoint to withdraw funds from a Plaid Ledger balance. #### Request fields  **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. **originator\_client\_id** (string) Client ID of the customer that owns the Ledger balance. This is so Plaid knows which of your customers to payout or collect funds. Only applicable for Platform customers. Do not include if you’re paying out to yourself. **funding\_account\_id** (string) Specify which funding account to use. Customers can find a list of funding\_account\_ids in the Accounts page of the Plaid Dashboard, under the "Account ID" column. If this field is left blank, the funding account associated with the specified Ledger will be used. If an originator\_client\_id is specified, the funding\_account\_id must belong to the specified originator. **ledger\_id** (string) Specify which ledger balance to withdraw from. Customers can find a list of ledger\_ids in the Accounts page of your Plaid Dashboard. If this field is left blank, this will default to id of the default ledger balance. **amount** (required, string) A positive amount of how much will be withdrawn from the ledger balance (decimal string with two digits of precision e.g. "5.50"). **description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. Max length: 10 **idempotency\_key** (required, string) A unique key provided by the client, per unique ledger withdraw. Maximum of 50 characters. The API supports idempotency for safely retrying the request without accidentally performing the same operation twice. For example, if a request to create a ledger withdraw fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single withdraw is created. Max length: 50 **network** (required, string) The network or rails used for the transfer. For transfers submitted as ach or same-day-ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted as same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail. For transfers submitted as rtp, Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as rtp and the counterparty account is not eligible for RTP, the /transfer/authorization/create request will fail with an INVALID\_FIELD error code. To pre-check to determine whether a counterparty account can support RTP, call /transfer/capabilities/get before calling /transfer/authorization/create. Wire transfers are currently in early availability. To request access to wire as a payment network, contact your Account Manager. For transfers submitted as wire, the type must be credit; wire debits are not supported. The cutoff to submit a wire payment is 6:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail. Possible values: ach, same-day-ach, rtp, wire /transfer/ledger/withdraw Node▼ ```javascript const request: TransferLedgerWithdrawRequest = { amount: '12.34', network: 'ach', idempotency_key: 'test_deposit_abc', description: 'withdraw', }; try { const response = await client.transferLedgerWithdraw(request); const sweep = response.data.sweep; } catch (error) { // handle error } ``` #### Response fields  **sweep** (object) Describes a sweep of funds to / from the sweep account. A sweep is associated with many sweep events (events of type swept or return\_swept) which can be retrieved by invoking the /transfer/event/list endpoint with the corresponding sweep\_id. swept events occur when the transfer amount is credited or debited from your sweep account, depending on the type of the transfer. return\_swept events occur when a transfer is returned and Plaid undoes the credit or debit. The total sum of the swept and return\_swept events is equal to the amount of the sweep Plaid creates and matches the amount of the entry on your sweep account ledger. **sweep->id** (string) Identifier of the sweep. **sweep->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **sweep->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **sweep->created** (string) The datetime when the sweep occurred, in RFC 3339 format. Format: date-time **sweep->amount** (string) Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00") If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced. **sweep->iso\_currency\_code** (string) The currency of the sweep, e.g. "USD". **sweep->settled** (nullable, string) The date when the sweep settled, in the YYYY-MM-DD format. Format: date **sweep->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD. Format: date **sweep->status** (nullable, string) The status of a sweep transfer "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds\_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep. Possible values: pending, posted, settled, funds\_available, returned, failed, null **sweep->trigger** (nullable, string) The trigger of the sweep "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance\_threshold" - The sweep is created by balance threshold setting "automatic\_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance. Possible values: manual, incoming, balance\_threshold, automatic\_aggregate **sweep->description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. **sweep->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **sweep->failure\_reason** (nullable, object) The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise. **sweep->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **sweep->failure\_reason->description** (nullable, string) A human-readable description of the reason for the failure or reversal. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "sweep": { "id": "8c2fda9a-aa2f-4735-a00f-f4e0d2d2faee", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "created": "2020-08-06T17:27:15Z", "amount": "12.34", "iso_currency_code": "USD", "settled": null, "status": "pending", "trigger": "manual", "description": "withdraw", "network_trace_id": null }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/ledger/event/list  #### List transfer ledger events  Use the [/transfer/ledger/event/list](https://plaid.com/docs/api/products/transfer/ledger/index.html.md#transferledgereventlist) endpoint to get a list of ledger events for a specific ledger based on specified filter criteria. #### Request fields  **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. **originator\_client\_id** (string) Filter transfer events to only those with the specified originator client. (This field is specifically for resellers. Caller's client ID will be used if this field is not specified.) **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. **start\_date** (string) The start created datetime of transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **end\_date** (string) The end created datetime of transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **ledger\_id** (string) Plaid's unique identifier for a Plaid Ledger Balance. **ledger\_event\_id** (string) Plaid's unique identifier for the ledger event. **source\_type** (string) Source of the ledger event. "TRANSFER" - The source of the ledger event is a transfer "SWEEP" - The source of the ledger event is a sweep "REFUND" - The source of the ledger event is a refund Possible values: TRANSFER, SWEEP, REFUND **source\_id** (string) Plaid's unique identifier for a transfer, sweep, or refund. **count** (integer) The maximum number of transfer events to return. If the number of events matching the above parameters is greater than count, the most recent events will be returned. Default: 25 Maximum: 25 Minimum: 1 **offset** (integer) The offset into the list of transfer events. When count=25 and offset=0, the first 25 events will be returned. When count=25 and offset=25, the next 25 events will be returned. Default: 0 Minimum: 0 /transfer/ledger/event/list Node▼ ```javascript const request: TransferLedgerEventListRequest = { originator_client_id: "8945fedc-e703-463d-86b1-dc0607b55460", start_date: '2019-12-06T22:35:49Z', end_date: '2019-12-12T22:35:49Z', count: 14, offset: 2, ledger_id: "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", ledger_event_id: "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", source_type: "transfer", source_id: "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", }; try { const response = await plaidClient.transferLedgerEventList(request); const events = response.data.ledger_events; for (const event of events) { // iterate through events } } catch (error) { // handle error } ``` #### Response fields  string **ledger\_events** (\[object\]) Plaid's unique identifier for this ledger event. **ledger\_events->ledger\_id** (string) The ID of the ledger this event belongs to. **ledger\_events->amount** (string) The amount of the ledger event as a decimal string. **ledger\_events->transfer\_id** (nullable, string) The ID of the transfer source that triggered this ledger event. **ledger\_events->refund\_id** (nullable, string) The ID of the refund source that triggered this ledger event. **ledger\_events->sweep\_id** (nullable, string) The ID of the sweep source that triggered this ledger event. **ledger\_events->description** (string) A description of the ledger event. **ledger\_events->pending\_balance** (string) The new pending balance after this event. **ledger\_events->available\_balance** (string) The new available balance after this event. **ledger\_events->type** (string) The type of balance that was impacted by this event. **ledger\_events->timestamp** (string) The datetime when this ledger event occurred. Format: date-time **has\_more** (boolean) Whether there are more events to be pulled from the endpoint that have not already been returned **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "ledger_events": [ { "ledger_event_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "amount": "100.00", "type": "deposit", "transfer_id": "460cbe92-2dcc-8eae", "description": "Converted to available", "pending_balance": "100.00", "available_balance": "100.00", "timestamp": "2023-12-01T10:00:00Z" } ], "has_more": false, "request_id": "mdqfuVxeoza6mhu" } ``` --- # API - Program Metrics | Plaid Docs Program Metrics  ================ #### API reference for Transfer program metrics  For how-to guidance, see the [Transfer documentation](https://plaid.com/docs/transfer/index.html.md) . | Program Metrics | | | --- | --- | | [/transfer/metrics/get](https://plaid.com/docs/api/products/transfer/metrics/index.html.md#transfermetricsget) | Get transfer product usage metrics | | [/transfer/configuration/get](https://plaid.com/docs/api/products/transfer/metrics/index.html.md#transferconfigurationget) | Get transfer product configuration | \=\*=\*=\*= #### /transfer/metrics/get  #### Get transfer product usage metrics  Use the [/transfer/metrics/get](https://plaid.com/docs/api/products/transfer/metrics/index.html.md#transfermetricsget) endpoint to view your transfer product usage metrics. #### Request fields  **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. **originator\_client\_id** (string) The Plaid client ID of the transfer originator. Should only be present if client\_id is a Platform customer. /transfer/metrics/get Node▼ ```javascript const request: TransferMetricsGetRequest = { originator_client_id: '61b8f48ded273e001aa8db6d', }; try { const response = await client.transferMetricsGet(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **daily\_debit\_transfer\_volume** (string) Sum of dollar amount of debit transfers in last 24 hours (decimal string with two digits of precision e.g. "10.00"). **daily\_credit\_transfer\_volume** (string) Sum of dollar amount of credit transfers in last 24 hours (decimal string with two digits of precision e.g. "10.00"). **monthly\_debit\_transfer\_volume** (string) Sum of dollar amount of debit transfers in current calendar month (decimal string with two digits of precision e.g. "10.00"). **monthly\_credit\_transfer\_volume** (string) Sum of dollar amount of credit transfers in current calendar month (decimal string with two digits of precision e.g. "10.00"). **iso\_currency\_code** (string) The currency of the dollar amount, e.g. "USD". **return\_rates** (nullable, object) Details regarding return rates. **return\_rates->last\_60d** (nullable, object) Details regarding return rates. **return\_rates->last\_60d->overall\_return\_rate** (string) The overall return rate. **return\_rates->last\_60d->unauthorized\_return\_rate** (string) The unauthorized return rate. **return\_rates->last\_60d->administrative\_return\_rate** (string) The administrative return rate. **authorization\_usage** (nullable, object) Details regarding authorization usage. **authorization\_usage->daily\_credit\_utilization** (string) The daily credit utilization formatted as a decimal. **authorization\_usage->daily\_debit\_utilization** (string) The daily debit utilization formatted as a decimal. **authorization\_usage->monthly\_credit\_utilization** (string) The monthly credit utilization formatted as a decimal. **authorization\_usage->monthly\_debit\_utilization** (string) The monthly debit utilization formatted as a decimal. Response Object ```json { "daily_debit_transfer_volume": "1234.56", "daily_credit_transfer_volume": "567.89", "monthly_transfer_volume": "", "monthly_debit_transfer_volume": "10000.00", "monthly_credit_transfer_volume": "2345.67", "iso_currency_code": "USD", "request_id": "saKrIBuEB9qJZno", "return_rates": { "last_60d": { "overall_return_rate": "0.1023", "administrative_return_rate": "0.0160", "unauthorized_return_rate": "0.0028" } }, "authorization_usage": { "daily_credit_utilization": "0.2300", "daily_debit_utilization": "0.3401", "monthly_credit_utilization": "0.9843", "monthly_debit_utilization": "0.3220" } } ``` \=\*=\*=\*= #### /transfer/configuration/get  #### Get transfer product configuration  Use the [/transfer/configuration/get](https://plaid.com/docs/api/products/transfer/metrics/index.html.md#transferconfigurationget) endpoint to view your transfer product configurations. #### Request fields  **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. **originator\_client\_id** (string) The Plaid client ID of the transfer originator. Should only be present if client\_id is a Platform customer. /transfer/configuration/get Node▼ ```javascript const request: TransferConfigurationGetRequest = { originator_client_id: '61b8f48ded273e001aa8db6d', }; try { const response = await client.transferConfigurationGet(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **max\_single\_transfer\_credit\_amount** (string) The max limit of dollar amount of a single credit transfer (decimal string with two digits of precision e.g. "10.00"). **max\_single\_transfer\_debit\_amount** (string) The max limit of dollar amount of a single debit transfer (decimal string with two digits of precision e.g. "10.00"). **max\_daily\_credit\_amount** (string) The max limit of sum of dollar amount of credit transfers in last 24 hours (decimal string with two digits of precision e.g. "10.00"). **max\_daily\_debit\_amount** (string) The max limit of sum of dollar amount of debit transfers in last 24 hours (decimal string with two digits of precision e.g. "10.00"). **max\_monthly\_credit\_amount** (string) The max limit of sum of dollar amount of credit transfers in one calendar month (decimal string with two digits of precision e.g. "10.00"). **max\_monthly\_debit\_amount** (string) The max limit of sum of dollar amount of debit transfers in one calendar month (decimal string with two digits of precision e.g. "10.00"). **iso\_currency\_code** (string) The currency of the dollar amount, e.g. "USD". Response Object ```json { "max_single_transfer_amount": "", "max_single_transfer_credit_amount": "1000.00", "max_single_transfer_debit_amount": "1000.00", "max_daily_credit_amount": "50000.00", "max_daily_debit_amount": "50000.00", "max_monthly_amount": "", "max_monthly_credit_amount": "500000.00", "max_monthly_debit_amount": "500000.00", "iso_currency_code": "USD", "request_id": "saKrIBuEB9qJZno" } ``` --- # API - Transfer for Platforms | Plaid Docs Transfer for Platforms  ======================= #### API reference for Transfer for Platforms endpoints  For how-to guidance, see the [Transfer for Platforms documentation](https://plaid.com/docs/transfer/platform-payments/index.html.md) . | Transfer for Platforms | | | --- | --- | | [/transfer/platform/originator/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformoriginatorcreate) | Pass transfer specific onboarding info for the originator | | [/transfer/platform/person/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformpersoncreate) | Create each individual who is a beneficial owner or control person of the business | | [/transfer/platform/requirement/submit](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformrequirementsubmit) | Pass additional data Plaid needs to make an onboarding decision for the originator | | [/transfer/platform/document/submit](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformdocumentsubmit) | Submit documents Plaid needs to verify information about the originator | | [/transfer/originator/get](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorget) | Get the status of an originator's onboarding | | [/transfer/originator/list](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorlist) | Get the status of all originators' onboarding | | [/transfer/originator/funding\_account/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorfunding_accountcreate) | Create a new funding account for an originator | \=\*=\*=\*= #### /transfer/platform/originator/create  #### Create an originator for Transfer for Platforms customers  Use the [/transfer/platform/originator/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformoriginatorcreate) endpoint to submit information about the originator you are onboarding, including the originator's agreement to the required legal terms. #### Request fields  **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. **originator\_client\_id** (required, string) The client ID of the originator **tos\_acceptance\_metadata** (required, object) Metadata related to the acceptance of Terms of Service **tos\_acceptance\_metadata->agreement\_accepted** (required, boolean) Indicates whether the TOS agreement was accepted **tos\_acceptance\_metadata->originator\_ip\_address** (required, string) The IP address of the originator when they accepted the TOS. Formatted as an IPv4 or IPv6 IP address **tos\_acceptance\_metadata->agreement\_accepted\_at** (required, string) ISO8601 timestamp indicating when the originator accepted the TOS Format: date-time **originator\_reviewed\_at** (required, string) ISO8601 timestamp indicating the most recent time the platform collected onboarding data from the originator Format: date-time **webhook** (string) The webhook URL to which a PLATFORM\_ONBOARDING\_UPDATE webhook should be sent. Format: url /transfer/platform/originator/create Node▼ ```javascript const request: TransferPlatformOriginatorCreateRequest = { originator_client_id: "6a65dh3d1h0d1027121ak184", tos_acceptance_metadata: { agreement_accepted: true, originator_ip_address: "192.0.2.42", agreement_accepted_at: "2017-09-14T14:42:19.350Z" }, originator_reviewed_at: "2024-07-29T20:22:21Z", webhook: "https://webhook.com/webhook" }; try { const response = await client.transferPlatformOriginatorCreate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/platform/person/create  #### Create a person associated with an originator  Use the [/transfer/platform/person/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformpersoncreate) endpoint to create a person associated with an originator (e.g. beneficial owner or control person) and optionally submit personal identification information for them. #### Request fields  **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. **originator\_client\_id** (required, string) The client ID of the originator **name** (object) The person's legal name **name->given\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **name->family\_name** (required, string) A string with at least one non-whitespace character, with a max length of 100 characters. **email\_address** (string) A valid email address. Must not have leading or trailing spaces. **phone\_number** (string) A valid phone number in E.164 format. Phone number input may be validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **address** (object) Home address of a person **address->city** (required, string) The full city name. **address->country** (required, string) Valid, capitalized, two-letter ISO code representing the country of this object. Must be in ISO 3166-1 alpha-2 form. **address->postal\_code** (required, string) The postal code of the address. **address->region** (required, string) An ISO 3166-2 subdivision code. Related terms would be "state", "province", "prefecture", "zone", "subdivision", etc. **address->street** (required, string) The primary street portion of an address. A string with at least one non-whitespace alphabetical character, with a max length of 80 characters. **address->street2** (string) Extra street information, like an apartment or suite number. If provided, a string with at least one non-whitespace character, with a max length of 50 characters. **id\_number** (object) ID number of the person **id\_number->value** (required, string) Value of the person's ID Number. Alpha-numeric, with all formatting characters stripped. **id\_number->type** (required, string) 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 **date\_of\_birth** (string) The date of birth of the person. Formatted as YYYY-MM-DD. Format: date **relationship\_to\_originator** (string) The relationship between this person and the originator they are related to. **ownership\_percentage** (integer) The percentage of ownership this person has in the onboarding business. Only applicable to beneficial owners with 25% or more ownership. Minimum: 25 Maximum: 100 **title** (string) The title of the person at the business. Only applicable to control persons - for example, "CEO", "President", "Owner", etc. /transfer/platform/person/create Node▼ ```javascript const request: TransferPlatformPersonCreateRequest = { originator_client_id: "6a65dh3d1h0d1027121ak184", name: { given_name: "Owen", family_name: "Gillespie" }, email_address: "ogillespie@plaid.com", phone_number: "+12223334444", address: { street: "123 Main St.", street2: "Apt 456", city: "San Francisco", region: "CA", postal_code: "94580", country: "US" }, id_number: { type: "us_ssn", value: "111223333" }, date_of_birth: "2000-01-20", relationship_to_originator: "BENEFICIAL_OWNER", ownership_percentage: 50, title: "COO" }; try { const response = await client.transferPlatformPersonCreate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **person\_id** (string) An ID that should be used when submitting additional requirements that are associated with this person. Response Object ```json { "person_id": "4aa32e78-0cb3-4c13-b45e-7f9f2fc709d1", "request_id": "qpCtcJz6g3fhMdJ" } ``` \=\*=\*=\*= #### /transfer/platform/requirement/submit  #### Submit additional onboarding information on behalf of an originator  Use the [/transfer/platform/requirement/submit](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformrequirementsubmit) endpoint to submit additional onboarding information that is needed by Plaid to approve or decline the originator. See [Requirement type schema documentation](https://docs.google.com/document/d/1NEQkTD0sVK50iAQi6xHigrexDUxZ4QxXqSEfV_FFTiU/) for a list of requirement types and possible values. #### Request fields  **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. **originator\_client\_id** (required, string) The client ID of the originator **requirement\_submissions** (required, \[object\]) Use the /transfer/platform/requirement/submit endpoint to submit a list of requirement submissions that all relate to the originator. Must contain between 1 and 50 requirement submissions. See Requirement type schema documentation for a list of requirements and possible values. Max items: 50 Min items: 1 **requirement\_submissions->requirement\_type** (required, string) The type of requirement being submitted. See Requirement type schema documentation for a list of requirement types and possible values. **requirement\_submissions->value** (required, string) The value of the requirement, which can be a string or an object depending on the requirement\_type. If it is an object, the object should be JSON marshaled into a string. See Requirement type schema documentation for a list of requirement types and possible values. **requirement\_submissions->person\_id** (string) The person\_id of the person the requirement submission is related to. A person\_id is returned by /transfer/platform/person/create. This field should not be included for requirements that are not related to a person. Format: uuid /transfer/platform/requirement/submit Node▼ ```javascript const request: TransferPlatformRequirementSubmitRequest = { originator_client_id: "6a65dh3d1h0d1027121ak184", requirement_submissions: [ { requirement_type: "BUSINESS_NAME", value: "Owen's Widgets Inc." }, { requirement_type: "BUSINESS_EIN", value: "123-45-6789" }, { requirement_type: "BUSINESS_BANK_ACCOUNT", value: "{\"access_token\": \"\",\"account_id\": \"\"}" }, { requirement_type: "BUSINESS_ORG_TYPE", value: "LIMITED LIABILITY COMPANY" }, { requirement_type: "BUSINESS_INDUSTRY", value: "TELECOMMUNICATIONS" }, { requirement_type: "BUSINESS_ADDRESS", value: "{\"city\":\"San Francisco\",\"country\":\"US\",\"postal_code\":\"94105\",\"region\":\"CA\",\"street\":\"123 Market St\",\"street2\":\"Suite 400\"}" }, { requirement_type: "BUSINESS_WEBSITE", value: "https://plaid.com" }, { requirement_type: "BUSINESS_PRODUCT_DESCRIPTION", value: "This is a sample description." }, { requirement_type: "ASSOCIATED_PEOPLE", value: "[\"8b0e3210-767a-4882-9154-89b1e4c20493\",\"6ce1022c-d2c6-416d-a587-ed5e3f9bf941\"]" }, { requirement_type: "PERSON_NAME", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "{\"given_name\": \"Jane\",\"family_name\": \"Smith\"}" }, { requirement_type: "PERSON_ID_NUMBER", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "{\"type\": \"us_ssn\",\"value\": \"123456789\"}" }, { requirement_type: "PERSON_ADDRESS", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "{\"city\":\"San Francisco\",\"country\":\"US\",\"postal_code\":\"94105\",\"region\":\"CA\",\"street\":\"123 Market St\",\"street2\":\"Suite 100\"}" }, { requirement_type: "PERSON_DOB", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "1999-12-31" }, { requirement_type: "PERSON_EMAIL", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "sample@example.com" }, { requirement_type: "PERSON_PHONE", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "+12345678909" }, { requirement_type: "PERSON_RELATIONSHIP", person_id: "6ce1022c-d2c6-416d-a587-ed5e3f9bf941", value: "BENEFICIAL_OWNER" }, { requirement_type: "PERSON_PERCENT_OWNERSHIP", person_id: "8b0e3210-767a-4882-9154-89b1e4c20493", value: "50" }, { requirement_type: "PERSON_TITLE", person_id: "8b0e3210-767a-4882-9154-89b1e4c20493", value: "COO" } ] }; try { const response = await client.transferPlatformRequirementSubmit(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/platform/document/submit  \=\*=\*=\*= #### Upload documentation on behalf of an originator  Use the [/transfer/platform/document/submit](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferplatformdocumentsubmit) endpoint to upload documents requested by Plaid to verify an originator’s onboarding information. Unlike other endpoints, this one requires `multipart/form-data` as the content type. This endpoint is also not included in the Plaid client libraries. #### Request fields  **originator\_client\_id** (required, string) The client ID of the originator **document\_submission** (required, string) The path to the document file to upload **requirement\_type** (required, string) The type of requirement this document fulfills **person\_id** (string) The person\_id of the person the requirement submission is related to. A person\_id is returned by /transfer/platform/person/create. This field should not be included for requirements that are not related to a person. Format: uuid /transfer/platform/document/submit Node▼ ```javascript import fs from 'fs'; import fetch from 'node-fetch'; import FormData from 'form-data'; const form = new FormData(); form.append('originator_client_id', '6a65dh3d1h0d1027121ak184'); form.append('document_submission', fs.createReadStream('/path/to/sample/file.txt')); form.append('requirement_type', 'BUSINESS_ADDRESS_VALIDATION'); const res = await fetch(`https://sandbox.plaid.com/transfer/platform/document/submit`, { method: 'POST', headers: { 'Plaid-Client-ID': '', 'Plaid-Secret': '', ...form.getHeaders(), }, body: form, }); const data = await res.json(); ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. ```json { "request_id": "YkP5Aq2x9LkZQb7" } ``` \=\*=\*=\*= #### /transfer/originator/get  #### Get status of an originator's onboarding  The [/transfer/originator/get](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorget) endpoint gets status updates for an originator's onboarding process. This information is also available via the Transfer page on the Plaid dashboard. #### Request fields  **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. **originator\_client\_id** (required, string) Client ID of the end customer (i.e. the originator). /transfer/originator/get Node▼ ```javascript const request: TransferOriginatorGetRequest = { originator_client_id: '6a65dh3d1h0d1027121ak184', }; try { const response = await client.transferOriginatorGet(request); } catch (error) { // handle error } ``` #### Response fields  **originator** (object) Originator and their status. **originator->client\_id** (string) Originator’s client ID. **originator->transfer\_diligence\_status** (string) Originator’s diligence status. Possible values: not\_submitted, submitted, under\_review, approved, denied, more\_information\_required **originator->company\_name** (string) The company name of the end customer. **originator->outstanding\_requirements** (\[object\]) List of outstanding requirements that must be submitted before Plaid can approve the originator. Only populated when transfer\_diligence\_status is more\_information\_required. **originator->outstanding\_requirements->requirement\_type** (string) The type of requirement. **originator->outstanding\_requirements->person\_id** (nullable, string) UUID of the person associated with the requirement. Only present for individual-scoped requirements. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "originator": { "client_id": "6a65dh3d1h0d1027121ak184", "transfer_diligence_status": "approved", "company_name": "Plaid" }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/originator/list  #### Get status of all originators' onboarding  The [/transfer/originator/list](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorlist) endpoint gets status updates for all of your originators' onboarding. This information is also available via the Plaid dashboard. #### Request fields  **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. **count** (integer) The maximum number of originators to return. Maximum: 25 Minimum: 1 Default: 25 **offset** (integer) The number of originators to skip before returning results. Minimum: 0 Default: 0 /transfer/originator/list Node▼ ```javascript const request: TransferOriginatorListRequest = { count: 14, offset: 2, }; try { const response = await client.transferOriginatorList(request); } catch (error) { // handle error } ``` #### Response fields  string **originators** (\[object\]) Originator’s client ID. **originators->transfer\_diligence\_status** (string) Originator’s diligence status. Possible values: not\_submitted, submitted, under\_review, approved, denied, more\_information\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "originators": [ { "client_id": "6a65dh3d1h0d1027121ak184", "transfer_diligence_status": "approved" }, { "client_id": "8g89as4d2k1d9852938ba019", "transfer_diligence_status": "denied" } ], "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /transfer/originator/funding\_account/create  #### Create a new funding account for an originator  Use the [/transfer/originator/funding\_account/create](https://plaid.com/docs/api/products/transfer/platform-payments/index.html.md#transferoriginatorfunding_accountcreate) endpoint to create a new funding account for the originator. #### Request fields  **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. **originator\_client\_id** (required, string) The Plaid client ID of the transfer originator. **funding\_account** (required, object) The originator's funding account, linked with Plaid Link or /transfer/migrate\_account. **funding\_account->access\_token** (required, string) The access token associated with the Item data is being requested for. **funding\_account->account\_id** (required, string) The Plaid account\_id for the newly created Item. **funding\_account->display\_name** (string) The name for the funding account that is displayed in the Plaid dashboard. /transfer/originator/funding\_account/create Node▼ ```javascript const request: TransferOriginatorFundingAccountCreateRequest = { originator_client_id: '6a65dh3d1h0d1027121ak184', funding_account: { access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', display_name: "New Funding Account", }, }; try { const response = await client.transferOriginatorFundingAccountCreate(request); } catch (error) { // handle error } ``` #### Response fields  **funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "request_id": "saKrIBuEB9qJZno" } ``` --- # API - Reading Transfers | Plaid Docs Reading Transfers and Transfer events  ====================================== #### API reference for Transfer read and Transfer event endpoints and webhooks  For how-to guidance, see the [Transfer events documentation](https://plaid.com/docs/transfer/reconciling-transfers/index.html.md) . | Reading Transfers | | | --- | --- | | [/transfer/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferget) | Retrieve information about a transfer | | [/transfer/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferlist) | Retrieve a list of transfers and their statuses | | [/transfer/event/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventlist) | Retrieve a list of transfer events | | [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) | Sync transfer events | | [/transfer/sweep/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfersweepget) | Retrieve information about a sweep | | [/transfer/sweep/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfersweeplist) | Retrieve a list of sweeps | | Webhooks | | | --- | --- | | [TRANSFER\_EVENTS\_UPDATE](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfer_events_update) | New transfer events available | ### Endpoints  \=\*=\*=\*= #### /transfer/get  #### Retrieve a transfer  The [/transfer/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferget) endpoint fetches information about the transfer corresponding to the given `transfer_id` or `authorization_id`. One of `transfer_id` or `authorization_id` must be populated but not both. #### Request fields  **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. **transfer\_id** (string) Plaid’s unique identifier for a transfer. **authorization\_id** (string) Plaid’s unique identifier for a transfer authorization. /transfer/get Node▼ ```javascript const request: TransferGetRequest = { transfer_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', }; try { const response = await plaidClient.transferGet(request); const transfer = response.data.transfer; } catch (error) { // handle error } ``` #### Response fields  **transfer** (object) Represents a transfer within the Transfers API. **transfer->id** (string) Plaid’s unique identifier for a transfer. **transfer->authorization\_id** (string) Plaid’s unique identifier for a transfer authorization. **transfer->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **transfer->account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **transfer->funding\_account\_id** (nullable, string) The id of the associated funding account, available in the Plaid Dashboard. If present, this indicates which of your business checking accounts will be credited or debited. **transfer->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfer->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **transfer->user** (object) The legal name and other information for the account holder. **transfer->user->legal\_name** (string) The user's legal name. **transfer->user->phone\_number** (nullable, string) The user's phone number. **transfer->user->email\_address** (nullable, string) The user's email address. **transfer->user->address** (nullable, object) The address associated with the account holder. **transfer->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **transfer->user->address->city** (nullable, string) Ex. "San Francisco" **transfer->user->address->region** (nullable, string) The state or province (e.g., "CA"). **transfer->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **transfer->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **transfer->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **transfer->description** (string) The description of the transfer. **transfer->created** (string) The datetime when this transfer was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **transfer->status** (string) The status of the transfer. pending: A new transfer was created; it is in the pending state. posted: The transfer has been successfully submitted to the payment network. settled: The transfer was successfully completed by the payment network. Note that funds from received debits are not available to be moved out of the Ledger until the transfer reaches funds\_available status. For credit transactions, settled means the funds have been delivered to the receiving bank account. This is the terminal state of a successful credit transfer. funds\_available: Funds from the transfer have been released from hold and applied to the ledger's available balance. (Only applicable to ACH debits.) This is the terminal state of a successful debit transfer. cancelled: The transfer was cancelled by the client. This is the terminal state of a cancelled transfer. failed: The transfer failed, no funds were moved. This is the terminal state of a failed transfer. returned: A posted transfer was returned. This is the terminal state of a returned transfer. Possible values: pending, posted, settled, funds\_available, cancelled, failed, returned **transfer->sweep\_status** (nullable, string) The status of the sweep for the transfer. unswept: The transfer hasn't been swept yet. swept: The transfer was swept to the sweep account. swept\_settled: Credits are available to be withdrawn or debits have been deducted from the customer’s business checking account. return\_swept: The transfer was returned, funds were pulled back or pushed back to the sweep account. null: The transfer will never be swept (e.g. if the transfer is cancelled or returned before being swept) Possible values: null, unswept, swept, swept\_settled, return\_swept **transfer->network** (string) The network or rails used for the transfer. For transfers submitted as ach or same-day-ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted as same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail. For transfers submitted as rtp, Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as rtp and the counterparty account is not eligible for RTP, the /transfer/authorization/create request will fail with an INVALID\_FIELD error code. To pre-check to determine whether a counterparty account can support RTP, call /transfer/capabilities/get before calling /transfer/authorization/create. Wire transfers are currently in early availability. To request access to wire as a payment network, contact your Account Manager. For transfers submitted as wire, the type must be credit; wire debits are not supported. The cutoff to submit a wire payment is 6:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail. Possible values: ach, same-day-ach, rtp, wire **transfer->wire\_details** (nullable, object) Information specific to wire transfers. **transfer->wire\_details->message\_to\_beneficiary** (nullable, string) Additional information from the wire originator to the beneficiary. Max 140 characters. **transfer->wire\_details->wire\_return\_fee** (nullable, string) The fee amount deducted from the original transfer during a wire return, if applicable. **transfer->cancellable** (boolean) When true, you can still cancel this transfer. **transfer->failure\_reason** (nullable, object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **transfer->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfer->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **transfer->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfer->metadata** (nullable, object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **transfer->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **transfer->standard\_return\_window** (nullable, string) The date 3 business days from settlement date indicating the following ACH returns can no longer happen: R01, R02, R03, R29. This will be of the form YYYY-MM-DD. Format: date **transfer->unauthorized\_return\_window** (nullable, string) The date 61 business days from settlement date indicating the following ACH returns can no longer happen: R05, R07, R10, R11, R51, R33, R37, R38, R51, R52, R53. This will be of the form YYYY-MM-DD. Format: date **transfer->expected\_settlement\_date** (deprecated, nullable, string) Deprecated for Plaid Ledger clients, use expected\_funds\_available\_date instead. Format: date **transfer->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a transfer will be made available and can be withdrawn from the associated ledger balance, assuming the debit does not return before this date. If the transfer does return before this date, this field will be null. Only applies to debit transfers. This will be of the form YYYY-MM-DD. Format: date **transfer->originator\_client\_id** (nullable, string) The Plaid client ID that is the originator of this transfer. Only present if created on behalf of another client as a Platform customer. **transfer->refunds** (\[object\]) A list of refunds associated with this transfer. **transfer->refunds->id** (string) Plaid’s unique identifier for a refund. **transfer->refunds->transfer\_id** (string) The ID of the transfer to refund. **transfer->refunds->amount** (string) The amount of the refund (decimal string with two digits of precision e.g. "10.00"). **transfer->refunds->status** (string) The status of the refund. pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned. Possible values: pending, posted, cancelled, failed, settled, returned **transfer->refunds->failure\_reason** (nullable, object) The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise. **transfer->refunds->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfer->refunds->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure\_code, which encompasses non-ACH failure codes as well. **transfer->refunds->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfer->refunds->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfer->refunds->created** (string) The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **transfer->refunds->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **transfer->recurring\_transfer\_id** (nullable, string) The id of the recurring transfer if this transfer belongs to a recurring transfer. **transfer->expected\_sweep\_settlement\_schedule** (\[object\]) The expected sweep settlement schedule of this transfer, assuming this transfer is not returned. Only applies to ACH debit transfers. **transfer->expected\_sweep\_settlement\_schedule->sweep\_settlement\_date** (string) The settlement date of a sweep for this transfer. Format: date **transfer->expected\_sweep\_settlement\_schedule->swept\_settled\_amount** (string) The accumulated amount that has been swept by sweep\_settlement\_date. **transfer->credit\_funds\_source** (deprecated, nullable, string) This field is now deprecated. You may ignore it for transfers created on and after 12/01/2023. Specifies the source of funds for the transfer. Only valid for credit transfers, and defaults to sweep if not specified. This field is not specified for debit transfers. sweep - Sweep funds from your funding account prefunded\_rtp\_credits - Use your prefunded RTP credit balance with Plaid prefunded\_ach\_credits - Use your prefunded ACH credit balance with Plaid Possible values: sweep, prefunded\_rtp\_credits, prefunded\_ach\_credits, null **transfer->facilitator\_fee** (string) The amount to deduct from transfer.amount and distribute to the platform’s Ledger balance as a facilitator fee (decimal string with two digits of precision e.g. "10.00"). The remainder will go to the end-customer’s Ledger balance. This must be value greater than 0 and less than or equal to the transfer.amount. **transfer->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfer": { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "ach_class": "ppd", "amount": "12.34", "cancellable": true, "created": "2020-08-06T17:27:15Z", "description": "Desc", "guarantee_decision": null, "guarantee_decision_rationale": null, "failure_reason": { "failure_code": "R13", "description": "Invalid ACH routing number" }, "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "authorization_id": "c9f90aa1-2949-c799-e2b6-ea05c89bb586", "metadata": { "key1": "value1", "key2": "value2" }, "network": "ach", "origination_account_id": "", "originator_client_id": null, "refunds": [], "status": "pending", "type": "credit", "iso_currency_code": "USD", "standard_return_window": "2020-08-07", "unauthorized_return_window": "2020-10-07", "expected_settlement_date": "2020-08-04", "user": { "email_address": "acharleston@email.com", "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "recurring_transfer_id": null, "credit_funds_source": "sweep", "facilitator_fee": "1.23", "network_trace_id": null }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/list  #### List transfers  Use the [/transfer/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transferlist) endpoint to see a list of all your transfers and their statuses. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired transfers. #### Request fields  **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. **start\_date** (string) The start created datetime of transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **end\_date** (string) The end created datetime of transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **count** (integer) The maximum number of transfers to return. Minimum: 1 Maximum: 25 Default: 25 **offset** (integer) The number of transfers to skip before returning results. Default: 0 Minimum: 0 **originator\_client\_id** (string) Filter transfers to only those with the specified originator client. **funding\_account\_id** (string) Filter transfers to only those with the specified funding\_account\_id. /transfer/list Node▼ ```javascript const request: TransferListRequest = { start_date: '2019-12-06T22:35:49Z', end_date: '2019-12-12T22:35:49Z', count: 14, offset: 2, origination_account_id: '8945fedc-e703-463d-86b1-dc0607b55460', }; try { const response = await plaidClient.transferList(request); const transfers = response.data.transfers; for (const transfer of transfers) { // iterate through transfers } } catch (error) { // handle error } ``` #### Response fields  string **transfers** (\[object\]) Plaid’s unique identifier for a transfer. **transfers->authorization\_id** (string) Plaid’s unique identifier for a transfer authorization. **transfers->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **transfers->account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **transfers->funding\_account\_id** (nullable, string) The id of the associated funding account, available in the Plaid Dashboard. If present, this indicates which of your business checking accounts will be credited or debited. **transfers->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfers->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **transfers->user** (object) The legal name and other information for the account holder. **transfers->user->legal\_name** (string) The user's legal name. **transfers->user->phone\_number** (nullable, string) The user's phone number. **transfers->user->email\_address** (nullable, string) The user's email address. **transfers->user->address** (nullable, object) The address associated with the account holder. **transfers->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **transfers->user->address->city** (nullable, string) Ex. "San Francisco" **transfers->user->address->region** (nullable, string) The state or province (e.g., "CA"). **transfers->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **transfers->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **transfers->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **transfers->description** (string) The description of the transfer. **transfers->created** (string) The datetime when this transfer was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **transfers->status** (string) The status of the transfer. pending: A new transfer was created; it is in the pending state. posted: The transfer has been successfully submitted to the payment network. settled: The transfer was successfully completed by the payment network. Note that funds from received debits are not available to be moved out of the Ledger until the transfer reaches funds\_available status. For credit transactions, settled means the funds have been delivered to the receiving bank account. This is the terminal state of a successful credit transfer. funds\_available: Funds from the transfer have been released from hold and applied to the ledger's available balance. (Only applicable to ACH debits.) This is the terminal state of a successful debit transfer. cancelled: The transfer was cancelled by the client. This is the terminal state of a cancelled transfer. failed: The transfer failed, no funds were moved. This is the terminal state of a failed transfer. returned: A posted transfer was returned. This is the terminal state of a returned transfer. Possible values: pending, posted, settled, funds\_available, cancelled, failed, returned **transfers->sweep\_status** (nullable, string) The status of the sweep for the transfer. unswept: The transfer hasn't been swept yet. swept: The transfer was swept to the sweep account. swept\_settled: Credits are available to be withdrawn or debits have been deducted from the customer’s business checking account. return\_swept: The transfer was returned, funds were pulled back or pushed back to the sweep account. null: The transfer will never be swept (e.g. if the transfer is cancelled or returned before being swept) Possible values: null, unswept, swept, swept\_settled, return\_swept **transfers->network** (string) The network or rails used for the transfer. For transfers submitted as ach or same-day-ach, the Standard ACH cutoff is 8:30 PM Eastern Time. For transfers submitted as same-day-ach, the Same Day ACH cutoff is 3:30 PM Eastern Time. It is recommended to send the request 15 minutes prior to the cutoff to ensure that it will be processed in time for submission before the cutoff. If the transfer is processed after this cutoff but before the Standard ACH cutoff, it will be sent over Standard ACH rails and will not incur same-day charges; this will apply to both legs of the transfer if applicable. The transaction limit for a Same Day ACH transfer is $1,000,000. Authorization requests sent with an amount greater than $1,000,000 will fail. For transfers submitted as rtp, Plaid will automatically route between Real Time Payment rail by TCH or FedNow rails as necessary. If a transfer is submitted as rtp and the counterparty account is not eligible for RTP, the /transfer/authorization/create request will fail with an INVALID\_FIELD error code. To pre-check to determine whether a counterparty account can support RTP, call /transfer/capabilities/get before calling /transfer/authorization/create. Wire transfers are currently in early availability. To request access to wire as a payment network, contact your Account Manager. For transfers submitted as wire, the type must be credit; wire debits are not supported. The cutoff to submit a wire payment is 6:30 PM Eastern Time on a business day; wires submitted after that time will be processed on the next business day. The transaction limit for a wire is $999,999.99. Authorization requests sent with an amount greater than $999,999.99 will fail. Possible values: ach, same-day-ach, rtp, wire **transfers->wire\_details** (nullable, object) Information specific to wire transfers. **transfers->wire\_details->message\_to\_beneficiary** (nullable, string) Additional information from the wire originator to the beneficiary. Max 140 characters. **transfers->wire\_details->wire\_return\_fee** (nullable, string) The fee amount deducted from the original transfer during a wire return, if applicable. **transfers->cancellable** (boolean) When true, you can still cancel this transfer. **transfers->failure\_reason** (nullable, object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **transfers->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfers->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **transfers->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfers->metadata** (nullable, object) The Metadata object is a mapping of client-provided string fields to any string value. The following limitations apply: The JSON values must be Strings (no nested JSON objects allowed) Only ASCII characters may be used Maximum of 50 key/value pairs Maximum key length of 40 characters Maximum value length of 500 characters **transfers->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **transfers->standard\_return\_window** (nullable, string) The date 3 business days from settlement date indicating the following ACH returns can no longer happen: R01, R02, R03, R29. This will be of the form YYYY-MM-DD. Format: date **transfers->unauthorized\_return\_window** (nullable, string) The date 61 business days from settlement date indicating the following ACH returns can no longer happen: R05, R07, R10, R11, R51, R33, R37, R38, R51, R52, R53. This will be of the form YYYY-MM-DD. Format: date **transfers->expected\_settlement\_date** (deprecated, nullable, string) Deprecated for Plaid Ledger clients, use expected\_funds\_available\_date instead. Format: date **transfers->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a transfer will be made available and can be withdrawn from the associated ledger balance, assuming the debit does not return before this date. If the transfer does return before this date, this field will be null. Only applies to debit transfers. This will be of the form YYYY-MM-DD. Format: date **transfers->originator\_client\_id** (nullable, string) The Plaid client ID that is the originator of this transfer. Only present if created on behalf of another client as a Platform customer. **transfers->refunds** (\[object\]) A list of refunds associated with this transfer. **transfers->refunds->id** (string) Plaid’s unique identifier for a refund. **transfers->refunds->transfer\_id** (string) The ID of the transfer to refund. **transfers->refunds->amount** (string) The amount of the refund (decimal string with two digits of precision e.g. "10.00"). **transfers->refunds->status** (string) The status of the refund. pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned. Possible values: pending, posted, cancelled, failed, settled, returned **transfers->refunds->failure\_reason** (nullable, object) The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise. **transfers->refunds->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfers->refunds->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure\_code, which encompasses non-ACH failure codes as well. **transfers->refunds->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfers->refunds->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfers->refunds->created** (string) The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **transfers->refunds->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **transfers->recurring\_transfer\_id** (nullable, string) The id of the recurring transfer if this transfer belongs to a recurring transfer. **transfers->expected\_sweep\_settlement\_schedule** (\[object\]) The expected sweep settlement schedule of this transfer, assuming this transfer is not returned. Only applies to ACH debit transfers. **transfers->expected\_sweep\_settlement\_schedule->sweep\_settlement\_date** (string) The settlement date of a sweep for this transfer. Format: date **transfers->expected\_sweep\_settlement\_schedule->swept\_settled\_amount** (string) The accumulated amount that has been swept by sweep\_settlement\_date. **transfers->credit\_funds\_source** (deprecated, nullable, string) This field is now deprecated. You may ignore it for transfers created on and after 12/01/2023. Specifies the source of funds for the transfer. Only valid for credit transfers, and defaults to sweep if not specified. This field is not specified for debit transfers. sweep - Sweep funds from your funding account prefunded\_rtp\_credits - Use your prefunded RTP credit balance with Plaid prefunded\_ach\_credits - Use your prefunded ACH credit balance with Plaid Possible values: sweep, prefunded\_rtp\_credits, prefunded\_ach\_credits, null **transfers->facilitator\_fee** (string) The amount to deduct from transfer.amount and distribute to the platform’s Ledger balance as a facilitator fee (decimal string with two digits of precision e.g. "10.00"). The remainder will go to the end-customer’s Ledger balance. This must be value greater than 0 and less than or equal to the transfer.amount. **transfers->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfers": [ { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "ach_class": "ppd", "amount": "12.34", "cancellable": true, "created": "2019-12-09T17:27:15Z", "description": "Desc", "guarantee_decision": null, "guarantee_decision_rationale": null, "failure_reason": { "failure_code": "R13", "description": "Invalid ACH routing number" }, "id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "authorization_id": "c9f90aa1-2949-c799-e2b6-ea05c89bb586", "metadata": { "key1": "value1", "key2": "value2" }, "network": "ach", "origination_account_id": "", "originator_client_id": null, "refunds": [], "status": "pending", "type": "credit", "iso_currency_code": "USD", "standard_return_window": "2020-08-07", "unauthorized_return_window": "2020-10-07", "expected_settlement_date": "2020-08-04", "user": { "email_address": "acharleston@email.com", "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "recurring_transfer_id": null, "credit_funds_source": "sweep", "facilitator_fee": "1.23", "network_trace_id": null } ], "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/event/list  #### List transfer events  Use the [/transfer/event/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventlist) endpoint to get a list of transfer events based on specified filter criteria. #### Request fields  **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. **start\_date** (string) The start created datetime of transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **end\_date** (string) The end created datetime of transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **transfer\_id** (string) Plaid’s unique identifier for a transfer. **account\_id** (string) The account ID to get events for all transactions to/from an account. **transfer\_type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into your origination account; a credit indicates a transfer of money out of your origination account. Possible values: debit, credit, null **event\_types** (\[string\]) Filter events by event type. Possible values: pending, cancelled, failed, posted, settled, funds\_available, returned, swept, swept\_settled, return\_swept, sweep.pending, sweep.posted, sweep.settled, sweep.returned, sweep.failed, sweep.funds\_available, refund.pending, refund.cancelled, refund.failed, refund.posted, refund.settled, refund.returned, refund.swept, refund.return\_swept **sweep\_id** (string) Plaid’s unique identifier for a sweep. **count** (integer) The maximum number of transfer events to return. If the number of events matching the above parameters is greater than count, the most recent events will be returned. Default: 25 Maximum: 25 Minimum: 1 **offset** (integer) The offset into the list of transfer events. When count=25 and offset=0, the first 25 events will be returned. When count=25 and offset=25, the next 25 events will be returned. Default: 0 Minimum: 0 **originator\_client\_id** (string) Filter transfer events to only those with the specified originator client. **funding\_account\_id** (string) Filter transfer events to only those with the specified funding\_account\_id. /transfer/event/list Node▼ ```javascript const request: TransferEventListRequest = { start_date: '2019-12-06T22:35:49Z', end_date: '2019-12-12T22:35:49Z', transfer_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', transfer_type: 'credit', event_types: ['pending', 'posted'], count: 14, offset: 2, origination_account_id: '8945fedc-e703-463d-86b1-dc0607b55460', }; try { const response = await plaidClient.transferEventList(request); const events = response.data.transfer_events; for (const event of events) { // iterate through events } } catch (error) { // handle error } ``` #### Response fields  integer **transfer\_events** (\[object\]) Plaid’s unique identifier for this event. IDs are sequential unsigned 64-bit integers. Minimum: 0 **transfer\_events->timestamp** (string) The datetime when this event occurred. This will be of the form 2006-01-02T15:04:05Z. Format: date-time **transfer\_events->event\_type** (string) The type of event that this transfer represents. Event types with prefix sweep represents events for Plaid Ledger sweeps. pending: A new transfer was created; it is in the pending state. cancelled: The transfer was cancelled by the client. failed: The transfer failed, no funds were moved. posted: The transfer has been successfully submitted to the payment network. settled: The transfer has been successfully completed by the payment network. funds\_available: Funds from the transfer have been released from hold and applied to the ledger's available balance. (Only applicable to ACH debits.) returned: A posted transfer was returned. swept: The transfer was swept to / from the sweep account. swept\_settled: Credits are available to be withdrawn or debits have been deducted from the customer’s business checking account. return\_swept: Due to the transfer being returned, funds were pulled from or pushed back to the sweep account. sweep.pending: A new ledger sweep was created; it is in the pending state. sweep.posted: The ledger sweep has been successfully submitted to the payment network. sweep.settled: The transaction has settled in the funding account. This means that funds withdrawn from Plaid Ledger balance have reached the funding account, or funds to be deposited into the Plaid Ledger Balance have been pulled, and the hold period has begun. sweep.returned: A posted ledger sweep was returned. sweep.failed: The ledger sweep failed, no funds were moved. sweep.funds\_available: Funds from the ledger sweep have been released from hold and applied to the ledger's available balance. This is only applicable to debits. refund.pending: A new refund was created; it is in the pending state. refund.cancelled: The refund was cancelled. refund.failed: The refund failed, no funds were moved. refund.posted: The refund has been successfully submitted to the payment network. refund.settled: The refund transaction has settled in the Plaid linked account. refund.returned: A posted refund was returned. refund.swept: The refund was swept from the sweep account. refund.return\_swept: Due to the refund being returned, funds were pushed back to the sweep account. Possible values: pending, cancelled, failed, posted, settled, funds\_available, returned, swept, swept\_settled, return\_swept, sweep.pending, sweep.posted, sweep.settled, sweep.returned, sweep.failed, sweep.funds\_available, refund.pending, refund.cancelled, refund.failed, refund.posted, refund.settled, refund.returned, refund.swept, refund.return\_swept **transfer\_events->account\_id** (string) The account ID associated with the transfer. This field is omitted for Plaid Ledger Sweep events. **transfer\_events->funding\_account\_id** (nullable, string) The id of the associated funding account, available in the Plaid Dashboard. If present, this indicates which of your business checking accounts will be credited or debited. **transfer\_events->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfer\_events->transfer\_id** (string) Plaid's unique identifier for a transfer. This field is an empty string for Plaid Ledger Sweep events. **transfer\_events->transfer\_type** (string) The type of transfer. Valid values are debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. This field is omitted for Plaid Ledger Sweep events. Possible values: debit, credit **transfer\_events->transfer\_amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). This field is omitted for Plaid Ledger Sweep events. **transfer\_events->failure\_reason** (nullable, object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **transfer\_events->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfer\_events->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **transfer\_events->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfer\_events->sweep\_id** (nullable, string) Plaid’s unique identifier for a sweep. **transfer\_events->sweep\_amount** (nullable, string) A signed amount of how much was swept or return\_swept for this transfer (decimal string with two digits of precision e.g. "-5.50"). **transfer\_events->refund\_id** (nullable, string) Plaid’s unique identifier for a refund. A non-null value indicates the event is for the associated refund of the transfer. **transfer\_events->originator\_client\_id** (nullable, string) The Plaid client ID that is the originator of the transfer that this event applies to. Only present if the transfer was created on behalf of another client as a third-party sender (TPS). **transfer\_events->intent\_id** (nullable, string) The id returned by the /transfer/intent/create endpoint, for transfers created via Transfer UI. For transfers not created by Transfer UI, the value is null. This will currently only be populated for RfP transfers. **transfer\_events->wire\_return\_fee** (nullable, string) The fee amount deducted from the original transfer during a wire return, if applicable. **has\_more** (boolean) Whether there are more events to be pulled from the endpoint that have not already been returned **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfer_events": [ { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "transfer_amount": "12.34", "transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "transfer_type": "credit", "event_id": 1, "event_type": "posted", "failure_reason": null, "origination_account_id": "", "originator_client_id": "569ed2f36b3a3a021713abc1", "refund_id": null, "sweep_amount": null, "sweep_id": null, "timestamp": "2019-12-09T17:27:15Z" } ], "has_more": true, "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /transfer/event/sync  #### Sync transfer events  [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) allows you to request up to the next 500 transfer events that happened after a specific `event_id`. Use the [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) endpoint to guarantee you have seen all transfer events. #### Request fields  **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. **after\_id** (required, integer) The latest (largest) event\_id fetched via the sync endpoint, or 0 initially. Minimum: 0 **count** (integer) The maximum number of transfer events to return. Default: 100 Minimum: 1 Maximum: 500 /transfer/event/sync Node▼ ```javascript const request: TransferEventListRequest = { after_id: 4, count: 22, }; try { const response = await plaidClient.transferEventSync(request); const events = response.data.transfer_events; for (const event of events) { // iterate through events } } catch (error) { // handle error } ``` #### Response fields  integer **transfer\_events** (\[object\]) Plaid’s unique identifier for this event. IDs are sequential unsigned 64-bit integers. Minimum: 0 **transfer\_events->timestamp** (string) The datetime when this event occurred. This will be of the form 2006-01-02T15:04:05Z. Format: date-time **transfer\_events->event\_type** (string) The type of event that this transfer represents. Event types with prefix sweep represents events for Plaid Ledger sweeps. pending: A new transfer was created; it is in the pending state. cancelled: The transfer was cancelled by the client. failed: The transfer failed, no funds were moved. posted: The transfer has been successfully submitted to the payment network. settled: The transfer has been successfully completed by the payment network. funds\_available: Funds from the transfer have been released from hold and applied to the ledger's available balance. (Only applicable to ACH debits.) returned: A posted transfer was returned. swept: The transfer was swept to / from the sweep account. swept\_settled: Credits are available to be withdrawn or debits have been deducted from the customer’s business checking account. return\_swept: Due to the transfer being returned, funds were pulled from or pushed back to the sweep account. sweep.pending: A new ledger sweep was created; it is in the pending state. sweep.posted: The ledger sweep has been successfully submitted to the payment network. sweep.settled: The transaction has settled in the funding account. This means that funds withdrawn from Plaid Ledger balance have reached the funding account, or funds to be deposited into the Plaid Ledger Balance have been pulled, and the hold period has begun. sweep.returned: A posted ledger sweep was returned. sweep.failed: The ledger sweep failed, no funds were moved. sweep.funds\_available: Funds from the ledger sweep have been released from hold and applied to the ledger's available balance. This is only applicable to debits. refund.pending: A new refund was created; it is in the pending state. refund.cancelled: The refund was cancelled. refund.failed: The refund failed, no funds were moved. refund.posted: The refund has been successfully submitted to the payment network. refund.settled: The refund transaction has settled in the Plaid linked account. refund.returned: A posted refund was returned. refund.swept: The refund was swept from the sweep account. refund.return\_swept: Due to the refund being returned, funds were pushed back to the sweep account. Possible values: pending, cancelled, failed, posted, settled, funds\_available, returned, swept, swept\_settled, return\_swept, sweep.pending, sweep.posted, sweep.settled, sweep.returned, sweep.failed, sweep.funds\_available, refund.pending, refund.cancelled, refund.failed, refund.posted, refund.settled, refund.returned, refund.swept, refund.return\_swept **transfer\_events->account\_id** (string) The account ID associated with the transfer. This field is omitted for Plaid Ledger Sweep events. **transfer\_events->funding\_account\_id** (nullable, string) The id of the associated funding account, available in the Plaid Dashboard. If present, this indicates which of your business checking accounts will be credited or debited. **transfer\_events->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **transfer\_events->transfer\_id** (string) Plaid's unique identifier for a transfer. This field is an empty string for Plaid Ledger Sweep events. **transfer\_events->transfer\_type** (string) The type of transfer. Valid values are debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. This field is omitted for Plaid Ledger Sweep events. Possible values: debit, credit **transfer\_events->transfer\_amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). This field is omitted for Plaid Ledger Sweep events. **transfer\_events->failure\_reason** (nullable, object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **transfer\_events->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **transfer\_events->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **transfer\_events->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **transfer\_events->sweep\_id** (nullable, string) Plaid’s unique identifier for a sweep. **transfer\_events->sweep\_amount** (nullable, string) A signed amount of how much was swept or return\_swept for this transfer (decimal string with two digits of precision e.g. "-5.50"). **transfer\_events->refund\_id** (nullable, string) Plaid’s unique identifier for a refund. A non-null value indicates the event is for the associated refund of the transfer. **transfer\_events->originator\_client\_id** (nullable, string) The Plaid client ID that is the originator of the transfer that this event applies to. Only present if the transfer was created on behalf of another client as a third-party sender (TPS). **transfer\_events->intent\_id** (nullable, string) The id returned by the /transfer/intent/create endpoint, for transfers created via Transfer UI. For transfers not created by Transfer UI, the value is null. This will currently only be populated for RfP transfers. **transfer\_events->wire\_return\_fee** (nullable, string) The fee amount deducted from the original transfer during a wire return, if applicable. **has\_more** (boolean) Whether there are more events to be pulled from the endpoint that have not already been returned **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transfer_events": [ { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "transfer_amount": "12.34", "transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "transfer_type": "credit", "event_id": 1, "event_type": "pending", "failure_reason": null, "origination_account_id": "", "originator_client_id": null, "refund_id": null, "sweep_amount": null, "sweep_id": null, "timestamp": "2019-12-09T17:27:15Z" } ], "has_more": true, "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /transfer/sweep/get  #### Retrieve a sweep  The [/transfer/sweep/get](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfersweepget) endpoint fetches a sweep corresponding to the given `sweep_id`. #### Request fields  **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. **sweep\_id** (required, string) Plaid's unique identifier for the sweep (UUID) or a shortened form consisting of the first 8 characters of the identifier (8-digit hexadecimal string). /transfer/sweep/get Node▼ ```javascript const request: TransferSweepGetRequest = { sweep_id: '8c2fda9a-aa2f-4735-a00f-f4e0d2d2faee', }; try { const response = await plaidClient.transferSweepGet(request); const sweep = response.data.sweep; } catch (error) { // handle error } ``` #### Response fields  **sweep** (object) Describes a sweep of funds to / from the sweep account. A sweep is associated with many sweep events (events of type swept or return\_swept) which can be retrieved by invoking the /transfer/event/list endpoint with the corresponding sweep\_id. swept events occur when the transfer amount is credited or debited from your sweep account, depending on the type of the transfer. return\_swept events occur when a transfer is returned and Plaid undoes the credit or debit. The total sum of the swept and return\_swept events is equal to the amount of the sweep Plaid creates and matches the amount of the entry on your sweep account ledger. **sweep->id** (string) Identifier of the sweep. **sweep->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **sweep->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **sweep->created** (string) The datetime when the sweep occurred, in RFC 3339 format. Format: date-time **sweep->amount** (string) Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00") If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced. **sweep->iso\_currency\_code** (string) The currency of the sweep, e.g. "USD". **sweep->settled** (nullable, string) The date when the sweep settled, in the YYYY-MM-DD format. Format: date **sweep->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD. Format: date **sweep->status** (nullable, string) The status of a sweep transfer "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds\_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep. Possible values: pending, posted, settled, funds\_available, returned, failed, null **sweep->trigger** (nullable, string) The trigger of the sweep "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance\_threshold" - The sweep is created by balance threshold setting "automatic\_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance. Possible values: manual, incoming, balance\_threshold, automatic\_aggregate **sweep->description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. **sweep->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **sweep->failure\_reason** (nullable, object) The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise. **sweep->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **sweep->failure\_reason->description** (nullable, string) A human-readable description of the reason for the failure or reversal. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "sweep": { "id": "8c2fda9a-aa2f-4735-a00f-f4e0d2d2faee", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "created": "2020-08-06T17:27:15Z", "amount": "12.34", "iso_currency_code": "USD", "settled": "2020-08-07", "status": "settled", "network_trace_id": "123456789012345" }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/sweep/list  #### List sweeps  The [/transfer/sweep/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfersweeplist) endpoint fetches sweeps matching the given filters. #### Request fields  **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. **start\_date** (string) The start created datetime of sweeps to return (RFC 3339 format). Format: date-time **end\_date** (string) The end created datetime of sweeps to return (RFC 3339 format). Format: date-time **count** (integer) The maximum number of sweeps to return. Minimum: 1 Maximum: 25 Default: 25 **offset** (integer) The number of sweeps to skip before returning results. Default: 0 Minimum: 0 **amount** (string) Filter sweeps to only those with the specified amount. **status** (string) The status of a sweep transfer "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds\_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep. Possible values: pending, posted, settled, funds\_available, returned, failed, null **originator\_client\_id** (string) Filter sweeps to only those with the specified originator client. **funding\_account\_id** (string) Filter sweeps to only those with the specified funding\_account\_id. **transfer\_id** (string) Filter sweeps to only those with the included transfer\_id. **trigger** (string) The trigger of the sweep "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance\_threshold" - The sweep is created by balance threshold setting "automatic\_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance. Possible values: manual, incoming, balance\_threshold, automatic\_aggregate /transfer/sweep/list Node▼ ```javascript const request: TransferSweepListRequest = { start_date: '2019-12-06T22:35:49Z', end_date: '2019-12-12T22:35:49Z', count: 14, offset: 2, }; try { const response = await plaidClient.transferSweepList(request); const sweeps = response.data.sweeps; for (const sweep of sweeps) { // iterate through sweeps } } catch (error) { // handle error } ``` #### Response fields  string **sweeps** (\[object\]) Identifier of the sweep. **sweeps->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **sweeps->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **sweeps->created** (string) The datetime when the sweep occurred, in RFC 3339 format. Format: date-time **sweeps->amount** (string) Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00") If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced. **sweeps->iso\_currency\_code** (string) The currency of the sweep, e.g. "USD". **sweeps->settled** (nullable, string) The date when the sweep settled, in the YYYY-MM-DD format. Format: date **sweeps->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD. Format: date **sweeps->status** (nullable, string) The status of a sweep transfer "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds\_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep. Possible values: pending, posted, settled, funds\_available, returned, failed, null **sweeps->trigger** (nullable, string) The trigger of the sweep "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance\_threshold" - The sweep is created by balance threshold setting "automatic\_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance. Possible values: manual, incoming, balance\_threshold, automatic\_aggregate **sweeps->description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. **sweeps->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **sweeps->failure\_reason** (nullable, object) The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise. **sweeps->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **sweeps->failure\_reason->description** (nullable, string) A human-readable description of the reason for the failure or reversal. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "sweeps": [ { "id": "d5394a4d-0b04-4a02-9f4a-7ca5c0f52f9d", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "ledger_id": "563db5f8-4c95-4e17-8c3e-cb988fb9cf1a", "created": "2019-12-09T17:27:15Z", "amount": "-12.34", "iso_currency_code": "USD", "settled": "2019-12-10", "status": "settled", "originator_client_id": null } ], "request_id": "saKrIBuEB9qJZno" } ``` ### Webhooks  \=\*=\*=\*= #### TRANSFER\_EVENTS\_UPDATE  Fired when new transfer events are available. Receiving this webhook indicates you should fetch the new events from [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) . If multiple transfer events occur within a single minute, only one webhook will be fired, so a single webhook instance may correspond to multiple transfer events. #### Properties  **webhook\_type** (string) TRANSFER **webhook\_code** (string) TRANSFER\_EVENTS\_UPDATE **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSFER", "webhook_code": "TRANSFER_EVENTS_UPDATE", "environment": "production" } ``` --- # API - Recurring Transfers | Plaid Docs Recurring transfers  ==================== #### API reference for recurring transfer endpoints and webhooks  \=\*=\*=\*= #### Recurring transfers  For how-to guidance, see the [recurring transfers documentation](https://plaid.com/docs/transfer/recurring-transfers/index.html.md) . | Recurring Transfer endpoints | | | --- | --- | | [/transfer/recurring/create](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringcreate) | Create a recurring transfer | | [/transfer/recurring/cancel](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringcancel) | Cancel a recurring transfer | | [/transfer/recurring/get](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringget) | Retrieve information about a recurring transfer | | [/transfer/recurring/list](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringlist) | Retrieve a list of recurring transfers | | Webhooks | | | --- | --- | | [RECURRING\_CANCELLED](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#recurring_new_transfer) | A recurring transfer has been cancelled by Plaid | | [RECURRING\_NEW\_TRANSFER](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#recurring_new_transfer) | A new transfer of a recurring transfer has been originated | | [RECURRING\_TRANSFER\_SKIPPED](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#recurring_transfer_skipped) | An instance of a scheduled recurring transfer could not be created | ### Endpoints  \=\*=\*=\*= #### /transfer/recurring/create  #### Create a recurring transfer  Use the [/transfer/recurring/create](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringcreate) endpoint to initiate a new recurring transfer. This capability is not currently supported for Transfer UI or Transfer for Platforms (beta) customers. #### Request fields  **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** (required, string) The Plaid access\_token for the account that will be debited or credited. **idempotency\_key** (required, string) A random key provided by the client, per unique recurring transfer. Maximum of 50 characters. The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. For example, if a request to create a recurring fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single recurring transfer is created. Max length: 50 **account\_id** (required, string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **type** (required, string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **network** (required, string) Networks eligible for recurring transfers. Possible values: ach, same-day-ach, rtp **ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **amount** (required, string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **user\_present** (boolean) If the end user is initiating the specific transfer themselves via an interactive UI, this should be true; for automatic recurring payments where the end user is not actually initiating each individual transfer, it should be false. **description** (required, string) The description of the recurring transfer. **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. This field may only be used when using the sandbox environment. If provided, the created recurring\_transfer is associated with the test\_clock. New originations are automatically generated when the associated test\_clock advances. For more details, see Simulating recurring transfers. **schedule** (required, object) The schedule that the recurring transfer will be executed on. **schedule->interval\_unit** (required, string) The unit of the recurring interval. Possible values: week, monthMin length: 1 **schedule->interval\_count** (required, integer) The number of recurring interval\_units between originations. The recurring interval (before holiday adjustment) is calculated by multiplying interval\_unit and interval\_count. For example, to schedule a recurring transfer which originates once every two weeks, set interval\_unit = week and interval\_count = 2. **schedule->interval\_execution\_day** (required, integer) The day of the interval on which to schedule the transfer. If the interval\_unit is week, interval\_execution\_day should be an integer from 1 (Monday) to 5 (Friday). If the interval\_unit is month, interval\_execution\_day should be an integer indicating which day of the month to make the transfer on. Integers from 1 to 28 can be used to make a transfer on that day of the month. Negative integers from -1 to -5 can be used to make a transfer relative to the end of the month. To make a transfer on the last day of the month, use -1; to make the transfer on the second-to-last day, use -2, and so on. The transfer will be originated on the next available banking day if the designated day is a non banking day. **schedule->start\_date** (required, string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will begin on the first interval\_execution\_day on or after the start\_date. For rtp recurring transfers, start\_date must be in the future. Otherwise, if the first interval\_execution\_day on or after the start date is also the same day that /transfer/recurring/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **schedule->end\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will end on the last interval\_execution\_day on or before the end\_date. If the interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /transfer/recurring/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **user** (required, object) The legal name and other information for the account holder. **user->legal\_name** (required, string) The user's legal name. **user->phone\_number** (string) The user's phone number. Phone number input may be validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **user->email\_address** (string) The user's email address. **user->address** (object) The address associated with the account holder. **user->address->street** (string) The street number and name (i.e., "100 Market St."). **user->address->city** (string) Ex. "San Francisco" **user->address->region** (string) The state or province (e.g., "CA"). **user->address->postal\_code** (string) The postal code (e.g., "94103"). **user->address->country** (string) A two-letter country code (e.g., "US"). **device** (object) Information about the device being used to initiate the authorization. **device->ip\_address** (required, string) The IP address of the device being used to initiate the authorization. **device->user\_agent** (required, string) The user agent of the device being used to initiate the authorization. /transfer/recurring/create Node▼ ```javascript const request: TransferRecurringCreateRequest = { access_token: 'access-sandbox-71e02f71-0960-4a27-abd2-5631e04f2175', account_id: '3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr', type: 'credit', network: 'ach', amount: '12.34', ach_class: 'ppd', description: 'payment', idempotency_key: '12345', schedule: { start_date: '2022-10-01', end_date: '20223-10-01', interval_unit: 'week', interval_count: 1, interval_execution_day: 5 } user: { legal_name: 'Anne Charleston', }, }; try { const response = await client.transferRecurringCreate(request); const recurringTransferId = response.data.recurring_transfer.recurring_transfer_id; } catch (error) { // handle error } ``` #### Response fields  **recurring\_transfer** (nullable, object) Represents a recurring transfer within the Transfers API. **recurring\_transfer->recurring\_transfer\_id** (string) Plaid’s unique identifier for a recurring transfer. **recurring\_transfer->created** (string) The datetime when this transfer was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **recurring\_transfer->next\_origination\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). The next transfer origination date after bank holiday adjustment. Format: date **recurring\_transfer->test\_clock\_id** (nullable, string) Plaid’s unique identifier for a test clock. **recurring\_transfer->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **recurring\_transfer->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **recurring\_transfer->status** (string) The status of the recurring transfer. active: The recurring transfer is currently active. cancelled: The recurring transfer was cancelled by the client or Plaid. expired: The recurring transfer has completed all originations according to its recurring schedule. Possible values: active, cancelled, expired **recurring\_transfer->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **recurring\_transfer->network** (string) Networks eligible for recurring transfers. Possible values: ach, same-day-ach, rtp **recurring\_transfer->account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **recurring\_transfer->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **recurring\_transfer->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **recurring\_transfer->description** (string) The description of the recurring transfer. **recurring\_transfer->transfer\_ids** (\[string\]) The created transfer instances associated with this recurring\_transfer\_id. If the recurring transfer has been newly created, this array will be empty. **recurring\_transfer->user** (object) The legal name and other information for the account holder. **recurring\_transfer->user->legal\_name** (string) The user's legal name. **recurring\_transfer->user->phone\_number** (nullable, string) The user's phone number. **recurring\_transfer->user->email\_address** (nullable, string) The user's email address. **recurring\_transfer->user->address** (nullable, object) The address associated with the account holder. **recurring\_transfer->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **recurring\_transfer->user->address->city** (nullable, string) Ex. "San Francisco" **recurring\_transfer->user->address->region** (nullable, string) The state or province (e.g., "CA"). **recurring\_transfer->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **recurring\_transfer->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **recurring\_transfer->schedule** (object) The schedule that the recurring transfer will be executed on. **recurring\_transfer->schedule->interval\_unit** (string) The unit of the recurring interval. Possible values: week, monthMin length: 1 **recurring\_transfer->schedule->interval\_count** (integer) The number of recurring interval\_units between originations. The recurring interval (before holiday adjustment) is calculated by multiplying interval\_unit and interval\_count. For example, to schedule a recurring transfer which originates once every two weeks, set interval\_unit = week and interval\_count = 2. **recurring\_transfer->schedule->interval\_execution\_day** (integer) The day of the interval on which to schedule the transfer. If the interval\_unit is week, interval\_execution\_day should be an integer from 1 (Monday) to 5 (Friday). If the interval\_unit is month, interval\_execution\_day should be an integer indicating which day of the month to make the transfer on. Integers from 1 to 28 can be used to make a transfer on that day of the month. Negative integers from -1 to -5 can be used to make a transfer relative to the end of the month. To make a transfer on the last day of the month, use -1; to make the transfer on the second-to-last day, use -2, and so on. The transfer will be originated on the next available banking day if the designated day is a non banking day. **recurring\_transfer->schedule->start\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will begin on the first interval\_execution\_day on or after the start\_date. For rtp recurring transfers, start\_date must be in the future. Otherwise, if the first interval\_execution\_day on or after the start date is also the same day that /transfer/recurring/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **recurring\_transfer->schedule->end\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will end on the last interval\_execution\_day on or before the end\_date. If the interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /transfer/recurring/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **decision** (string) A decision regarding the proposed transfer. approved – The proposed transfer has received the end user's consent and has been approved for processing by Plaid. The decision\_rationale field is set if Plaid was unable to fetch the account information. You may proceed with the transfer, but further review is recommended. Refer to the code field in the decision\_rationale object for details. declined – Plaid reviewed the proposed transfer and declined processing. Refer to the code field in the decision\_rationale object for details. user\_action\_required – An action is required before Plaid can assess the transfer risk and make a decision. The most common scenario is to update authentication for an Item. To complete the required action, initialize Link by setting transfer.authorization\_id in the request of /link/token/create. After Link flow is completed, you may re-attempt the authorization request. Possible values: approved, declined, user\_action\_required **decision\_rationale** (nullable, object) The rationale for Plaid's decision regarding a proposed transfer. It is always set for declined decisions, and may or may not be null for approved decisions. **decision\_rationale->code** (string) A code representing the rationale for approving or declining the proposed transfer. If the rationale\_code is null, the transfer passed the authorization check. Any non-null value for an approved transfer indicates that the the authorization check could not be run and that you should perform your own risk assessment on the transfer. The code will indicate why the check could not be run. Possible values for an approved transfer are: MANUALLY\_VERIFIED\_ITEM – Item created via a manual entry flow (i.e. Same Day Micro-deposit, Instant Micro-deposit, or database-based verification), limited information available. ITEM\_LOGIN\_REQUIRED – Unable to collect the account information due to Item staleness. Can be resolved by using Link and setting transfer.authorization\_id in the request to /link/token/create. MIGRATED\_ACCOUNT\_ITEM - Item created via /transfer/migrate\_account endpoint, limited information available. ERROR – Unable to collect the account information due to an unspecified error. The following codes indicate that the authorization decision was declined: NSF – Transaction likely to result in a return due to insufficient funds. RISK - Transaction is high-risk. TRANSFER\_LIMIT\_REACHED - One or several transfer limits are reached, e.g. monthly transfer limit. Check the accompanying description field to understand which limit has been reached. Possible values: NSF, RISK, TRANSFER\_LIMIT\_REACHED, MANUALLY\_VERIFIED\_ITEM, ITEM\_LOGIN\_REQUIRED, PAYMENT\_PROFILE\_LOGIN\_REQUIRED, ERROR, MIGRATED\_ACCOUNT\_ITEM, null **decision\_rationale->description** (string) A human-readable description of the code associated with a transfer approval or transfer decline. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "recurring_transfer": { "recurring_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "created": "2022-07-05T12:48:37Z", "next_origination_date": "2022-10-28", "test_clock_id": "b33a6eda-5e97-5d64-244a-a9274110151c", "status": "active", "amount": "12.34", "description": "payment", "type": "debit", "ach_class": "ppd", "network": "ach", "origination_account_id": "", "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "iso_currency_code": "USD", "transfer_ids": [], "user": { "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "email_address": "acharleston@email.com", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "schedule": { "start_date": "2022-10-01", "end_date": "2023-10-01", "interval_unit": "week", "interval_count": 1, "interval_execution_day": 5 } }, "decision": "approved", "decision_rationale": null, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/recurring/cancel  #### Cancel a recurring transfer.  Use the [/transfer/recurring/cancel](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringcancel) endpoint to cancel a recurring transfer. Scheduled transfer that hasn't been submitted to bank will be cancelled. #### Request fields  **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. **recurring\_transfer\_id** (required, string) Plaid’s unique identifier for a recurring transfer. /transfer/recurring/cancel Node▼ ```javascript const request: TransferRecurringCancelRequest = { recurring_transfer_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', }; try { const response = await client.transferRecurringCancel(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/recurring/get  #### Retrieve a recurring transfer  The [/transfer/recurring/get](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringget) fetches information about the recurring transfer corresponding to the given `recurring_transfer_id`. #### Request fields  **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. **recurring\_transfer\_id** (required, string) Plaid’s unique identifier for a recurring transfer. /transfer/recurring/get Node▼ ```javascript const request: TransferRecurringGetRequest = { recurring_transfer_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', }; try { const response = await client.transferRecurringGet(request); const recurringTransferId = response.data.recurring_transfer.recurring_transfer_id; } catch (error) { // handle error } ``` #### Response fields  **recurring\_transfer** (object) Represents a recurring transfer within the Transfers API. **recurring\_transfer->recurring\_transfer\_id** (string) Plaid’s unique identifier for a recurring transfer. **recurring\_transfer->created** (string) The datetime when this transfer was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **recurring\_transfer->next\_origination\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). The next transfer origination date after bank holiday adjustment. Format: date **recurring\_transfer->test\_clock\_id** (nullable, string) Plaid’s unique identifier for a test clock. **recurring\_transfer->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **recurring\_transfer->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **recurring\_transfer->status** (string) The status of the recurring transfer. active: The recurring transfer is currently active. cancelled: The recurring transfer was cancelled by the client or Plaid. expired: The recurring transfer has completed all originations according to its recurring schedule. Possible values: active, cancelled, expired **recurring\_transfer->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **recurring\_transfer->network** (string) Networks eligible for recurring transfers. Possible values: ach, same-day-ach, rtp **recurring\_transfer->account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **recurring\_transfer->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **recurring\_transfer->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **recurring\_transfer->description** (string) The description of the recurring transfer. **recurring\_transfer->transfer\_ids** (\[string\]) The created transfer instances associated with this recurring\_transfer\_id. If the recurring transfer has been newly created, this array will be empty. **recurring\_transfer->user** (object) The legal name and other information for the account holder. **recurring\_transfer->user->legal\_name** (string) The user's legal name. **recurring\_transfer->user->phone\_number** (nullable, string) The user's phone number. **recurring\_transfer->user->email\_address** (nullable, string) The user's email address. **recurring\_transfer->user->address** (nullable, object) The address associated with the account holder. **recurring\_transfer->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **recurring\_transfer->user->address->city** (nullable, string) Ex. "San Francisco" **recurring\_transfer->user->address->region** (nullable, string) The state or province (e.g., "CA"). **recurring\_transfer->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **recurring\_transfer->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **recurring\_transfer->schedule** (object) The schedule that the recurring transfer will be executed on. **recurring\_transfer->schedule->interval\_unit** (string) The unit of the recurring interval. Possible values: week, monthMin length: 1 **recurring\_transfer->schedule->interval\_count** (integer) The number of recurring interval\_units between originations. The recurring interval (before holiday adjustment) is calculated by multiplying interval\_unit and interval\_count. For example, to schedule a recurring transfer which originates once every two weeks, set interval\_unit = week and interval\_count = 2. **recurring\_transfer->schedule->interval\_execution\_day** (integer) The day of the interval on which to schedule the transfer. If the interval\_unit is week, interval\_execution\_day should be an integer from 1 (Monday) to 5 (Friday). If the interval\_unit is month, interval\_execution\_day should be an integer indicating which day of the month to make the transfer on. Integers from 1 to 28 can be used to make a transfer on that day of the month. Negative integers from -1 to -5 can be used to make a transfer relative to the end of the month. To make a transfer on the last day of the month, use -1; to make the transfer on the second-to-last day, use -2, and so on. The transfer will be originated on the next available banking day if the designated day is a non banking day. **recurring\_transfer->schedule->start\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will begin on the first interval\_execution\_day on or after the start\_date. For rtp recurring transfers, start\_date must be in the future. Otherwise, if the first interval\_execution\_day on or after the start date is also the same day that /transfer/recurring/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **recurring\_transfer->schedule->end\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will end on the last interval\_execution\_day on or before the end\_date. If the interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /transfer/recurring/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "recurring_transfer": { "recurring_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "created": "2022-07-05T12:48:37Z", "next_origination_date": "2022-10-28", "test_clock_id": null, "status": "active", "amount": "12.34", "description": "payment", "type": "debit", "ach_class": "ppd", "network": "ach", "origination_account_id": "", "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "iso_currency_code": "USD", "transfer_ids": [ "271ef220-dbf8-caeb-a7dc-a2b3e8a80963", "c8dbaf75-2abb-e2dc-4171-12448e13b848" ], "user": { "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "email_address": "acharleston@email.com", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "schedule": { "start_date": "2022-10-01", "end_date": "2023-10-01", "interval_unit": "week", "interval_count": 1, "interval_execution_day": 5 } }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/recurring/list  #### List recurring transfers  Use the [/transfer/recurring/list](https://plaid.com/docs/api/products/transfer/recurring-transfers/index.html.md#transferrecurringlist) endpoint to see a list of all your recurring transfers and their statuses. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired recurring transfers. #### Request fields  **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. **start\_time** (string) The start created datetime of recurring transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **end\_time** (string) The end created datetime of recurring transfers to list. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **count** (integer) The maximum number of recurring transfers to return. Minimum: 1 Maximum: 25 Default: 25 **offset** (integer) The number of recurring transfers to skip before returning results. Default: 0 Minimum: 0 **funding\_account\_id** (string) Filter recurring transfers to only those with the specified funding\_account\_id. /transfer/recurring/list Node▼ ```javascript const request: TransferRecurringListRequest = { start_time: '2022-09-29T20:35:49Z', end_time: '2022-10-29T20:35:49Z', count: 1, }; try { const response = await client.transferRecurringList(request); } catch (error) { // handle error } ``` #### Response fields  string **recurring\_transfers** (\[object\]) Plaid’s unique identifier for a recurring transfer. **recurring\_transfers->created** (string) The datetime when this transfer was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **recurring\_transfers->next\_origination\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). The next transfer origination date after bank holiday adjustment. Format: date **recurring\_transfers->test\_clock\_id** (nullable, string) Plaid’s unique identifier for a test clock. **recurring\_transfers->type** (string) The type of transfer. This will be either debit or credit. A debit indicates a transfer of money into the origination account; a credit indicates a transfer of money out of the origination account. Possible values: debit, credit **recurring\_transfers->amount** (string) The amount of the transfer (decimal string with two digits of precision e.g. "10.00"). When calling /transfer/authorization/create, specify the maximum amount to authorize. When calling /transfer/create, specify the exact amount of the transfer, up to a maximum of the amount authorized. If this field is left blank when calling /transfer/create, the maximum amount authorized in the authorization\_id will be sent. **recurring\_transfers->status** (string) The status of the recurring transfer. active: The recurring transfer is currently active. cancelled: The recurring transfer was cancelled by the client or Plaid. expired: The recurring transfer has completed all originations according to its recurring schedule. Possible values: active, cancelled, expired **recurring\_transfers->ach\_class** (string) Specifies the use case of the transfer. Required for transfers on an ACH network. For more details, see ACH SEC codes. Codes supported for credits: ccd, ppd Codes supported for debits: ccd, tel, web "ccd" - Corporate Credit or Debit - fund transfer between two corporate bank accounts "ppd" - Prearranged Payment or Deposit - The transfer is part of a pre-existing relationship with a consumer. Authorization was obtained in writing either in person or via an electronic document signing, e.g. Docusign, by the consumer. Can be used for credits or debits. "web" - Internet-Initiated Entry. The transfer debits a consumer’s bank account. Authorization from the consumer is obtained over the Internet (e.g. a web or mobile application). Can be used for single debits or recurring debits. "tel" - Telephone-Initiated Entry. The transfer debits a consumer. Debit authorization has been received orally over the telephone via a recorded call. Possible values: ccd, ppd, tel, web **recurring\_transfers->network** (string) Networks eligible for recurring transfers. Possible values: ach, same-day-ach, rtp **recurring\_transfers->account\_id** (string) The Plaid account\_id corresponding to the end-user account that will be debited or credited. **recurring\_transfers->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **recurring\_transfers->iso\_currency\_code** (string) The currency of the transfer amount, e.g. "USD" **recurring\_transfers->description** (string) The description of the recurring transfer. **recurring\_transfers->transfer\_ids** (\[string\]) The created transfer instances associated with this recurring\_transfer\_id. If the recurring transfer has been newly created, this array will be empty. **recurring\_transfers->user** (object) The legal name and other information for the account holder. **recurring\_transfers->user->legal\_name** (string) The user's legal name. **recurring\_transfers->user->phone\_number** (nullable, string) The user's phone number. **recurring\_transfers->user->email\_address** (nullable, string) The user's email address. **recurring\_transfers->user->address** (nullable, object) The address associated with the account holder. **recurring\_transfers->user->address->street** (nullable, string) The street number and name (i.e., "100 Market St."). **recurring\_transfers->user->address->city** (nullable, string) Ex. "San Francisco" **recurring\_transfers->user->address->region** (nullable, string) The state or province (e.g., "CA"). **recurring\_transfers->user->address->postal\_code** (nullable, string) The postal code (e.g., "94103"). **recurring\_transfers->user->address->country** (nullable, string) A two-letter country code (e.g., "US"). **recurring\_transfers->schedule** (object) The schedule that the recurring transfer will be executed on. **recurring\_transfers->schedule->interval\_unit** (string) The unit of the recurring interval. Possible values: week, monthMin length: 1 **recurring\_transfers->schedule->interval\_count** (integer) The number of recurring interval\_units between originations. The recurring interval (before holiday adjustment) is calculated by multiplying interval\_unit and interval\_count. For example, to schedule a recurring transfer which originates once every two weeks, set interval\_unit = week and interval\_count = 2. **recurring\_transfers->schedule->interval\_execution\_day** (integer) The day of the interval on which to schedule the transfer. If the interval\_unit is week, interval\_execution\_day should be an integer from 1 (Monday) to 5 (Friday). If the interval\_unit is month, interval\_execution\_day should be an integer indicating which day of the month to make the transfer on. Integers from 1 to 28 can be used to make a transfer on that day of the month. Negative integers from -1 to -5 can be used to make a transfer relative to the end of the month. To make a transfer on the last day of the month, use -1; to make the transfer on the second-to-last day, use -2, and so on. The transfer will be originated on the next available banking day if the designated day is a non banking day. **recurring\_transfers->schedule->start\_date** (string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will begin on the first interval\_execution\_day on or after the start\_date. For rtp recurring transfers, start\_date must be in the future. Otherwise, if the first interval\_execution\_day on or after the start date is also the same day that /transfer/recurring/create was called, the bank may make the first payment on that day, but it is not guaranteed to do so. Format: date **recurring\_transfers->schedule->end\_date** (nullable, string) A date in ISO 8601 format (YYYY-MM-DD). The recurring transfer will end on the last interval\_execution\_day on or before the end\_date. If the interval\_execution\_day between the start date and the end date (inclusive) is also the same day that /transfer/recurring/create was called, the bank may make a payment on that day, but it is not guaranteed to do so. Format: date **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "recurring_transfers": [ { "recurring_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "created": "2022-07-05T12:48:37Z", "next_origination_date": "2022-10-28", "test_clock_id": null, "status": "active", "amount": "12.34", "description": "payment", "type": "debit", "ach_class": "ppd", "network": "ach", "origination_account_id": "", "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "iso_currency_code": "USD", "transfer_ids": [ "4242fc8d-3ec6-fb38-fa0c-a8e37d03cd57" ], "user": { "legal_name": "Anne Charleston", "phone_number": "510-555-0128", "email_address": "acharleston@email.com", "address": { "street": "123 Main St.", "city": "San Francisco", "region": "CA", "postal_code": "94053", "country": "US" } }, "schedule": { "start_date": "2022-10-01", "end_date": "2023-10-01", "interval_unit": "week", "interval_count": 1, "interval_execution_day": 5 } } ], "request_id": "saKrIBuEB9qJZno" } ``` ### Webhooks  \=\*=\*=\*= #### RECURRING\_NEW\_TRANSFER  Fired when a new transfer of a recurring transfer is originated. #### Properties  **webhook\_type** (string) TRANSFER **webhook\_code** (string) RECURRING\_NEW\_TRANSFER **recurring\_transfer\_id** (string) Plaid’s unique identifier for a recurring transfer. **transfer\_id** (string) Plaid’s unique identifier for a transfer. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSFER", "webhook_code": "RECURRING_NEW_TRANSFER", "recurring_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "transfer_id": "271ef220-dbf8-caeb-a7dc-a2b3e8a80963", "environment": "production" } ``` \=\*=\*=\*= #### RECURRING\_TRANSFER\_SKIPPED  Fired when Plaid is unable to originate a new ACH transaction of the recurring transfer on the planned date. #### Properties  **webhook\_type** (string) TRANSFER **webhook\_code** (string) RECURRING\_TRANSFER\_SKIPPED **recurring\_transfer\_id** (string) Plaid’s unique identifier for a recurring transfer. **authorization\_decision** (string) A decision regarding the proposed transfer. approved – The proposed transfer has received the end user's consent and has been approved for processing by Plaid. The decision\_rationale field is set if Plaid was unable to fetch the account information. You may proceed with the transfer, but further review is recommended. Refer to the code field in the decision\_rationale object for details. declined – Plaid reviewed the proposed transfer and declined processing. Refer to the code field in the decision\_rationale object for details. user\_action\_required – An action is required before Plaid can assess the transfer risk and make a decision. The most common scenario is to update authentication for an Item. To complete the required action, initialize Link by setting transfer.authorization\_id in the request of /link/token/create. After Link flow is completed, you may re-attempt the authorization request. Possible values: approved, declined, user\_action\_required **authorization\_decision\_rationale\_code** (string) A code representing the rationale for approving or declining the proposed transfer. If the rationale\_code is null, the transfer passed the authorization check. Any non-null value for an approved transfer indicates that the the authorization check could not be run and that you should perform your own risk assessment on the transfer. The code will indicate why the check could not be run. Possible values for an approved transfer are: MANUALLY\_VERIFIED\_ITEM – Item created via a manual entry flow (i.e. Same Day Micro-deposit, Instant Micro-deposit, or database-based verification), limited information available. ITEM\_LOGIN\_REQUIRED – Unable to collect the account information due to Item staleness. Can be resolved by using Link and setting transfer.authorization\_id in the request to /link/token/create. MIGRATED\_ACCOUNT\_ITEM - Item created via /transfer/migrate\_account endpoint, limited information available. ERROR – Unable to collect the account information due to an unspecified error. The following codes indicate that the authorization decision was declined: NSF – Transaction likely to result in a return due to insufficient funds. RISK - Transaction is high-risk. TRANSFER\_LIMIT\_REACHED - One or several transfer limits are reached, e.g. monthly transfer limit. Check the accompanying description field to understand which limit has been reached. Possible values: NSF, RISK, TRANSFER\_LIMIT\_REACHED, MANUALLY\_VERIFIED\_ITEM, ITEM\_LOGIN\_REQUIRED, PAYMENT\_PROFILE\_LOGIN\_REQUIRED, ERROR, MIGRATED\_ACCOUNT\_ITEM, null **skipped\_origination\_date** (string) The planned date on which Plaid is unable to originate a new ACH transaction of the recurring transfer. This will be of the form YYYY-MM-DD. Format: date **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSFER", "webhook_code": "RECURRING_TRANSFER_SKIPPED", "recurring_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "authorization_decision": "declined", "authorization_decision_rationale_code": "NSF", "skipped_origination_date": "2022-11-30", "environment": "production" } ``` \=\*=\*=\*= #### RECURRING\_CANCELLED  Fired when a recurring transfer is cancelled by Plaid. #### Properties  **webhook\_type** (string) TRANSFER **webhook\_code** (string) RECURRING\_CANCELLED **recurring\_transfer\_id** (string) Plaid’s unique identifier for a recurring transfer. **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "TRANSFER", "webhook_code": "RECURRING_CANCELLED", "recurring_transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "environment": "production" } ``` --- # API - Refunds | Plaid Docs Transfer refunds  ================= #### API reference for refunding transfers  For how-to guidance, see the [transfer refunds documentation](https://plaid.com/docs/transfer/refunds/index.html.md) . | Refunds | | | --- | --- | | [/transfer/refund/create](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundcreate) | Create a refund for a transfer | | [/transfer/refund/cancel](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundcancel) | Cancel a refund | | [/transfer/refund/get](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundget) | Retrieve information about a refund | \=\*=\*=\*= #### /transfer/refund/create  #### Create a refund  Use the [/transfer/refund/create](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundcreate) endpoint to create a refund for a transfer. A transfer can be refunded if the transfer was initiated in the past 180 days. Refunds come out of the available balance of the ledger used for the original debit transfer. If there are not enough funds in the available balance to cover the refund amount, the refund will be rejected. You can create a refund at any time. Plaid does not impose any hold time on refunds. A refund can still be issued even if the Item's `access_token` is no longer valid (e.g. if the user revoked OAuth consent or the Item was deleted via [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) ), as long as the account and routing number pair used to make the original transaction is still valid. A refund cannot be issued if the Item has an [invalidated TAN](https://plaid.com/docs/auth/index.html.md#tokenized-account-numbers) , which can occur at Chase or PNC. #### Request fields  **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. **transfer\_id** (required, string) The ID of the transfer to refund. **amount** (required, string) The amount of the refund (decimal string with two digits of precision e.g. "10.00"). **idempotency\_key** (required, string) A random key provided by the client, per unique refund. Maximum of 50 characters. The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. For example, if a request to create a refund fails due to a network connection error, you can retry the request with the same idempotency key to guarantee that only a single refund is created. Max length: 50 /transfer/refund/create Node▼ ```javascript const request: TransferRefundCreateRequest = { transfer_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', amount: '12.34', idempotency_key: 'VEK2ea3X6LKywsc8J6pg', }; try { const response = await client.transferRefundCreate(request); } catch (error) { // handle error } ``` #### Response fields  **refund** (object) Represents a refund within the Transfers API. **refund->id** (string) Plaid’s unique identifier for a refund. **refund->transfer\_id** (string) The ID of the transfer to refund. **refund->amount** (string) The amount of the refund (decimal string with two digits of precision e.g. "10.00"). **refund->status** (string) The status of the refund. pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned. Possible values: pending, posted, cancelled, failed, settled, returned **refund->failure\_reason** (nullable, object) The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise. **refund->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **refund->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure\_code, which encompasses non-ACH failure codes as well. **refund->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **refund->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **refund->created** (string) The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **refund->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "refund": { "id": "667af684-9ee1-4f5f-862a-633ec4c545cc", "transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "amount": "12.34", "status": "pending", "created": "2020-08-06T17:27:15Z", "failure_reason": null, "network_trace_id": null }, "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/refund/cancel  #### Cancel a refund  Use the [/transfer/refund/cancel](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundcancel) endpoint to cancel a refund. A refund is eligible for cancellation if it has not yet been submitted to the payment network. #### Request fields  **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. **refund\_id** (required, string) Plaid’s unique identifier for a refund. /transfer/refund/cancel Node▼ ```javascript const request: TransferRefundCancelRequest = { refund_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', }; try { const response = await client.transferRefundCancel(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "saKrIBuEB9qJZno" } ``` \=\*=\*=\*= #### /transfer/refund/get  #### Retrieve a refund  The [/transfer/refund/get](https://plaid.com/docs/api/products/transfer/refunds/index.html.md#transferrefundget) endpoint fetches information about the refund corresponding to the given `refund_id`. #### Request fields  **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. **refund\_id** (required, string) Plaid’s unique identifier for a refund. /transfer/refund/get Node▼ ```javascript const request: TransferRefundGetRequest = { refund_id: '460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9', }; try { const response = await client.transferRefundGet(request); } catch (error) { // handle error } ``` #### Response fields  **refund** (object) Represents a refund within the Transfers API. **refund->id** (string) Plaid’s unique identifier for a refund. **refund->transfer\_id** (string) The ID of the transfer to refund. **refund->amount** (string) The amount of the refund (decimal string with two digits of precision e.g. "10.00"). **refund->status** (string) The status of the refund. pending: A new refund was created; it is in the pending state. posted: The refund has been successfully submitted to the payment network. settled: Credits have been refunded to the Plaid linked account. cancelled: The refund was cancelled by the client. failed: The refund has failed. returned: The refund was returned. Possible values: pending, posted, cancelled, failed, settled, returned **refund->failure\_reason** (nullable, object) The failure reason if the event type for a refund is "failed" or "returned". Null value otherwise. **refund->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the refund status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **refund->failure\_reason->ach\_return\_code** (deprecated, nullable, string) The ACH return code, e.g. R01. A return code will be provided if and only if the refund status is returned. For a full listing of ACH return codes, see Transfer errors. This field is deprecated in favor of the more versatile failure\_code, which encompasses non-ACH failure codes as well. **refund->failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **refund->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **refund->created** (string) The datetime when this refund was created. This will be of the form 2006-01-02T15:04:05Z Format: date-time **refund->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "refund": { "id": "667af684-9ee1-4f5f-862a-633ec4c545cc", "transfer_id": "460cbe92-2dcc-8eae-5ad6-b37d0ec90fd9", "amount": "12.34", "status": "pending", "created": "2020-08-06T17:27:15Z", "failure_reason": null, "network_trace_id": null }, "request_id": "saKrIBuEB9qJZno" } ``` --- # API - Virtual Accounts | Plaid Docs Virtual Accounts (UK and Europe)  ================================= #### API reference for Virtual Accounts endpoints and webhooks  Manage the entire lifecycle of a payment. For how-to guidance, see the [Virtual Accounts documentation](https://plaid.com/docs/payment-initiation/virtual-accounts/index.html.md) . | Endpoints | | | --- | --- | | [/wallet/create](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#walletcreate) | Create a virtual account | | [/wallet/get](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#walletget) | Fetch a virtual account | | [/wallet/list](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#walletlist) | List all virtual accounts | | [/wallet/transaction/execute](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallettransactionexecute) | Execute a transaction | | [/wallet/transaction/get](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallettransactionget) | Fetch a transaction | | [/wallet/transaction/list](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallettransactionlist) | List all transactions | | See also | | | --- | --- | | [/payment\_initiation/payment/reverse](https://plaid.com/docs/api/products/payment-initiation/index.html.md#payment_initiationpaymentreverse) | Refund a payment from a virtual account | | Webhooks | | | --- | --- | | [WALLET\_TRANSACTION\_STATUS\_UPDATE](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#wallet_transaction_status_update) | The status of a transaction has changed | ### Endpoints  \=\*=\*=\*= #### /wallet/create  #### Create an e-wallet  Create an e-wallet. The response is the newly created e-wallet object. #### Request fields  **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. **iso\_currency\_code** (required, string) An ISO-4217 currency code, used with e-wallets and transactions. Possible values: GBP, EURMin length: 3 Max length: 3 /wallet/create Node▼ ```javascript const request: WalletCreateRequest = { iso_currency_code: isoCurrencyCode, }; try { const response = await plaidClient.walletCreate(request); const walletID = response.data.wallet_id; const balance = response.data.balance; const numbers = response.data.numbers; const recipientID = response.data.recipient_id; } catch (error) { // handle error } ``` #### Response fields  **wallet\_id** (string) A unique ID identifying the e-wallet **balance** (object) An object representing the e-wallet balance **balance->iso\_currency\_code** (string) The ISO-4217 currency code of the balance **balance->current** (number) The total amount of funds in the account Format: double **balance->available** (number) The total amount of funds in the account after subtracting pending debit transaction amounts Format: double **numbers** (object) An object representing the e-wallet account numbers **numbers->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if you need to accept domestic GBP-denominated payments, BACS data is required. **numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **numbers->international->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **numbers->international->bic** (string) The Business Identifier Code, also known as SWIFT code, for this bank account. Min length: 8 Max length: 11 **recipient\_id** (string) The ID of the recipient that corresponds to the e-wallet account numbers **status** (string) The status of the wallet. UNKNOWN: The wallet status is unknown. ACTIVE: The wallet is active and ready to send money to and receive money from. CLOSED: The wallet is closed. Any transactions made to or from this wallet will error. Possible values: UNKNOWN, ACTIVE, CLOSED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "recipient_id": "recipient-id-production-9b6b4679-914b-445b-9450-efbdb80296f6", "balance": { "iso_currency_code": "GBP", "current": 123.12, "available": 100.96 }, "request_id": "4zlKapIkTm8p5KM", "numbers": { "bacs": { "account": "12345678", "sort_code": "123456" } }, "status": "ACTIVE" } ``` \=\*=\*=\*= #### /wallet/get  #### Fetch an e-wallet  Fetch an e-wallet. The response includes the current balance. #### Request fields  **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. **wallet\_id** (required, string) The ID of the e-wallet Min length: 1 /wallet/get Node▼ ```javascript const request: WalletGetRequest = { wallet_id: walletID, }; try { const response = await plaidClient.walletGet(request); const walletID = response.data.wallet_id; const balance = response.data.balance; const numbers = response.data.numbers; const recipientID = response.data.recipient_id; } catch (error) { // handle error } ``` #### Response fields  **wallet\_id** (string) A unique ID identifying the e-wallet **balance** (object) An object representing the e-wallet balance **balance->iso\_currency\_code** (string) The ISO-4217 currency code of the balance **balance->current** (number) The total amount of funds in the account Format: double **balance->available** (number) The total amount of funds in the account after subtracting pending debit transaction amounts Format: double **numbers** (object) An object representing the e-wallet account numbers **numbers->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if you need to accept domestic GBP-denominated payments, BACS data is required. **numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **numbers->international->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **numbers->international->bic** (string) The Business Identifier Code, also known as SWIFT code, for this bank account. Min length: 8 Max length: 11 **recipient\_id** (string) The ID of the recipient that corresponds to the e-wallet account numbers **status** (string) The status of the wallet. UNKNOWN: The wallet status is unknown. ACTIVE: The wallet is active and ready to send money to and receive money from. CLOSED: The wallet is closed. Any transactions made to or from this wallet will error. Possible values: UNKNOWN, ACTIVE, CLOSED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "recipient_id": "recipient-id-production-9b6b4679-914b-445b-9450-efbdb80296f6", "balance": { "iso_currency_code": "GBP", "current": 123.12, "available": 100.96 }, "request_id": "4zlKapIkTm8p5KM", "numbers": { "bacs": { "account": "12345678", "sort_code": "123456" }, "international": { "iban": "GB33BUKB20201555555555", "bic": "BUKBGB22" } }, "status": "ACTIVE" } ``` \=\*=\*=\*= #### /wallet/list  #### Fetch a list of e-wallets  This endpoint lists all e-wallets in descending order of creation. #### Request fields  **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. **iso\_currency\_code** (string) An ISO-4217 currency code, used with e-wallets and transactions. Possible values: GBP, EURMin length: 3 Max length: 3 **cursor** (string) A base64 value representing the latest e-wallet that has already been requested. Set this to next\_cursor received from the previous /wallet/list request. If provided, the response will only contain e-wallets created before that e-wallet. If omitted, the response will contain e-wallets starting from the most recent, and in descending order. Max length: 1024 **count** (integer) The number of e-wallets to fetch Minimum: 1 Maximum: 20 Default: 10 /wallet/list Node▼ ```javascript const request: WalletListRequest = { iso_currency_code: 'GBP', count: 10, }; try { const response = await plaidClient.walletList(request); const wallets = response.data.wallets; const nextCursor = response.data.next_cursor; } catch (error) { // handle error } ``` #### Response fields  **wallets** (\[object\]) An array of e-wallets **wallets->wallet\_id** (string) A unique ID identifying the e-wallet **wallets->balance** (object) An object representing the e-wallet balance **wallets->balance->iso\_currency\_code** (string) The ISO-4217 currency code of the balance **wallets->balance->current** (number) The total amount of funds in the account Format: double **wallets->balance->available** (number) The total amount of funds in the account after subtracting pending debit transaction amounts Format: double **wallets->numbers** (object) An object representing the e-wallet account numbers **wallets->numbers->bacs** (nullable, object) An object containing a BACS account number and sort code. If an IBAN is not provided or if you need to accept domestic GBP-denominated payments, BACS data is required. **wallets->numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **wallets->numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **wallets->numbers->international** (nullable, object) Account numbers using the International Bank Account Number and BIC/SWIFT code format. **wallets->numbers->international->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **wallets->numbers->international->bic** (string) The Business Identifier Code, also known as SWIFT code, for this bank account. Min length: 8 Max length: 11 **wallets->recipient\_id** (string) The ID of the recipient that corresponds to the e-wallet account numbers **wallets->status** (string) The status of the wallet. UNKNOWN: The wallet status is unknown. ACTIVE: The wallet is active and ready to send money to and receive money from. CLOSED: The wallet is closed. Any transactions made to or from this wallet will error. Possible values: UNKNOWN, ACTIVE, CLOSED **next\_cursor** (string) Cursor used for fetching e-wallets created before the latest e-wallet provided in this response **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "wallets": [ { "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "recipient_id": "recipient-id-production-9b6b4679-914b-445b-9450-efbdb80296f6", "balance": { "iso_currency_code": "GBP", "current": 123.12, "available": 100.96 }, "numbers": { "bacs": { "account": "12345678", "sort_code": "123456" } }, "status": "ACTIVE" }, { "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a999", "recipient_id": "recipient-id-production-9b6b4679-914b-445b-9450-efbdb80296f7", "balance": { "iso_currency_code": "EUR", "current": 456.78, "available": 100.96 }, "numbers": { "international": { "iban": "GB22HBUK40221241555626", "bic": "HBUKGB4B" } }, "status": "ACTIVE" } ], "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /wallet/transaction/execute  #### Execute a transaction using an e-wallet  Execute a transaction using the specified e-wallet. Specify the e-wallet to debit from, the counterparty to credit to, the idempotency key to prevent duplicate transactions, the amount and reference for the transaction. Transactions will settle in seconds to several days, depending on the underlying payment rail. #### Request fields  **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. **idempotency\_key** (required, string) A random key provided by the client, per unique wallet transaction. Maximum of 128 characters. The API supports idempotency for safely retrying requests without accidentally performing the same operation twice. If a request to execute a wallet transaction fails due to a network connection error, then after a minimum delay of one minute, you can retry the request with the same idempotency key to guarantee that only a single wallet transaction is created. If the request was successfully processed, it will prevent any transaction that uses the same idempotency key, and was received within 24 hours of the first request, from being processed. Max length: 128 Min length: 1 **wallet\_id** (required, string) The ID of the e-wallet to debit from Min length: 1 **counterparty** (required, object) An object representing the e-wallet transaction's counterparty **counterparty->name** (required, string) The name of the counterparty Min length: 1 **counterparty->numbers** (required, object) The counterparty's bank account numbers. Exactly one of IBAN or BACS data is required. **counterparty->numbers->bacs** (object) The account number and sort code of the counterparty's account **counterparty->numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **counterparty->numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **counterparty->numbers->international** (object) International Bank Account Number for a Wallet Transaction **counterparty->numbers->international->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **counterparty->address** (object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **counterparty->address->street** (required, \[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **counterparty->address->city** (required, string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **counterparty->address->postal\_code** (required, string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **counterparty->address->country** (required, string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **counterparty->date\_of\_birth** (string) The counterparty's birthdate, in ISO 8601 (YYYY-MM-DD) format. Format: date **amount** (required, object) The amount and currency of a transaction **amount->iso\_currency\_code** (required, string) An ISO-4217 currency code, used with e-wallets and transactions. Possible values: GBP, EURMin length: 3 Max length: 3 **amount->value** (required, number) The amount of the transaction. Must contain at most two digits of precision e.g. 1.23. Format: double Minimum: 0.01 **reference** (required, string) A reference for the transaction. This must be an alphanumeric string with 6 to 18 characters and must not contain any special characters or spaces. Ensure that the reference field is unique for each transaction. Max length: 18 Min length: 6 **originating\_fund\_source** (object) The original source of the funds. This field is required by local regulation for certain businesses (e.g. money remittance) to send payouts to recipients in the EU and UK. **originating\_fund\_source->full\_name** (required, string) The full name associated with the source of the funds. **originating\_fund\_source->address** (required, object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **originating\_fund\_source->address->street** (required, \[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **originating\_fund\_source->address->city** (required, string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **originating\_fund\_source->address->postal\_code** (required, string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **originating\_fund\_source->address->country** (required, string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **originating\_fund\_source->account\_number** (required, string) The account number from which the funds are sourced. **originating\_fund\_source->bic** (required, string) The Business Identifier Code, also known as SWIFT code, for this bank account. Min length: 8 Max length: 11 /wallet/transaction/execute Node▼ ```javascript const request: WalletTransactionExecuteRequest = { wallet_id: walletID, counterparty: { name: 'Test', numbers: { bacs: { account: '12345678', sort_code: '123456', }, }, }, amount: { value: 1, iso_currency_code: 'GBP', }, reference: 'transaction ABC123', idempotency_key: '39fae5f2-b2b4-48b6-a363-5328995b2753', }; try { const response = await plaidClient.walletTransactionExecute(request); const transactionID = response.data.transaction_id; const status = response.data.status; } catch (error) { // handle error } ``` #### Response fields  **transaction\_id** (string) A unique ID identifying the transaction **status** (string) The status of the transaction. AUTHORISING: The transaction is being processed for validation and compliance. INITIATED: The transaction has been initiated and is currently being processed. EXECUTED: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions. SETTLED: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used. FAILED: The transaction failed to process successfully. This is a terminal status. BLOCKED: The transaction has been blocked for violating compliance rules. This is a terminal status. Possible values: AUTHORISING, INITIATED, EXECUTED, SETTLED, BLOCKED, FAILED **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transaction_id": "wallet-transaction-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "status": "EXECUTED", "request_id": "4zlKapIkTm8p5KM" } ``` \=\*=\*=\*= #### /wallet/transaction/get  #### Fetch an e-wallet transaction  Fetch a specific e-wallet transaction #### Request fields  **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. **transaction\_id** (required, string) The ID of the transaction to fetch Min length: 1 /wallet/transaction/get Node▼ ```javascript const request: WalletTransactionGetRequest = { transaction_id: transactionID, }; try { const response = await plaidClient.walletTransactionGet(request); const transactionID = response.data.transaction_id; const reference = response.data.reference; const type = response.data.type; const amount = response.data.amount; const counterparty = response.data.counterparty; const status = response.data.status; const createdAt = response.created_at; } catch (error) { // handle error } ``` #### Response fields  **transaction\_id** (string) A unique ID identifying the transaction **wallet\_id** (string) The EMI (E-Money Institution) wallet that this payment is associated with, if any. This wallet is used as an intermediary account to enable Plaid to reconcile the settlement of funds for Payment Initiation requests. **reference** (string) A reference for the transaction **type** (string) The type of the transaction. The supported transaction types that are returned are: BANK\_TRANSFER: a transaction which credits an e-wallet through an external bank transfer. PAYOUT: a transaction which debits an e-wallet by disbursing funds to a counterparty. PIS\_PAY\_IN: a payment which credits an e-wallet through Plaid's Payment Initiation Services (PIS) APIs. For more information see the Payment Initiation endpoints. REFUND: a transaction which debits an e-wallet by refunding a previously initiated payment made through Plaid's PIS APIs. FUNDS\_SWEEP: an automated transaction which debits funds from an e-wallet to a designated client-owned account. RETURN: an automated transaction where a debit transaction was reversed and money moved back to originating account. RECALL: a transaction where the sending bank has requested the return of funds due to a fraud claim, technical error, or other issue associated with the payment. Possible values: BANK\_TRANSFER, PAYOUT, PIS\_PAY\_IN, REFUND, FUNDS\_SWEEP, RETURN, RECALL **scheme** (nullable, string) The payment scheme used to execute this transaction. This is present only for transaction types PAYOUT and REFUND. FASTER\_PAYMENTS: The standard payment scheme within the UK. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment to a beneficiary within the SEPA area. Possible values: null, FASTER\_PAYMENTS, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT **amount** (object) The amount and currency of a transaction **amount->iso\_currency\_code** (string) An ISO-4217 currency code, used with e-wallets and transactions. Possible values: GBP, EURMin length: 3 Max length: 3 **amount->value** (number) The amount of the transaction. Must contain at most two digits of precision e.g. 1.23. Format: double Minimum: 0.01 **counterparty** (object) An object representing the e-wallet transaction's counterparty **counterparty->name** (string) The name of the counterparty Min length: 1 **counterparty->numbers** (object) The counterparty's bank account numbers. Exactly one of IBAN or BACS data is required. **counterparty->numbers->bacs** (nullable, object) The account number and sort code of the counterparty's account **counterparty->numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **counterparty->numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **counterparty->numbers->international** (nullable, object) International Bank Account Number for a Wallet Transaction **counterparty->numbers->international->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **counterparty->address** (nullable, object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **counterparty->address->street** (\[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **counterparty->address->city** (string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **counterparty->address->postal\_code** (string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **counterparty->address->country** (string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **counterparty->date\_of\_birth** (nullable, string) The counterparty's birthdate, in ISO 8601 (YYYY-MM-DD) format. Format: date **status** (string) The status of the transaction. AUTHORISING: The transaction is being processed for validation and compliance. INITIATED: The transaction has been initiated and is currently being processed. EXECUTED: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions. SETTLED: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used. FAILED: The transaction failed to process successfully. This is a terminal status. BLOCKED: The transaction has been blocked for violating compliance rules. This is a terminal status. Possible values: AUTHORISING, INITIATED, EXECUTED, SETTLED, BLOCKED, FAILED **created\_at** (string) Timestamp when the transaction was created, in ISO 8601 format. Format: date-time **last\_status\_update** (string) The date and time of the last time the status was updated, in IS0 8601 format Format: date-time **payment\_id** (nullable, string) The payment id that this transaction is associated with, if any. This is present only for transaction types PIS\_PAY\_IN and REFUND. **failure\_reason** (nullable, string) The error code of a failed transaction. Error codes include: EXTERNAL\_SYSTEM: The transaction was declined by an external system. EXPIRED: The transaction request has expired. CANCELLED: The transaction request was rescinded. INVALID: The transaction did not meet certain criteria, such as an inactive account or no valid counterparty, etc. UNKNOWN: The transaction was unsuccessful, but the exact cause is unknown. Possible values: EXTERNAL\_SYSTEM, EXPIRED, CANCELLED, INVALID, UNKNOWN **error** (nullable, object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (nullable, string) 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. **error->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. **error->causes** (array) 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. **error->status** (nullable, integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (nullable, string) Suggested steps for resolving the error **related\_transactions** (\[object\]) A list of wallet transactions that this transaction is associated with, if any. **related\_transactions->id** (string) The ID of the related transaction. **related\_transactions->type** (string) The type of the transaction. Possible values: PAYOUT, RETURN, REFUND, FUNDS\_SWEEP **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "transaction_id": "wallet-transaction-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "type": "PAYOUT", "reference": "Payout 99744", "amount": { "iso_currency_code": "GBP", "value": 123.12 }, "status": "EXECUTED", "created_at": "2020-12-02T21:14:54Z", "last_status_update": "2020-12-02T21:15:01Z", "counterparty": { "numbers": { "bacs": { "account": "31926819", "sort_code": "601613" } }, "name": "John Smith" }, "request_id": "4zlKapIkTm8p5KM", "related_transactions": [ { "id": "wallet-transaction-id-sandbox-2ba30780-d549-4335-b1fe-c2a938aa39d2", "type": "RETURN" } ] } ``` \=\*=\*=\*= #### /wallet/transaction/list  #### List e-wallet transactions  This endpoint lists the latest transactions of the specified e-wallet. Transactions are returned in descending order by the `created_at` time. #### Request fields  **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. **wallet\_id** (required, string) The ID of the e-wallet to fetch transactions from Min length: 1 **cursor** (string) A value representing the latest transaction to be included in the response. Set this from next\_cursor received in the previous /wallet/transaction/list request. If provided, the response will only contain that transaction and transactions created before it. If omitted, the response will contain transactions starting from the most recent, and in descending order by the created\_at time. Max length: 256 **count** (integer) The number of transactions to fetch Minimum: 1 Maximum: 200 Default: 10 **options** (object) Additional wallet transaction options **options->start\_time** (string) Timestamp in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ) for filtering transactions, inclusive of the provided date. Format: date-time **options->end\_time** (string) Timestamp in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ) for filtering transactions, inclusive of the provided date. Format: date-time /wallet/transaction/list Node▼ ```javascript const request: WalletTransactionListRequest = { wallet_id: walletID, count: 10, }; try { const response = await plaidClient.walletTransactionList(request); const transactions = response.data.transactions; const nextCursor = response.data.next_cursor; } catch (error) { // handle error } ``` #### Response fields  **transactions** (\[object\]) An array of transactions of an e-wallet, associated with the given wallet\_id **transactions->transaction\_id** (string) A unique ID identifying the transaction **transactions->wallet\_id** (string) The EMI (E-Money Institution) wallet that this payment is associated with, if any. This wallet is used as an intermediary account to enable Plaid to reconcile the settlement of funds for Payment Initiation requests. **transactions->reference** (string) A reference for the transaction **transactions->type** (string) The type of the transaction. The supported transaction types that are returned are: BANK\_TRANSFER: a transaction which credits an e-wallet through an external bank transfer. PAYOUT: a transaction which debits an e-wallet by disbursing funds to a counterparty. PIS\_PAY\_IN: a payment which credits an e-wallet through Plaid's Payment Initiation Services (PIS) APIs. For more information see the Payment Initiation endpoints. REFUND: a transaction which debits an e-wallet by refunding a previously initiated payment made through Plaid's PIS APIs. FUNDS\_SWEEP: an automated transaction which debits funds from an e-wallet to a designated client-owned account. RETURN: an automated transaction where a debit transaction was reversed and money moved back to originating account. RECALL: a transaction where the sending bank has requested the return of funds due to a fraud claim, technical error, or other issue associated with the payment. Possible values: BANK\_TRANSFER, PAYOUT, PIS\_PAY\_IN, REFUND, FUNDS\_SWEEP, RETURN, RECALL **transactions->scheme** (nullable, string) The payment scheme used to execute this transaction. This is present only for transaction types PAYOUT and REFUND. FASTER\_PAYMENTS: The standard payment scheme within the UK. SEPA\_CREDIT\_TRANSFER: The standard payment to a beneficiary within the SEPA area. SEPA\_CREDIT\_TRANSFER\_INSTANT: Instant payment to a beneficiary within the SEPA area. Possible values: null, FASTER\_PAYMENTS, SEPA\_CREDIT\_TRANSFER, SEPA\_CREDIT\_TRANSFER\_INSTANT **transactions->amount** (object) The amount and currency of a transaction **transactions->amount->iso\_currency\_code** (string) An ISO-4217 currency code, used with e-wallets and transactions. Possible values: GBP, EURMin length: 3 Max length: 3 **transactions->amount->value** (number) The amount of the transaction. Must contain at most two digits of precision e.g. 1.23. Format: double Minimum: 0.01 **transactions->counterparty** (object) An object representing the e-wallet transaction's counterparty **transactions->counterparty->name** (string) The name of the counterparty Min length: 1 **transactions->counterparty->numbers** (object) The counterparty's bank account numbers. Exactly one of IBAN or BACS data is required. **transactions->counterparty->numbers->bacs** (nullable, object) The account number and sort code of the counterparty's account **transactions->counterparty->numbers->bacs->account** (string) The account number of the account. Maximum of 10 characters. Min length: 1 Max length: 10 **transactions->counterparty->numbers->bacs->sort\_code** (string) The 6-character sort code of the account. Min length: 6 Max length: 6 **transactions->counterparty->numbers->international** (nullable, object) International Bank Account Number for a Wallet Transaction **transactions->counterparty->numbers->international->iban** (string) International Bank Account Number (IBAN). Min length: 15 Max length: 34 **transactions->counterparty->address** (nullable, object) The optional address of the payment recipient's bank account. Required by most institutions outside of the UK. **transactions->counterparty->address->street** (\[string\]) An array of length 1-2 representing the street address where the recipient is located. Maximum of 70 characters. Min items: 1 Min length: 1 **transactions->counterparty->address->city** (string) The city where the recipient is located. Maximum of 35 characters. Min length: 1 Max length: 35 **transactions->counterparty->address->postal\_code** (string) The postal code where the recipient is located. Maximum of 16 characters. Min length: 1 Max length: 16 **transactions->counterparty->address->country** (string) The ISO 3166-1 alpha-2 country code where the recipient is located. Min length: 2 Max length: 2 **transactions->counterparty->date\_of\_birth** (nullable, string) The counterparty's birthdate, in ISO 8601 (YYYY-MM-DD) format. Format: date **transactions->status** (string) The status of the transaction. AUTHORISING: The transaction is being processed for validation and compliance. INITIATED: The transaction has been initiated and is currently being processed. EXECUTED: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions. SETTLED: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used. FAILED: The transaction failed to process successfully. This is a terminal status. BLOCKED: The transaction has been blocked for violating compliance rules. This is a terminal status. Possible values: AUTHORISING, INITIATED, EXECUTED, SETTLED, BLOCKED, FAILED **transactions->created\_at** (string) Timestamp when the transaction was created, in ISO 8601 format. Format: date-time **transactions->last\_status\_update** (string) The date and time of the last time the status was updated, in IS0 8601 format Format: date-time **transactions->payment\_id** (nullable, string) The payment id that this transaction is associated with, if any. This is present only for transaction types PIS\_PAY\_IN and REFUND. **transactions->failure\_reason** (nullable, string) The error code of a failed transaction. Error codes include: EXTERNAL\_SYSTEM: The transaction was declined by an external system. EXPIRED: The transaction request has expired. CANCELLED: The transaction request was rescinded. INVALID: The transaction did not meet certain criteria, such as an inactive account or no valid counterparty, etc. UNKNOWN: The transaction was unsuccessful, but the exact cause is unknown. Possible values: EXTERNAL\_SYSTEM, EXPIRED, CANCELLED, INVALID, UNKNOWN **transactions->error** (nullable, object) 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. **transactions->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **transactions->error->error\_code** (string) The particular error code. Safe for programmatic use. **transactions->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **transactions->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **transactions->error->display\_message** (nullable, string) 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. **transactions->error->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. **transactions->error->causes** (array) 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. **transactions->error->status** (nullable, integer) 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. **transactions->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **transactions->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **transactions->related\_transactions** (\[object\]) A list of wallet transactions that this transaction is associated with, if any. **transactions->related\_transactions->id** (string) The ID of the related transaction. **transactions->related\_transactions->type** (string) The type of the transaction. Possible values: PAYOUT, RETURN, REFUND, FUNDS\_SWEEP **next\_cursor** (string) The value that, when used as the optional cursor parameter to /wallet/transaction/list, will return the corresponding transaction as its first entry. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "next_cursor": "YWJjMTIzIT8kKiYoKSctPUB", "transactions": [ { "transaction_id": "wallet-transaction-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "type": "PAYOUT", "reference": "Payout 99744", "amount": { "iso_currency_code": "GBP", "value": 123.12 }, "status": "EXECUTED", "created_at": "2020-12-02T21:14:54Z", "last_status_update": "2020-12-02T21:15:01Z", "counterparty": { "numbers": { "bacs": { "account": "31926819", "sort_code": "601613" } }, "name": "John Smith" }, "related_transactions": [ { "id": "wallet-transaction-id-sandbox-2ba30780-d549-4335-b1fe-c2a938aa39d2", "type": "RETURN" } ] }, { "transaction_id": "wallet-transaction-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3", "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "type": "PAYOUT", "reference": "Payout 99744", "amount": { "iso_currency_code": "EUR", "value": 456.78 }, "status": "EXECUTED", "created_at": "2020-12-02T21:14:54Z", "last_status_update": "2020-12-02T21:15:01Z", "counterparty": { "numbers": { "international": { "iban": "GB33BUKB20201555555555" } }, "name": "John Smith" }, "related_transactions": [] } ], "request_id": "4zlKapIkTm8p5KM" } ``` ### Webhooks  Updates are sent to indicate that the status of transaction has changed. All virtual account webhooks have a `webhook_type` of `WALLET`. \=\*=\*=\*= #### WALLET\_TRANSACTION\_STATUS\_UPDATE  Fired when the status of a wallet transaction has changed. #### Properties  **webhook\_type** (string) WALLET **webhook\_code** (string) WALLET\_TRANSACTION\_STATUS\_UPDATE **transaction\_id** (string) The transaction\_id for the wallet transaction being updated **payment\_id** (string) The payment\_id associated with the transaction. This will be present in case of REFUND and PIS\_PAY\_IN. **wallet\_id** (string) The EMI (E-Money Institution) wallet that this payment is associated with. This wallet is used as an intermediary account to enable Plaid to reconcile the settlement of funds for Payment Initiation requests. **new\_status** (string) The status of the transaction. AUTHORISING: The transaction is being processed for validation and compliance. INITIATED: The transaction has been initiated and is currently being processed. EXECUTED: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions. SETTLED: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used. FAILED: The transaction failed to process successfully. This is a terminal status. BLOCKED: The transaction has been blocked for violating compliance rules. This is a terminal status. Possible values: AUTHORISING, INITIATED, EXECUTED, SETTLED, BLOCKED, FAILED **old\_status** (string) The status of the transaction. AUTHORISING: The transaction is being processed for validation and compliance. INITIATED: The transaction has been initiated and is currently being processed. EXECUTED: The transaction has been successfully executed and is considered complete. This is only applicable for debit transactions. SETTLED: The transaction has settled and funds are available for use. This is only applicable for credit transactions. A transaction will typically settle within seconds to several days, depending on which payment rail is used. FAILED: The transaction failed to process successfully. This is a terminal status. BLOCKED: The transaction has been blocked for violating compliance rules. This is a terminal status. Possible values: AUTHORISING, INITIATED, EXECUTED, SETTLED, BLOCKED, FAILED **timestamp** (string) The timestamp of the update, in ISO 8601 format, e.g. "2017-09-14T14:42:19.350Z" Format: date-time **error** (object) 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->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **error->error\_code** (string) The particular error code. Safe for programmatic use. **error->error\_code\_reason** (string) The specific reason for the error code. Currently, reasons are only supported 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->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **error->display\_message** (string) 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. **error->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. **error->causes** (array) 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. **error->status** (integer) 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. **error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **error->suggested\_action** (string) Suggested steps for resolving the error **environment** (string) The Plaid environment the webhook was sent from Possible values: sandbox, production API Object ```json { "webhook_type": "WALLET", "webhook_code": "WALLET_TRANSACTION_STATUS_UPDATE", "transaction_id": "wallet-transaction-id-production-2ba30780-d549-4335-b1fe-c2a938aa39d2", "payment_id": "payment-id-production-feca8a7a-5591-4aef-9297-f3062bb735d3", "wallet_id": "wallet-id-production-53e58b32-fc1c-46fe-bbd6-e584b27a88", "new_status": "SETTLED", "old_status": "INITIATED", "timestamp": "2017-09-14T14:42:19.350Z", "environment": "production" } ``` --- # API - Sandbox | Plaid Docs Sandbox endpoints  ================== #### API reference for Sandbox endpoints  \=\*=\*=\*= #### Introduction  Plaid's Sandbox environment provides a number of endpoints that can be used to configure testing scenarios. These endpoints are unique to the Sandbox environment and cannot be used in Production. For more information on these endpoints, see [Sandbox](https://plaid.com/docs/sandbox/index.html.md) . | In this section | | | --- | --- | | [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) | Bypass the Link flow for creating an Item | | [/sandbox/processor\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxprocessor_tokencreate) | Bypass the Link flow for creating an Item for a processor partner | | [/sandbox/item/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemreset_login) | Trigger the `ITEM_LOGIN_REQUIRED` state for an Item | | [/sandbox/user/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxuserreset_login) | (Income and Check) Force Item(s) for a Sandbox user into an error state | | [/sandbox/item/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) | Fire a specific webhook | | [/sandbox/item/set\_verification\_status](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemset_verification_status) | (Auth) Set a verification status for testing micro-deposits | | [/sandbox/transfer/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferfire_webhook) | (Transfer) Fire a specific webhook | | [/sandbox/transfer/ledger/deposit/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgerdepositsimulate) | (Transfer) Simulate a deposit sweep event | | [/sandbox/transfer/ledger/simulate\_available](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgersimulate_available) | (Transfer) Simulate converting pending balance into available balance | | [/sandbox/transfer/ledger/withdraw/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgerwithdrawsimulate) | (Transfer) Simulate a withdraw sweep event | | [/sandbox/transfer/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfersimulate) | (Transfer) Simulate a transfer event | | [/sandbox/transfer/refund/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferrefundsimulate) | (Transfer) Simulate a refund event | | [/sandbox/transfer/sweep/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfersweepsimulate) | (Transfer) Simulate a transfer sweep event | | [/sandbox/transfer/test\_clock/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockcreate) | (Transfer) Create a test clock for testing recurring transfers | | [/sandbox/transfer/test\_clock/advance](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockadvance) | (Transfer) Advance the time on a test clock | | [/sandbox/transfer/test\_clock/get](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockget) | (Transfer) Get details about a test clock | | [/sandbox/transfer/test\_clock/list](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clocklist) | (Transfer) Get details about all test clocks | | [/sandbox/income/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxincomefire_webhook) | (Income) Fire a specific webhook | | [/sandbox/cra/cashflow\_updates/update](https://plaid.com/docs/api/sandbox/index.html.md#sandboxcracashflow_updatesupdate) | (Check) Simulate an update for Cash Flow Updates | | [/sandbox/payment/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpaymentsimulate) | (Payment Initiation) Simulate a payment | | [/sandbox/transactions/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransactionscreate) | (Transactions) Create custom transactions for Items | \=\*=\*=\*= #### /sandbox/public\_token/create  #### Create a test Item  Use the [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) endpoint to create a valid `public_token` for an arbitrary institution ID, initial products, and test credentials. The created `public_token` maps to a new Sandbox Item. You can then call [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) to exchange the `public_token` for an `access_token` and perform all API actions. [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) can also be used with the [user\_custom test username](https://plaid.com/docs/sandbox/user-custom/index.html.md) to generate a test account with custom data, or with Plaid's [pre-populated Sandbox test accounts](https://plaid.com/docs/sandbox/test-credentials/index.html.md) . #### Request fields  **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. **institution\_id** (required, string) The ID of the institution the Item will be associated with **initial\_products** (required, \[string\]) The products to initially pull for the Item. May be any products that the specified institution\_id supports. This array may not be empty. Min items: 1 Possible values: assets, auth, identity, income\_verification, investments\_auth, investments, liabilities, payment\_initiation, signal, standing\_orders, statements, transactions, transfer **options** (object) An optional set of options to be used when configuring the Item. If specified, must not be null. **options->webhook** (string) Specify a webhook to associate with the new Item. Format: url **options->override\_username** (string) Test username to use for the creation of the Sandbox Item. Default value is user\_good. Default: user\_good **options->override\_password** (string) Test password to use for the creation of the Sandbox Item. Default value is pass\_good. Default: pass\_good **options->transactions** (object) An optional set of parameters corresponding to transactions options. **options->transactions->start\_date** (string) The earliest date for which to fetch transaction history. Dates should be formatted as YYYY-MM-DD. Format: date **options->transactions->end\_date** (string) The most recent date for which to fetch transaction history. Dates should be formatted as YYYY-MM-DD. Format: date **options->statements** (object) An optional set of parameters corresponding to statements options. **options->statements->start\_date** (required, string) The earliest date for which to fetch statements history. Dates should be formatted as YYYY-MM-DD. Format: date **options->statements->end\_date** (required, string) The most recent date for which to fetch statements history. Dates should be formatted as YYYY-MM-DD. Format: date **options->income\_verification** (object) A set of parameters for income verification options. This field is required if income\_verification is included in the initial\_products array. **options->income\_verification->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 **options->income\_verification->bank\_income** (object) Specifies options for Bank Income. This field is required if income\_verification is included in the initial\_products array and bank is specified in income\_source\_types. **options->income\_verification->bank\_income->days\_requested** (integer) The number of days of data to request for the Bank Income product **user\_token** (string) The user token associated with the User data is being requested for. /sandbox/public\_token/create Node▼ ```javascript const publicTokenRequest: SandboxPublicTokenCreateRequest = { institution_id: institutionID, initial_products: initialProducts, }; try { const publicTokenResponse = await client.sandboxPublicTokenCreate( publicTokenRequest, ); const publicToken = publicTokenResponse.data.public_token; // The generated public_token can now be exchanged // for an access_token const exchangeRequest: ItemPublicTokenExchangeRequest = { public_token: publicToken, }; const exchangeTokenResponse = await client.itemPublicTokenExchange( exchangeRequest, ); const accessToken = exchangeTokenResponse.data.access_token; } catch (error) { // handle error } ``` #### Response fields  **public\_token** (string) A public token that can be exchanged for an access token using /item/public\_token/exchange **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "public_token": "public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d", "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /sandbox/processor\_token/create  #### Create a test Item and processor token  Use the [/sandbox/processor\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxprocessor_tokencreate) endpoint to create a valid `processor_token` for an arbitrary institution ID and test credentials. The created `processor_token` corresponds to a new Sandbox Item. You can then use this `processor_token` with the `/processor/` API endpoints in Sandbox. You can also use [/sandbox/processor\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxprocessor_tokencreate) with the [user\_custom test username](https://plaid.com/docs/sandbox/user-custom/index.html.md) to generate a test account with custom data. #### Request fields  **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. **institution\_id** (required, string) The ID of the institution the Item will be associated with **options** (object) An optional set of options to be used when configuring the Item. If specified, must not be null. **options->override\_username** (string) Test username to use for the creation of the Sandbox Item. Default value is user\_good. Default: user\_good **options->override\_password** (string) Test password to use for the creation of the Sandbox Item. Default value is pass\_good. Default: pass\_good /sandbox/processor\_token/create Node▼ ```javascript const request: SandboxProcessorTokenCreateRequest = { institution_id: institutionID, }; try { const response = await plaidClient.sandboxProcessorTokenCreate(request); const processorToken = response.data.processor_token; } catch (error) { // handle error } ``` #### Response fields  **processor\_token** (string) A processor token that can be used to call the /processor/ endpoints. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "processor_token": "processor-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d", "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /sandbox/item/reset\_login  #### Force a Sandbox Item into an error state  `/sandbox/item/reset_login/` forces an Item into an `ITEM_LOGIN_REQUIRED` state in order to simulate an Item whose login is no longer valid. This makes it easy to test Link's [update mode](https://plaid.com/docs/link/update-mode/index.html.md) flow in the Sandbox environment. After calling [/sandbox/item/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemreset_login) , You can then use Plaid Link update mode to restore the Item to a good state. An `ITEM_LOGIN_REQUIRED` webhook will also be fired after a call to this endpoint, if one is associated with the Item. In the Sandbox, Items will transition to an `ITEM_LOGIN_REQUIRED` error state automatically after 30 days, even if this endpoint is not called. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. /sandbox/item/reset\_login Node▼ ```javascript const request: SandboxItemResetLoginRequest = { access_token: accessToken, }; try { const response = await plaidClient.sandboxItemResetLogin(request); // create a public_token for the Item and use it to // initialize Link in update mode. const pt_request: itemPublicTokenCreateRequest = { access_token: accessToken, }; const pt_response = await plaidClient.itemCreatePublicToken(pt_request); const publicToken = pt_response.public_token; } catch (error) { // handle error } ``` #### Response fields  **reset\_login** (boolean) true if the call succeeded **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "reset_login": true, "request_id": "m8MDnv9okwxFNBV" } ``` \=\*=\*=\*= #### /sandbox/user/reset\_login  #### Force item(s) for a Sandbox User into an error state  `/sandbox/user/reset_login/` functions the same as [/sandbox/item/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemreset_login) , but will modify Items related to a User. This endpoint forces each Item into an `ITEM_LOGIN_REQUIRED` state in order to simulate an Item whose login is no longer valid. This makes it easy to test Link's [update mode](https://plaid.com/docs/link/update-mode/index.html.md) flow in the Sandbox environment. After calling [/sandbox/user/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxuserreset_login) , You can then use Plaid Link update mode to restore Items associated with the User to a good state. An `ITEM_LOGIN_REQUIRED` webhook will also be fired after a call to this endpoint, if one is associated with the Item. In the Sandbox, Items will transition to an `ITEM_LOGIN_REQUIRED` error state automatically after 30 days, even if this endpoint is not called. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. **item\_ids** (\[string\]) An array of item\_ids associated with the User to be reset. If empty or null, this field will default to resetting all Items associated with the User. /sandbox/user/reset\_login Node▼ ```javascript const request: SandboxUserResetLoginRequest = { user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', item_ids: ['eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6'] }; try { const response = await plaidClient.sandboxUserResetLogin(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "reset_login": true, "request_id": "n7XQnv8ozwyFPBC" } ``` \=\*=\*=\*= #### /sandbox/item/fire\_webhook  #### Fire a test webhook  The [/sandbox/item/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) endpoint is used to test that code correctly handles webhooks. This endpoint can trigger the following webhooks: `DEFAULT_UPDATE`: Webhook to be fired for a given Sandbox Item simulating a default update event for the respective product as specified with the `webhook_type` in the request body. Valid Sandbox `DEFAULT_UPDATE` webhook types include: `AUTH`, `IDENTITY`, `TRANSACTIONS`, `INVESTMENTS_TRANSACTIONS`, `LIABILITIES`, `HOLDINGS`. If the Item does not support the product, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result. `NEW_ACCOUNTS_AVAILABLE`: Fired to indicate that a new account is available on the Item and you can launch update mode to request access to it. `SMS_MICRODEPOSITS_VERIFICATION`: Fired when a given same day micro-deposit item is verified via SMS verification. `LOGIN_REPAIRED`: Fired when an Item recovers from the `ITEM_LOGIN_REQUIRED` without the user going through update mode in your app. `PENDING_DISCONNECT`: Fired when an Item will stop working in the near future (e.g. due to a planned bank migration) and must be sent through update mode to continue working. `RECURRING_TRANSACTIONS_UPDATE`: Recurring Transactions webhook to be fired for a given Sandbox Item. If the Item does not support Recurring Transactions, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result. `SYNC_UPDATES_AVAILABLE`: Transactions webhook to be fired for a given Sandbox Item. If the Item does not support Transactions, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result. `PRODUCT_READY`: Assets webhook to be fired when a given asset report has been successfully generated. If the Item does not support Assets, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result. `ERROR`: Assets webhook to be fired when asset report generation has failed. If the Item does not support Assets, a `SANDBOX_PRODUCT_NOT_ENABLED` error will result. `USER_PERMISSION_REVOKED`: Indicates an end user has revoked the permission that they previously granted to access an Item. May not always fire upon revocation, as some institutions’ consent portals do not trigger this webhook. Upon receiving this webhook, it is recommended to delete any stored data from Plaid associated with the account or Item. `USER_ACCOUNT_REVOKED`: Fired when an end user has revoked access to their account on the Data Provider's portal. This webhook is currently sent only for PNC Items, but may be sent in the future for other financial institutions. Upon receiving this webhook, it is recommended to delete any stored data from Plaid associated with the account or Item. Note that this endpoint is provided for developer ease-of-use and is not required for testing webhooks; webhooks will also fire in Sandbox under the same conditions that they would in Production (except for webhooks of type `TRANSFER`). #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **webhook\_type** (string) The webhook types that can be fired by this test endpoint. Possible values: AUTH, HOLDINGS, INVESTMENTS\_TRANSACTIONS, ITEM, LIABILITIES, TRANSACTIONS, ASSETS **webhook\_code** (required, string) The webhook codes that can be fired by this test endpoint. Possible values: DEFAULT\_UPDATE, NEW\_ACCOUNTS\_AVAILABLE, SMS\_MICRODEPOSITS\_VERIFICATION, USER\_PERMISSION\_REVOKED, USER\_ACCOUNT\_REVOKED, PENDING\_DISCONNECT, RECURRING\_TRANSACTIONS\_UPDATE, LOGIN\_REPAIRED, SYNC\_UPDATES\_AVAILABLE, PRODUCT\_READY, ERROR /sandbox/item/fire\_webhook Node▼ ```javascript // Fire a DEFAULT_UPDATE webhook for an Item const request: SandboxItemFireWebhookRequest = { access_token: accessToken webhook_code: 'DEFAULT_UPDATE' }; try { const response = await plaidClient.sandboxItemFireWebhook(request); } catch (error) { // handle error } ``` #### Response fields  **webhook\_fired** (boolean) Value is true if the test webhook\_code was successfully fired. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "webhook_fired": true, "request_id": "1vwmF5TBQwiqfwP" } ``` \=\*=\*=\*= #### /sandbox/item/set\_verification\_status  #### Set verification status for Sandbox account  The [/sandbox/item/set\_verification\_status](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemset_verification_status) endpoint can be used to change the verification status of an Item in in the Sandbox in order to simulate the Automated Micro-deposit flow. For more information on testing Automated Micro-deposits in Sandbox, see [Auth full coverage testing](https://plaid.com/docs/auth/coverage/testing/index.html.md#) . #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **account\_id** (required, string) The account\_id of the account whose verification status is to be modified **verification\_status** (required, string) The verification status to set the account to. Possible values: automatically\_verified, verification\_expired /sandbox/item/set\_verification\_status Node▼ ```javascript const request: SandboxItemSetVerificationStatusRequest = { access_token: accessToken, account_id: accountID, verification_status: 'automatically_verified', }; try { const response = await plaidClient.sandboxItemSetVerificationStatus(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "1vwmF5TBQwiqfwP" } ``` \=\*=\*=\*= #### /sandbox/transfer/fire\_webhook  #### Manually fire a Transfer webhook  Use the [/sandbox/transfer/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferfire_webhook) endpoint to manually trigger a `TRANSFER_EVENTS_UPDATE` webhook in the Sandbox environment. #### Request fields  **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. **webhook** (required, string) The URL to which the webhook should be sent. Format: url /sandbox/transfer/fire\_webhook Node▼ ```javascript const request: SandboxTransferFireWebhookRequest = { webhook: 'https://www.example.com', }; try { const response = await plaidClient.sandboxTransferFireWebhook(request); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/simulate  #### Simulate a transfer event in Sandbox  Use the [/sandbox/transfer/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfersimulate) endpoint to simulate a transfer event in the Sandbox environment. Note that while an event will be simulated and will appear when using endpoints such as [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) or [/transfer/event/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventlist) , no transactions will actually take place and funds will not move between accounts, even within the Sandbox. #### Request fields  **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. **transfer\_id** (required, string) Plaid’s unique identifier for a transfer. **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. If provided, the event to be simulated is created at the virtual\_time on the provided test\_clock. **event\_type** (required, string) The asynchronous event to be simulated. May be: posted, settled, failed, funds\_available, or returned. An error will be returned if the event type is incompatible with the current transfer status. Compatible status --> event type transitions include: pending --> failed pending --> posted posted --> returned posted --> settled settled --> funds\_available (only applicable to ACH debits.) **failure\_reason** (object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **failure\_reason->failure\_code** (string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **failure\_reason->ach\_return\_code** (deprecated, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **webhook** (string) The webhook URL to which a TRANSFER\_EVENTS\_UPDATE webhook should be sent. Format: url /sandbox/transfer/simulate Node▼ ```javascript const request: SandboxTransferSimulateRequest = { transfer_id, event_type: 'posted', failure_reason: failureReason, }; try { const response = await plaidClient.sandboxTransferSimulate(request); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/refund/simulate  #### Simulate a refund event in Sandbox  Use the [/sandbox/transfer/refund/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferrefundsimulate) endpoint to simulate a refund event in the Sandbox environment. Note that while an event will be simulated and will appear when using endpoints such as [/transfer/event/sync](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventsync) or [/transfer/event/list](https://plaid.com/docs/api/products/transfer/reading-transfers/index.html.md#transfereventlist) , no transactions will actually take place and funds will not move between accounts, even within the Sandbox. #### Request fields  **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. **refund\_id** (required, string) Plaid’s unique identifier for a refund. **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. If provided, the event to be simulated is created at the virtual\_time on the provided test\_clock. **event\_type** (required, string) The asynchronous event to be simulated. May be: refund.posted, refund.settled, refund.failed, or refund.returned. An error will be returned if the event type is incompatible with the current refund status. Compatible status --> event type transitions include: refund.pending --> refund.failed refund.pending --> refund.posted refund.posted --> refund.returned refund.posted --> refund.settled refund.posted events can only be simulated if the refunded transfer has been transitioned to settled. This mimics the ordering of events in Production. **failure\_reason** (object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **failure\_reason->failure\_code** (string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **failure\_reason->ach\_return\_code** (deprecated, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. **webhook** (string) The webhook URL to which a TRANSFER\_EVENTS\_UPDATE webhook should be sent. Format: url /sandbox/transfer/refund/simulate Node▼ ```javascript const request: SandboxTransferRefundSimulateRequest = { refund_id: refundId, event_type: 'refund.posted', }; try { const response = await plaidClient.sandboxTransferRefundSimulate(request); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/sweep/simulate  #### Simulate creating a sweep  Use the [/sandbox/transfer/sweep/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfersweepsimulate) endpoint to create a sweep and associated events in the Sandbox environment. Upon calling this endpoint, all transfers with a sweep status of `swept` will become `swept_settled`, all `posted` or `pending` transfers with a sweep status of `unswept` will become `swept`, and all `returned` transfers with a sweep status of `swept` will become `return_swept`. #### Request fields  **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. **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. If provided, the sweep to be simulated is created on the day of the virtual\_time on the test\_clock. If the date of virtual\_time is on weekend or a federal holiday, the next available banking day is used. **webhook** (string) The webhook URL to which a TRANSFER\_EVENTS\_UPDATE webhook should be sent. Format: url /sandbox/transfer/sweep/simulate Node▼ ```javascript try { const response = await plaidClient.sandboxTransferSweepSimulate({}); const sweep = response.data.sweep; } catch (error) { // handle error } ``` #### Response fields  **sweep** (nullable, object) A sweep returned from the /sandbox/transfer/sweep/simulate endpoint. Can be null if there are no transfers to include in a sweep. **sweep->id** (string) Identifier of the sweep. **sweep->funding\_account\_id** (string) The id of the funding account to use, available in the Plaid Dashboard. This determines which of your business checking accounts will be credited or debited. **sweep->ledger\_id** (nullable, string) Plaid’s unique identifier for a Plaid Ledger Balance. **sweep->created** (string) The datetime when the sweep occurred, in RFC 3339 format. Format: date-time **sweep->amount** (string) Signed decimal amount of the sweep as it appears on your sweep account ledger (e.g. "-10.00") If amount is not present, the sweep was net-settled to zero and outstanding debits and credits between the sweep account and Plaid are balanced. **sweep->iso\_currency\_code** (string) The currency of the sweep, e.g. "USD". **sweep->settled** (nullable, string) The date when the sweep settled, in the YYYY-MM-DD format. Format: date **sweep->expected\_funds\_available\_date** (nullable, string) The expected date when funds from a ledger deposit will be made available and can be withdrawn from the associated ledger balance. Only applies to deposits. This will be of the form YYYY-MM-DD. Format: date **sweep->status** (nullable, string) The status of a sweep transfer "pending" - The sweep is currently pending "posted" - The sweep has been posted "settled" - The sweep has settled. This is the terminal state of a successful credit sweep. "returned" - The sweep has been returned. This is the terminal state of a returned sweep. Returns of a sweep are extremely rare, since sweeps are money movement between your own bank account and your own Ledger. "funds\_available" - Funds from the sweep have been released from hold and applied to the ledger's available balance. (Only applicable to deposits.) This is the terminal state of a successful deposit sweep. "failed" - The sweep has failed. This is the terminal state of a failed sweep. Possible values: pending, posted, settled, funds\_available, returned, failed, null **sweep->trigger** (nullable, string) The trigger of the sweep "manual" - The sweep is created manually by the customer "incoming" - The sweep is created by incoming funds flow (e.g. Incoming Wire) "balance\_threshold" - The sweep is created by balance threshold setting "automatic\_aggregate" - The sweep is created by the Plaid automatic aggregation process. These funds did not pass through the Plaid Ledger balance. Possible values: manual, incoming, balance\_threshold, automatic\_aggregate **sweep->description** (string) The description of the deposit that will be passed to the receiving bank (up to 10 characters). Note that banks utilize this field differently, and may or may not show it on the bank statement. **sweep->network\_trace\_id** (nullable, string) The trace identifier for the transfer based on its network. This will only be set after the transfer has posted. For ach or same-day-ach transfers, this is the ACH trace number. For rtp transfers, this is the Transaction Identification number. For wire transfers, this is the IMAD (Input Message Accountability Data) number. **sweep->failure\_reason** (nullable, object) The failure reason if the status for a sweep is "failed" or "returned". Null value otherwise. **sweep->failure\_reason->failure\_code** (nullable, string) The failure code, e.g. R01. A failure code will be provided if and only if the sweep status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **sweep->failure\_reason->description** (nullable, string) A human-readable description of the reason for the failure or reversal. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "sweep": { "id": "d5394a4d-0b04-4a02-9f4a-7ca5c0f52f9d", "funding_account_id": "8945fedc-e703-463d-86b1-dc0607b55460", "created": "2020-08-06T17:27:15Z", "amount": "12.34", "iso_currency_code": "USD", "settled": "2020-08-07", "network_trace_id": null }, "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/ledger/deposit/simulate  #### Simulate a ledger deposit event in Sandbox  Use the [/sandbox/transfer/ledger/deposit/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgerdepositsimulate) endpoint to simulate a ledger deposit event in the Sandbox environment. #### Request fields  **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. **sweep\_id** (required, string) Plaid’s unique identifier for a sweep. **event\_type** (required, string) The asynchronous event to be simulated. May be: posted, settled, failed, or returned. An error will be returned if the event type is incompatible with the current ledger sweep status. Compatible status --> event type transitions include: sweep.pending --> sweep.posted sweep.pending --> sweep.failed sweep.posted --> sweep.settled sweep.posted --> sweep.returned sweep.settled --> sweep.returned Possible values: sweep.posted, sweep.settled, sweep.returned, sweep.failed **failure\_reason** (object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **failure\_reason->failure\_code** (string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **failure\_reason->ach\_return\_code** (deprecated, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. /sandbox/transfer/ledger/deposit/simulate Node▼ ```javascript const request: SandboxTransferLedgerDepositSimulateRequest = { sweep_id: 'f4ba7a287eae4d228d12331b68a9f35a', event_type: 'sweep.posted', }; try { const response = await plaidClient.sandboxTransferLedgerDepositSimulate( request, ); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/ledger/simulate\_available  #### Simulate converting pending balance to available balance  Use the [/sandbox/transfer/ledger/simulate\_available](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgersimulate_available) endpoint to simulate converting pending balance to available balance for all originators in the Sandbox environment. #### Request fields  **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. **ledger\_id** (string) Specify which ledger balance to simulate converting pending balance to available balance. If this field is left blank, this will default to id of the default ledger balance. **originator\_client\_id** (string) Client ID of the end customer (i.e. the originator). Only applicable to Transfer for Platforms customers. **test\_clock\_id** (string) Plaid’s unique identifier for a test clock. If provided, only the pending balance that is due before the virtual\_timestamp on the test clock will be converted. **webhook** (string) The webhook URL to which a TRANSFER\_EVENTS\_UPDATE webhook should be sent. Format: url /sandbox/transfer/ledger/simulate\_available Node▼ ```javascript try { const response = await plaidClient.sandboxTransferLedgerSimulateAvailable({}); const available = response.data.balance.available; } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/ledger/withdraw/simulate  #### Simulate a ledger withdraw event in Sandbox  Use the [/sandbox/transfer/ledger/withdraw/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferledgerwithdrawsimulate) endpoint to simulate a ledger withdraw event in the Sandbox environment. #### Request fields  **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. **sweep\_id** (required, string) Plaid’s unique identifier for a sweep. **event\_type** (required, string) The asynchronous event to be simulated. May be: posted, settled, failed, or returned. An error will be returned if the event type is incompatible with the current ledger sweep status. Compatible status --> event type transitions include: sweep.pending --> sweep.posted sweep.pending --> sweep.failed sweep.posted --> sweep.settled sweep.posted --> sweep.returned sweep.settled --> sweep.returned Possible values: sweep.posted, sweep.settled, sweep.returned, sweep.failed **failure\_reason** (object) The failure reason if the event type for a transfer is "failed" or "returned". Null value otherwise. **failure\_reason->failure\_code** (string) The failure code, e.g. R01. A failure code will be provided if and only if the transfer status is returned. See ACH return codes for a full listing of ACH return codes and RTP/RfP error codes for RTP error codes. **failure\_reason->ach\_return\_code** (deprecated, string) The ACH return code, e.g. R01. A return code will be provided if and only if the transfer status is returned. For a full listing of ACH return codes, see Transfer errors. **failure\_reason->description** (string) A human-readable description of the reason for the failure or reversal. /sandbox/transfer/ledger/withdraw/simulate Node▼ ```javascript const request: SandboxTransferLedgerWithdrawSimulateRequest = { sweep_id: 'f4ba7a287eae4d228d12331b68a9f35a', event_type: 'sweep.posted', }; try { const response = await plaidClient.sandboxTransferLedgerWithdrawSimulate( request, ); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/test\_clock/create  #### Create a test clock  Use the [/sandbox/transfer/test\_clock/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockcreate) endpoint to create a `test_clock` in the Sandbox environment. A test clock object represents an independent timeline and has a `virtual_time` field indicating the current timestamp of the timeline. Test clocks are used for testing recurring transfers in Sandbox. A test clock can be associated with up to 5 recurring transfers. #### Request fields  **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. **virtual\_time** (string) The virtual timestamp on the test clock. If not provided, the current timestamp will be used. This will be of the form 2006-01-02T15:04:05Z. Format: date-time /sandbox/transfer/test\_clock/create Node▼ ```javascript const request: SandboxTransferTestClockCreateRequest = { virtual_time: '2006-01-02T15:04:05Z', }; try { const response = await plaidClient.sandboxTransferTestClockCreate(request); const test_clock = response.data.test_clock; } catch (error) { // handle error } ``` #### Response fields  **test\_clock** (object) Defines the test clock for a transfer. **test\_clock->test\_clock\_id** (string) Plaid’s unique identifier for a test clock. This field is only populated in the Sandbox environment, and only if a test\_clock\_id was included in the /transfer/recurring/create request. For more details, see Simulating recurring transfers. **test\_clock->virtual\_time** (string) The virtual timestamp on the test clock. This will be of the form 2006-01-02T15:04:05Z. 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. Response Object ```json { "test_clock": { "test_clock_id": "b33a6eda-5e97-5d64-244a-a9274110151c", "virtual_time": "2006-01-02T15:04:05Z" }, "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/test\_clock/advance  #### Advance a test clock  Use the [/sandbox/transfer/test\_clock/advance](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockadvance) endpoint to advance a `test_clock` in the Sandbox environment. A test clock object represents an independent timeline and has a `virtual_time` field indicating the current timestamp of the timeline. A test clock can be advanced by incrementing `virtual_time`, but may never go back to a lower `virtual_time`. If a test clock is advanced, we will simulate the changes that ought to occur during the time that elapsed. For example, a client creates a weekly recurring transfer with a test clock set at t. When the client advances the test clock by setting `virtual_time` = t + 15 days, 2 new originations should be created, along with the webhook events. The advancement of the test clock from its current `virtual_time` should be limited such that there are no more than 20 originations resulting from the advance operation on each `recurring_transfer` associated with the `test_clock`. For example, if the recurring transfer associated with this test clock originates once every 4 weeks, you can advance the `virtual_time` up to 80 weeks on each API call. #### Request fields  **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. **test\_clock\_id** (required, string) Plaid’s unique identifier for a test clock. This field is only populated in the Sandbox environment, and only if a test\_clock\_id was included in the /transfer/recurring/create request. For more details, see Simulating recurring transfers. **new\_virtual\_time** (required, string) The virtual timestamp on the test clock. This will be of the form 2006-01-02T15:04:05Z. Format: date-time /sandbox/transfer/test\_clock/advance Node▼ ```javascript const request: SandboxTransferTestClockAdvanceRequest = { test_clock_id: 'b33a6eda-5e97-5d64-244a-a9274110151c', new_virtual_time: '2006-01-02T15:04:05Z', }; try { const response = await plaidClient.sandboxTransferTestClockAdvance(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/test\_clock/get  #### Get a test clock  Use the [/sandbox/transfer/test\_clock/get](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clockget) endpoint to get a `test_clock` in the Sandbox environment. #### Request fields  **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. **test\_clock\_id** (required, string) Plaid’s unique identifier for a test clock. This field is only populated in the Sandbox environment, and only if a test\_clock\_id was included in the /transfer/recurring/create request. For more details, see Simulating recurring transfers. /sandbox/transfer/test\_clock/get Node▼ ```javascript const request: SandboxTransferTestClockGetRequest = { test_clock_id: 'b33a6eda-5e97-5d64-244a-a9274110151c', }; try { const response = await plaidClient.sandboxTransferTestClockGet(request); const test_clock = response.data.test_clock; } catch (error) { // handle error } ``` #### Response fields  **test\_clock** (object) Defines the test clock for a transfer. **test\_clock->test\_clock\_id** (string) Plaid’s unique identifier for a test clock. This field is only populated in the Sandbox environment, and only if a test\_clock\_id was included in the /transfer/recurring/create request. For more details, see Simulating recurring transfers. **test\_clock->virtual\_time** (string) The virtual timestamp on the test clock. This will be of the form 2006-01-02T15:04:05Z. 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. Response Object ```json { "test_clock": { "test_clock_id": "b33a6eda-5e97-5d64-244a-a9274110151c", "virtual_time": "2006-01-02T15:04:05Z" }, "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/transfer/test\_clock/list  #### List test clocks  Use the [/sandbox/transfer/test\_clock/list](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransfertest_clocklist) endpoint to see a list of all your test clocks in the Sandbox environment, by ascending `virtual_time`. Results are paginated; use the `count` and `offset` query parameters to retrieve the desired test clocks. #### Request fields  **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. **start\_virtual\_time** (string) The start virtual timestamp of test clocks to return. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **end\_virtual\_time** (string) The end virtual timestamp of test clocks to return. This should be in RFC 3339 format (i.e. 2019-12-06T22:35:49Z) Format: date-time **count** (integer) The maximum number of test clocks to return. Minimum: 1 Maximum: 25 Default: 25 **offset** (integer) The number of test clocks to skip before returning results. Default: 0 Minimum: 0 /sandbox/transfer/test\_clock/list Node▼ ```javascript const request: SandboxTransferTestClockListRequest = { count: 2, }; try { const response = await plaidClient.sandboxTransferTestClockList(request); const test_clocks = response.data.test_clocks; } catch (error) { // handle error } ``` #### Response fields  string **test\_clocks** (\[object\]) Plaid’s unique identifier for a test clock. This field is only populated in the Sandbox environment, and only if a test\_clock\_id was included in the /transfer/recurring/create request. For more details, see Simulating recurring transfers. **test\_clocks->virtual\_time** (string) The virtual timestamp on the test clock. This will be of the form 2006-01-02T15:04:05Z. 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. Response Object ```json { "test_clocks": [ { "test_clock_id": "b33a6eda-5e97-5d64-244a-a9274110151c", "virtual_time": "2006-01-02T15:04:05Z" }, { "test_clock_id": "a33a6eda-5e97-5d64-244a-a9274110152d", "virtual_time": "2006-02-02T15:04:05Z" } ], "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/income/fire\_webhook  #### Manually fire an Income webhook  Use the [/sandbox/income/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxincomefire_webhook) endpoint to manually trigger a Payroll or Document Income webhook in the Sandbox environment. #### Request fields  **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. **item\_id** (required, string) The Item ID associated with the verification. **user\_id** (string) The Plaid user\_id of the User associated with this webhook, warning, or error. **webhook** (required, string) The URL to which the webhook should be sent. Format: url **verification\_status** (string) VERIFICATION\_STATUS\_PROCESSING\_COMPLETE: The income verification status processing has completed. If the user uploaded multiple documents, this webhook will fire when all documents have finished processing. Call the /income/verification/paystubs/get endpoint and check the document metadata to see which documents were successfully parsed. VERIFICATION\_STATUS\_PROCESSING\_FAILED: A failure occurred when attempting to process the verification documentation. VERIFICATION\_STATUS\_PENDING\_APPROVAL: (deprecated) The income verification has been sent to the user for review. Possible values: VERIFICATION\_STATUS\_PROCESSING\_COMPLETE, VERIFICATION\_STATUS\_PROCESSING\_FAILED, VERIFICATION\_STATUS\_PENDING\_APPROVAL **webhook\_code** (required, string) The webhook codes that can be fired by this test endpoint. Possible values: INCOME\_VERIFICATION, INCOME\_VERIFICATION\_RISK\_SIGNALS /sandbox/income/fire\_webhook Node▼ ```javascript const request: SandboxIncomeFireWebhookRequest = { item_id: 'Rn3637v1adCNj5Dl1LG6idQBzqBLwRcRZLbgM', webhook: 'https://webhook.com/', verification_status: 'VERIFICATION_STATUS_PROCESSING_COMPLETE', }; try { const response = await plaidClient.sandboxIncomeFireWebhook(request); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/cra/cashflow\_updates/update  #### Trigger an update for Cash Flow Updates  Use the [/sandbox/cra/cashflow\_updates/update](https://plaid.com/docs/api/sandbox/index.html.md#sandboxcracashflow_updatesupdate) endpoint to manually trigger an update for Cash Flow Updates (Monitoring) in the Sandbox environment. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **webhook\_codes** (\[string\]) Webhook codes corresponding to the Cash Flow Updates events to be simulated. Possible values: LARGE\_DEPOSIT\_DETECTED, LOW\_BALANCE\_DETECTED, NEW\_LOAN\_PAYMENT\_DETECTED, NSF\_OVERDRAFT\_DETECTED /sandbox/cra/cashflow\_updates/update Node▼ ```javascript const request: SandboxCraCashflowUpdatesUpdateRequest = { user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', webhook_codes: ['LARGE_DEPOSIT_DETECTED', 'LOW_BALANCE_DETECTED'], }; try { const response = await plaidClient.sandbox_cra_cashflow_updates_update(request); // empty response upon success } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "mdqfuVxeoza6mhu" } ``` \=\*=\*=\*= #### /sandbox/payment/simulate  #### Simulate a payment event in Sandbox  Use the [/sandbox/payment/simulate](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpaymentsimulate) endpoint to simulate various payment events in the Sandbox environment. This endpoint will trigger the corresponding payment status webhook. #### Request fields  **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. **payment\_id** (required, string) The ID of the payment to simulate **webhook** (required, string) The webhook url to use for any payment events triggered by the simulated status change. **status** (required, string) The status to set the payment to. Valid statuses include:PAYMENT\_STATUS\_INITIATEDPAYMENT\_STATUS\_INSUFFICIENT\_FUNDSPAYMENT\_STATUS\_FAILEDPAYMENT\_STATUS\_EXECUTEDPAYMENT\_STATUS\_SETTLEDPAYMENT\_STATUS\_CANCELLEDPAYMENT\_STATUS\_REJECTED /sandbox/payment/simulate Node▼ ```javascript const request: SandboxPaymentSimulateRequest = { payment_id: 'payment-id-sandbox-feca8a7a-5591-4aef-9297-f3062bb735d3', status: "PAYMENT_STATUS_INITIATED" }; try { const response = await plaidClient.sandbox_payment_simulate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. **old\_status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED **new\_status** (string) The status of the payment. Core lifecycle statuses: PAYMENT\_STATUS\_INPUT\_NEEDED: Transitional. The payment is awaiting user input to continue processing. It may re-enter this state if additional input is required. PAYMENT\_STATUS\_AUTHORISING: Transitional. The payment is being authorised by the financial institution. It will automatically move on once authorisation completes. PAYMENT\_STATUS\_INITIATED: Transitional. The payment has been authorised and accepted by the financial institution and is now in transit. A payment should be considered complete once it reaches the PAYMENT\_STATUS\_EXECUTED state or the funds settle in the recipient account. PAYMENT\_STATUS\_EXECUTED: Terminal. The funds have left the payer’s account and the payment is en route to settlement. Support is more common in the UK than in the EU; where unsupported, a successful payment remains in PAYMENT\_STATUS\_INITIATED before settling. When using Plaid Virtual Accounts, PAYMENT\_STATUS\_EXECUTED is not terminal—the payment will continue to PAYMENT\_STATUS\_SETTLED once funds are available. PAYMENT\_STATUS\_SETTLED: Terminal. The funds are available in the recipient’s account. Only available to customers using Plaid Virtual Accounts. Failure statuses: PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS: Terminal. The payment failed due to insufficient funds. No further retries will succeed until the payer’s balance is replenished. PAYMENT\_STATUS\_FAILED: Terminal (retryable). The payment could not be initiated due to a system error or outage. Retry once the root cause is resolved. PAYMENT\_STATUS\_BLOCKED: Terminal (retryable). The payment was blocked by Plaid (e.g., flagged as risky). Resolve any compliance or risk issues and retry. PAYMENT\_STATUS\_REJECTED: Terminal. The payment was rejected by the financial institution. No automatic retry is possible. PAYMENT\_STATUS\_CANCELLED: Terminal. The end user cancelled the payment during authorisation. Standing-order statuses: PAYMENT\_STATUS\_ESTABLISHED: Terminal. A recurring/standing order has been successfully created. Deprecated (to be removed in a future release): PAYMENT\_STATUS\_UNKNOWN: The payment status is unknown. PAYMENT\_STATUS\_PROCESSING: The payment is currently being processed. PAYMENT\_STATUS\_COMPLETED: Indicates that the standing order has been successfully established. Possible values: PAYMENT\_STATUS\_INPUT\_NEEDED, PAYMENT\_STATUS\_PROCESSING, PAYMENT\_STATUS\_INITIATED, PAYMENT\_STATUS\_COMPLETED, PAYMENT\_STATUS\_INSUFFICIENT\_FUNDS, PAYMENT\_STATUS\_FAILED, PAYMENT\_STATUS\_BLOCKED, PAYMENT\_STATUS\_UNKNOWN, PAYMENT\_STATUS\_EXECUTED, PAYMENT\_STATUS\_SETTLED, PAYMENT\_STATUS\_AUTHORISING, PAYMENT\_STATUS\_CANCELLED, PAYMENT\_STATUS\_ESTABLISHED, PAYMENT\_STATUS\_REJECTED Response Object ```json { "request_id": "m8MDnv9okwxFNBV", "old_status": "PAYMENT_STATUS_INPUT_NEEDED", "new_status": "PAYMENT_STATUS_INITIATED" } ``` \=\*=\*=\*= #### /sandbox/transactions/create  #### Create sandbox transactions  Use the [/sandbox/transactions/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransactionscreate) endpoint to create new transactions for an existing Item. This endpoint can be used to add up to 10 transactions to any Item at a time. This endpoint can only be used with Items that were created in the Sandbox environment using the `user_transactions_dynamic` test user. You can use this to add transactions to test the [/transactions/get](https://plaid.com/docs/api/products/transactions/index.html.md#transactionsget) and [/transactions/sync](https://plaid.com/docs/api/products/transactions/index.html.md#transactionssync) endpoints. #### Request fields  **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** (required, string) The access token associated with the Item data is being requested for. **transactions** (required, \[object\]) List of transactions to be added **transactions->date\_transacted** (required, string) The date of the transaction, in ISO 8601 (YYYY-MM-DD) format. Transaction date must be the present date or a date up to 14 days in the past. Future dates are not allowed. Format: date **transactions->date\_posted** (required, string) The date the transaction posted, in ISO 8601 (YYYY-MM-DD) format. Posted date must be the present date or a date up to 14 days in the past. Future dates are not allowed. Format: date **transactions->amount** (required, number) The transaction amount. Can be negative. Format: double **transactions->description** (required, string) The transaction description. **transactions->iso\_currency\_code** (string) The ISO-4217 format currency code for the transaction. Defaults to USD. /sandbox/transactions/create Node▼ ```javascript const request: SandboxTransactionsCreateRequest = { access_token: accessToken, transactions: [ { amount: 100.50, date_posted: '2025-06-08', date_transacted: '2025-06-08', description: 'Tim Hortons' }, { amount: -25.75, date_posted: '2025-06-08', date_transacted: '2025-06-08', description: 'BestBuy', iso_currency_code: 'CAD' } ] }; try { const response = await plaidClient.sandbox_transactions_create(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "m8MDnv9okwxFNBV" } ``` --- # API - Users | Plaid Docs User endpoints  =============== #### API reference for User tokens  This page covers API endpoints related to user tokens, which are used by [Plaid Check](https://plaid.com/docs/check/index.html.md) and [Income](https://plaid.com/docs/income/index.html.md) , as well as by the [Multi-Item Link flow](https://plaid.com/docs/link/multi-item-link/index.html.md) . | Endpoints | | | --- | --- | | [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) | Create a user ID and token | | [/user/update](https://plaid.com/docs/api/users/index.html.md#userupdate) | Update user data or enable an existing user token for Plaid Check | | [/user/remove](https://plaid.com/docs/api/users/index.html.md#userremove) | Remove the user and their associated Items | | [/user/items/get](https://plaid.com/docs/api/users/index.html.md#useritemsget) | Return Items associated with a user | | See also | | | --- | --- | | [/sandbox/user/reset\_login](https://plaid.com/docs/api/sandbox/index.html.md#sandboxuserreset_login) | Force user into an error state for testing | \=\*=\*=\*= #### /user/create  #### Create user  This endpoint should be called for each of your end users before they begin a Plaid Check or Income flow, or a Multi-Item Link flow. This provides you a single token to access all data associated with the user. You should only create one per end user. The `consumer_report_user_identity` object must be present in order to create a Plaid Check Consumer Report for a user. If it is not provided during the [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) call, it can be added later by calling [/user/update](https://plaid.com/docs/api/users/index.html.md#userupdate) . Plaid Check Consumer Reports can only be created for US-based users; the user's address country must be `US`. If you call the endpoint multiple times with the same `client_user_id`, the first creation call will succeed and the rest will fail with an error message indicating that the user has been created for the given `client_user_id`. Ensure that you store the `user_token` along with your user's identifier in your database, as it is not possible to retrieve a previously created `user_token`. #### Request fields  **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\_user\_id** (required, string) A unique ID representing the end user. Maximum of 128 characters. 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. Max length: 128 Min length: 1 **consumer\_report\_user\_identity** (object) To create a Plaid Check Consumer Report for a user, this field must be present on the user token. If this field is not provided during user token creation, you can add it to the user later by calling /user/update. Once the field has been added to the user, you will be able to call /link/token/create with a non-empty consumer\_report\_permissible\_purpose (which will automatically create a Plaid Check Consumer Report), or call /cra/check\_report/create for that user. **consumer\_report\_user\_identity->first\_name** (required, string) The user's first name **consumer\_report\_user\_identity->last\_name** (required, string) The user's last name **consumer\_report\_user\_identity->phone\_numbers** (required, \[string\]) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14157452130". Phone numbers provided in other formats will be parsed on a best-effort basis. Phone number input is validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **consumer\_report\_user\_identity->emails** (required, \[string\]) The user's emails **consumer\_report\_user\_identity->ssn\_full** (string) The user's full social security number. This field should only be provided by lenders intending to share the resulting consumer report with a Government-Sponsored Enterprise (GSE), such as Fannie Mae or Freddie Mac. Format: "ddd-dd-dddd" **consumer\_report\_user\_identity->ssn\_last\_4** (string) The last 4 digits of the user's social security number. Max length: 4 Min length: 4 **consumer\_report\_user\_identity->date\_of\_birth** (required, string) To be provided in the format "yyyy-mm-dd". This field is required for all Plaid Check customers. Format: date **consumer\_report\_user\_identity->primary\_address** (required, object) Data about the components comprising an address. **consumer\_report\_user\_identity->primary\_address->city** (required, string) The full city name **consumer\_report\_user\_identity->primary\_address->region** (required, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **consumer\_report\_user\_identity->primary\_address->street** (required, string) The full street address Example: "564 Main Street, APT 15" **consumer\_report\_user\_identity->primary\_address->postal\_code** (required, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **consumer\_report\_user\_identity->primary\_address->country** (required, string) The ISO 3166-1 alpha-2 country code /user/create Node▼ ```javascript const request = { client_user_id: 'c0e2c4ee-b763-4af5-cfe9-46a46bce883d', consumer_report_user_identity: { first_name: "Carmen", last_name: "Berzatto", phone_numbers: ["+13125551212"], emails: ["carmy@example.com", "bear@example.com"], ssn_last_4: "1234", date_of_birth: "1987-01-31", primary_address: { city: "Chicago", region: "IL", street: "3200 W Armitage Ave", postal_code: "60657", country: "US" } } }; try { const response = await client.userCreate(request); } catch (error) { // handle error } ``` #### Response fields  **user\_token** (string) The user token associated with the User data is being requested for. **user\_id** (string) The Plaid user\_id of the User associated with this webhook, warning, or error. **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "user_token": "user-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d", "user_id": "wz666MBjYWTp2PDzzggYhM6oWWmBb", "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /user/update  #### Update user information  This endpoint is used to update user information associated with an existing `user_token`. It can also be used to enable an existing `user_token` for use with Consumer Reports by Plaid Check, by adding a `consumer_report_user_identity` object to the user. Plaid Check Consumer Reports can only be created for US-based users; the user's address country must be `US`. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **consumer\_report\_user\_identity** (object) To create a Plaid Check Consumer Report for a user, this field must be present on the user token. If this field is not provided during user token creation, you can add it to the user later by calling /user/update. Once the field has been added to the user, you will be able to call /link/token/create with a non-empty consumer\_report\_permissible\_purpose (which will automatically create a Plaid Check Consumer Report), or call /cra/check\_report/create for that user. **consumer\_report\_user\_identity->first\_name** (required, string) The user's first name **consumer\_report\_user\_identity->last\_name** (required, string) The user's last name **consumer\_report\_user\_identity->phone\_numbers** (required, \[string\]) The user's phone number, in E.164 format: +{countrycode}{number}. For example: "+14157452130". Phone numbers provided in other formats will be parsed on a best-effort basis. Phone number input is validated against valid number ranges; number strings that do not match a real-world phone numbering scheme may cause the request to fail, even in the Sandbox test environment. **consumer\_report\_user\_identity->emails** (required, \[string\]) The user's emails **consumer\_report\_user\_identity->ssn\_full** (string) The user's full social security number. This field should only be provided by lenders intending to share the resulting consumer report with a Government-Sponsored Enterprise (GSE), such as Fannie Mae or Freddie Mac. Format: "ddd-dd-dddd" **consumer\_report\_user\_identity->ssn\_last\_4** (string) The last 4 digits of the user's social security number. Max length: 4 Min length: 4 **consumer\_report\_user\_identity->date\_of\_birth** (required, string) To be provided in the format "yyyy-mm-dd". This field is required for all Plaid Check customers. Format: date **consumer\_report\_user\_identity->primary\_address** (required, object) Data about the components comprising an address. **consumer\_report\_user\_identity->primary\_address->city** (required, string) The full city name **consumer\_report\_user\_identity->primary\_address->region** (required, string) The region or state. In API versions 2018-05-22 and earlier, this field is called state. Example: "NC" **consumer\_report\_user\_identity->primary\_address->street** (required, string) The full street address Example: "564 Main Street, APT 15" **consumer\_report\_user\_identity->primary\_address->postal\_code** (required, string) The postal code. In API versions 2018-05-22 and earlier, this field is called zip. **consumer\_report\_user\_identity->primary\_address->country** (required, string) The ISO 3166-1 alpha-2 country code **user\_id** (string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. /user/update Node▼ ```javascript const request = { user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab', consumer_report_user_identity: { first_name: "Carmen", last_name: "Berzatto", phone_numbers: ["+13125551212"], emails: ["carmy@example.com", "bear@example.com"], ssn_last_4: "1234", date_of_birth: "1987-01-31", primary_address: { city: "Chicago", region: "IL", street: "3200 W Armitage Ave", postal_code: "60657", country: "US" } } }; try { const response = await client.userUpdate(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /user/remove  #### Remove user  [/user/remove](https://plaid.com/docs/api/users/index.html.md#userremove) deletes a user token and and associated information, including any Items associated with the token. Any subsequent calls to retrieve information using the same user token will result in an error stating the user does not exist. If a user is created for a given `client_user_id` using [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) and that user is then deleted with [/user/remove](https://plaid.com/docs/api/users/index.html.md#userremove) , the `client_user_id` cannot be reused for another [/user/create](https://plaid.com/docs/api/users/index.html.md#usercreate) request. #### Request fields  **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. **user\_token** (string) The user token associated with the User data is being requested for. **user\_id** (string) A unique user\_id generated by Plaid for the client-provided client\_user\_id. This field is currently in beta. /user/remove Node▼ ```javascript const request = { user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab' }; try { const response = await client.userRemove(request); } catch (error) { // handle error } ``` #### Response fields  **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "request_id": "Aim3b" } ``` \=\*=\*=\*= #### /user/items/get  #### Get Items associated with a User  Returns Items associated with a User along with their corresponding statuses. #### Request fields  **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. **user\_token** (required, string) The user token associated with the User data is being requested for. /user/items/get Node▼ ```javascript const request = { user_token: 'user-environment-12345678-abcd-4bcd-abcd-1234567890ab' }; try { const response = await client.userItemsGetRequest(request); } catch (error) { // handle error } ``` #### Response fields  string **items** (\[object\]) 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. **items->institution\_id** (nullable, string) The Plaid Institution ID associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **items->institution\_name** (nullable, string) The name of the institution associated with the Item. Field is null for Items created without an institution connection, such as Items created via Same Day Micro-deposits. **items->webhook** (nullable, string) The URL registered to receive webhooks for the Item. **items->auth\_method** (nullable, string) The method used to populate Auth data for the Item. This field is only populated for Items that have had Auth numbers data set on at least one of its accounts, and will be null otherwise. For info about the various flows, see our Auth coverage documentation. INSTANT\_AUTH: The Item's Auth data was provided directly by the user's institution connection. INSTANT\_MATCH: The Item's Auth data was provided via the Instant Match fallback flow. AUTOMATED\_MICRODEPOSITS: The Item's Auth data was provided via the Automated Micro-deposits flow. SAME\_DAY\_MICRODEPOSITS: The Item's Auth data was provided via the Same Day Micro-deposits flow. INSTANT\_MICRODEPOSITS: The Item's Auth data was provided via the Instant Micro-deposits flow. DATABASE\_MATCH: The Item's Auth data was provided via the Database Match flow. DATABASE\_INSIGHTS: The Item's Auth data was provided via the Database Insights flow. TRANSFER\_MIGRATED: The Item's Auth data was provided via /transfer/migrate\_account. INVESTMENTS\_FALLBACK: The Item's Auth data for Investments Move was provided via a fallback flow. Possible values: INSTANT\_AUTH, INSTANT\_MATCH, AUTOMATED\_MICRODEPOSITS, SAME\_DAY\_MICRODEPOSITS, INSTANT\_MICRODEPOSITS, DATABASE\_MATCH, DATABASE\_INSIGHTS, TRANSFER\_MIGRATED, INVESTMENTS\_FALLBACK, null **items->error** (nullable, object) 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. **items->error->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, SANDBOX\_ERROR, PARTNER\_ERROR, SIGNAL\_ERROR, TRANSACTIONS\_ERROR, TRANSACTION\_ERROR, TRANSFER\_ERROR, CHECK\_REPORT\_ERROR, CONSUMER\_REPORT\_ERROR, USER\_ERROR **items->error->error\_code** (string) The particular error code. Safe for programmatic use. **items->error->error\_code\_reason** (nullable, string) The specific reason for the error code. Currently, reasons are only supported 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. **items->error->error\_message** (string) A developer-friendly representation of the error code. This may change over time and is not safe for programmatic use. **items->error->display\_message** (nullable, string) 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. **items->error->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. **items->error->causes** (array) 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. **items->error->status** (nullable, integer) 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. **items->error->documentation\_url** (string) The URL of a Plaid documentation page with more information about the error **items->error->suggested\_action** (nullable, string) Suggested steps for resolving the error **items->available\_products** (\[string\]) A list of products available for the Item that have not yet been accessed. The contents of this array will be mutually exclusive with billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **items->billed\_products** (\[string\]) A list of products that have been billed for the Item. The contents of this array will be mutually exclusive with available\_products. Note - billed\_products is populated in all environments but only requests in Production are billed. Also note that products that are billed on a pay-per-call basis rather than a pay-per-Item basis, such as balance, will not appear here. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **items->products** (\[string\]) A list of products added to the Item. In almost all cases, this will be the same as the billed\_products field. For some products, it is possible for the product to be added to an Item but not yet billed (e.g. Assets, before /asset\_report/create has been called, or Auth or Identity when added as Optional Products but before their endpoints have been called), in which case the product may appear in products but not in billed\_products. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, payment\_initiation, identity\_verification, transactions, credit\_details, income, income\_verification, standing\_orders, transfer, employment, recurring\_transactions, transactions\_refresh, signal, statements, processor\_payments, processor\_identity, profile, cra\_base\_report, cra\_income\_insights, cra\_partner\_insights, cra\_network\_insights, cra\_cashflow\_insights, cra\_monitoring, cra\_lend\_score, layer, pay\_by\_bank, protect\_linked\_bank **items->consented\_products** (\[string\]) A list of products that the user has consented to for the Item via Data Transparency Messaging. This will consist of all products where both of the following are true: the user has consented to the required data scopes for that product and you have Production access for that product. Possible values: assets, auth, balance, balance\_plus, beacon, identity, identity\_match, investments, investments\_auth, liabilities, transactions, income, income\_verification, transfer, employment, recurring\_transactions, signal, statements, processor\_payments, processor\_identity, cra\_base\_report, cra\_income\_insights, cra\_lend\_score, cra\_partner\_insights, cra\_cashflow\_insights, cra\_monitoring, layer **items->consent\_expiration\_time** (nullable, string) The date and time at which the Item's access consent will expire, in ISO 8601 format. If the Item does not have consent expiration scheduled, this field will be null. Currently, only institutions in Europe and a small number of institutions in the US have expiring consent. For a list of US institutions that currently expire consent, see the OAuth Guide. Format: date-time **items->update\_type** (string) Indicates whether an Item requires user interaction to be updated, which can be the case for Items with some forms of two-factor authentication. background - Item can be updated in the background user\_present\_required - Item requires user interaction to be updated Possible values: background, user\_present\_required **request\_id** (string) A unique identifier for the request, which can be used for troubleshooting. This identifier, like all Plaid identifiers, is case sensitive. Response Object ```json { "items": [ { "available_products": [ "balance", "auth" ], "billed_products": [ "identity", "transactions" ], "error": null, "institution_id": "ins_109508", "institution_name": "First Platypus Bank", "item_id": "Ed6bjNrDLJfGvZWwnkQlfxwoNz54B5C97ejBr", "update_type": "background", "webhook": "https://plaid.com/example/hook", "consent_expiration_time": null }, { "available_products": [ "balance", "identity", "payment_initiation", "transactions" ], "billed_products": [ "assets", "auth" ], "error": null, "institution_id": "ins_109508", "institution_name": "First Platypus Bank", "item_id": "DWVAAPWq4RHGlEaNyGKRTAnPLaEmo8Cvq7na6", "update_type": "background", "webhook": "https://plaid.com/example/hook", "consent_expiration_time": null } ], "request_id": "m8MDnv9okwxFNBV" } ``` --- # API - API versioning | Plaid Docs API versioning and changelog  ============================= #### Keep track of changes and updates to the Plaid API  \=\*=\*=\*= #### API versioning  This page covers backwards-incompatible, versioned API changes. For a list of all API updates, including non-versioned ones, see the [changelog](https://plaid.com/docs/changelog/index.html.md) . Whenever we make a backwards-incompatible change to a general availability, non-beta product, we release a new API version to avoid causing breakages for existing developers. You can then continue to use the old API version, or update your application to upgrade to the new Plaid API version. APIs for beta products are subject to breaking changes without versioning, with 30 days notice. We consider the following changes to be backwards compatible (non-breaking): * Adding new API endpoints * Adding new optional parameters to existing endpoints * Adding new data elements to existing response schemas or webhooks * Adding new enum values, including `error_types` and `error_codes` * Subdividing existing `error_codes` into more precise errors, and changing the http response code as necessary, as long as the error cannot be resolved via in-app logic (such as launching update mode or waiting for a few seconds and retrying) during runtime. For example, changing `PRODUCT_NOT_READY` errors to a different `error_code` would be a breaking change, since that error can be resolved by retrying a few seconds later, but converting an existing `INTERNAL_SERVER_ERROR` to a more specific error would not be. * Changing the behavior for use cases or platforms that are explicitly not supported. * Adding new `webhook_types` and `webhook_codes` * Changing the length or content of any API identifier ##### How to set your API version  The default version of the API used in any requests you make can be configured in the [Dashboard](https://dashboard.plaid.com/developers/api) and will be used when version information is not otherwise specified. You can also manually set the `Plaid-Version` header to use a specific version for a given API request. If you're using one of the Plaid client libraries, they should all be pinned to the latest version of the API at the time when they were released. This means that you can change the API version you're using by updating to a newer version of the client library. API version example Node▼ ```javascript const { Configuration, PlaidApi, PlaidEnvironments } = require('plaid'); const configuration = new Configuration({ basePath: PlaidEnvironments[process.env.PLAID_ENV], baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, 'Plaid-Version': '2020-09-14', }, }, }); const client = new PlaidApi(configuration); ``` \=\*=\*=\*= #### Version 2020-09-14  This version includes several changes to improve authentication, streamline and simplify the API, and improve international support. * To improve authentication, the `public_key` has been fully removed from the API. Endpoints that previously accepted a `public_key` for authentication, namely [/institutions/get\_by\_id](https://plaid.com/docs/api/institutions/index.html.md#institutionsget_by_id) and [/institutions/search](https://plaid.com/docs/api/institutions/index.html.md#institutionssearch) , now require a `client_id` and `secret` for authentication instead. * [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) no longer returns a `removed` boolean. This field created developer confusion, because it was never possible for it to return `false`. A failed [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) call will result in an [error](https://plaid.com/docs/errors/index.html.md) being returned instead. * Several undocumented and unused fields have been removed from the `institution` object returned by the institutions endpoints [/institutions/get](https://plaid.com/docs/api/institutions/index.html.md#institutionsget) , [/institutions/get\_by\_id](https://plaid.com/docs/api/institutions/index.html.md#institutionsget_by_id) , and [/institutions/search](https://plaid.com/docs/api/institutions/index.html.md#institutionssearch) . The removed fields are: `input_spec`, `credentials`, `include_display_data`, `has_mfa`, `mfa`, and `mfa_code_type`. * The institutions endpoints [/institutions/get](https://plaid.com/docs/api/institutions/index.html.md#institutionsget) , [/institutions/get\_by\_id](https://plaid.com/docs/api/institutions/index.html.md#institutionsget_by_id) , and [/institutions/search](https://plaid.com/docs/api/institutions/index.html.md#institutionssearch) now require the use of a `country_codes` parameter and no longer use `US` as a default value if `country_codes` is not specified, as this behavior caused confusion and unexpected behavior for non-US developers. As part of this change, the `country_codes` parameter has been moved out of the `options` object and is now a top-level parameter. * To support international payments, the response schema for the partner-only [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) endpoint has changed. The 2018-05-22 and 2019-05-29 API releases previously extended the response schema for [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) in order to support international accounts, but these changes were never extended to the [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) endpoint. This release brings the response for [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) in line with the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) response, allowing Plaid partners to extend support for using non-ACH payment methods, such as EFT payments (Canada) or SEPA credit and direct debit (Europe). Accommodating this change does not require any code changes from Plaid developers who use partnership integrations, only from the Plaid partners themselves. Previous /processor/auth/get response ```json "numbers": [{ "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }] ``` 2020-09-14 API version /processor/auth/get response ```json "numbers": { "ach": [{ "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }], "eft":[{ "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" }], "international":[{ "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "bic": "NWBKGB21" "iban": "GB29NWBK60161331926819", }], "bacs":[{ "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" }] } ``` \=\*=\*=\*= #### Version 2019-05-29  * The Auth `numbers` schema has been extended to support BACS (UK) and other international (IBAN and BIC) account numbers used across the EU. * Renamed the `zip` field to `postal_code` and the `state` field to `region` in all [Identity](https://plaid.com/docs/api/products/identity/index.html.md) and [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md) responses to be more international friendly. * [Identity](https://plaid.com/docs/api/products/identity/index.html.md) objects in [Identity responses](https://plaid.com/docs/api/products/identity/index.html.md) are now embedded on the `owners` field of the corresponding account. * Address data fields for [Identity](https://plaid.com/docs/api/products/identity/index.html.md) responses are now nullable and are returned with a null value when they aren’t available rather than an empty string. * Added a ISO-3166-1 alpha-2 `country` field to all [Identity](https://plaid.com/docs/api/products/identity/index.html.md) and [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md) responses. * The account type `brokerage` has been renamed to `investment`. These changes are meant to enable access to International institutions for Plaid’s launch in Europe and add support for investment accounts. Test in the [Sandbox](https://plaid.com/docs/sandbox/index.html.md) with the new API version to see the new Schema and enable support for International institutions from the [Dashboard](https://dashboard.plaid.com/developers/api) in order to create Items for these institutions. ##### Auth  Before, `numbers` only had fields for `ach` (US accounts) and `eft` (Canadian accounts) accounts numbers: Previous Auth response (2018-05-22 version) ```json "numbers": { "ach": [{ "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }], "eft":[{ "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" }] } ``` Now, the structure of `numbers` hasn’t changed, but it can have `ach`, `eft`, `bacs` (UK accounts), or `international` (currently EU accounts) numbers. Note that the schema for each of these numbers are different from one another. It is possible for multiple networks to be present in the response. New Auth response (2019-05-29 version) ```json "numbers": { "ach": [{ "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }], "eft":[{ "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" }], "international":[{ "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "bic": "NWBKGB21" "iban": "GB29NWBK60161331926819", }], "bacs":[{ "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" }] } ``` ##### Identity  The previous version of [Identity](https://plaid.com/docs/api/products/identity/index.html.md) had US specific field names and did not include a country as part of the location. Furthermore, the identity data was not scoped to a specific account. Previous Identity response (2018-05-22 version) ```json "identity": { "addresses": [{ "accounts": [ "Plaid Checking 0000", "Plaid Saving 1111", "Plaid CD 2222" ], "data": { "city": "Malakoff", "state": "NY", "street": "2992 Cameron Road", "zip": "14236" }, "primary": true }], ... } ``` Now, `identity` has international friendly field names of `region` and `postal_code` instead of `zip` and `state` as well as a ISO-3166-1 alpha-2 `country` field. Address data fields (`city`, `region`, `street`, `postal_code`, and `country`) are now nullable and are returned with a `null` value when they aren’t available rather than as an empty string. The identity object is now available on the "owners" key of the account, which represents ownership of specific accounts. New Identity response (2019-05-29 version) ```json "accounts": [{ ... "owners": [{ "addresses": [{ "data": { "city": "Malakoff", "region": "NY", "street": "2992 Cameron Road", "postal_code": "14236", "country": "US", }, "primary": true }] }], ... }] ``` ##### Transactions  When no transactions are returned from a request, the `transactions` object will now be `null` rather than an empty array. In addition, the same changes to [Identity](https://plaid.com/docs/api/products/identity/index.html.md) were also made to [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md) . Previous Transactions response (2018-05-22 version) ```json "transactions": [{ ... "location": { "address": "300 Post St", "city": "San Francisco", "state": "CA", "zip": "94108", "lat": null, "lon": null }, ... ]} ``` New Transactions response (2019-05-29 version) ```json "transactions": [{ ... "location": { "address": "300 Post St", "city": "San Francisco", "region": "CA", "postal_code": "94108", "country": "US", "lat": null, "lon": null }, ... ]} ``` ##### Institutions  Changes to the institutions schema effects responses from all of the institutions API endpoints: * POST [/institutions/search](https://plaid.com/docs/api/institutions/index.html.md#institutionssearch) * POST [/institutions/get](https://plaid.com/docs/api/institutions/index.html.md#institutionsget) * POST [/institutions/get\_by\_id](https://plaid.com/docs/api/institutions/index.html.md#institutionsget_by_id) The previous version of the Institution schema did not include the country of the institution as part of the response. Previous Institution response (2018-05-22 version) ```json "institution": { "credentials": [{ "label": "User ID", "name": "username", "type": "text" }, { "label": "Password", "name": "password", "type": "password" }], "has_mfa": true, "institution_id": "ins_109512", "mfa": [ "code", "list", "questions", "selections" ], "name": "Houndstooth Bank", "products": [ "auth", "balance", "identity", "transactions" ], // included when options.include_status is true "status": {object} } ``` New Institution response (2019-05-29 version) ```json "institution": { "country_codes": ["US"], "credentials": [{ "label": "User ID", "name": "username", "type": "text" }, { "label": "Password", "name": "password", "type": "password" }], "has_mfa": true, "institution_id": "ins_109512", "mfa": [ "code", "list", "questions", "selections" ], "name": "Houndstooth Bank", "products": [ "auth", "balance", "identity", "transactions" ], // included when options.include_status is true "status": {object} } ``` \=\*=\*=\*= #### Version 2018-05-22  * The Auth `numbers` schema has changed to support ACH (US-based) and EFT (Canadian-based) account numbers * Added the `iso_currency_code` and `unofficial_currency_code` fields to all [Accounts](https://plaid.com/docs/api/accounts/index.html.md#accounts-get-response-accounts) and [Transactions](https://plaid.com/docs/api/products/transactions/index.html.md) responses Enable support for Canadian institutions from the [Dashboard](https://dashboard.plaid.com/developers/api) and then test in the [Sandbox](https://plaid.com/docs/sandbox/index.html.md) using the test Canadian institution, Tartan-Dominion Bank of Canada (institution ID `ins_43`). Before, `numbers` was a list of objects, each one representing the account and routing number for an ACH-eligible US checking or savings account: Previous Auth response (2017-03-08 version) ```json "numbers": [{ "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }] ``` **New Auth response (2018-05-22 version)** Now, `numbers` can have either `ach` (US accounts) or `eft` (Canadian accounts) numbers. Note that the schema for `ach` numbers and `eft` numbers are different from one another. New Auth response (2018-05-22 version) for ACH numbers ```json "numbers": { "ach": [{ "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" }], "eft": [] } ``` New Auth response (2018-05-22 version) for EFT numbers ```json "numbers": { "ach":[], "eft":[{ "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" }] } ``` \=\*=\*=\*= #### Version 2017-03-08  The `2017-03-08` version was the first versioned release of the API. --- # API - Webhooks | Plaid Docs Webhooks  ========= #### API reference for webhooks  Prefer to learn by watching? Our [video tutorial](https://www.youtube.com/watch?v=0E0KEAVeDyc) walks you through the basics of incorporating Plaid webhooks into your application. Looking for webhook schemas? The reference documentation for specific webhooks ([Transactions](https://plaid.com/docs/api/products/transactions/index.html.md#webhooks) , [Auth](https://plaid.com/docs/api/products/auth/index.html.md#webhooks) , [Assets](https://plaid.com/docs/api/products/assets/index.html.md#webhooks) , [Identity](https://plaid.com/docs/api/products/identity/index.html.md#webhooks-beta) , [Identity Verification](https://plaid.com/docs/api/products/identity-verification/index.html.md#webhooks) , [Monitor](https://plaid.com/docs/api/products/monitor/index.html.md) , [Investments](https://plaid.com/docs/api/products/investments/index.html.md#webhooks) , [Liabilities](https://plaid.com/docs/api/products/liabilities/index.html.md#webhooks) , [Payment Initiation](https://plaid.com/docs/api/products/payment-initiation/index.html.md#webhooks) , [Income](https://plaid.com/docs/api/products/income/index.html.md#webhooks) , [Virtual Accounts](https://plaid.com/docs/api/products/virtual-accounts/index.html.md#webhooks) , [Items](https://plaid.com/docs/api/items/index.html.md#webhooks) , and [Transfer](https://plaid.com/docs/api/products/transfer/index.html.md) ) has moved to its respective API reference pages. \=\*=\*=\*= #### Introduction to webhooks  A webhook is an HTTP request used to provide push notifications. Plaid sends webhooks to programmatically inform you about changes to Plaid Items or the status of asynchronous processes. For example, Plaid will send a webhook when an Item is in an error state or has additional data available, or when a non-blocking process (like gathering transaction data or verifying a bank account via micro-deposits) is complete. To receive Plaid webhooks, set up a dedicated endpoint on your server as a webhook listener that can receive POST requests, then provide this endpoint URL to Plaid as described in the next section. You can also test webhooks without setting up your own endpoint following the instructions in [Testing webhooks in Sandbox](https://plaid.com/docs/api/webhooks/index.html.md#testing-webhooks-in-sandbox) . \=\*=\*=\*= #### Configuring webhooks  Webhooks are typically configured via the `webhook` parameter of [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) , although some webhooks (especially those used in contexts where Link tokens are not always required), such as Identity Verification webhooks, are configured via the [Plaid Dashboard](https://dashboard.plaid.com/developers/webhooks) instead. When specifying a webhook, the URL must be in the standard format of `http(s)://(www.)domain.com/` and, if https, must have a valid SSL certificate. To view response codes and debug any issues with webhook setup, see the [Logs section in the Dashboard](https://dashboard.plaid.com/activity/logs) . Plaid sends POST payloads with raw JSON to your webhook URL from one of the following IP addresses: * 52.21.26.131 * 52.21.47.157 * 52.41.247.19 * 52.88.82.239 Note that these IP addresses are subject to change. You can optionally verify webhooks to ensure they are from Plaid. For more information, see [webhook verification](https://plaid.com/docs/api/webhooks/webhook-verification/index.html.md) . \=\*=\*=\*= #### Webhook retries  If there is a non-200 response or no response within 10 seconds from the webhook endpoint, Plaid will keep attempting to send the webhook for up to 24 hours. Each attempt will be tried after a delay that is 4 times longer than the previous delay, starting with 30 seconds. To avoid unnecessary retries, Plaid won't retry webhooks if we detect that the webhook receiver endpoint has rejected more than 90% of webhooks sent by Plaid over the last 24 hours. \=\*=\*=\*= #### Best practices for applications using webhooks  You should design your application to handle duplicate and out-of-order webhooks. Ensure [idempotency](https://martinfowler.com/articles/patterns-of-distributed-systems/idempotent-receiver.html) on actions you take when receiving a webhook. If you drive application state with webhooks, ensure your code doesn't rely on a specific order of webhook receipt. If you (or Plaid) experience downtime for longer than Plaid's [retry period](https://plaid.com/docs/api/webhooks/index.html.md#webhook-retries) , you will lose webhooks. Ensure your application can recover by implementing endpoint polling or other appropriate logic if a webhook is not received within an expected window. All data present in webhooks is also present in our other APIs. It's best to keep your receiver as simple as possible, such as a receiver whose only job is to write the webhook into a queue or reliable storage. This is important for two reasons. First, if the receiver does not respond within 10 seconds, the delivery is considered failed. Second, because webhooks can arrive at unpredictable rates. Therefore if you do a lot of work in your receiver - e.g. generating and sending an email - spikes are likely to overwhelm your downstream services, or cause you to be rate-limited if the downstream is a third-party. \=\*=\*=\*= #### Testing webhooks in Sandbox  Webhooks will fire as normal in the Sandbox environment, with the exception of Transfer webhooks. For testing purposes, you can also use [/sandbox/item/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) , [/sandbox/income/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxincomefire_webhook) , or [/sandbox/transfer/fire\_webhook](https://plaid.com/docs/api/sandbox/index.html.md#sandboxtransferfire_webhook) to fire a webhook on demand. If you don't have a webhook endpoint configured yet, you can also use a tool such as [Webhook.site](https://webhook.site) or [Request Bin](https://requestbin.com/) to quickly and easily set up a webhook listener endpoint. When directing webhook traffic to third-party tools, make sure you are using Plaid's Sandbox environment and not sending out live data. \=\*=\*=\*= #### Example in Plaid Pattern  For real-life examples of handling webhooks that illustrate how to handle sample transactions and Item webhooks, see [handleTransactionsWebhook.js](https://github.com/plaid/pattern/blob/master/server/webhookHandlers/handleTransactionsWebhook.js) and [handleItemWebhook.js](https://github.com/plaid/pattern/blob/master/server/webhookHandlers/handleItemWebhook.js) These files contain webhook handling code for the Node-based [Plaid Pattern](https://github.com/plaid/pattern) sample app. --- # API - Webhook verification | Plaid Docs Verify webhooks  ================ #### API reference for verifying webhooks  Plaid signs all outgoing webhooks so that you can verify the authenticity of any incoming webhooks to your application. A message signature is included in the `Plaid-Verification` header (Note: this is the canonical representation of the header field, but HTTP 1.x headers should be handled as [case-insensitive](https://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2) , HTTP 2 headers are always lowercase). The verification process is optional and is not required for your application to handle Plaid webhooks. The verification process requires understanding JSON Web Tokens (JWTs) and JSON Web Keys (JWKs). More information about these specifications can be found at [jwt.io](http://www.jwt.io) . Libraries for interpreting and verifying JWKs and JWTs most likely exist in your preferred language. It is highly recommended that you utilize well-tested libraries rather than trying to implement these specifications from scratch. \=\*=\*=\*= #### Steps to verify webhooks  ##### Extract the JWT header  Extract the Plaid-Verification HTTP header from any Plaid webhook (to get a webhook, see [firing webhooks in Sandbox](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemfire_webhook) ). The value of the Plaid-Verification header is a JWT, and will be referred to as "the JWT" in following steps. Using your preferred JWT library, decode the JWT and extract the header without validating the signature. This functionality most likely exists in your preferred JWT library. An example JWT header is shown below. JWT header ```json { "alg": "ES256", "kid": "bfbd5111-8e33-4643-8ced-b2e642a72f3c", "typ": "JWT" } ``` Ensure that the value of the `alg` (algorithm) field in the header is `"ES256"`. Reject the webhook if this is not the case. Extract the value corresponding to the `kid` (key ID) field. This will be used to retrieve the JWK public key corresponding to the private key that was used to sign this request. ##### Get the verification key  Use the [/webhook\_verification\_key/get](https://plaid.com/docs/api/webhooks/webhook-verification/index.html.md#get-webhook-verification-key) endpoint to get the webhook verification key. \=\*=\*=\*= #### /webhook\_verification\_key/get  #### Get webhook verification key  Plaid signs all outgoing webhooks and provides JSON Web Tokens (JWTs) so that you can verify the authenticity of any incoming webhooks to your application. A message signature is included in the `Plaid-Verification` header. The [/webhook\_verification\_key/get](https://plaid.com/docs/api/webhooks/webhook-verification/index.html.md#get-webhook-verification-key) endpoint provides a JSON Web Key (JWK) that can be used to verify a JWT. #### Request fields  **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. **key\_id** (required, string) The key ID ( kid ) from the JWT header. Get webhook verification key Node▼ ```javascript const request: WebhookVerificationKeyGetRequest = { key_id: keyID, }; try { const response = await plaidClient.webhookVerificationKeyGet(request); const key = response.data.key; } catch (error) { // handle error } ``` #### Response fields  **key** (object) A JSON Web Key (JWK) that can be used in conjunction with JWT libraries to verify Plaid webhooks **key->alg** (string) The alg member identifies the cryptographic algorithm family used with the key. **key->crv** (string) The crv member identifies the cryptographic curve used with the key. **key->kid** (string) The kid (Key ID) member can be used to match a specific key. This can be used, for instance, to choose among a set of keys within the JWK during key rollover. **key->kty** (string) The kty (key type) parameter identifies the cryptographic algorithm family used with the key, such as RSA or EC. **key->use** (string) The use (public key use) parameter identifies the intended use of the public key. **key->x** (string) The x member contains the x coordinate for the elliptic curve point, provided as a base64url-encoded string of the coordinate's big endian representation. **key->y** (string) The y member contains the y coordinate for the elliptic curve point, provided as a base64url-encoded string of the coordinate's big endian representation. **key->created\_at** (integer) The timestamp when the key was created, in Unix time. **key->expired\_at** (nullable, integer) The timestamp when the key expired, in Unix 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. Response Object ```json { "key": { "alg": "ES256", "created_at": 1560466150, "crv": "P-256", "expired_at": null, "kid": "bfbd5111-8e33-4643-8ced-b2e642a72f3c", "kty": "EC", "use": "sig", "x": "hKXLGIjWvCBv-cP5euCTxl8g9GLG9zHo_3pO5NN1DwQ", "y": "shhexqPB7YffGn6fR6h2UhTSuCtPmfzQJ6ENVIoO4Ys" }, "request_id": "RZ6Omi1bzzwDaLo" } ``` ##### Validate the webhook  Interpret the returned `key` as a JWK public key. Using your preferred JWT library, verify the JWT using the JWK. If the signature is not valid, reject the webhook. Otherwise, extract the payload of the JWT. It will look something like the JSON below. JWT Payload ```json { "iat": 1560211755, "request_body_sha256": "bbe8e9..." } ``` Use the issued at time denoted by the `iat` field to verify that the webhook is not more than 5 minutes old. Rejecting outdated webhooks can help prevent replay attacks. Extract the value of the `request_body_sha256` field. This will be used to check the integrity and authenticity of the webhook body. Compute the SHA-256 of the webhook body and ensure that it matches what is specified in the `request_body_sha256` field of the validated JWT. If not, reject the webhook. It is best practice to use a constant time string/hash comparison method in your preferred language to prevent timing attacks. Note that the `request_body_sha256` sent in the JWT payload is sensitive to the whitespace in the webhook body and uses a tab-spacing of 2. If the webhook body is stored with a tab-spacing of 4, the hash will not match. \=\*=\*=\*= #### Example implementation  The following code shows one example method that can be used to verify webhooks sent by Plaid and cache public keys. Sample implementations for verifying a Plaid webhook Node▼ ```javascript const compare = require('secure-compare'); const { jwtDecode } = require('jwt-decode'); // syntax for jwtDecode 4.0 or later const JWT = require('jose'); const sha256 = require('js-sha256'); const plaid = require('plaid'); // Single cached key instead of a Map let cachedKey = null; const plaidClient = new plaid.Client({ clientID: process.env.CLIENT_ID, secret: process.env.SECRET, env: plaid.environments.sandbox, }); const verify = async (body, headers) => { const signedJwt = JSON.parse(headers)['plaid-verification']; const decodedToken = jwtDecode(signedJwt); const decodedTokenHeader = jwtDecode(signedJwt, { header: true }); const currentKeyID = decodedTokenHeader.kid; // Fetch key if not already cached if (!cachedKey) { try { const response = await plaidClient.webhookVerificationKeyGet({ key_id: currentKeyID, }); cachedKey = response.data.key; } catch (error) { return false; } } // If key is still not set, verification fails if (!cachedKey) { return false; } // Validate the signature and iat try { const keyLike = await JWT.importJWK(cachedKey); // This will throw an error if verification fails await JWT.jwtVerify(signedJwt, keyLike, { maxTokenAge: '5 min', }); } catch (error) { return false; } // Compare hashes const bodyHash = sha256(body); const claimedBodyHash = decodedToken.request_body_sha256; return compare(bodyHash, claimedBodyHash); }; ``` --- # Assets - Create an Asset Report | Plaid Docs Create an Asset Report  ======================= #### Learn how to create Asset Reports with the Assets product  In this guide, we'll start from scratch and walk through how to use [Assets](https://plaid.com/docs/api/products/assets/index.html.md) to generate and retrieve Asset Reports. If a user's Asset Report involves data from multiple financial institutions, the user will need to allow access to each institution, which will in turn enable you to access their data from each institution. If you are already familiar with using Plaid and are set up to make calls to the Plaid API, you can skip ahead to [Creating Asset Reports](https://plaid.com/docs/assets/add-to-app/index.html.md#creating-asset-reports) . #### Get Plaid API keys and complete application and company profile  If you don't already have one, you'll need to [create a Plaid developer account](https://dashboard.plaid.com/signup) . After creating your account, you can find your [API keys](https://dashboard.plaid.com/developers/keys) under the Team Settings menu on the Plaid Dashboard. You will also need to complete your [application profile](https://dashboard.plaid.com/settings/company/app-branding) and [company profile](https://dashboard.plaid.com/settings/company/profile) in the Dashboard. This will provide basic information about your app to help users manage their connection on the Plaid Portal at [my.plaid.com](https://my.plaid.com) . The application profile and company profile must be completed before connecting to certain institutions in Production. #### Install and initialize Plaid libraries  You can use our official server-side client libraries to connect to the Plaid API from your application: Terminal Node▼ ```javascript // Install via npm npm install --save plaid ``` After you've installed Plaid's client libraries, you can initialize them by passing in your `client_id`, `secret`, and the environment you wish to connect to (Sandbox or Production). This will make sure the client libraries pass along your `client_id` and `secret` with each request, and you won't need to explicitly include it in any other calls. Node▼ ```javascript // Using Express const express = require('express'); const app = express(); app.use(express.json()); const { Configuration, PlaidApi, PlaidEnvironments } = require('plaid'); const configuration = new Configuration({ basePath: PlaidEnvironments.sandbox, baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, }, }, }); const client = new PlaidApi(configuration); ``` #### Create an Item in Link  Plaid Link is a drop-in module that provides a secure, elegant authentication flow for each institution that Plaid supports. Link makes it secure and easy for users to connect their bank accounts to Plaid. Note that these instructions cover Link on the web. For instructions on using Link within mobile apps, see the [Link documentation](https://plaid.com/docs/link/index.html.md) . Using Link, we will create a Plaid _Item_, which is a Plaid term for a login at a financial institution. An Item is not the same as a financial institution account, although every account will be associated with an Item. For example, if a user has one login at their bank that allows them to access both their checking account and their savings account, a single Item would be associated with both of those accounts. Asset Reports can consist of user data from multiple financial institutions; users will need to use Link to provide access to each financial institution, providing you with multiple Items. If you want to customize Link's look and feel, you can do so from the [Dashboard](https://dashboard.plaid.com/link) . Before initializing Link, you will need to create a new `link_token` on the server side of your application. A `link_token` is a short-lived, one-time use token that is used to authenticate your app with Link. You can create one using the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) endpoint. Then, on the client side of your application, you'll need to initialize Link with the `link_token` that you just created. Since, for Assets, users may need to grant access to more than one financial institution via Link, you may need to initialize Link more than once. In the code samples below, you will need to replace `PLAID_CLIENT_ID` and `PLAID_SECRET` with your own keys, which you can obtain from the [Dashboard](https://dashboard.plaid.com/developers/keys) . ##### Create a link\_token  Node▼ ```javascript app.post('/api/create_link_token', async function (request, response) { // Get the client_user_id by searching for the current user const user = await User.find(...); const clientUserId = user.id; const request = { user: { // This should correspond to a unique id for the current user. client_user_id: clientUserId, }, client_name: 'Plaid Test App', products: ['assets'], language: 'en', webhook: 'https://webhook.example.com', redirect_uri: 'https://domainname.com/oauth-page.html', country_codes: ['US'], }; try { const createTokenResponse = await client.linkTokenCreate(request); response.json(createTokenResponse.data); } catch (error) { // handle error } }); ``` ##### Install Link dependency  index.html ```html Connect a bank ``` ##### Configure the client-side Link handler  app.js ```javascript const linkHandler = Plaid.create({ token: (await $.post('/create_link_token')).link_token, onSuccess: (public_token, metadata) => { // Send the public_token to your app server. $.post('/exchange_public_token', { public_token: public_token, }); }, onExit: (err, metadata) => { // Optionally capture when your user exited the Link flow. // Storing this information can be helpful for support. }, onEvent: (eventName, metadata) => { // Optionally capture Link flow events, streamed through // this callback as your users connect an Item to Plaid. }, }); linkHandler.open(); ``` #### Get a persistent access\_token  Next, on the server side, we need to exchange our `public_token` for an `access_token` and `item_id` for each Item the user provided you with via Link. The `access_token` will allow us to make authenticated calls to the Plaid API for its corresponding financial institution. Doing so is as easy as calling the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) endpoint from our server-side handler. We'll use the client library we configured earlier to make the API call. Save the `access_token`s and `item_id`s in a secure datastore, as they’re used to access `Item` data and identify `webhooks`, respectively. An `access_token` will remain valid unless you actively chose to expire it via rotation or remove the corresponding Item via [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) . An `access_token` should be stored securely and never in client-side code. A `public_token` is a one-time use token with a lifetime of 30 minutes, so there is no need to store it. Node▼ ```javascript app.post('/api/exchange_public_token', async function ( request, response, next, ) { const publicToken = request.body.public_token; try { const response = await client.itemPublicTokenExchange({ public_token: publicToken, }); // These values should be saved to a persistent database and // associated with the currently signed-in user const accessToken = response.data.access_token; const itemID = response.data.item_id; res.json({ public_token_exchange: 'complete' }); } catch (error) { // handle error } }); ``` #### Creating Asset Reports  Now that the authentication step is out of the way, we can begin using authenticated endpoints from the Plaid API and create an Asset Report using the [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) endpoint. ##### Assets sample request: create  Node▼ ```javascript const { AssetReportCreateRequest } = require('plaid'); const daysRequested = 90; const options = { client_report_id: '123', webhook: 'https://www.example.com', user: { client_user_id: '789', first_name: 'Jane', middle_name: 'Leah', last_name: 'Doe', ssn: '123-45-6789', phone_number: '(555) 123-4567', email: 'jane.doe@example.com', }, }; const request: AssetReportCreateRequest = { access_tokens: [accessToken], days_requested, options, }; // accessTokens is an array of Item access tokens. // Note that the assets product must be enabled for all Items. // All fields on the options object are optional. try { const response = await plaidClient.assetReportCreate(request); const assetReportId = response.data.asset_report_id; const assetReportToken = response.data.asset_report_token; } catch (error) { // handle error } ``` Sample response data is below. Assets response: create ```json { "asset_report_token": "assets-sandbox-6f12f5bb-22dd-4855-b918-f47ec439198a", "asset_report_id": "1f414183-220c-44f5-b0c8-bc0e6d4053bb", "request_id": "Iam3b" } ``` #### Fetching asset data  Once an Asset Report has been created, it can be retrieved to analyze the user's loan eligibility. For more detailed information on the schema for Asset Reports, see [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) . Asset Reports are not generated instantly. If you receive a `PRODUCT_NOT_READY` error when calling [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) , the requested Asset Report has not yet been generated. To be alerted when the requested Asset Report has been generated, listen to [Assets webhooks](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) . ##### Assets sample request: get  Node▼ ```javascript const { AssetReportGetRequest } = require('plaid'); const request: AssetReportGetRequest = { asset_report_token: assetReportToken, include_insights: true, }; try { const response = await plaidClient.assetReportGet(request); const assetReportId = response.data.asset_report_id; } catch (error) { // handle error } ``` Sample response data is below. Assets response: get ```json { "report": { "asset_report_id": "bf3a0490-344c-4620-a219-2693162e4b1d", "client_report_id": "123abc", "date_generated": "2020-06-05T22:47:53Z", "days_requested": 2, "items": [ { "accounts": [ { "account_id": "3gE5gnRzNyfXpBK5wEEKcymJ5albGVUqg77gr", "balances": { "available": 200, "current": 210, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "days_available": 2, "historical_balances": [ { "current": 210, "date": "2020-06-04", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 210, "date": "2020-06-03", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "1111", "name": "Plaid Saving", "official_name": "Plaid Silver Standard 0.1% Interest Saving", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": ["Alberta Bobbeth Charleson"], "phone_numbers": [ { "data": "1112223333", "primary": false, "type": "home" }, { "data": "1112225555", "primary": false, "type": "mobile1" } ] } ], "ownership_type": null, "subtype": "savings", "transactions": [], "type": "depository" }, { "account_id": "BxBXxLj1m4HMXBm9WZJyUg9XLd4rKEhw8Pb1J", "balances": { "available": null, "current": 56302.06, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "days_available": 2, "historical_balances": [], "mask": "8888", "name": "Plaid Mortgage", "official_name": null, "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": ["Alberta Bobbeth Charleson"], "phone_numbers": [ { "data": "1112223333", "primary": false, "type": "home" }, { "data": "1112225555", "primary": false, "type": "mobile1" } ] } ], "ownership_type": null, "subtype": "mortgage", "transactions": [], "type": "loan" }, { "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "balances": { "available": null, "current": 410, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "days_available": 2, "historical_balances": [ { "current": 410, "date": "2020-06-04", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 410, "date": "2020-06-03", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "3333", "name": "Plaid Credit Card", "official_name": "Plaid Diamond 12.5% APR Interest Credit Card", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" }, { "data": "extraordinarily.long.email.username.123456@reallylonghostname.com", "primary": false, "type": "other" } ], "names": ["Alberta Bobbeth Charleson"], "phone_numbers": [ { "data": "1112223333", "primary": false, "type": "home" }, { "data": "1112225555", "primary": false, "type": "mobile1" } ] } ], "ownership_type": null, "subtype": "credit card", "transactions": [], "type": "credit" } ], "date_last_updated": "2020-06-05T22:47:52Z", "institution_id": "ins_3", "institution_name": "Chase", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6" } ], "user": { "client_user_id": "123456789", "email": "accountholder0@example.com", "first_name": "Alberta", "last_name": "Charleson", "middle_name": "Bobbeth", "phone_number": "111-222-3333", "ssn": "123-45-6789" } }, "request_id": "eYupqX1mZkEuQRx", "warnings": [] } ``` #### Working with Assets data  After your initial [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) and [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) requests, you may want your application to fetch updated Asset Reports, provide Audit Copies of Asset Reports, and more. Consult the [API Reference](https://plaid.com/docs/api/products/assets/index.html.md) to explore these and other options. #### Next steps  If you're ready to launch to Production, see the Launch checklist. #### Launch checklist  Recommended steps to take before launching in Production [Launch](https://plaid.com/docs/launch-checklist/index.html.md) --- # Assets - Introduction to Assets | Plaid Docs Introduction to Assets   ======================== #### Learn how to use Assets to access users' financial information for loan underwriting.  Get started with Assets [API Reference](https://plaid.com/docs/api/products/assets/index.html.md) [Quickstart](https://plaid.com/docs/quickstart/index.html.md) [Demo](https://plaid.coastdemo.com/share/66fb0a180582208ffa82103e?zoom=100) #### Overview  Most new customers should use [Consumer Report by Plaid Check](https://plaid.com/docs/check/index.html.md) instead of Assets. Consumer Report is an FCRA-compliant product providing underwriting scores and insights, as well as Day 1 Certainty compatible Asset Verification reports for mortgage lending. Assets is currently recommended only for use cases not supported by Consumer Report, such as underwriting outside the US. Assets data is used to determine whether a user has enough assets to qualify for a loan. Plaid's Assets product allows you to access a user's Asset Report via the [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) (JSON) and [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) (PDF) endpoints. Asset Reports are created on a per-user basis and include a snapshot of information about a user's identity, transaction history, account balances, and more. [Prefer to learn by watching? Get an overview of how Assets works in just 3 minutes!](https://www.youtube.com/watch?v=98Lq6Fb-bwo) For a fuller view of a borrower's financial situation, Assets can be used with [Bank Income](https://plaid.com/docs/income/index.html.md) , which provides user-permissioned income streams derived from deposit activity. If you need exact copies of a user's statements, see [Statements](https://plaid.com/docs/statements/index.html.md) . #### No-code integration with the Credit Dashboard  The Credit Dashboard is currently in beta. To request access, contact your Account Manager. To use the Credit Dashboard for Assets, you must not be using any [Plaid Check](https://plaid.com/docs/check/index.html.md) products. Assets data is available via a no-code integration through the [Credit Dashboard](https://dashboard.plaid.com/credit) . You can fill out a form with basic information about your end user, such as their name and email address, and indicate how much history you would like to collect and whether you would like to enable [Bank Income](https://plaid.com/docs/income/bank-income/index.html.md) for the session as well. Plaid will then generate a hyperlink that can be used to launch a Plaid-hosted Link session. Plaid can email the link directly to your user (Production only, not available in Sandbox), or you can send it to them yourself. After the end user successfully completes the Link session, their data will be available in the Dashboard for you to view, archive, or delete. The data shown will be the same data returned by a regular Assets call, in a user-friendly web-based session. (An image of "Plaid Assets Dashboard: Summary tab with Profile, Income, and Accounts info. Shows user's reference ID, income, and bank accounts.") This integration is also compatible with Income, and you can enable Assets and Income in the same session. Once you are enabled for the Credit Dashboard, all new sessions, including ones created via the API, will be displayed in the Dashboard. Data from Link sessions created via the Credit Dashboard cannot be accessed via the Plaid API. If you require programmatic access to data, use the [code-based integration flow](https://plaid.com/docs/assets/index.html.md#integration-overview) instead. #### Integration overview  There are a few steps you will need to take to obtain an Asset Report for a particular user. 1. First, using the Link flow, [create Items](https://plaid.com/docs/api/items/index.html.md#token-exchange-flow) for each of the user's financial institutions; in doing so, you will obtain an `access_token` for each institution. You can use these tokens to obtain an Asset Report as long as the `access_token` was generated with `assets` included in Link's `product` array. With Assets, the user, upon using Link to authenticate with their financial institution, will need to provide consent for Plaid to access account balances, account holder information, and transaction history for that institution. Should the user revoke access via [my.plaid.com](https://my.plaid.com/) , Plaid will notify you via a [webhook](https://plaid.com/docs/api/items/index.html.md#user_permission_revoked) . 2. Once you have the required `access_token`s, call the [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) endpoint to create an Asset Report. Note that Asset Reports are not created instantly. When the Asset Report is ready, you will be notified via a [PRODUCT\_READY](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) webhook. If low latency is important to your use case, you can call [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) with `options.add_ons` set to `["fast_assets"]`. This will cause Plaid to create two versions of the Asset Report: one with only current and available balance and identity information, and then later on the complete Asset Report. You will receive separate webhooks for each version of the Asset Report. 3. After receiving the [PRODUCT\_READY](https://plaid.com/docs/api/products/assets/index.html.md#product_ready) webhook, you can retrieve an Asset Report in JSON format by calling the [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) endpoint. To retrieve an Asset Report in PDF format, call the [/asset\_report/pdf/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportpdfget) endpoint. To retrieve an Asset Report with cleaned and categorized transactions as well as additional information about merchants and locations in JSON format, call the [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) endpoint with `include_insights=true`. If you enabled Fast Assets when calling [/asset\_report/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportcreate) , you can request the Fast version of the Asset Report by calling [/asset\_report/get](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportget) with `fast_report=true`. 4. Sometimes, third party auditors need to see Asset Reports to audit lenders' decision making processes. To provide an Audit Copy of an Asset Report to a requesting third party, call the [/asset\_report/audit\_copy/create](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportaudit_copycreate) endpoint and provide the auditor with an `audit_copy_token`. The auditor needs to be integrated with Plaid in order to view Audit Copies. Currently, Fannie Mae, Freddie Mac, and Ocrolus are the only auditors integrated with Plaid. Sample asset report ```json { "report": { "asset_report_id": "ebb8f490-8f45-4c93-a6c3-5801bf92c3ff", "client_report_id": null, "date_generated": "2023-12-18T07:20:25Z", "days_requested": 2, "items": [ { "accounts": [ { "account_id": "1Gd3X8NmgLFVn47RorabTJ7Bvy8vBqfpaG5Ky", "balances": { "available": null, "current": 320.76, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "days_available": 0, "historical_balances": [], "mask": "5555", "name": "Plaid IRA", "official_name": null, "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "1112225555", "primary": false, "type": "mobile" } ] } ], "ownership_type": null, "subtype": "ira", "transactions": [], "type": "investment" }, { "account_id": "7B73zkZlnLfeWMvkAlxpslbR4PM4RECdaKgll", "balances": { "available": 100, "current": 110, "iso_currency_code": "USD", "limit": null, "unofficial_currency_code": null }, "days_available": 2, "historical_balances": [ { "current": 110, "date": "2023-12-17", "iso_currency_code": "USD", "unofficial_currency_code": null }, { "current": 116.33, "date": "2023-12-16", "iso_currency_code": "USD", "unofficial_currency_code": null } ], "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "owners": [ { "addresses": [ { "data": { "city": "Malakoff", "country": "US", "postal_code": "14236", "region": "NY", "street": "2992 Cameron Road" }, "primary": true }, { "data": { "city": "San Matias", "country": "US", "postal_code": "93405-2255", "region": "CA", "street": "2493 Leisure Lane" }, "primary": false } ], "emails": [ { "data": "accountholder0@example.com", "primary": true, "type": "primary" } ], "names": [ "Alberta Bobbeth Charleson" ], "phone_numbers": [ { "data": "1112223333", "primary": false, "type": "home" } ] } ], "ownership_type": null, "subtype": "checking", "transactions": [ { "account_id": "7B73zkZlnLfeWMvkAlxpslbR4PM4RECdaKgll", "amount": 6.33, "date": "2023-12-09", "iso_currency_code": "USD", "original_description": "Uber 072515 SF**POOL**", "pending": false, "transaction_id": "mqdZ1xRbjau73pER6NrPSZQXZKQdN8CgLKrXA", "unofficial_currency_code": null } ], "type": "depository" } ], "date_last_updated": "2023-12-18T07:16:21Z", "institution_id": "ins_3", "institution_name": "Chase", "item_id": "KEv98XqZ7yudGRpDqaxJsZ3PKDGzR8CRM13nr" } ], "user": { "client_user_id": null, "email": null, "first_name": null, "last_name": null, "middle_name": null, "phone_number": null, "ssn": null } }, "request_id": "AYRjla7HgW4nKM9", "warnings": [] } ``` The `report` field of the above object contains the body of the Asset Report. This field consists of several subfields that contain information about the date and time the Asset Report was created; data submitted about the user; and information about Items, containing the user's historical balances, identity information, and more for each of the user's financial institutions. For a full explanation of the `report` field and its subfields, consult the [API Reference](https://plaid.com/docs/api/products/assets/index.html.md) . #### Assets webhooks  When you create an Asset Report, Plaid aggregates account balances, account holder identity information, and transaction history for the duration specified. If you attempt to retrieve an Asset Report before the requested data has been collected, you’ll receive a response with the HTTP status code 400 and a Plaid error code of `PRODUCT_NOT_READY`. To remove the need for polling, Plaid sends a webhook to the URL you supplied when creating the Asset Report once the Report has been generated. If generation fails, the webhook will indicate why. For examples of webhooks corresponding to successful and unsuccessful Asset Report generation, see the [API Reference for Assets webhooks](https://plaid.com/docs/api/products/assets/index.html.md#webhooks) . #### Refreshing Asset Reports  Asset Reports can either be created or removed; they cannot be updated. To retrieve up-to-date information about users' transactions and balances, call the [/asset\_report/refresh](https://plaid.com/docs/api/products/assets/index.html.md#asset_reportrefresh) endpoint. This endpoint, when used, creates a new Asset Report based on the corresponding existing Asset Report. #### Getting an Asset Report for an existing Item  If your user has already connected their account to your application for a different product, you can add Assets to the existing Item via [update mode](https://plaid.com/docs/link/update-mode/index.html.md) . To do so, in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) request, populate the `access_token` field with the access token for the Item, and set the `products` array to `["assets"]`. If the user connected their account less than two years ago, they can bypass the Link credentials pane and complete just the Asset Report consent step. Otherwise, they will be prompted to complete the full Link flow. #### Financial Account Matching  If you are already using [Identity Verification](https://plaid.com/docs/identity-verification/index.html.md) , you can enhance your verification process by enabling [Financial Account Matching](https://plaid.com/docs/identity-verification/index.html.md#financial-account-matching) in your Identity Verification template. This feature allows you to compare the data collected during KYC with the bank account data collected when creating an Asset Report. To ensure accurate matching, it's important to maintain consistency in the `client_user_id` used for end users across all products. #### Financial Insights Reports (UK only)  In the UK, the Financial Insights Report, including risk and affordability insights, is available as an optional add-on to Assets. Risk insights provides details on instances of potential risks such as loan disbursements, loan payments, gambling, bank penalties, and negative balances. Affordability insights provides insights based on spending / income ratios, considering factors such as essential vs. non-essential spend and other financial commitments. Like Asset Reports, Financial Insights Reports are available in both JSON and PDF format. [View a sample Financial Insights Report (UK only) PDF](https://plaid.com/documents/sample-financial-insights-report.pdf) . To learn more about Financial Insights Reports or to request pricing details, [contact Sales](https://plaid.com/contact/) or your Plaid Account Manager. #### Testing Assets  Assets can be tested in [Sandbox](https://plaid.com/docs/sandbox/index.html.md) without any additional permissions and can be tested in Limited Production once your Production request is approved. Plaid provides a [GitHub repo](https://github.com/plaid/sandbox-custom-users/) with test data for testing Assets in Sandbox, beyond that provided by the default Sandbox user. For more information on configuring custom Sandbox data, see [Configuring the custom user account](https://plaid.com/docs/sandbox/user-custom/index.html.md#configuring-the-custom-user-account) . #### Attributes library  Plaid provides a GitHub [Credit attributes library](https://github.com/plaid/credit-attributes) with Python scripts that can be used to derive various useful information from Asset Reports. #### Assets pricing  Assets is billed on a [flexible fee model](https://plaid.com/docs/account/billing/index.html.md#per-request-flexible-fee) ; the cost will depend on the number of Items in the Asset Report (there is an additional cost for Asset Reports with more than 5 Items), as well as whether Additional History (over 61 days of history) has been requested for the report. Audit copies and PDF Asset Reports are billed based on a [per-request model](https://plaid.com/docs/account/billing/index.html.md#per-request-flat-fee) . To view the exact pricing you may be eligible for, [apply for Production access](https://dashboard.plaid.com/overview/production) or [contact Sales](https://plaid.com/contact/) . For more details about pricing and billing models, see [Plaid billing](https://plaid.com/docs/account/billing/index.html.md) . #### Next steps  To learn more about building with Assets, see [Create an Asset Report](https://plaid.com/docs/assets/add-to-app/index.html.md) and the [API Reference](https://plaid.com/docs/api/products/assets/index.html.md) . For a more detailed overview of the steps involved in creating a full implementation of Plaid Assets, see the [Plaid Assets Solution Guide](https://plaid.com/documents/plaid-assets-solution-guide.pdf) . If you're ready to launch to Production, see the Launch checklist. #### Launch Center  See next steps to launch in Production [Launch](https://dashboard.plaid.com/developers/launch-center) --- # Assets - Assets partners | Plaid Docs Assets Partners  ================ #### Find providers who have partnered with Plaid to provide Assets verification  \=\*=\*=\*= #### Overview  | Partner | Description | | --- | --- | | [Alloy](https://plaid.com/docs/assets/partnerships/alloy/index.html.md) | Offers identity data orchestration and credit decisioning to financial services companies looking to address fraud and uphold compliance (US only) | | [Ocrolus](https://plaid.com/docs/assets/partnerships/ocrolus/index.html.md) | Provides digitized Asset documentation verification (US only) | For more information, see the list of partners in the [Plaid Dashboard](https://dashboard.plaid.com/developers/integrations) . --- # Assets - Ocrolus | Plaid Docs Add Ocrolus to your app  ======================== #### Use Ocrolus with Plaid Assets to digitize data collection  (An image of "Logos of Plaid and Ocrolus side by side.") Plaid and Ocrolus have partnered to offer lenders an easier way to access bank data to make informed loan decisions. Plaid enables businesses to instantly connect a customer's bank account, giving them the ability to authenticate and retrieve account details directly from the financial institution. Ocrolus digitizes bank and credit card statements from all US financial institutions to help lenders digitize their data collection for cash-flow analysis. With the Plaid + Ocrolus integration, your users can verify their accounts in seconds by inputting their banking credentials in Plaid’s front-end module. Plaid will retrieve the relevant bank information and pass it to Ocrolus for further digestion and reporting in a seamless, secure fashion. Plaid’s mobile-friendly module handles input validation, error handling, and multi-factor authentication, providing a seamless onboarding experience to convert more users for your business. #### Getting started  You'll first want to familiarize yourself with [Plaid Link](https://plaid.com/docs/link/index.html.md) , a drop-in integration for the Plaid API that handles input validation, error handling, and multi-factor authentication. You will also need to create or be an existing [Ocrolus customer](https://www.ocrolus.com/get-api-keys/) in order to add a bank account. Your customers will use Link to authenticate with their financial institution and select the bank account they wish to use for payment and verification of assets. From there, you'll receive a Plaid `access_token`, which you can use generate an Ocrolus `processor_token` and/or `audit_copy_token`, depending on your use case, which allow you to quickly and securely verify banking information via the [Ocrolus API](https://www.ocrolus.com/) without having to store that sensitive information yourself. #### Instructions  ##### Set up your Plaid and Ocrolus accounts  You'll need accounts at both Plaid and Ocrolus in order to use the Plaid + Ocrolus integration. You'll also need to enable your Plaid account for the Ocrolus integration. First, you will need to work with the Ocrolus team to [sign up for an Ocrolus account](https://www.ocrolus.com/get-api-keys/) , if you do not already have one. Next, verify that your Plaid account is enabled for the integration. If you do not have a Plaid account, [create one](https://dashboard.plaid.com/signup/ocrolus) . Your account will be automatically enabled for integration access. To verify that your Plaid account is enabled for the integration, go to the [Integrations](https://dashboard.plaid.com/developers/integrations) section of the account dashboard. If the integration is off, simply click the 'Enable' button for Ocrolus to enable the integration. ##### Create a link\_token  In order to integrate with Plaid Link, you will first need to create a `link_token`. A `link_token` is a short-lived, one-time use token that is used to authenticate your app with Link. To create one, make a [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) request with your `client_id`, `secret`, and a few other required parameters from your app server. View the [documentation](https://plaid.com/docs/api/link/index.html.md#linktokencreate) for a full list of `link_token` configurations. To see your `client_id` and `secret`, visit the [Plaid Dashboard](https://dashboard.plaid.com/developers/keys) . Node▼ ```javascript app.post('/api/create_link_token', async function (request, response) { // Get the client_user_id by searching for the current user const user = await User.find(...); const clientUserId = user.id; const request = { user: { // This should correspond to a unique id for the current user. client_user_id: clientUserId, }, client_name: 'Plaid Test App', products: ['assets'], language: 'en', webhook: 'https://webhook.example.com', redirect_uri: 'https://domainname.com/oauth-page.html', country_codes: ['US'], }; try { const createTokenResponse = await client.linkTokenCreate(request); response.json(createTokenResponse.data); } catch (error) { // handle error } }); ``` ##### Integrate with Plaid Link  Once you have a `link_token`, all it takes is a few lines of client-side JavaScript to launch Link. Then, in the `onSuccess` callback, you can call a simple server-side handler to exchange the Link `public_token` for a Plaid `access_token` and a Ocrolus `processor_token`. Integrate Link ```javascript ``` See the [Link parameter reference](https://plaid.com/docs/link/web/index.html.md#create) for complete documentation on possible configurations. `Plaid.create` accepts one argument, a configuration `Object`, and returns an `Object` with three functions, [open](https://plaid.com/docs/link/web/index.html.md#open) , [exit](https://plaid.com/docs/link/web/index.html.md#exit) , and [destroy](https://plaid.com/docs/link/web/index.html.md#destroy) . Calling `open` will display the "Institution Select" view, calling `exit` will close Link, and calling `destroy` will clean up the iframe. ##### Write server-side handler  The Link module handles the entire onboarding flow securely and quickly, but does not actually retrieve account data for a user. Instead, the Link module returns a `public_token` and an `accounts` array, which is a property on the `metadata` object, via the `onSuccess` callback. Exchange this `public_token` for a Plaid `access_token` using the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) API endpoint. Once you have the `access_token` for the Item, you can create an Ocrolus `processor_token` and/or `audit_copy_token`. You'll send these tokens to Ocrolus and they will use them to securely retrieve banking information from Plaid. Node▼ ```javascript const { Configuration, PlaidApi, PlaidEnvironments, ProcessorTokenCreateRequest, AssetReportAuditCopyCreateRequest, } = require('plaid'); // Change sandbox to production to test with live users or to go live! const configuration = new Configuration({ basePath: PlaidEnvironments[process.env.PLAID_ENV], baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, 'Plaid-Version': '2020-09-14', }, }, }); const plaidClient = new PlaidApi(configuration); try { // Exchange the public_token from Plaid Link for an access token. const tokenResponse = await plaidClient.itemPublicTokenExchange({ public_token: PUBLIC_TOKEN, }); const accessToken = tokenResponse.access_token; // Create a processor token for a specific account id. const request: ProcessorTokenCreateRequest = { access_token: accessToken, account_id: accountID, processor: 'ocrolus', }; const processorTokenResponse = await plaidClient.processorTokenCreate( request, ); const processorToken = processorTokenResponse.processor_token; // Create an Asset Report for the specific access token. const request: AssetReportCreateRequest = { access_tokens: [accessToken], days_requested: 90, options: {}, }; const response = await plaidClient.assetReportCreate(request); const assetReportId = response.data.asset_report_id; const assetReportToken = response.data.asset_report_token; // Create an audit copy token for the Asset Report. const request: AssetReportAuditCopyCreateRequest = { asset_report_token: createResponse.data.asset_report_token, auditor_id: 'ocrolus', }; const response = await plaidClient.assetReportAuditCopyCreate(request); const auditCopyToken = response.data.audit_copy_token; } catch (error) { // handle error } ``` For a valid request, the API will return a JSON response similar to: ```json { "processor_token": "processor-sandbox-0asd1-a92nc", "request_id": "UNIQUE_REQUEST_ID" } ``` For a valid `audit_copy_token` request, the API will return a JSON response similar to: ```json { "audit_copy_token": "a-sandbox-3TAU2CWVYBDVRHUCAAAI27ULU4", "request_id": "UNIQUE_REQUEST_ID" } ``` For more information on creating Asset Report `audit_copy_tokens`, see the documentation for the [Assets](https://plaid.com/docs/assets/index.html.md) product. ##### Testing your Ocrolus integration  You can create Ocrolus `processor_tokens` in Sandbox (sandbox.plaid.com, allows testing with simulated users). To test the integration in Sandbox mode, use the Plaid [Sandbox credentials](https://plaid.com/docs/sandbox/test-credentials/index.html.md) when launching Link with a `link_token` created in the Sandbox environment. To move to Production, [request access](https://dashboard.plaid.com/settings/team/products) from the Dashboard. You will want to ensure that you have valid Ocrolus Production credentials prior to connecting bank accounts in the Ocrolus API with Plaid. #### Support and questions  Find answers to many common integration questions and concerns—such as pricing, sandbox and test mode usage, and more, in our [docs](https://plaid.com/docs/index.html.md) . If you're still stuck, open a [support ticket](https://dashboard.plaid.com/support/new) with information describing the issue that you're experiencing and we'll get back to you as soon as we can. --- # Auth - Add Auth to your app | Plaid Docs Add Auth to your app  ===================== #### Use Auth to connect user bank accounts  In this guide, we'll demonstrate how to add [Auth](https://plaid.com/docs/api/products/auth/index.html.md) to your app so that you can connect to your users' bank accounts and obtain the information needed to set up funds transfers. If you're already familiar with using Plaid and are set up to make calls to the Plaid API, see [Getting Auth data](https://plaid.com/docs/auth/add-to-app/index.html.md#getting-auth-data) . If you're interested in using a Plaid partner, such as Stripe or Dwolla, to process payments, see [Moving funds with a payment partner](https://plaid.com/docs/auth/add-to-app/index.html.md#moving-funds-with-a-payment-partner) . Prefer to learn by watching? A [video guide](https://youtu.be/FlZ5nzlIq74) is available for this topic. #### Get Plaid API keys and complete application and company profile  If you don't already have one, you'll need to [create a Plaid developer account](https://dashboard.plaid.com/signup) . After creating your account, you can find your [API keys](https://dashboard.plaid.com/developers/keys) under the Team Settings menu on the Plaid Dashboard. You will also need to complete your [application profile](https://dashboard.plaid.com/settings/company/app-branding) and [company profile](https://dashboard.plaid.com/settings/company/profile) in the Dashboard. The information in your profile will be shared with users of your application when they manage their connection on the [Plaid Portal](https://my.plaid.com) . Your application profile and company profile must be completed before connecting to certain institutions in Production. #### Install and initialize Plaid libraries  You can use our official server-side client libraries to connect to the Plaid API from your application: Terminal Node▼ ```javascript // Install via npm npm install --save plaid ``` After you've installed Plaid's client libraries, you can initialize them by passing in your `client_id`, `secret`, and the environment you wish to connect to (Sandbox or Production). This will make sure the client libraries pass along your `client_id` and `secret` with each request, and you won't need to explicitly include them in any other calls. Node▼ ```javascript // Using Express const express = require('express'); const app = express(); app.use(express.json()); const { Configuration, PlaidApi, PlaidEnvironments } = require('plaid'); const configuration = new Configuration({ basePath: PlaidEnvironments.sandbox, baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, }, }, }); const client = new PlaidApi(configuration); ``` #### Create an Item using Link  These instructions cover Link for web applications. For instructions on using Link in mobile apps, see the [Link documentation](https://plaid.com/docs/link/index.html.md) . Plaid Link is the client-side component that your users interact with to securely connect their bank accounts to your app. An [Item](https://plaid.com/docs/quickstart/glossary/index.html.md#item) is created when a user successfully logs into their financial institution using Link. An Item represents a single login at a financial institution. Items do not represent individual bank accounts, although all bank accounts are associated with an Item. For example, if a user has a single login at a bank that allows them to access both a checking account and a savings account, only a single Item would be associated with both of the accounts. When using Auth, you will typically only need access to the specific bank account that will be used to transfer funds, rather than all of the accounts a user may have at an institution. Because of this, it is recommended that you configure Link with [Account Select](https://plaid.com/docs/link/customization/index.html.md#account-select) when using Auth. Configuring Link with Account Select will limit unnecessary access to user accounts. You can [enable Account Select from the Dashboard](https://dashboard.plaid.com/link/account-select) . To create an Item, you'll first need to create a [Link token](https://plaid.com/docs/quickstart/glossary/index.html.md#link-token) on your application server. You can create a Link token by calling the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) endpoint. Then, on the client-side of your application, you'll initialize Link with using the Link token you created. The code samples below demonstrate how to create a Link token and how to initialize Link using the token. ##### Create a Link token  Node▼ ```javascript app.post('/api/create_link_token', async function (request, response) { // Get the client_user_id by searching for the current user const user = await User.find(...); const clientUserId = user.id; const request = { user: { // This should correspond to a unique id for the current user. client_user_id: clientUserId, }, client_name: 'Plaid Test App', products: ['auth'], language: 'en', webhook: 'https://webhook.example.com', redirect_uri: 'https://domainname.com/oauth-page.html', country_codes: ['US'], }; try { const createTokenResponse = await client.linkTokenCreate(request); response.json(createTokenResponse.data); } catch (error) { // handle error } }); ``` ##### Initialize Link with the Link token  If your use case involves a pay-by-bank payments flow where the end user can choose between paying via a credit card and paying via a bank account, it is highly recommended to use the [Embedded experience](https://plaid.com/docs/link/embedded-institution-search/index.html.md) for Link to increase uptake of pay-by-bank. If your use case is an account opening or funding flow that requires the customer to use a bank account, or has a surcharge for credit card use, use the standard Link experience. Select group for content switcher Account funding (standard Link)Pay by Bank (Embedded Link) app.js ```javascript const handler = Plaid.create({ token: (await $.post('/create_link_token')).link_token, onSuccess: (public_token, metadata) => { // Upon successful linking of a bank account, // Link will return a public token. // Exchange the public token for an access token // to make calls to the Plaid API. $.post('/exchange_public_token', { public_token: public_token, }); }, onLoad: () => {}, onExit: (err, metadata) => { // Optionally capture when your user exited the Link flow. // Storing this information can be helpful for support. }, onEvent: (eventName, metadata) => { // Optionally capture Link flow events, streamed through // this callback as your users connect an Item to Plaid. }, }); handler.open(); ``` The sample code below is for JavaScript. For more examples for other platforms, see [Embedded Link](https://plaid.com/docs/link/embedded-institution-search/index.html.md#integration-steps) . Embedded Institution search - web (HTML) ```html ``` Embedded Institution Search - web (JavaScript) ```javascript // The container at `#plaid-embedded-link-container` will need to be sized in order to // control the size of the embedded Plaid module const embeddedLinkOpenTarget = document.querySelector('#plaid-embedded-link-container'); Plaid.createEmbedded( { token: 'GENERATED_LINK_TOKEN', onSuccess: (public_token, metadata) => {}, onLoad: () => {}, onExit: (err, metadata) => {}, onEvent: (eventName, metadata) => {}, }, embeddedLinkOpenTarget, ); ``` #### Obtain an access token  When a user successfully links an Item via Link, the [onSuccess](https://plaid.com/docs/link/web/index.html.md#onsuccess) callback will be called. The `onSuccess` callback returns a [public token](https://plaid.com/docs/quickstart/glossary/index.html.md#public-token) . On your application server, exchange the public token for an [access token](https://plaid.com/docs/quickstart/glossary/index.html.md#access-token) and an [Item ID](https://plaid.com/docs/quickstart/glossary/index.html.md#item-id) by calling `/item/public_token/exchange/`. The access token will allow you to make authenticated calls to the Plaid API. Store the access token and Item ID in a secure datastore, as they’re used to access Item data and identify webhooks, respectively. The access token will remain valid unless you actively expire it via rotation or remove it by calling [/item/remove](https://plaid.com/docs/api/items/index.html.md#itemremove) on the corresponding Item. For security purposes, never store the access token in client-side code. The public token is a one-time use token with a lifetime of 30 minutes, so there is no need to store it. ##### Exchange public token for an access token  Node▼ ```javascript app.post('/api/exchange_public_token', async function ( request, response, next, ) { const publicToken = request.body.public_token; try { const response = await client.itemPublicTokenExchange({ public_token: publicToken, }); // These values should be saved to a persistent database and // associated with the currently signed-in user const accessToken = response.data.access_token; const itemID = response.data.item_id; res.json({ public_token_exchange: 'complete' }); } catch (error) { // handle error } }); ``` #### Getting Auth data  Now that you have an access token, you can begin making authenticated calls to the Plaid API. If you are processing payments yourself, the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) endpoint to retrieve the bank account and bank identification numbers (such as routing numbers, for US accounts) associated with an Item's accounts. You can then supply these to your payment system. If you are using a Plaid partner to move funds, you will not need to call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) . Instead, see [Moving funds with a payment partner](https://plaid.com/docs/auth/add-to-app/index.html.md#moving-funds-with-a-payment-partner) . Node▼ ```javascript const { AuthGetRequest } = require('plaid'); // Call /auth/get and retrieve account numbers for an Item const request: AuthGetRequest = { access_token: access_token, }; try { const response = await plaidClient.authGet(request); const accountData = response.data.accounts; if (response.data.numbers.ach.length > 0) { // Handle ACH numbers (US accounts) const achNumbers = response.data.numbers.ach; } if (response.data.numbers.eft.length > 0) { // Handle EFT numbers (Canadian accounts) const eftNumbers = response.data.numbers.eft; } if (response.data.numbers.international.length > 0) { // Handle International numbers const internationalNumbers = response.data.numbers.international; } if (response.data.numbers.bacs.length > 0) { // Handle BACS numbers (British accounts) const bacsNumbers = response.data.numbers.bacs; } } catch (error) { //handle error } ``` Example response data is below. Note that this is test account data; real accounts would not include all four sets of numbers. /auth/get sample response ```json { "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { "available": 100, "current": 110, "limit": null, "iso_currency_code": "USD", "unofficial_currency_code": null }, "mask": "9606", "name": "Plaid Checking", "official_name": "Plaid Gold Checking", "subtype": "checking", "type": "depository" } ], "numbers": { "ach": [ { "account": "9900009606", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "routing": "011401533", "wire_routing": "021000021" } ], "eft": [ { "account": "111122223333", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "institution": "021", "branch": "01140" } ], "international": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "bic": "NWBKGB21", "iban": "GB29NWBK60161331926819" } ], "bacs": [ { "account": "31926819", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "sort_code": "601613" } ] }, "item": { "available_products": [ "balance", "identity", "payment_initiation", "transactions" ], "billed_products": ["assets", "auth"], "consent_expiration_time": null, "error": null, "institution_id": "ins_117650", "item_id": "DWVAAPWq4RHGlEaNyGKRTAnPLaEmo8Cvq7na6", "webhook": "https://www.genericwebhookurl.com/webhook" }, "request_id": "m8MDnv9okwxFNBV" } ``` #### Moving funds with a payment partner  You can move money via ACH transfer by pairing Auth with one of Plaid's payment partners. When using a partner to move money, the partner's payments service will initiate the transfer; Plaid does not function as the payment processor. For the full list of payments platforms who have partnered with Plaid to provide ACH money movement, see [Auth Partnerships](https://plaid.com/docs/auth/partnerships/index.html.md) . To move money using a Plaid partner, first create an Item using Link and obtain an access token as described above. Then, instead of calling Plaid's Auth endpoints, call one of Plaid's [processor token endpoints](https://plaid.com/docs/api/processors/index.html.md) to create a processor token. You can then send this processor token to one of Plaid's partners by using endpoints that are specific to the payment platform. Refer to the partner's technical documentation for more information. Using a partner to transfer funds gives you access to payment functionality while freeing you from having to securely store sensitive bank account information. The sample code below demonstrates a call to [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) using Dwolla as the payment processor. Sample /processor/token/create call Node▼ ```javascript const { ProcessorTokenCreateRequest } = require('plaid'); try { // Create a processor token for a specific account id const request: ProcessorTokenCreateRequest = { access_token: accessToken, account_id: accountID, processor: 'dwolla', }; const processorTokenResponse = await plaidClient.processorTokenCreate( request, ); const processorToken = processorTokenResponse.processor_token; } catch (error) { // handle error } ``` #### Tutorial and example code in Plaid Pattern  For a real-life example of an app that incorporates Auth, see the Node-based [Plaid Pattern Account Funding](https://github.com/plaid/pattern-account-funding) sample app. Pattern Account Funding is a sample account funding app that fetches Auth data in order to set up funds transfers. The Auth code can be found in [items.js](https://github.com/plaid/pattern-account-funding/blob/master/server/routes/items.js#L81-L135) . For a step-by-step tutorial on how to implement account funding, [Account funding tutorial](https://github.com/plaid/account-funding-tutorial) . #### Next steps  Once Auth is implemented in your app, see [Micro-deposit and database verification](https://plaid.com/docs/auth/coverage/index.html.md) to make sure your app is supporting the maximum number of institutions and verification methods (US only). If your use case is an account funding use case, see [the Account funding solutions guide](https://plaid.com/documents/plaid-account-funding-guide.pdf) for a set of recommendations on how to implement Auth. If you're ready to launch to Production, see the Launch checklist. #### Launch checklist  Recommended steps to take before launching in Production [Launch](https://plaid.com/docs/launch-checklist/index.html.md) --- # Auth - Automated Micro-deposits | Plaid Docs Automated Micro-deposits  ========================= #### Learn how to authenticate your users in a secure and frictionless micro-deposit flow  #### The Automated Micro-deposit flow  The Automated Micro-deposits authentication flow is supported for an additional 1,900 financial institutions in the US where Instant Auth is not available, accounting for approximately <1% of depository accounts. Plaid will make a single micro-deposit and then automatically verify it within one to two business days. (An image of "Plaid automated micro-deposit flow: Enter credentials, select account, verify routing and account number, enter name, confirm deposit.") You can try out the Automated Micro-deposits flow in an [Interactive Demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=5) . See more details in our [testing guide](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-automated-micro-deposits) . A user connects their financial institution using the following connection flow: 1. Starting on a page in your app, the user clicks an action that opens Plaid Link, with the correct Auth [configuration](https://plaid.com/docs/auth/coverage/automated/index.html.md#configure--create-a-link_token) . 2. Inside of Plaid Link, the user selects their institution, authenticates with their credentials, provides their account and routing number, and enters in their legal name. 3. Upon [successful authentication](https://plaid.com/docs/auth/coverage/automated/index.html.md#exchange-the-public-token) , Link closes with a `public_token` and a `metadata` account status of `pending_automatic_verification`. 4. Behind the scenes, Plaid sends a single micro-deposit to the user's account and will automatically verify the deposited amounts within one to two business days. 5. When verification succeeds or fails, Plaid sends an [Auth webhook](https://plaid.com/docs/auth/coverage/automated/index.html.md#handle-auth-webhooks) , which you can use to notify the user that their account is ready to move money. Once this step is done, your user's Auth data is verified and [ready to fetch](https://plaid.com/docs/auth/coverage/automated/index.html.md#fetch-auth-data) . #### Configure & Create a link\_token  Create a `link_token` with the following parameters: * `products` array containing `auth` or `transfer` -- unlike with Same-Day Micro-deposits, you can also include other products besides `auth` or `transfer` when creating a Link token for use with Automated Micro-deposits, but `auth` or `transfer` must be present. * `country_codes` set to `['US']` – Micro-deposit verification is currently only available in the United States. * A `webhook` URL to receive a POST HTTPS request sent from Plaid's servers to your application server, after Automated Micro-deposits succeeds or fails verification of a user's micro-deposits. * `auth` object should specify `"automated_microdeposits_enabled": true` Automated Micro-deposits Configuration Node▼ ```javascript const request: LinkTokenCreateRequest = { user: { client_user_id: new Date().getTime().toString() }, client_name: 'Plaid App', products: [Products.Auth], country_codes: [CountryCode.Us], language: 'en', auth: { automated_microdeposits_enabled: true, }, }; try { const response = await plaidClient.linkTokenCreate(request); const linkToken = response.data.link_token; } catch (error) { // handle error } ``` #### Initialize Link with a link\_token  After creating a `link_token` for the `auth` product, use it to initialize Plaid Link. When the user inputs their username and password, and account and routing numbers for the financial institution, the `onSuccess()` callback function will return a `public_token`, with `verification_status` equal to `'pending_automatic_verification'`. App.js ```javascript const linkHandler = Plaid.create({ // Fetch a link_token configured for 'auth' from your app server token: (await $.post('/create_link_token')).link_token, onSuccess: (public_token, metadata) => { // Send the public_token and accounts to your app server $.post('/exchange_public_token', { publicToken: public_token, accounts: metadata.accounts, }); metadata = { ..., link_session_id: String, institution: { name: 'Bank of the West', institution_id: 'ins_100017' }, accounts: [{ id: 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D', mask: '1234', name: null, type: 'depository', subtype: 'checking', verification_status: 'pending_automatic_verification' }] } }, // ... }); // Open Link on user-action linkHandler.open(); ``` ##### Display a "pending" status in your app  Because Automated verification usually takes between one to two days to complete, we recommend displaying a UI in your app that communicates to a user that verification will occur automatically and is currently pending. You can use the `verification_status` key returned in the `onSuccess` `metadata.accounts` object once Plaid Link closes successfully. Metadata verification\_status ```javascript verification_status: 'pending_automatic_verification'; ``` You can also [fetch the verification\_status](https://plaid.com/docs/auth/coverage/automated/index.html.md#check-the-account-verification-status-optional) for an Item's account via the Plaid API to obtain the latest account status. #### Exchange the public token  In your own backend server, call the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) endpoint with the Link `public_token` received in the `onSuccess` callback to obtain an `access_token`. Persist the returned `access_token` and `item_id` in your database in relation to the user. Note that micro-deposits will only be delivered to the ACH network in the Production environment. To test your integration outside of Production, see [Testing automated micro-deposits in Sandbox](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-automated-micro-deposits) . Exchange token request Node▼ ```javascript // publicToken and accountID are sent from your app to your backend-server const accountID = 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D'; const publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d'; // Obtain an access_token from the Link public_token const response = await client .itemPublicTokenExchange({ public_token: publicToken, }) .catch((err) => { // handle error }); const accessToken = response.access_token; ``` Exchange token response ```json { "access_token": "access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755", "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op", "request_id": "m8MDnv9okwxFNBV" } ``` #### Handle Auth webhooks  Before you can call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) to fetch Auth data for a user's `access_token`, a micro-deposit first need to post successfully to the user's bank account. Because Plaid uses Same Day ACH to send a single micro-deposit amount, this process usually takes between one to two days. Once the deposit has arrived in the user's account, Plaid will automatically verify the deposit transaction and send an [AUTOMATICALLY\_VERIFIED](https://plaid.com/docs/api/products/auth/index.html.md#automatically_verified) webhook to confirm the account and routing numbers have been successfully verified. Attempting to call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) on an unverified `access_token` will result in a [PRODUCT\_NOT\_READY](https://plaid.com/docs/errors/item/index.html.md#product_not_ready) error. Auth AUTOMATICALLY\_VERIFIED webhook ```json > POST https://your_app_url.com/webhook { "webhook_type": "AUTH", "webhook_code": "AUTOMATICALLY_VERIFIED", "item_id": "zeWoWyv84xfkGg1w4ox5iQy5k6j75xu8QXMEm", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D" } ``` Occasionally automatic verification may fail, likely due to erroneous user input, such as an incorrect account and routing number pair. If the Item is unable to be verified within seven days, Plaid will send a [VERIFICATION\_EXPIRED](https://plaid.com/docs/api/products/auth/index.html.md#verification_expired) webhook. When verification fails, the Item is permanently locked; we recommend prompting your user to retry connecting their institution via Link. Auth VERIFICATION\_EXPIRED webhook ```json > POST https://your_app_url.com/webhook { "webhook_type": "AUTH", "webhook_code": "VERIFICATION_EXPIRED", "item_id": "zeWoWyv84xfkGg1w4ox5iQy5k6j75xu8QXMEm", "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D" } ``` If Plaid encounters an `ITEM_LOGIN_REQUIRED` error during attempted validation, this may mean that Plaid lost access to the user's account after sending this micro-deposit but before being able to verify it. If this occurs, send the user through the [update mode](https://plaid.com/docs/link/update-mode/index.html.md) flow to re-verify their account. The example code below shows how to handle `AUTOMATICALLY_VERIFIED` and `VERIFICATION_EXPIRED` webhooks and call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) to retrieve account and routing data. If you are using the Sandbox environment, you can use the [/sandbox/item/set\_verification\_status](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemset_verification_status) endpoint to test your integration. Webhook example code Node▼ ```javascript // This example uses Express to receive webhooks const app = require('express')(); const bodyParser = require('body-parser'); app.use(bodyParser); app.post('/webhook', async (request, response) => { const event = request.body; // Handle the event switch (event.webhook_code) { case 'AUTOMATICALLY_VERIFIED': const accessToken = lookupAccessToken(event.item_id); const request: AuthGetRequest = { access_token: accessToken }; const authResponse = await client.authGet(request); const numbers = authResponse.numbers; break; case 'VERIFICATION_EXPIRED': // handle verification failure; prompt user to re-authenticate console.error('Verification failed for', event.item_id); break; default: // Unexpected event type return response.status(400).end(); } // Return a response to acknowledge receipt of the event response.json({ received: true }); }); app.listen(8000, () => console.log('Running on port 8000')); ``` #### Check the account verification status (optional)  In some cases you may want to implement logic to display the `verification_status` of an Item that is pending automated verification in your app. The [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) API endpoint allows you to query this information. For non-programmatic access to this information, you can use the [Account Verification Dashboard](https://dashboard.plaid.com/account-verification/) . Accounts get request Node▼ ```javascript // Fetch the accountID and accessToken from your database const accountID = 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D'; const accessToken = 'access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755'; const request: AccountsGetRequest = { access_token: accessToken, }; const response = await client.accountsGet(request).catch((err) => { // handle error }); const account = response.accounts.find((a) => a.account_id === accountID); const verificationStatus = account.verification_status; ``` Account get response ```json { "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { Object }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Checking", "type": "depository" "subtype": "checking", "verification_status": "pending_automatic_verification" | "automatically_verified" | "verification_expired", }, ... ], "item": { Object }, "request_id": String } ``` #### Fetch Auth data  Finally, we can retrieve Auth data once automated verification has succeeded: Auth request Node▼ ```javascript const accessToken = 'access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755'; // Instantly fetch Auth numbers const request: AuthGetRequest = { access_token: accessToken, }; const response = await client.authGet(request).catch((err) => { // handle error }); const numbers = response.numbers; ``` Auth response ```json { "numbers": { "ach": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "account": "1111222233330000", "routing": "011401533", "wire_routing": "021000021" } ], "eft": [], "international": [], "bacs": [] }, "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { Object }, "mask": "0000", "name": "Plaid Checking", "official_name": "Plaid Gold Standard 0% Interest Checking", "verification_status": "automatically_verified", "subtype": "checking" | "savings", "type": "depository" } ], "item": { Object }, "request_id": "m8MDnv9okwxFNBV" } ``` Check out the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) API reference documentation to see the full Auth request and response schema. #### Handling Link events  For a user who goes through the Automated Micro-deposit flow, the `TRANSITION_VIEW (view_name = NUMBERS)` event will occur after `SUBMIT_CREDENTIALS`, and in the `onSuccess` callback the `verification_status` will be `pending_automatic_verification`. Sample Link events for Automated Micro-deposits flow ```bash OPEN (view_name = CONSENT) TRANSITION_VIEW view_name = SELECT_INSTITUTION) SEARCH_INSTITUTION SELECT_INSTITUTION TRANSITION_VIEW (view_name = CREDENTIAL) SUBMIT_CREDENTIALS TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = MFA, mfa_type = code) SUBMIT_MFA (mfa_type = code) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = SELECT_ACCOUNT) TRANSITION_VIEW (view_name = NUMBERS) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = CONNECTED) HANDOFF onSuccess (verification_status: pending_automatic_verification) ``` #### Same Day Micro-deposits  Integrate the manual micro-deposit flow [View guide](https://plaid.com/docs/auth/coverage/same-day/index.html.md) #### Testing in Sandbox  Learn how to test each Auth flow in the Sandbox [View guide](https://plaid.com/docs/auth/coverage/testing/index.html.md) --- # Auth - Database Auth | Plaid Docs Database Auth  ============== #### Evaluate a manually entered account using Plaid network data   #### Overview  Database Auth can increase conversion by providing instant account verification when end users cannot, or do not want to, log into their financial institution to verify their account. Examples include end users at banks that are not supported by Plaid, or users who need to verify a business bank account but who don't have access to manage the account via online banking. With Database Auth, users can instead enter their account and routing number manually. Database Auth verifies account and routing numbers by checking the information provided against Plaid's known account numbers, leveraging Plaid's database of over 200 million verified accounts. If no match is found, Plaid will check the account number format against known usages by the institution associated with the given routing number. Database Auth will provide a verification status of 'pass', 'pass with caution', or 'fail' and a set of attributes that contributed to that status, such as whether a match was found or whether Plaid fell back to checking account number formats. Database Auth does not verify that the user has access to the bank account and does also not fully guarantee that the account exists. Database Auth does not create a live connection to the bank account and cannot be used to check real-time balances (although it is compatible with anti-risk products such as Signal and Identity Match). For these reasons, Database Auth should not be enabled where there is a very high risk of fraud or ACH returns. Database Auth is available for Auth flows the United States. In Canada, Database Auth functionality is provided by the [Database Insights](https://plaid.com/docs/auth/coverage/database/index.html.md) feature. You can try out the Database Auth flow in an [Interactive Demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=6) . ##### Database Auth flow  1. Starting on a page in your app, the user clicks an action that opens Plaid Link. 2. Inside of Plaid Link, the user selects an option that triggers the manual verification flow. This could occur because the user opted in to the manual flow (if Auth Type Select is enabled) or because their institution does not support Instant Auth. 3. The user will be prompted to enter their name, routing number, and account number. 4. Based on rules you have configured, the user will either see a success screen or a failure screen, or be prompted to fall back to micro-deposit-based verification. #### Implementation steps  1. Create a `link_token` with the following parameters: * The `products` array should include `auth` or `transfer` only, and no other products. * If you are enabling Identity Match, put `identity` in the `required_if_supported_products` array, as putting it in the `products` array will prevent Database Auth from activating. Approximately one-third of all Items verified via Database Auth are compatible with Identity Match. * If you plan to use Signal Transaction Scores, put `signal` in the `additional_consented_products` or `required_if_supported_products` array. Putting it in the `products` array will prevent Database Auth from activating. Approximately one-third of all Items verified via Database Auth are compatible with Signal Transaction Scores. * No other products besides Signal Transaction Scores and Identity Match are compatible with Database Auth Items. To enable other products for Items where Database Auth is not used, put those products in the `additional_consented_products` array. * `country_codes` should be set to `['US']` – Database Auth is currently only available in the United States. 2. In the [Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) , ensure "Manage via Dashboard" is selected, and enable "Verify with Database Verification". 3. Configure the rules: * (Recommended for most customers) To use Plaid's rules-based, customizable, no-code evaluation logic, select "For certain Database Auth results, fallback". * To use your own evaluation logic, select "For any Database Auth result, complete Link". This option is designed for customers who require more fine-grained control of the Link flow beyond what the ruleset configuration allows, or who have highly sophisticated fraud evaluation systems and require more custom logic. See [Using your own evaluation logic](https://plaid.com/docs/auth/coverage/database-auth/index.html.md#using-your-own-evaluation-logic-advanced) . 4. [Open Link](https://plaid.com/docs/link/index.html.md) according to the instructions for your platform, using the `link_token` created earlier. 5. After the end user completes the Link session, if the session was successful, or if you are using manual evaluation logic, Link will return a `public_token` that you can exchange for an `access_token`. You can then proceed to call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) and/or [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) , as described in the main [Auth integration process](https://plaid.com/docs/auth/index.html.md#auth-integration-process) . 6. If the session was unsuccessful, Link will fall back to either an error screen or to a micro-deposit flow, depending on which options you selected in the Account Verification pane. #### Understanding verification status and name score  Your business logic will be based on the results of the verification status and the name score. ##### Verification status  The possible values and most common causes for [verification\_status](https://plaid.com/docs/api/products/auth/index.html.md#auth-get-response-accounts-verification-status) for an Item going through the Database Auth flow are: `database_insights_pass`: Plaid was able to match the account and routing number provided to an existing Item on the Plaid network and has high confidence that the account exists. The account is not known to be closed or frozen. `database_insights_pass_with_caution`: Plaid was unable to match the account and routing number provided to an existing Item on the Plaid network, but the routing number is valid and the account number matches Plaid's known rules for account number formatting at the associated financial institution. `database_insights_fail`: The routing number is not recognized, or the account number does not appear to match the formatting rules at the associated financial institution, or Plaid has received data indicating the account is closed or frozen. In addition to the common causes above, additional risk factors may impact `verification_status` results. Balance is not compatible with Items verified via Database Auth. If you need to check for potential ACH return risk for items verified via Database Auth, you must use Signal Transaction Scores. ###### Understanding the pass with caution verification status  Because `database_insights_pass_with_caution` is a common Database Insights result, how you choose to handle it is important. In a typical test scenario, accepting only `pass` results reduced administrative return rates by by over 80%, while accepting both `pass` and `pass_with_caution` reduced administrative return rates by approximately 50%. Note that results will vary based on your own user base and use case and are not guarantees. If you do not want to accept `database_insights_pass_with_caution`, you can configure Link to use a [Fallback flow](https://plaid.com/docs/auth/coverage/database-auth/index.html.md#fallback-flows) . Signal Transaction Scores and Identity Match are only compatible with Database Auth Items whose verification status is `database_insights_pass`. If you need to use Signal Transaction Scores to check for non-administrative ACH return risk (e.g. R01 "insufficient funds" returns), or need to check for account takeover fraud using Identity Match, you should not accept the `database_insights_pass_with_caution` status. ##### Name match score  The possible values for the name match score range from 0-100. In general, you should require a name match of at least 70 to effectively protect against account takeover attacks. ###### Example of how to interpret name match score  | Range | Meaning | Example | | --- | --- | --- | | 100 | Exact match | Andrew Smith, Andrew Smith | | 85-99 | Strong match, likely spelling error, nickname, or a missing middle name, prefix or suffix | Andrew Smith, Andrew Simth | | 70-84 | Possible match, likely alias or nickname and spelling error | Andrew Smith, Andy Simth | | 50-69 | Unlikely match, likely relative | Andrew Smith, Betty Smith | | 0-49 | Unlikely match | Andrew Smith, Ray Charles | ##### Using your own evaluation logic (advanced)  If you selected "For any Database Auth result, complete Link", you must write your own code for handling the results of the Database Auth verification. To get the results, call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) and examine the `verification_status`, `verification_insights`, and `verification_name` fields. Based on the values in these fields, you will make a decision on whether to accept the account data as verified, take additional risk mitigation steps, or reject the account data as unverified. The `verification_insights` object will contain more detailed analysis showing exactly which checks passed or failed to result in the given `verification_status`. It will also contain the `name_score`. For more details on the `verification_insights` values, see the [API Reference](https://plaid.com/docs/api/products/auth/index.html.md#auth-get-response-accounts-verification-insights) . When using your own evaluation logic, you can fallback only to Automated Micro-deposits, and not to Instant Micro-deposits or Same-Day Micro-deposits. When using other flows, customers using a [processor partner](https://plaid.com/docs/auth/partnerships/index.html.md) do not typically need to call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , and can directly call [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) instead. However, if you are using Database Auth with a processor partner and using your own evaluation logic, you must call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) and check the value of the `verification_status` and/or `verification_insights` fields before passing a processor token to the partner. ##### Fallback flows  If Database Auth fails, you can configure fallback to [Instant Micro-deposits](https://plaid.com/docs/auth/coverage/instant/index.html.md#instant-micro-deposits) , [Same-Day Micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) , or [Automated Micro-deposits](https://plaid.com/docs/auth/coverage/automated/index.html.md) via the Account Verification Dashboard. #### Testing Database Auth in Sandbox  For test credentials that can be used to test Database Insights in the Sandbox environment, see [Testing Database Auth](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-database-auth-or-database-insights) . --- # Auth - Database Insights and Match (legacy) | Plaid Docs Database Insights and Match (legacy)  ===================================== #### Evaluate a manually entered account using Plaid network data   (An image of "Payment method selection page showing bank options with search. Car details, insurance info, and payment summary are displayed.") The Database Insights end-user flow with Embedded Institution Search enabled. #### Overview  Database Insights and Database Match have been replaced with Database Auth in the US. The documentation provided here is for the use of customers maintaining support of existing legacy Database Insights and Database Match integrations, or building integrations for Canada. Database Insights (legacy) can increase conversion by providing instant account verification without requiring users to link a bank account via credentials. End users choosing the manual Database Insights path will not be required to log in to their financial institution and instead can enter their account and routing number manually. Database Insights verifies account and routing numbers by checking the information provided against Plaid's known account numbers, leveraging Plaid's database of over 200 million verified accounts. If no match is found, Plaid will check the account number format against known usages by the institution associated with the given routing number. Database Insights will provide a verification status of 'pass', 'pass with caution', or 'fail' and a set of attributes that contributed to that status, such as whether a match was found or whether Plaid fell back to checking account number formats. Database Insights does not verify that the user has access to the bank account and Database Insights does also not fully guarantee that the account exists, especially in a 'pass with caution' scenario. For these reasons, Database Insights should only be enabled where there is a low risk of fraud or ACH returns. Examples of use cases where Database Insights may be appropriate include bill payment, rent collection, business to business payments, or subscription payments. Approximately 30% of Items verified by Database Insights can also be verified by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) or [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) . For more details, see [Identity Match](https://plaid.com/docs/identity/index.html.md#identity-match) and [Signal Transaction Scores](https://plaid.com/docs/signal/index.html.md) . All Items verified with Database Insights are also compatible with account ownership identity verification via [Identity Document Upload](https://plaid.com/docs/identity/identity-document-upload/index.html.md) . Database Insights and [Embedded Institution Search](https://plaid.com/docs/link/embedded-institution-search/index.html.md) are both designed to increase adoption of ACH payment methods and are frequently used together. Database Insights is also fully compatible with the standard, non-Embedded Institution Search Link flow. ##### Database Insights flow  1. Starting on a page in your app, the user clicks an action that opens Plaid Link. 2. Inside of Plaid Link, the user selects an option to enter the manual verification flow and provides their account and routing number. 3. Once the user has submitted their information, Link closes and returns a `public_token` within the `onSuccess` callback. 4. Call `/item/token/exchange` to exchange the `public_token` for an `access_token`, then call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) to obtain the account numbers and the verification results. 5. Based on the values of the `verification_status` and `verification_insights` fields returned by [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , make a decision whether to proceed with the account information for ACH or to reject the account information as unverified. When using other flows, customers using a [processor partner](https://plaid.com/docs/auth/partnerships/index.html.md) do not typically need to call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , and can directly call [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) instead. However, if you are using Database Insights with a processor partner, you must call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) and check the value of the `verification_status` and/or `verification_insights` fields before passing a processor token to the partner. #### Implementation steps  ##### Create a link\_token  Create a `link_token` with the following parameters: * The `products` array should include only `auth` or `transfer` as a product when using Database Insights. While in most cases additional products can be added to existing Plaid Items, Items created with Database Insights are an exception and cannot be used with any Plaid products other than Auth, Transfer, Signal, or Identity Match. Approximately 30% of Items verified by Database Insights can also be verified by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) or Signal. For more details, see [Identity Match](https://plaid.com/docs/identity/index.html.md#identity-match) and [Signal](https://plaid.com/docs/signal/signal-rules/index.html.md#data-availability-limitations) . If using Identity Match or Signal in this way, they should be added to the Item via the `required_if_supported_products`, `optional_products`, or `additional_consented_products` fields rather than the `products` array. * `country_codes` should be set to `['US']` or `['CA']`– Database Insights is currently only available in the United States or Canada. * The `auth` object should specify `"database_insights_enabled": true`. * (Optional) Within the `auth` object, specify `"auth_type_select_enabled": true` in order to enable [Auth Type Select](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#adding-manual-verification-entry-points-with-auth-type-select) , which will surface the manual entry point for Database Insights on the default Link screen. If Auth Type Select is not enabled, credential-based flows will be the primary UI flow and the Database Insights entry point will only appear as a fallback, except when using [Embedded Institution Search](https://plaid.com/docs/link/embedded-institution-search/index.html.md) . Database Insights cannot be used in the same session as Database Match, Same-Day Micro-deposits, or Instant Micro-deposits. If any of those flows are explicitly enabled in the `auth` object alongside Database Insights, an error will occur when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . If they are implicitly enabled due to account default settings, they will be overridden by enabling Database Insights. Database Insights Configuration Node▼ ```javascript const request: LinkTokenCreateRequest = { user: { client_user_id: new Date().getTime().toString() }, client_name: 'Plaid App', products: [Products.Auth], country_codes: [CountryCode.Us], webhook: 'https://webhook.sample.com', language: 'en', auth: { database_insights_enabled: true }, }; try { const response = await plaidClient.linkTokenCreate(request); const linkToken = response.data.link_token; } catch (error) { // handle error } ``` ##### Initialize Link with a link\_token  After creating a `link_token` for the `auth` product, use it to initialize Plaid Link. When the user successfully inputs their account and routing numbers, the `onSuccess()` callback function will return a `public_token`. App.js ```javascript const linkHandler = Plaid.create({ // Fetch a link_token configured for 'auth' from your app server token: (await $.post('/create_link_token')).link_token, onSuccess: (public_token, metadata) => { // Send the public_token and connected accounts to your app server $.post('/exchange_public_token', { publicToken: public_token, accounts: metadata.accounts, }); metadata = { ..., link_session_id: String, institution: { name: null, // name is always null for Database Insights institution_id: null // institution_id is always null for Database Insights }, accounts: [{ id: 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D', mask: '1234', name: null, type: 'depository', subtype: 'checking', verification_status: '' }] } }, // ... }); // Open Link on user-action linkHandler.open(); ``` ##### Exchange the public token  In your own backend server, call the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) endpoint with the Link `public_token` received in the `onSuccess` callback to obtain an `access_token`. Persist the returned `access_token` and `item_id` in your database in relation to the user. Exchange token request Node▼ ```javascript // publicToken and accountID are sent from your app to your backend-server const accountID = 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D'; const publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d'; // Obtain an access_token from the Link public_token const response = await client .itemPublicTokenExchange({ public_token: publicToken, }) .catch((err) => { // handle error }); const accessToken = response.access_token; ``` Exchange token response ```json { "access_token": "access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755", "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op", "request_id": "m8MDnv9okwxFNBV" } ``` ##### Fetch Auth data and verification results  Next, we can retrieve Auth data, along with the results of the Database Insights verification check, by calling [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) . Auth request Node▼ ```javascript const accessToken = 'access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755'; // Instantly fetch Auth numbers const request: AuthGetRequest = { access_token: accessToken, }; const response = await client.authGet(request).catch((err) => { // handle error }); const numbers = response.numbers; ``` Auth response ```json { "numbers": { "ach": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "account": "9900009606", "routing": "011401533", "wire_routing": "021000021" } ], "eft": [], "international": [], "bacs": [] }, "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { Object }, "mask": "0000", "name": null, "official_name": null, "verification_status": "database_insights_pass", "verification_insights": { "network_status": { "has_numbers_match": true, "is_numbers_match_verified": true, }, "previous_returns": { "previous_administrative_return": false, }, "account_number_format": "valid", }, "subtype": "checking", "type": "depository" } ], "item": { Object }, "request_id": "m8MDnv9okwxFNBV" } ``` #### Making a risk determination  The results of the Database Insights verification can be found in the `verification_status` and `verification_insights` fields returned by [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) . Based on the values in these fields, you will make a business decision on whether to accept the account numbers as verified, take additional risk mitigation steps, or reject the account numbers as unverified. #### Testing Database Insights in Sandbox  For test credentials that can be used to test Database Insights in the Sandbox environment, see [Testing Database Auth or Database Insights](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-database-auth-or-database-insights) . #### Database Match  Database Insights and Database Match have been replaced with Database Auth. The documentation provided here is for the use of customers maintaining existing legacy Database Insights and Database Match integrations. [Database Match](https://plaid.com/docs/auth/coverage/database/index.html.md#database-match) enables instant manual account verification without the need for micro-deposits, instead relying on Plaid's database of known account numbers. When provided as an alternative to Same-Day Micro-deposits, Database Match can increase conversion, as the user may be able to verify instantly, without having to return to Plaid to verify their micro-deposit codes. Database Match will present the user with the option to manually add a bank account in Link by providing their name, account number, and routing number. Plaid will then check this information against its network of over 200 million known bank accounts. Approximately 30% of user bank accounts can be verified via Database Match. If a match is not found, Database Match will fall back to routing the user to a manual micro-deposit flow, either Instant Micro-deposits or Same-Day Micro-deposits. Database Match can be used to verify the validity of the bank account being linked, but it does not verify that the end user has access to the bank account. To mitigate account takeover risk with Database Match, it can be paired with [Identity Match](https://plaid.com/docs/identity/index.html.md) to verify the user's information, such as phone number and address, on the linked account. ##### Database Match flow  1. Starting on a page in your app, the user clicks an action that opens Plaid Link. 2. Inside of Plaid Link, the user selects an option to enter the manual verification flow and provides their legal name, account and routing number. 3. Plaid will confirm the account number, routing number, and name match a previously verified account. 4. If a match is confirmed, Link closes with a `public_token` and a verification status of `database_matched`. 5. If there is no match, the user will be prompted to enter the Instant or Same Day Micro-deposits flow. When these steps are complete, you can call [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) to obtain an `access_token` for calling endpoints such as [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) or [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) . ##### Database Match implementation steps  To enable Database Match, use the same settings as Same-Day Micro-deposits. You can then enable the feature in one of two ways: * When calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) , set `auth.database_match_enabled: true`. * [In the Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) , enable Database Match. Database Match cannot be used in the same session as [Database Insights](https://plaid.com/docs/auth/coverage/database/index.html.md) . If Database Insights is explicitly enabled in the `auth` object alongside Database Match, an error will occur when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . Database Match Configuration Node▼ ```javascript const request: LinkTokenCreateRequest = { user: { client_user_id: new Date().getTime().toString() }, client_name: 'Plaid App', products: [Products.Auth], country_codes: [CountryCode.Us], webhook: 'https://webhook.sample.com', language: 'en', auth: { database_match_enabled: true, same_day_microdeposits_enabled, true }, }; try { const response = await plaidClient.linkTokenCreate(request); const linkToken = response.data.link_token; } catch (error) { // handle error } ``` When calling [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , the returned object will have a `verification_status` value of `database_matched` as an indication that the user's data was verified through Database Match. Auth response for Database Match ```json { "numbers": { "ach": [ { "account": "1111222233330000", "routing": "011401533", "wire_routing": "021000021" } ], ... }, "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { Object }, "mask": "0000", "name": "Checking...0000", "official_name": null, "verification_status": "database_matched", "subtype": "checking", "type": "depository" } ], ... } ``` ##### Testing Database Match in Sandbox  For test credentials that can be used to test Database Match in the Sandbox environment, see [Testing Database Match](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-database-match) . --- # Auth - Configuring entry points | Plaid Docs Configuring Auth entry points  ============================== #### Configure end users' options for verifying their account with Reroute to Credentials and Auth Type Select  #### Default manual verification flow entry point  When using the default flow, the **Link with account numbers** entry point will appear when the user does any of the following: * Encounters an error in the Link flow * Selects an institution whose connection health is poor * Attempts to close the Link modal without connecting an institution * Receives a "no results" message when searching for an institution * Scrolls to the bottom of the institution search results To trigger this flow via the [Link demo](https://plaid.com/demo) specify **Auth** in the Product dropdown menu and then **Launch Demo**. Trigger empty search results (type in a search query like ‘xyz’) or the Exit Pane (by closing Link) and select **Link with account numbers**. This entry point will direct the user to Database Auth, Instant Micro-deposits, or Same-Day Micro-deposits, depending on which fallback options you have enabled and on whether the institution supports Instant ACH. You can change these entry points using the features Auth Type Select and Reroute to Credentials. Auth Type Select adds a prompt for the end user to pick a manual Auth flow upfront, without hitting any of the triggers above. Reroute to Credentials is the opposite: it guides or forces the end user away from manual Auth flows if Plaid detects that the end user's institution is supported with a non-manual flow. #### Adding manual verification entry points with Auth Type Select  (An image of "Plaid auth manual link flow, select bank link option: Instantly or Manually. Continue button visible at the bottom.") Auth Type Select is a Link configuration that shows a pane upfront, enabling end users to actively choose between credential-based authentication and manual account authentication at the start of the Plaid Link flow. To demo **Auth Type Select** via the [Plaid Link demo](https://plaid.com/demo) , specify **United States** and **Auth** in the Country and Product dropdown menu respectively. Toggle on Auth Type Select, then **Launch Demo**. To enable Auth Type Select, use the [Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) , or, if not using the Dashboard Account Verification pane, set `auth.auth_type_select_enabled: true` when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . (An image of "Embedded institution search with Auth Type Select enabled, showing bank options and payment plan selection for PetGuard insurance.") Embedded Institution Search with Auth Type Select enabled ##### When to use Auth Type Select  Auth Type Select is best for customers who expect that a substantial portion of their consumers would prefer to authenticate manually, and who prefer to maximize Auth coverage over other data products. Examples may include business account verification use cases where a high percentage of users are not expected to have access to credentials of a bank account. Customers that see the greatest success with the Auth Type Select configuration have a substantial portion of users (over half, as a rule of thumb) who cannot or will not connect by logging into their bank, who have invested in fraud risk mitigations or have a low risk use case, and/or have very high intent users (such as users connecting a bank account to receive a payment). Some customers observe an increase in conversion of verified Auth data with this configuration. However, this configuration reduces coverage of other products. When offered the manual option upfront, more users may choose to link manually. Users who opt to connect via micro-deposits can have lower conversion than Instant Auth because the flow requires more steps for a user, including potentially returning to Link the next day to verify micro-deposits. It may encourage users to connect via micro-deposits who would otherwise connect via credential-based Auth types (if the manual option was not available upfront). This configuration is best for customers who want to maximize Auth coverage and can tolerate reduced coverage of other products like Balance and Identity. #### Removing manual verification entry points with Reroute to Credentials  Reroute to Credentials will prompt users to use a login-based verification flow if they attempt to use a manual verification flow with an institution where login-based flows are supported. [Optional Reroute to Credentials](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#optional-reroute) (the default Link flow) provides a nudge to use a login-based flow, but will not block manual verification, whereas [Forced Reroute to Credentials](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#forced-reroute) will block manual verification if login-based flows are available. Alternatively, you can [disable Reroute to Credentials](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#no-reroute) entirely. In some cases, when rerouting a user to a supported institution, Plaid may show a list of institutions instead of a single institution. This can occur when a financial institution has multiple different brands that share a common routing number. ##### Optional Reroute  Optional Reroute to Credentials is the default flow. It is best for customers who would like to make a recommendation for the user to connect via credentials, but not block the user from proceeding with the Same Day Micro-deposits flow. This flow will provide a reminder to the user that the institution is supported, and detail the benefits of instant connection, while also leaving the manual verification option in place. To enable Optional Reroute, you do not need to take any action. If you have disabled Optional Reroute (by enabling [Forced Reroute](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#forced-reroute) or [No Reroute](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#no-reroute) ), you can re-enable it by using the [Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) , or set `auth.reroute_to_credentials: "OPTIONAL"` in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call. | Single Institution Optional Reroute | Multiple Institution Optional Reroute | | --- | --- | | (An image of "Sign in to Gingham Bank via Plaid using routing number 12341234. Tap 'Continue' or 'Enter account number instead.'") | (An image of "Mobile screen with options to select a financial institution. Choices: Gingham Bank, Herringbone Treasury. Option to enter account number.") | ##### Forced Reroute  Forced Reroute to Credentials is best for customers who would like to restrict the user to connect via credentials if the institution is supported on a credential-based flow and stop the user from proceeding with a manual flow. This flow is designed to block a user from connecting manually for institutions that are supported via credentials in high ACH risk use cases. To enable Forced Reroute, use the [Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) , or set `auth.reroute_to_credentials: "FORCED"` in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call. | Single Institution Forced Reroute | Multiple Institution Forced Reroute | | --- | --- | | (An image of "Sign in to Gingham Bank using Wonderwallet with routing number 12341234. Press 'Continue' to securely connect your account.") | (An image of "Select an institution based on routing number 12345678. Options: Gingham Bank, Herringbone Treasury. Sign in required.") | ##### No Reroute  To completely disable Reroute to Credentials, use the [Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) , or set `auth.reroute_to_credentials: "OFF"` in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call. --- # Auth - Additional Auth flows | Plaid Docs Additional verification flows  ============================== #### Support Auth for more US financial institutions and users  #### Overview  Instant Auth covers approximately 95% of users' eligible bank accounts. For the remaining ~5%, or users who choose not to use instant credential verification, Plaid offers users the ability to verify their accounts through an optimized set of database validation and micro-deposit flows. [Our video tutorial also provides a comprehensive guide to adding Auth using micro-deposits](https://www.youtube.com/watch?v=FlZ5nzlIq74) The following flows are enabled in your app by default once you have integrated Auth: * [Instant Auth](https://plaid.com/docs/auth/coverage/instant/index.html.md) : User enters their credentials and is authenticated immediately. This is the default flow. * [Instant Match](https://plaid.com/docs/auth/coverage/instant/index.html.md#instant-match) (US only): User enters their credentials, account number, and routing number. Plaid matches user input against masked values and authenticates immediately. To increase conversion, you can enable the following additional Auth flows: * [Automated Micro-deposits](https://plaid.com/docs/auth/coverage/automated/index.html.md) (US only): User enters their credentials, account number, and routing number. Plaid makes a micro-deposit and automatically verifies the deposit in as little as one to two business days. * [Database Auth](https://plaid.com/docs/auth/coverage/database-auth/index.html.md) (US only): User enters account and routing numbers. Plaid attempts to match this data against known-good account and routing numbers recognized on the Plaid network. * [Instant Micro-deposits](https://plaid.com/docs/auth/coverage/instant/index.html.md#instant-micro-deposits) (US only): User enters account and routing numbers. Plaid makes a RTP or FedNow micro-deposit and the user manually verifies the code in as little as 5 seconds. * [Same Day Micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) (US only): User enters account and routing numbers. Plaid makes a Same Day ACH micro-deposit and the user manually verifies the code in as little as one business day. To see each of these flows in action, check out the [Auth workflows demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100) . ##### Auth flow method comparison chart  | Method | Best for | Verification timeframe | Requires additional integration work | | --- | --- | --- | --- | | [Instant Auth](https://plaid.com/docs/auth/coverage/instant/index.html.md) | All risk profiles | Instant | No (enabled by default) | | [Instant Match](https://plaid.com/docs/auth/coverage/instant/index.html.md#instant-match) | All risk profiles | Instant | No (enabled by default) | | [Automated Micro-deposits](https://plaid.com/docs/auth/coverage/automated/index.html.md) | All risk profiles | 1-2 business days | No, but requires "pending verification" UX state in app | | [Instant Micro-deposits](https://plaid.com/docs/auth/coverage/instant/index.html.md#instant-micro-deposits) | Low and medium risk profiles | Instant | No | | [Same Day Micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) | Low and medium risk profiles | 1-2 business days, plus wait for user interaction | Yes, and requires "pending verification" UX state in app | | [Database Auth](https://plaid.com/docs/auth/coverage/database-auth/index.html.md) | Low and medium risk profiles | Instant | No, unless used in advanced configuration mode | Accounts verified via Database Auth, Instant Micro-deposits, or Same-Day Micro-deposits do not have active data connections with a financial institution. These accounts and their associated Items can only be used with Auth and Transfer, not with any other Plaid products (such as Balance or Transactions), with the partial exception of [Identity Match](https://plaid.com/docs/identity/index.html.md#using-identity-match-with-micro-deposit-or-database-items) and [Signal Transaction Scores](https://plaid.com/docs/signal/signal-rules/index.html.md#data-availability-limitations) . Because of this limitation, accounts verified via these flows may be more vulnerable to fraud or return risk. Consider your level of risk exposure and current anti-fraud measures before enabling these methods. For more details, see [Anti-fraud best practices](https://plaid.com/docs/auth/coverage/same-day-link-best-practices/index.html.md) . #### Entry points  To learn more about when Plaid presents Database Auth, Instant Micro-deposits, or Same-Day Micro-deposits as options, and to customize the Link user experience around these flows, see [Configuring entry points](https://plaid.com/docs/auth/coverage/flow-options/index.html.md) . #### Integration instructions  Most additional Auth flows can be enabled in the [Account Verification Dashboard](https://dashboard.plaid.com/account-verification) with no additional integration work, as long as the following requirements are met: * The `country_codes` array in [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) is set to `["US"]`. Additional Auth flows are not available if other countries are selected. * The `products` array does not contain any products other than `auth` or `transfer`. Any other products you want to use must be configured in the `additional_consented_products`, `required_if_supported_products`, or `optional_products` arrays and will be used on a best-effort basis. [Same-Day Micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) requires additional integration work, as you will need to present a Link UI where the end user can verify the micro-deposit description. For more details, see [Same-Day micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) . [Database Auth](https://plaid.com/docs/auth/coverage/database-auth/index.html.md) , if used in the advanced mode where fallback rules are not configured in the Dashboard, requires additional integration work. For more details, see [Database Auth](https://plaid.com/docs/auth/coverage/database-auth/index.html.md) . (An image of "Alt text: 'Account Verification Dashboard with settings for instant verification methods, additional methods toggle, and micro-deposit options.'") Example of some configuration options available in the Account Verification Dashboard #### Institution coverage  To see which Auth flows a given institution supports, you can call [/institutions/get](https://plaid.com/docs/api/institutions/index.html.md#institutionsget) with [options.include\_auth\_metadata](https://plaid.com/docs/api/institutions/index.html.md#institutions-get-request-options-include-auth-metadata) set to `true`. The results will be returned in the [auth\_metadata.supported\_methods object](https://plaid.com/docs/api/institutions/index.html.md#institutions-get-response-institutions-auth-metadata-supported-methods) in the response. Alternatively, you can see this information on the [Institution Status page](https://dashboard.plaid.com/activity/status) in the Plaid Dashboard. The Same Day Micro-deposits and Database Auth flows will not appear in these results, as they do not depend on institution capabilities and are available at all institutions. --- # Auth - Instant Auth, Instant Match, & Instant Micro-deposits | Plaid Docs Instant Auth, Instant Match, and Instant Micro-Deposits  ======================================================== #### Learn how to authenticate your users instantly  #### Instant Auth  Instant Auth supports more than 6,200 financial institutions with credential-based login. Instant Auth is the default Auth flow and does not require extra configuration steps if Auth is already configured in your app. For clarity and completeness, the section below explains how to configure Instant Auth. The user signs in to their financial institution (An image of "The user signs in to their financial institution") (An image of "They select the account(s) to share with your application") (An image of "And the account is verified") You can try out the Instant Auth flow in an [Interactive Demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=3) . See more details in our [testing guide](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-instant-match) . ##### Configure & Create a link\_token  Create a `link_token` with the following parameters: * `products` array containing `auth` – If you are using only `auth` and no other products, `auth` must be specified in the Products array. Other products (such as `identity`) may be specified as well. If you are using multiple products, `auth` is not required to be specified in the products array, but including it is recommended for the best user experience. Node▼ ```javascript app.post('/api/create_link_token', async function (request, response) { // Get the client_user_id by searching for the current user const user = await User.find(...); const clientUserId = user.id; const request = { user: { // This should correspond to a unique id for the current user. client_user_id: clientUserId, }, client_name: 'Plaid Test App', products: ['auth'], language: 'en', webhook: 'https://webhook.example.com', redirect_uri: 'https://domainname.com/oauth-page.html', country_codes: ['US'], }; try { const createTokenResponse = await client.linkTokenCreate(request); response.json(createTokenResponse.data); } catch (error) { // handle error } }); ``` ##### Initialize Link with a link\_token  After creating a `link_token` for the `auth` product, use it to initialize Plaid Link. When the user inputs their username and password for the financial institution, the `onSuccess()` callback function will return a `public_token`. App.js ```javascript Plaid.create({ // Fetch a link_token configured for 'auth' from your app server token: (await $.post('/create_link_token')).link_token, onSuccess: (public_token, metadata) => { // Send the public_token and accounts to your app server $.post('/exchange_public_token', { publicToken: public_token, accounts: metadata.accounts, }); }, }); ``` ##### Exchange the public\_token and fetch Auth data  In your own backend server, call the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) endpoint with the Link `public_token` received in the `onSuccess` callback to obtain an `access_token`. Persist the returned `access_token` and `item_id` in your database in relation to the user. You will use the `access_token` when making requests to the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) endpoint. Exchange token and fetch Auth data Node▼ ```javascript const publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d'; try { // Obtain an access_token from the Link public_token const tokenResponse = await client.itemPublicTokenExchange({ public_token: publicToken}), const accessToken = tokenResponse.access_token; // Instantly fetch Auth numbers const request: AuthGetRequest = { access_token: accessToken, }; const response = await plaidClient.authGet(request); const numbers = response.numbers; } catch (err) { // handle error } ``` Check out the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) API reference documentation to see the full Auth request and response schema. Auth response ```json { "numbers": { "ach": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "account": "9900009606", "routing": "011401533", "wire_routing": "021000021" } ], "eft": [], "international": [], "bacs": [] }, "accounts": [{ Object }], "item": { Object }, "request_id": "m8MDnv9okwxFNBV" } ``` #### Instant Match  Instant Match is available for approximately 800 U.S. additional financial institutions where Instant Auth is not available. Instant Match is enabled automatically for Auth customers and is automatically provided at supported institutions as a fallback experience when Instant Auth is not available. When using Instant Match, Plaid Link will prompt your user to enter their account number and routing number for a depository account. Plaid will then verify the last four digits of the user-provided account number against the account mask retrieved from the financial institution. The user signs in to their financial institution (An image of "The user signs in to their financial institution") (An image of "They select the account(s) to share with your application") (An image of "They verify their bank's routing number...") (An image of "...and their account number.") (An image of "If those numbers match the accounts masks that Plaid has retrieved, the account is verified") You can try out the Instant Match flow in an [Interactive Demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=4) . See more details in our [testing guide](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-instant-match) . When using the Instant Match flow, the user can verify only a single account. Even if the Account Select properties allow selecting all or multiple accounts, the ability to select multiple depository accounts for Auth will be disabled in Link if the institution is using the Instant Match flow. ##### Configuring in Link  Instant Match will be enabled automatically if you configure the `link_token` with the following parameters: * add `"auth"` to `products` array * `country_codes` set to `['US']` (adding any other countries to the array will disable Instant Match) Optionally, you can disable Instant Match on a per-session basis via the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call, by setting `"auth.instant_match_enabled": false` in the request body. If you would like to disable Instant Match automatically for all Link sessions, contact your Account Manager or file a support ticket via the Dashboard. Instant Match Configuration Node▼ ```javascript const request: LinkTokenCreateRequest = { user: { client_user_id: new Date().getTime().toString() }, client_name: 'Plaid App', products: [Products.Auth], country_codes: [CountryCode.Us], language: 'en', }; try { const response = await plaidClient.linkTokenCreate(request); const linkToken = response.data.link_token; } catch (error) { // handle error } ``` ##### Handling Link events  For a user who goes through the Instant Match flow, the `TRANSITION_VIEW (view_name = NUMBERS)` event will occur after `SUBMIT_CREDENTIALS`, and in the `onSuccess` callback the `verification_status` will be `null` because the user would have been verified instantly. Sample Link events for Instant Match flow ```bash OPEN (view_name = CONSENT) TRANSITION_VIEW view_name = SELECT_INSTITUTION) SEARCH_INSTITUTION SELECT_INSTITUTION TRANSITION_VIEW (view_name = CREDENTIAL) SUBMIT_CREDENTIALS TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = MFA, mfa_type = code) SUBMIT_MFA (mfa_type = code) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = SELECT_ACCOUNT) TRANSITION_VIEW (view_name = NUMBERS) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = CONNECTED) HANDOFF onSuccess (verification_status: null) ``` #### Instant Micro-deposits  Instant Micro-deposits is the Plaid product term for our ability to authenticate any bank account in the US that is supported by RTP or FedNow. For over 80 Plaid-supported banks, Instant Micro-deposits is the fastest and highest-converting form of Auth support available. If both Instant Micro-deposits and Same Day Micro-deposits are enabled, any user who attempts a micro-deposit with one of the over 400 eligible RTP or FedNow routing numbers will automatically experience the Instant Micro-deposits flow and be able to verify instantly. ##### Instant Micro-deposit flow  The user opens Plaid Link. (An image of "The user opens Plaid Link.") (An image of "They select their institution.") (An image of "They enter their account information...") (An image of "...legal name...") (An image of "...and the account type.") (An image of "The user authorizes Plaid to make a deposit, and the deposit is made immediately.") (An image of "The user is then prompted to enter the code associated with the deposit.") (An image of "If the code matches the one that Plaid generated with the deposit description, the user's account is verified.") 1. Starting on a page in your app, the user clicks an action that opens Plaid Link. 2. Inside of Plaid Link, the user enters the micro-deposit initiation flow and provides their legal name, account and routing number. 3. Plaid sends a micro-deposit to the user's account that will post within 5 seconds, and directs the user to log into their bank account to obtain the code from the micro-deposit description. 4. The user enters the code from the micro-deposit description into Plaid Link. 5. Upon success, Link closes with a `public_token` and a `metadata` account status of `manually_verified`. Plaid will not reverse the $0.01 micro-deposit credit. When these steps are done, your user's Auth data is verified and ready to fetch. You can try out the Instant Micro-deposits flow in an [Interactive Demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=7) . ##### Configuring in Link  Instant Micro-deposits will be enabled if you configure the `link_token` with the following parameters: * Set the `products` array to `["auth"]`. While in most cases additional products can be added to existing Plaid Items, Items created for micro-deposit verification cannot be used with any Plaid products other than Auth or Transfer, with the exception that approximately 30% of Items verified by Instant micro-deposits can also be verified by [Identity Match](https://plaid.com/docs/identity/index.html.md#using-identity-match-with-micro-deposit-or-database-items) and evaluated for [Signal Transaction Scores](https://plaid.com/docs/signal/signal-rules/index.html.md#data-availability-limitations) . * `country_codes` set to `['US']` (adding any other countries to the array will disable Instant Micro-deposits) * `auth.instant_microdeposits_enabled` set to `true`. For Plaid teams created prior to November 2023 this setting is not required; for newer teams, it must be manually configured. Optionally, you can disable Instant Match on a per-session basis via the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call, by setting `"auth.instant_microdeposits_enabled": false` in the request body. If you would like to disable Instant Match automatically for all Link sessions, contact your Account Manager or file a support ticket via the Dashboard. ##### Entering the Instant Micro-deposit flow  Your user will enter the Instant Micro-deposit flow in the following scenarios: * The user selects an eligible institution that is not enabled for Instant Auth, Instant Match, or Automated Micro-deposits. * The Link session has [Same Day Micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) enabled and the user enters an eligible routing number during the Same Day Micro-deposits flow. In this case, the session will be "upgraded" to use Instant Micro-deposits rather than Same-Day Micro-deposits. ###### Instant Micro-deposit events  When a user goes through the Instant micro-deposits flow, the session will have the `TRANSITION_VIEW` (`view_name = NUMBERS`) event and a `TRANSITION_VIEW` (`view_name = INSTANT_MICRODEPOSIT_AUTHORIZED`) event after the user authorizes Plaid to send a micro-deposit to the submitted account and routing number. In the `onSuccess` callback the `verification_status` will be `manually_verified` since, unlike Same Day Micro-deposits, Instant Micro-deposits will resolve to either a success or fail state within a single Link session. ##### Testing the Instant Micro-deposit flow  For credentials that can be used to test Instant Micro-deposits in Sandbox, see [Auth testing flows](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-instant-micro-deposits) . #### Automated Micro-deposits  Integrate the automated micro-deposit flow [View guide](https://plaid.com/docs/auth/coverage/automated/index.html.md) #### Same Day Micro-deposits  Integrate the manual micro-deposit flow [View guide](https://plaid.com/docs/auth/coverage/same-day/index.html.md) #### Testing in Sandbox  Learn how to test each Auth flow in the Sandbox [View guide](https://plaid.com/docs/auth/coverage/testing/index.html.md) --- # Auth - Micro-deposit Events | Plaid Docs Micro-deposit events  ===================== #### Learn how to use Bank Transfers webhooks to receive micro-deposit status updates  #### Overview  If you are using the optional [Same Day Micro-deposits](https://plaid.com/docs/auth/coverage/same-day/index.html.md) verification flow for Auth and want to receive updates on the state of your micro-deposit transfers, you can enable webhooks for Bank Transfer events that notify you of transfer status updates for Plaid-initiated transfers within the ACH network. #### Bank Transfers webhooks  To enable Bank Transfers webhooks, add your endpoint on the [account webhooks](https://dashboard.plaid.com/developers/webhooks) page of the dashboard. You will need to have received production approval for Auth before being able to add an endpoint. Bank Transfers webhooks are not part of Plaid's [Transfer](https://plaid.com/docs/transfer/index.html.md) product. All Auth customers have access to Bank Transfer webhooks; it is not required to sign up for Plaid Transfer to use these webhooks. To confirm that your endpoint has been correctly configured, you can trigger a test webhook via [/sandbox/bank\_transfer/fire\_webhook](https://plaid.com/docs/bank-transfers/reference/index.html.md#sandboxbank_transferfire_webhook) . You should receive the payload body specified below. Bank Transfers webhook body ```json { "webhook_type": "BANK_TRANSFERS", "webhook_code": "BANK_TRANSFERS_EVENTS_UPDATE" } ``` Once you have enabled Bank Transfers webhooks, the [/bank\_transfer/event/sync](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventsync) endpoint can be called to discover new ACH events. To know when you should call this endpoint, listen for the [BANK\_TRANSFERS\_EVENTS\_UPDATE](https://plaid.com/docs/bank-transfers/reference/index.html.md#bank_transfers_events_update) webhook. You will receive a Bank Transfers webhook any time you have posted or returned ACH micro-deposit events available. You can also search or filter micro-deposit events using the [/bank\_transfer/event/list](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventlist) endpoint. Bank Transfers webhooks and the Bank Transfers endpoint will reflect any micro-deposit sent by Plaid, including both Same Day Micro-deposits and Automated Micro-deposits, if enabled. Bank Transfers webhooks and endpoints will only reflect data about ACH events initiated through Plaid. They do not reflect other ACH activity on a linked account. #### Event types  Once your user successfully completes the micro-deposit Link flow, you will receive an `account_id` in the success callback. Bank Transfers events also contain an `account_id`, which you should use to connect events to the corresponding user. ##### Pending  A pending event type means that we have a record of the micro-deposit in our systems, but it has not yet been sent. You may assume that micro-deposits are in a pending state once you [exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) the corresponding Item’s public token for an access token. Note that Plaid does not send webhooks for new pending events, but you will still see pending events in event sync responses. Example pending event ```json { "account_id": "3MqrrrP5pWUGgmnvaQlPu19R6DvwPRHwNbLr9", "bank_transfer_amount": "0.01", "bank_transfer_id": "5645fe0e-bd5e-d8da-828b-e2c7540c69d8", "bank_transfer_iso_currency_code": "USD", "bank_transfer_type": "credit", "direction": "outbound", "event_id": 5, "event_type": "pending", "failure_reason": null, "origination_account_id": null, "receiver_details": null, "timestamp": "2021-03-22T18:52:02Z" } ``` ###### Recommended action  No action needed ##### Posted  For successful micro-deposit transfers, `posted` events are the terminal event type, and no more events will be issued. Note that the end user may not receive the micro-deposit until several banking hours after the `posted` event. In addition, a `posted` event does not guarantee that the micro-deposit was successful; if the micro-deposit fails, a `reversed` event will eventually occur some time after the `posted` event. Example posted event ```json { "account_id": "3MqrrrP5pWUGgmnvaQlPu19R6DvwPRHwNbLr9", "bank_transfer_amount": "0.01", "bank_transfer_id": "5645fe0e-bd5e-d8da-828b-e2c7540c69d8", "bank_transfer_iso_currency_code": "USD", "bank_transfer_type": "credit", "direction": "outbound", "event_id": 5, "event_type": "posted", "failure_reason": null, "origination_account_id": null, "receiver_details": null, "timestamp": "2021-03-22T18:52:02Z" } ``` ###### Recommended Action  If the micro-deposit succeeds, all posted transfers will land in the end user’s account by 8:30am EST on the following banking day. After the micro-deposit settlement time, Plaid recommends sending the end user an alert (through SMS, email, or push notification) to verify the micro-deposit amounts. If you have enabled both Same Day and Automated micro-deposits, then before notifying the user, you should first confirm that the event corresponds to a Same Day micro-deposit by checking that the verification status is `pending_manual_verification` (and not `pending_automatic_verification`, which would correspond to an Automated Micro-deposit). Because Plaid handles Automated Micro-deposits without user interaction, it is not necessary to prompt the user during the Automatic Micro-deposit flow. If you have not already stored the verification status, you can obtain it by calling [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) . ##### Reversed  A `reversed` event indicates that a micro-deposit attempt has failed. Reversed events will contain an [ACH return code](https://plaid.com/docs/errors/transfer/index.html.md#ach-return-codes) that indicates why the micro-deposit failed. Example reversed event ```json { "account_id": "bV8WNn73rLI5Ln1MmdErsDn9jv7w37uGMaQvP", "bank_transfer_amount": "0.01", "bank_transfer_id": "826712b2-c707-cf98-5ba9-13bd3cc2b2f0", "bank_transfer_iso_currency_code": "USD", "bank_transfer_type": "credit", "direction": "outbound", "event_id": 5, "event_type": "reversed", "failure_reason": { "ach_return_code": "R03", "description": "No account or unable to locate account" }, "origination_account_id": null, "receiver_details": null, "timestamp": "2021-03-25T21:35:47Z" } ``` ###### Recommended Action  Contact the user with a notification that authentication has failed. Once they return to your application, restart the Link flow to begin another authentication attempt. --- # Auth - Anti-fraud best practices | Plaid Docs Anti-fraud best practices  ========================== #### Optimally configure manual entry verification flows to reduce fraud  Plaid provides a suite of fraud prevention products that assist your application in catching bad actors and ACH returns. You can verify the source of funds with [Identity](https://plaid.com/docs/identity/index.html.md) , confirm the real-time [Balance](https://plaid.com/docs/balance/index.html.md) prior to a transfer, and leverage Plaid's ML-based [Signal Transaction Scores](https://plaid.com/docs/signal/index.html.md) to prevent returns and release funds earlier. These features are fully compatible with accounts connected via Instant Auth, Instant Match, and Automated Micro-deposits. However, if an account is connected via a manual entry method such as Same Day Micro-deposits, Instant Micro-deposits, or Database Auth, these features are not always available, which could increase the likelihood that you experience fraud and ACH returns. Following the recommendations below can help mitigate these risks. ##### Use Identity Match, Signal, and/or Identity Document Upload  Approximately 30% of Items created with manual entry methods (including 100% of Items created by Database Auth that have a `database_insights_pass` verification status) are supported by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) , which allows you to determine the likelihood that the user's identity details, such as name and address, on file with their financial institution match identity information held by you. For more details on this feature, see [Identity](https://plaid.com/docs/identity/index.html.md#identity-match) . The same Items that are supported by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) are also supported by Signal Transaction Scores. Signal Transaction Scores can assess the return risk of a transaction based on machine learning analysis and alert you to high-risk transactions. For more details, see [Signal Transaction Scores](https://plaid.com/docs/signal/index.html.md) . [Identity Document Upload](https://plaid.com/docs/identity/identity-document-upload/index.html.md) verifies account owner identity based on bank statements, and is compatible with Items that don't support [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) or [/identity/get](https://plaid.com/docs/api/products/identity/index.html.md#identityget) . After creating the Item, you can use update mode to send the user through a Link session where they will be asked to upload a bank statement. Plaid will then analyze this statement for an account number match and will parse identity data from the statement. With the optional Fraud Risk feature, you can also check the uploaded statement for signs of fraud. For more details, see [Identity Document Upload](https://plaid.com/docs/identity/identity-document-upload/index.html.md) . ##### Adjust a user’s Link experience based on their risk profile  In order to reduce fraud upstream on your application, you can use [Plaid Identity Verification](https://plaid.com/docs/identity-verification/index.html.md) to verify a government ID or match with a selfie of the document holder. If your application does not have an identity verification solution or Plaid Link is not gated from the general public with fraud prevention and user verification checks in place, we do not recommend adopting manual entry verification flows as it may introduce an unnecessary fraud vector onto your platform. If you identify a user to be riskier, consider disabling manual entry verification flows for those users. Another option for riskier users is to leave manual entry verification flows enabled, but enable [Reroute to Credentials in Forced mode](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#forced-reroute) , which will only allow the user to link via manual entry verification flows when using a routing number not supported by other authentication methods. You may also consider changing your user’s experience with your service based on their connection method. For example, if a user connected via a manual entry verification flow, you may consider enforcing a lower transfer threshold than for users where it was possible to verify identity and increasing hold times on those funds. --- # Auth - Same Day Micro-deposits | Plaid Docs Same Day Micro-deposits  ======================== #### Learn how to authenticate your users with a manually verified micro-deposit  ### Overview  Same Day Micro-deposits can be used to authenticate any bank account in the US, but especially for the ~2,000 institutions that don't support Instant Auth, Instant Match, or Automated Micro-deposit verification. Plaid will make a deposit that will post within one business day (using Same Day ACH, which is roughly two days faster than the standard micro-deposit experience of two to three days). Users are instructed to manually verify the code in the transaction description deposited in the account. #### The Same Day Micro-deposit flow  The user clicks an action that opens Plaid Link. (An image of "The user clicks an action that opens Plaid Link.") (An image of "They choose to connect by entering account numbers manually.") (An image of "The user enters their routing number...") (An image of "...account number...") (An image of "...full name...") (An image of "...selects an account type...") (An image of "...and authorizes the transfer.") (An image of "The user enters their phone number to be notified when the transfer has arrived.") (An image of "The user is told to come back in a few days.") (An image of "A day or two later, the user recieves an SMS notification that the deposit has arrived.") (An image of "After getting the code from their bank account, they return to Plaid to verify the code.") (An image of "And the account is verified") A user connects their financial institution using the following connection flow: 1. Starting on a page in your app, the user clicks an action that opens Plaid Link with the correct Auth [configuration](https://plaid.com/docs/auth/coverage/same-day/index.html.md#create-a-link_token) . 2. Inside of Plaid Link, the user enters the micro-deposit initiation flow and provides their legal name, account and routing number. 3. Upon [successful authentication](https://plaid.com/docs/auth/coverage/same-day/index.html.md#exchange-the-public-token) , Link closes with a `public_token` and a `metadata` account status of `pending_manual_verification`. 4. Behind the scenes, Plaid sends a micro-deposit to the user's account that will post within one to two business days. 5. After one to two days, the user is prompted to verify the code in the transaction description in their account, by [opening Link with a generated link\_token](https://plaid.com/docs/auth/coverage/same-day/index.html.md#prompt-user-to-verify-micro-deposit-code-in-link) . Plaid will not reverse the $0.01 micro-deposit credit. When these steps are done, your user's Auth data is verified and [ready to fetch](https://plaid.com/docs/auth/coverage/same-day/index.html.md#fetch-auth-data) . ##### Demoing the flow in Link  You can try out the Same Day Micro-deposits flow in an [Interactive Demo](https://plaid.coastdemo.com/share/67d0ce0df465686c02cc4fd2?zoom=100&step=8) . For more details, see the [testing guide](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-same-day-micro-deposits) . #### Implementation steps  ##### Enable Same Day micro-deposits  Enable Same Day micro-deposits via the [Account Verification Dashboard](https://dashboard.plaid.com/account-verification) . Alternatively, you can also enable this flow by setting the `auth.same_day_microdeposits_enabled: true` parameter when calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . ##### Create a link\_token  Create a `link_token` with the following parameters: * `products` array should include only `auth` or `transfer` as a product when using same-day manual micro-deposit verification. While in most cases additional products can be added to existing Plaid Items, Items created for Same Day manual micro-deposit verification are an exception and cannot be used with any Plaid products other than Auth or Transfer. Approximately 30% of Items verified by Same Day micro-deposits can also be verified by [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) or [/signal/evaluate](https://plaid.com/docs/api/products/signal/index.html.md#signalevaluate) . If using Identity Match or Signal Transaction Scores in this way, they should be added to the Item via the `required_if_supported_products`, `optional_products`, or `additional_consented_products` fields rather than the `products` array. For more details, see [Identity Match](https://plaid.com/docs/identity/index.html.md#identity-match) and [Signal Transaction Scores](https://plaid.com/docs/signal/signal-rules/index.html.md#data-availability-limitations) . All Items verified by Same Day micro-deposits are also compatible with statement-based verification via [Identity Document Upload](https://plaid.com/docs/identity/identity-document-upload/index.html.md) . * `country_codes` set to `['US']` – Micro-deposit verification is currently only available in the United States. ##### Initialize Link with a link\_token  After creating a `link_token` for the `auth` product, use it to initialize Plaid Link. When the user successfully inputs their account and routing numbers, the `onSuccess()` callback function (or the equivalent field in [/link/token/get](https://plaid.com/docs/api/link/index.html.md#linktokenget) , if using the [Hosted Link](https://plaid.com/docs/link/hosted-link/index.html.md) integration method) will return a `public_token`, with `verification_status` equal to `'pending_manual_verification'`. App.js ```javascript const linkHandler = Plaid.create({ // Fetch a link_token configured for 'auth' from your app server token: (await $.post('/create_link_token')).link_token, onSuccess: (public_token, metadata) => { // Send the public_token and connected accounts to your app server $.post('/exchange_public_token', { publicToken: public_token, accounts: metadata.accounts, }); metadata = { ..., link_session_id: String, institution: { name: null, // name is always null for Same Day Micro-deposits institution_id: null // institution_id is always null for Same Day Micro-deposits }, accounts: [{ id: 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D', mask: '1234', name: "Checking...1234", type: 'depository', subtype: 'checking', verification_status: 'pending_manual_verification' }] } }, // ... }); // Open Link on user-action linkHandler.open(); ``` ##### Display a "pending" status in your app  Because Same Day verification usually takes one business day to complete, we recommend displaying a UI in your app that communicates to a user that verification is currently pending. You can use the `verification_status` key returned in the `onSuccess` `metadata.accounts` object once Plaid Link closes successfully. Metadata verification\_status ```javascript verification_status: 'pending_manual_verification'; ``` You can also [fetch the verification\_status](https://plaid.com/docs/auth/coverage/same-day/index.html.md#check-the-account-verification-status-optional) for an Item's account via the Plaid API, to obtain the latest account status. ##### Exchange the public token  In your own backend server, call the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) endpoint with the Link `public_token` to obtain an `access_token`. When using same-day micro-deposit verification, only one account can be associated with each access token. If you want to allow a user to link multiple accounts at the same institution using same-day micro-deposits, you will need to create a new Link flow and generate a separate access token for each account. To test your integration outside of Production, see [Testing Same Day Micro-deposits in Sandbox](https://plaid.com/docs/auth/coverage/testing/index.html.md#testing-same-day-micro-deposits) . Exchange token request Node▼ ```javascript // publicToken and accountID are sent from your app to your backend-server const accountID = 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D'; const publicToken = 'public-sandbox-b0e2c4ee-a763-4df5-bfe9-46a46bce993d'; // Obtain an access_token from the Link public_token const response = await client .itemPublicTokenExchange({ public_token: publicToken, }) .catch((err) => { // handle error }); const accessToken = response.access_token; ``` Exchange token response ```json { "access_token": "access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755", "item_id": "M5eVJqLnv3tbzdngLDp9FL5OlDNxlNhlE55op", "request_id": "m8MDnv9okwxFNBV" } ``` ##### Check the account verification status (optional)  In some cases you may want to implement logic in your app to display the `verification_status` of an Item that is pending manual verification. The [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) API endpoint allows you to query this information. To be notified via webhook when Plaid has sent the micro-deposit to your end user, see [micro-deposit events](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) . Accounts get request Node▼ ```javascript // Fetch the accountID and accessToken from your database const accountID = 'vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D'; const accessToken = 'access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755'; const request: AccountsGetRequest = { access_token: accessToken, }; const response = await client.accountsGet(request).catch((err) => { // handle error }); const account = response.accounts.find((a) => a.account_id === accountID); const verificationStatus = account.verification_status; ``` Account get response ```json { "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { Object }, "mask": "0000", "name": "Checking...0000", "official_name": null, "type": "depository", "subtype": "checking", "verification_status": "pending_manual_verification" | "manually_verified" | "verification_failed", }, ... ], "item": { Object }, "request_id": String } ``` ##### Prompt user to verify micro-deposit code in Link  After one to two business days, the micro-deposit sent to the user's account is expected to be posted. To securely verify a Same Day Micro-deposits account, your user needs to come back into Link to verify the code in the transaction description. When the micro-deposit posts to your end user's bank account, the transaction description will be written with the format: Micro-deposit post description ```bash #XXX ACCTVERIFY ``` The `#` will be followed with the three letter code required for verification. The `` is defined by the value of the `client_name` parameter that was used to create the `link_token` that initialized Link. Due to network requirements, the `client_name` will be truncated to the first 11 characters and `ACCTVERIFY` will be added to signify the deposit is for account verification. Users with business or corporate accounts that have ACH debit blocks enabled on their account may need to authorize Plaid's Company / Tax ID, `1460820571`, to avoid any issues with linking their accounts. To optimize conversion, we strongly recommend sending your user a notification (e.g. email, SMS, push notification) prompting them to come back into your app and verify the micro-deposit code. To be notified via webhook when Plaid has sent the micro-deposit to your end user, see [micro-deposit events](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) . (An image of "Plaid Instant Match process: Enter 3-letter code from deposit, confirmation screen, success message linking to Wonderwallet.") Verification of Same Day Micro-deposits is performed in two steps: 1. In your backend server, create a new `link_token` from the associated `access_token` for the given user. 2. Pass the generated `link_token` into your client-side app, using the `token` parameter in the Link configuration. This will automatically trigger the micro-deposit verification flow in Link. ##### Create a new link\_token from a persistent access\_token  Generate a `link_token` for verifying micro-deposits by passing the user's associated `access_token` to the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) API endpoint. Note that the `products` field should not be set because the micro-deposits verification flow does not change the products associated with the given `access_token`. Node▼ ```javascript // Using Express app.post('/api/create_link_token', async function (request, response) { // Get the client_user_id by searching for the current user const user = await User.find(...); const clientUserId = user.id; const request = { user: { client_user_id: clientUserId, }, client_name: 'Plaid Test App', language: 'en', webhook: 'https://webhook.sample.com', country_codes: [CountryCode.Us], access_token: 'ENTER_YOUR_ACCESS_TOKEN', }; try { const createTokenResponse = await client.linkTokenCreate(request); response.json(createTokenResponse.data); } catch (error) { // handle error } }); ``` ##### Initialize Link with the generated link\_token  In your client-side app, pass the generated `link_token` into the Link `token` parameter. Link will automatically detect that Same Day verification is required for the Item and will open directly into the verification flow (see the image above). In Link, the user will be prompted to log in to their personal banking portal to confirm the code in the micro-deposit transaction description. Upon successful entry of the code, the `onSuccess` callback will be fired, with an updated `verification_status: 'manually_verified'`. The verification code will be case-insensitive. There is no time limit for the user to verify the deposit. A user has three attempts to enter the code correctly, after which the Item will be permanently locked for security reasons. See [INCORRECT\_DEPOSIT\_VERIFICATION](https://plaid.com/docs/errors/invalid-input/index.html.md#incorrect_deposit_verification) and [PRODUCT\_NOT\_READY](https://plaid.com/docs/errors/item/index.html.md#product_not_ready) for errors that may occur during the micro-deposit initiation and verification flow. App.js ```javascript const linkHandler = Plaid.create({ token: await fetchLinkTokenForMicrodepositsVerification(), onSuccess: (public_token, metadata) => { metadata = { accounts: [{ ..., verification_status: 'manually_verified', }], }; }, // ... }); // Open Link to verify micro-deposit amounts linkHandler.open(); ``` An Item's `access_token` does not change when verifying micro-deposits, so there is no need to repeat the exchange token process. ##### Fetch Auth data  Finally, we can retrieve Auth data once the user has manually verified their account through Same Day Micro-deposits: Auth request Node▼ ```javascript const accessToken = 'access-sandbox-5cd6e1b1-1b5b-459d-9284-366e2da89755'; // Instantly fetch Auth numbers const request: AuthGetRequest = { access_token: accessToken, }; const response = await client.authGet(request).catch((err) => { // handle error }); const numbers = response.numbers; ``` Auth response ```json { "numbers": { "ach": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "account": "1111222233330000", "routing": "011401533", "wire_routing": "021000021" } ], "eft": [], "international": [], "bacs": [] }, "accounts": [ { "account_id": "vzeNDwK7KQIm4yEog683uElbp9GRLEFXGK98D", "balances": { Object }, "mask": "0000", "name": "Checking ...0000", "official_name": null, "verification_status": "manually_verified", "subtype": "checking", "type": "depository" } ], "item": { Object }, "request_id": "m8MDnv9okwxFNBV" } ``` Check out the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) API reference documentation to see the full Auth request and response schema. #### Using Text Message Verification  Text Message Verification is an alternative verification method for the Same Day Micro-deposit flow. With Text Message Verification, Plaid will send your user a one-time SMS message, directing them to a Plaid-hosted website where they can complete the micro-deposit verification process. When the user is done verifying their micro-deposit code, you will receive a [SMS\_MICRODEPOSITS\_VERIFICATION](https://plaid.com/docs/api/products/auth/index.html.md#sms_microdeposits_verification) webhook, telling you that the user has completed the process and that it is now safe to retrieve Auth information. Text Message Verification can and should be used alongside the usual verification flow of prompting your user to verify their code inside your app through Link. The user may choose not to receive an SMS message from Plaid, or they might simply ignore the message, so it is important for your app to still provide a way for your user to complete the process. ##### Implementation steps  Text Message Verification is enabled by default as long as Same Day Micro-deposits have been enabled. To opt out of Text Message Verification, use the [Dashboard Account Verification pane](https://dashboard.plaid.com/account-verification) to disable it, or, if not using the Account Verification Dashboard, set `auth.sms_microdeposits_verification_enabled: false` in your [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call. 1. When calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) , make sure you have specified a URL for your webhook receiver, so you can receive the [SMS\_MICRODEPOSITS\_VERIFICATION](https://plaid.com/docs/api/products/auth/index.html.md#sms_microdeposits_verification) webhook. 2. Listen for the [SMS\_MICRODEPOSITS\_VERIFICATION](https://plaid.com/docs/api/products/auth/index.html.md#sms_microdeposits_verification) webhook. When the user completes the verification process, Plaid will send a [SMS\_MICRODEPOSITS\_VERIFICATION](https://plaid.com/docs/api/products/auth/index.html.md#sms_microdeposits_verification) webhook to the webhook receiver URL that you specified earlier. When you receive this webhook, review the value of the `status` field. Example webhook ```json { "webhook_type": "AUTH", "webhook_code": "SMS_MICRODEPOSITS_VERIFICATION", "status": "MANUALLY_VERIFIED", "item_id": "eVBnVMp7zdTJLkRNr33Rs6zr7KNJqBFL9DrE6", "account_id": "dVzbVMLjrxTnLjX4G66XUp5GLklm4oiZy88yK", "environment": "sandbox" } ``` A value of `MANUALLY_VERIFIED` indicates that the user successfully entered the micro-deposit code and has verified their account information. You can now retrieve Auth information on behalf of this user, and you should remove any pending in-app messages asking the user to complete the verification process. If you re-open Link and ask the user to verify their code after they have already verified it using Text Message Verification, Link will close immediately and fire the `onSuccess` callback. So even if you don't act on this webhook, your application will continue to function normally. A `status` field of `VERIFICATION_FAILED` indicates that the user failed the verification process. Verification cannot be retried once this status has been triggered; you will need to create a new Item. ##### User experience  When the user goes through the Same Day Micro-deposit flow in Link, they will be prompted to enter their phone number. After the micro-deposit has been placed in their account, Plaid will contact the user via SMS with a URL pointing to a Plaid-hosted page where the user can complete the verification process. The text message itself will contain the following message: Sample SMS message ```bash Plaid: On behalf of [client_name], a $0.01 deposit was sent to your account ending in 1234. Verify this deposit here: https://hosted.plaid.com/link/lp1234. Then, return to [client_name] to complete your account setup. ``` Currently, the text message is only provided in English and will not be localized according to your Link customization settings. ##### Testing text message verification  Text message verification cannot be tested in the Sandbox environment. Text messages will only be sent in Production. #### Same Day Micro-deposit flow configuration options  In addition to the default flow, Same Day Micro-deposits has several optional flow settings you can enable. To expose more users to the Same Day micro-deposit flow, you can enable [Auth Type Select](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#adding-manual-verification-entry-points-with-auth-type-select) , or to limit users' exposure to the flow, you can enable [Reroute to Credentials](https://plaid.com/docs/auth/coverage/flow-options/index.html.md#removing-manual-verification-entry-points-with-reroute-to-credentials) . To provide an alternative flow that allows users to skip micro-deposit verification and instead relies on recognizing a known bank account within the Plaid network, you can enable [Database Auth](https://plaid.com/docs/auth/coverage/database-auth/index.html.md) . The setting that is best for you will depend on your use case, your risk exposure, and which other Plaid products you use. Learn more about how to optimize your configuration and manage risk under [best practices](https://plaid.com/docs/auth/coverage/same-day-link-best-practices/index.html.md) . Same Day Micro-deposit flow options are configured on a Link customization level (if using the Account Verification Dashboard) or on a Link token level (if configuring the options directly in the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) call). This enables you to decide which sessions are enabled for which flows; for example, you can enable different flows based on users' risk profiles. #### Handling Link events  When a user goes through the Same Day micro-deposits flow, the session will have the `TRANSITION_VIEW (view_name = NUMBERS)` event and a `TRANSITION_VIEW` (`view_name = SAME_DAY_MICRODEPOSIT_AUTHORIZED`) event after the user authorizes Plaid to send a micro-deposit to the submitted account and routing number. In the `onSuccess` callback the `verification_status` will be `pending_manual_verification` because the user will have to return to Link to verify their micro-deposit at a later Link session. Sample Link events for Same Day micro-deposits where user enters flow from empty Search state ```bash OPEN (view_name = CONSENT) TRANSITION_VIEW (view_name = SELECT_INSTITUTION) SEARCH_INSTITUTION TRANSITION_VIEW (view_name = NUMBERS) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = CONNECTED) HANDOFF onSuccess (verification_status: pending_manual_verification) ``` When a user goes through the Same Day micro-deposits flow with Reroute to Credentials, you will additionally see `TRANSITION_VIEW (view_name = NUMBERS_SELECT_INSTITUTION)` with `view_variant = SINGLE_INSTITUTION` or `view_variant = MULTI_INSTITUTION`. Sample Link events for Same Day micro-deposits flow where user encounters Reroute to Credentials ```bash OPEN (view_name = CONSENT) TRANSITION_VIEW (view_name = SELECT_INSTITUTION) SEARCH_INSTITUTION TRANSITION_VIEW (view_name = NUMBERS) TRANSITION_VIEW (view_name = NUMBERS_SELECT_INSTITUTION, view_variant = SINGLE_INSTITUTION) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = CONNECTED) HANDOFF onSuccess (verification_status: pending_manual_verification) ``` When a user goes through the Same Day micro-deposits flow with the Auth Type Select configuration, you will additionally see `TRANSITION_VIEW (view_name = SELECT_AUTH_TYPE)` and also `SELECT_AUTH_TYPE (selection = flow_type_manual)` Sample Link events for Same Day micro-deposits flow where user enters flow from Auth Type Select ```bash OPEN (view_name = CONSENT) TRANSITION_VIEW (view_name = SELECT_AUTH_TYPE) SELECT_AUTH_TYPE (selection = flow_type_manual) TRANSITION_VIEW (view_name = NUMBERS) TRANSITION_VIEW (view_name = LOADING) TRANSITION_VIEW (view_name = CONNECTED) HANDOFF onSuccess (verification_status: pending_manual_verification) ``` #### Testing in Sandbox  Learn how to test each Auth flow in the Sandbox [View guide](https://plaid.com/docs/auth/coverage/testing/index.html.md) #### Manual verification flow best practices  Minimize fraud by following best practices [View guide](https://plaid.com/docs/auth/coverage/same-day-link-best-practices/index.html.md) #### Micro-deposit events  Learn how to use webhooks to receive micro-deposit status updates [View guide](https://plaid.com/docs/auth/coverage/microdeposit-events/index.html.md) --- # Auth - Test in Sandbox | Plaid Docs Testing Auth flows  =================== #### Testing Instant Match and micro-deposit flows  #### Sandbox configuration  To test in the [Sandbox environment](https://plaid.com/docs/sandbox/index.html.md) , you need to set the Link configuration environment to `"sandbox"`: App.js ```javascript Plaid.create({ // ... env: 'sandbox', }); ``` You will also want to direct any backend API requests to the sandbox URL: API host ```xml https://sandbox.plaid.com ``` #### Testing Instant Match  ##### Test credentials  | Sandbox input | Successful credentials | Erroneous credentials | | --- | --- | --- | | Institution Name | Houndstooth Bank (`ins_109512`) | –– | | Username | `user_good` | –– | | Password | `pass_good` | –– | | Account Selection | `Plaid Savings (****1111)` | –– | | Routing number | `021000021` | Any other routing number | | Account number | `1111222233331111` | Any other account number | ##### Entering the Link flow  * Search for “Houndstooth Bank” in Link. * Use the input data in the table above to simulate the desired outcome. #### Testing Instant Micro-deposits  You can also test this flow in Sandbox with no code by using the [Link Demo](https://plaid.com/demo/) . | Sandbox input | Successful credentials | Erroneous credentials | | --- | --- | --- | | Institution name | Windowpane Bank (`ins_135858`) | –– | | Routing number | `333333334` | Any other value (if testing upgrade path) | | Account number | `1111222233330000` | –– | | Deposit code | `ABC` | Any other value | ##### Entering the primary Link flow  * Search for "Windowpane Bank" in Link. * When prompted, use the input data in the table above to simulate the desired outcome. * For all other fields, you can use any values. ##### Testing the upgrade path from Same Day Micro-deposits to Instant Micro-deposits  * If you have enabled Same Day Micro-deposits, enter gibberish into the search bar to ensure no institutions will be found, then click on Link with account numbers. * If you have configured Same Day Micro-deposits with Auth Type Select, choose "Manually" from the menu. * When prompted, enter the input data in the table above. For all other fields, you can use any values. * Note that, unlike the primary Instant Micro-deposits flow, the routing and account number entries will be on separate panes. #### Testing Database Match  You can also test this flow in Sandbox with no code by using the [Link Demo](https://plaid.com/demo/) . ##### Test credentials  To simulate a `database_matched` result: | Sandbox input | Credentials | | --- | --- | | Routing number | `110000000` | | Account number | `1111222233331111` | | Name | `John Smith` | Any other input will simulate no match and proceed with Same Day Micro-deposits, e.g.: | Sandbox input | Credentials | | --- | --- | | Routing number | `110000000` | | Account number | `1111222233332222` | | Name | `John Smith` | ##### Entering the Link flow  * If you have enabled Database Match, enter gibberish into the search bar to ensure no institutions will be found, then click on Link with account numbers. * If you have configured Database Match with Auth Type Select, choose "Manually" from the menu. * Use the input data in the table above to simulate different outcomes. #### Testing Database Auth or Database Insights  You can also test this flow in Sandbox with no code by using the [Link Demo](https://plaid.com/demo/) . ##### Test credentials (US-based sessions)  To simulate a `database_insights_pass` result: | Sandbox input | Credentials | | --- | --- | | Routing number | Any routing number (e.g. `110000000`) | | Account number | `1111222233331111` | To simulate a `database_insights_pass_with_caution` result: | Sandbox input | Credentials | | --- | --- | | Routing number | Any routing number (e.g. `110000000`) | | Account number | `1111222233333333` | Any other account number will simulate a `database_insights_fail` result, e.g.: | Sandbox input | Credentials | | --- | --- | | Routing number | Any routing number (e.g. `110000000`) | | Account number | `1111222233332222` | ##### Test credentials (CA-based sessions)  To simulate a `database_insights_pass` result: | Sandbox input | Credentials | | --- | --- | | Institution number | `110` | | Branch number | `11111` | | Account number | `11223311` | To simulate a `database_insights_pass_with_caution` result: | Sandbox input | Credentials | | --- | --- | | Institution number | `110` | | Branch number | `11111` | | Account number | `11223333` | Any other input will simulate a `database_insights_fail` result, e.g.: | Sandbox input | Credentials | | --- | --- | | Institution number | `110` | | Branch number | `11111` | | Account number | `11223322` | ##### Entering the Link flow  * If you have configured Database Auth or Database Insights with Auth Type Select, choose "Manually" from the menu. * If you have configured Database Auth or Database Insights with Embedded Search, choose "Connect Manually". * If you have enabled Database Auth or Database Insights without either of the above options, enter gibberish into the search bar to ensure no institutions will be found, then click on "Link with account numbers". * Use input data from the table above to simulate various outcomes. #### Testing Automated Micro-deposits  You can also test this flow in Sandbox with no code by using the [Link Demo](https://plaid.com/demo/) . ##### Test credentials  | Sandbox input | Successful credentials | Erroneous credentials | | --- | --- | --- | | Institution Name | Houndstooth Bank (`ins_109512`) | –– | | Username | `user_good` | –– | | Password | `microdeposits_good` | –– | | Account Selection | `Plaid Checking (****0000)` | –– | | Routing number | `021000021` | Any other routing number | | Account number | `1111222233330000` | Any other account number | ##### Entering the Link flow  * Search for “Houndstooth Bank” in Link. * Use the input data in the table above to simulate the desired outcome. The micro-deposit verification will automatically succeed after twenty-four hours. To test a failed micro-deposit, or to skip the twenty-four hour waiting period, use the [/sandbox/item/set\_verification\_status](https://plaid.com/docs/api/sandbox/index.html.md#sandboxitemset_verification_status) endpoint to manually control the Item's micro-deposit verification status. #### Testing Same Day Micro-deposits  You can also test this flow with no code by using the [Link Demo](https://plaid.com/demo/) . ##### Test credentials  | Sandbox input | Successful credentials | Erroneous credentials | | --- | --- | --- | | Routing number | `110000000` | –– | | Account number | `1111222233330000` | –– | | Deposit code | `ABC` | Any other value | ##### Initiating micro-deposits in Link  * If you have configured Same Day Micro-deposits with Auth Type Select, choose "Manually" from the menu * If you have enabled Same Day Micro-deposits without Auto Type Select, enter gibberish into the search bar to ensure no institutions will be found, then click on "Link with account numbers". * Use the input data in the table above to simulate the desired outcome. ##### Verifying micro-deposits in Link  * Call [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) with your `public_token` from the Link session in previous step to receive an `access_token`. * Call [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) and provide the `access_token` from the previous step to receive a `link_token`. * Open Link with your `link_token`. * In the deposit code field, enter `ABC` #### Testing micro-deposit events  Micro-deposits that are generated in Sandbox will never be posted by default. In order to generate a posted event that you can see when you query [/bank\_transfer/event/sync](https://plaid.com/docs/api/products/auth/index.html.md#bank_transfereventsync) , you can use the [/sandbox/bank\_transfer/simulate](https://plaid.com/docs/bank-transfers/reference/index.html.md#sandboxbank_transfersimulate) endpoint. Simulating a posted event in Sandbox does not generate a webhook. You will need to call [/sandbox/bank\_transfer/fire\_webhook](https://plaid.com/docs/bank-transfers/reference/index.html.md#sandboxbank_transferfire_webhook) each time you want a webhook to be published for testing. #### Testing Identity Match with Same Day micro-deposit Items  | Sandbox input | Successful credentials | Erroneous credentials | | --- | --- | --- | | Routing number | `011401533` | `110000000` | | Account number | `1111222233330000` | `1111222233330000` | | Deposit code | `ABC` | `ABC` | * Complete the Same Day Micro-deposits flow as detailed above * Call [/identity/match](https://plaid.com/docs/api/products/identity/index.html.md#identitymatch) using any variation of data in order to test the matching algorithm * The identity data of the test user is as follows: | Field | Sandbox identity | | --- | --- | | Name | Alberta Bobbeth Charleson | | Email | [accountholder0@example.com](https://plaid.commailto:accountholder0@example.com) | | Phone | 1112223333 | | Street | 2992 Cameron Road | | City | Malakoff | | Region | NY | | Country | US | | Postal Code | 14236 | --- # Auth - Introduction to Auth | Plaid Docs Introduction to Auth   ====================== #### Instantly retrieve account information to set up pay-by-bank payments via ACH and more  (An image of "Link an account") (An image of "Fetch account info") (An image of "Initiate a payment") Get started with Auth [API Reference](https://plaid.com/docs/api/products/auth/index.html.md) [Quickstart](https://plaid.com/docs/quickstart/index.html.md) [Demo](https://plaid.coastdemo.com/share/6786ccc5a048a5f1cf748cb5?zoom=100) Auth allows you to request a user's checking, savings, or cash management account and routing number, making it easy for you to initiate credits or debits via ACH, wire transfer, or equivalent international networks. Auth makes it easy for end users to fund an account with your app, cash out to their bank account, or make purchases via pay-by-bank. Auth must be used with a payment processor to move money: either a [Plaid Partner](https://plaid.com/docs/auth/partnerships/index.html.md) or another third party. For more information, see [Using a Payments Service](https://plaid.com/docs/auth/index.html.md#using-a-payments-service) . For an all-in-one solution that includes payment processor functionality, see [Transfer](https://plaid.com/docs/transfer/index.html.md) (US-only). For more details, see [Auth vs. Transfer comparison](https://plaid.com/docs/payments/index.html.md#auth-and-transfer-comparison) . Auth can only be used with debitable checking, savings, or cash management accounts. Credit-type accounts, including credit cards, cannot receive payments directly via electronic interbank transfers, and Auth data cannot be used to set up credit card payments. Auth can not be used to connect debit cards; instead, you can make a transfer directly from the user's bank account, saving you money over using the debit card network. [Prefer to learn by watching? Get an overview of how Auth works in just 3 minutes!](https://www.youtube.com/watch?v=2ZsANOjVjIs) Auth is commonly used in combination with other Plaid APIs that reduce risk and support compliance, such as [Balance](https://plaid.com/docs/balance/index.html.md) (to verify accounts have sufficient funds), [Signal](https://plaid.com/docs/signal/index.html.md) (to calculate the risk of ACH returns with ML-powered analysis), and [Identity](https://plaid.com/docs/identity/index.html.md) (to verify ownership information on the account). For account funding use cases, see [Identity Verification](https://plaid.com/docs/identity-verification/index.html.md) for an end-to-end KYC compliance solution with optional AML capabilities. #### Auth integration process  Below is a high level overview of the Auth integration process. For a more detailed walkthrough, see [Add auth to your app](https://plaid.com/docs/auth/add-to-app/index.html.md) or (if applicable) the docs for the specific [partner](https://plaid.com/docs/auth/partnerships/index.html.md) you are using. Embedded Link for pay-by-bank applications If your use case involves the end user choosing between paying via a credit card and paying via a bank account, it is strongly recommended to use the [Embedded experience](https://plaid.com/docs/link/embedded-institution-search/index.html.md) for Link to increase uptake of pay-by-bank. 1. Create a Link token by calling [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) with `auth` in the `products` parameter. 2. Initialize Link with the Link token from the previous step. For more details, see [Link](https://plaid.com/docs/link/index.html.md) . * For Link configuration recommendations, see [Optimizing the Link UI for Auth](https://plaid.com/docs/auth/index.html.md#optimizing-the-link-ui-for-auth) . 3. Once the user has successfully completed the Link flow, exchange the `public_token` for an `access_token` by calling [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) . 4. If using a Plaid partner for payment processing, ensure the partner is enabled on your [Plaid Dashboard](https://dashboard.plaid.com/developers/integrations) , then call [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) or [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) to obtain a token that you will provide to the partner to enable funds transfers. For more detailed instructions, including a full walkthrough, see [Auth payment partners](https://plaid.com/docs/auth/partnerships/index.html.md) . 5. If not using a Plaid partner, call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) to obtain the account and routing number, then provide these fields to your payment processing system. 6. Listen for the [PENDING\_DISCONNECT](https://plaid.com/docs/api/items/index.html.md#pending_disconnect) webhook. If you receive it, send the Item through [update mode](https://plaid.com/docs/link/update-mode/index.html.md) . If update mode is not completed for the Item within 7 days of webhook receipt, consent will expire, which may lead to the account and routing number becoming invalid. For more details, see [PNC TAN expiration](https://plaid.com/docs/auth/index.html.md#pnc-tan-expiration) . Note that consent expiration does not result in a webhook. 7. Listen for the [USER\_PERMISSION\_REVOKED](https://plaid.com/docs/api/items/index.html.md#user_permission_revoked) and [USER\_ACCOUNT\_REVOKED](https://plaid.com/docs/api/items/index.html.md#user_permission_revoked) webhooks. These webhooks indicate that you must send the Item through [update mode](https://plaid.com/docs/link/update-mode/index.html.md) to refresh consent. Attempting to use the account and routing number for transactions without successfully completing update mode may result in ACH returns. For more details, see [PNC TAN expiration](https://plaid.com/docs/auth/index.html.md#pnc-tan-expiration) . 8. Implement special remediation steps for PNC Items: if the Item is at PNC and update mode has not been completed within 7 days of receiving the `PENDING_DISCONNECT` webhook as described in step 6, or if the permissions have been revoked as described in step 7, then the account and routing number will become invalid and must be regenerated. In addition to sending the Item through update mode, you must _also_ call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) , or [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) , as relevant to your use case, to get a new set of routing and account numbers. To simplify your application logic, you can do this every time you send a PNC Item through update mode when using Auth. For more details, see [PNC TAN expiration](https://plaid.com/docs/auth/index.html.md#pnc-tan-expiration) . 9. (Optional) Listen for the [AUTH: DEFAULT\_UPDATE](https://plaid.com/docs/api/products/auth/index.html.md#default_update) webhook. This webhook indicates that the routing and/or account number for an account on the Item has changed (this is very rare). Call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) , or [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) on that Item, as applicable for your integration, and use only the new numbers or processor token. 10. (Optional) To enable and configure additional Auth verification flows, such as micro-deposit verification or database verification, use the [Account Verification Dashboard](https://dashboard.plaid.com/account-verification) . For demos and more information, see [Additional verification flows](https://plaid.com/docs/auth/coverage/index.html.md) . #### Using a payments service  Looking for bank-to-bank transfer capabilities and don't have a payment processor yet? Check out [Transfer](https://plaid.com/docs/transfer/index.html.md) (US only) for a money movement solution with built-in payment processing capabilities. See [Auth and Transfer comparison](https://plaid.com/docs/payments/index.html.md#auth-and-transfer-comparison) to learn more. When using Auth, you will send Auth data to a payments service to initiate an interbank transfer; Plaid does not function as the payment processor. While Plaid is processor-agnostic and allows you to work with any partner you want, one easy way to make transfers is to work with a payments platform that partners with Plaid, such as Dwolla or Square. Working with these partners, you will not call the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) endpoint, so you will not obtain a user's bank account information. Instead, you will call [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) or [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) to obtain a Plaid token that you will provide to the partner and that allows them to make these Plaid API calls as needed. For detailed instructions on how to set up Auth with a Plaid partner, as well as a list of supported funds transfer partners, see [Auth Partnerships](https://plaid.com/docs/auth/partnerships/index.html.md) . If you choose to use a payments provider who is not a Plaid partner, you will need to obtain bank account numbers and codes directly using [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) . In the US, this data must be stored and handled in compliance with [Nacha rules](https://www.nacha.org/) ; consult your internal compliance team or the Nacha site for details. Given the sensitive nature of this information, we also recommend that you consult the [Open Finance Data Security Standard](https://ofdss.org/) for security best practices. You can also integrate with one of Plaid's [Data Security partners](https://plaid.com/partner-directory/) to process and share tokenized bank account numbers instead of raw bank account numbers. Contact your Account Manager to learn more about these partnerships. #### Account Verification Dashboard  Using the [Account Verification Dashboard](https://dashboard.plaid.com/account-verification) , you can customize the Auth flow to increase conversion, enabling features like micro-deposit-based verification and database verification for end users who cannot or do not want to log into their bank accounts. You can also customize when these features are presented to users. The Account Verification Dashboard also allows you to reduce account takeover fraud by incorporating [Identity Match](https://plaid.com/docs/identity/index.html.md#identity-match) directly into the Link flow. For more information on the Auth flows you can enable via the Account Verification Dashboard, see [Micro-deposit and database verification flows](https://plaid.com/docs/auth/coverage/index.html.md) . You can also use the [Dashboard](https://dashboard.plaid.com/account-verification) to view the status of any completed, Auth-enabled Link session. (An image of "Session status showing Link Session ID with identity match status and auth method in Account Verification Dashboard.") The Dashboard [Account Verification analytics page](https://dashboard.plaid.com/account-verification/analytics) shows a breakdown of Auth conversion analytics by [connection method](https://plaid.com/docs/auth/coverage/index.html.md) . (An image of "image of Account Verification analytics") #### Optimizing the Link UI for Auth  By default, only checking, savings, and cash management accounts will appear when using Auth, and institutions that do not support these accounts will not appear in the Institution Select pane. The following Link configuration options are commonly used with Auth: * [Account select](https://plaid.com/docs/link/customization/index.html.md#account-select) : The "Account Select: Enabled for one account" setting configures the Link UI so that the end user may only select a single account. If you are not using this setting, you will need to build your own UI to let your end user select which linked account they want to use to send or receive funds. * [Embedded Institution Search](https://plaid.com/docs/link/embedded-institution-search/index.html.md) : This presentation mode shows the Link institution search screen embedded directly into your UI, before the end user has interacted with Link. Embedded Institution Search increases end user uptake of pay-by-bank payment methods and is strongly recommended when implementing Auth as part of a pay-by-bank use case where multiple different payment methods are supported. #### Pay by bank optimization  If you have a pay-by-bank use case, see [Increasing pay-by-bank adoption](https://plaid.com/docs/auth/pay-by-bank-ux/index.html.md) for tips on how to reduce your transaction fees by increasing the uptake of customers choosing to pay by bank. #### Tokenized account numbers  Institutions that interface with Plaid via an OAuth portal may return a tokenized account number (TAN) in the Auth response. These TANs are standard account and routing numbers that can be utilized by any ACH processor, and will be reconciled by the issuing bank on settlement. Each app a user connects to will receive a unique TAN, rather than the user's exact account number. TANs allow either the end-user or the institution itself to more rigorously monitor and even sever a specific app's ability to transfer funds. These account numbers behave differently from regular account numbers in a number of important ways. To determine if a tokenized account number is being used, use the `is_tokenized_account_number` field in the [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) or [/processor/auth/get](https://plaid.com/docs/api/processor-partners/index.html.md#processorauthget) response. Currently, only Chase, PNC, and US Bank use tokenized account numbers. Only the `numbers.ach.account` field can be set as a TAN (excluding brokerage or international specific numbers results). TANs are only valid for the ACH and RTP payment rails - they may not be used for wire transfers or physical checks. TANs may not be supported by your third-party fraud and account verification databases and vendors. Institutions that use TANs do not always expose them to end users; to avoid confusion, in user-facing UIs, always display the account mask rather than the account number, as end users will not recognize the issued TAN. If a user revokes access to their account (such as via the Chase Security center or [my.plaid.com](https://my.plaid.com/) ), the TAN will become invalid and any attempt to make a transfer using that TAN will fail with an R04 return code. To avoid returns, listen for the [USER\_PERMISSION\_REVOKED](https://plaid.com/docs/api/items/index.html.md#user_permission_revoked) and [USER\_ACCOUNT\_REVOKED](https://plaid.com/docs/api/items/index.html.md#user_account_revoked) webhooks and do not use an account number, processor token, or Stripe bank account token associated with an Item or account where access has been revoked. Instead, send the end user through [update mode](https://plaid.com/docs/link/update-mode/index.html.md) to restore the Item and then call the Auth endpoint again. At US Bank, TANs do not become invalid, even after Item deletion or revocation. Because account numbers alone cannot reliably be used to uniquely identify TAN-enabled accounts across different Item instances, Plaid provides a [persistent\_account\_id](https://plaid.com/docs/api/accounts/index.html.md#accounts-get-response-accounts-persistent-account-id) field for this purpose. This field is only available at institutions that use TANs. If a Chase [duplicate Item](https://plaid.com/docs/link/duplicate-items/index.html.md) is created, the old Item will be invalidated, but the TAN on the new Item will remain the same. The TAN will only change if the user revokes access. If multiple Items in your app correspond to the same account (for example, in the case of a joint bank account with multiple owners), each Item will typically have a different TAN. TANs will always be accompanied by a routing number. The TAN must be used with the routing number returned by the API. If used with a different routing number, even one associated with the same bank, the transfer may fail. In Sandbox, the Auth product results will have the `is_tokenized_account_number` boolean set to true if the Chase (`ins_56`), PNC (`ins_13`), US Bank (`ins_127990`), or the Platypus OAuth Bank (`ins_127287`) `institution_id` is set in the [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) request body or the respective FIs are selected from the Sandbox Link pane. ##### PNC TAN expiration  All TAN expirations at PNC have been indefinitely postponed until further notice and are no longer scheduled to begin in January 2026. While PNC Items will still expire after one year if consent is not renewed, the TAN will continue to be valid. At PNC, any Item initialized with Auth after October 2024 will have a [consent\_expiration\_time](https://plaid.com/docs/api/products/auth/index.html.md#auth-get-response-item-consent-expiration-time) set to 1 year from the date that the user last provided consent. When the Item's consent expires, the TAN will expire as well and cannot be used to make ACH transfers. This applies regardless of how you are accessing the account numbers: via [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , via the Transfer product, or via processor tokens. You can renew consent on the Item by sending the user through [update mode](https://plaid.com/docs/link/update-mode/index.html.md) . You can check the Item's expiration date by calling [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) or [/item/get](https://plaid.com/docs/api/items/index.html.md#itemget) and looking for the `consent_expiration_time` field in the response. If the Item's consent had already expired when you sent the Item through update mode, you must call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) , or [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) to obtain a new TAN after completing update mode, as the old TAN will not be re-activated. In addition, if the user has multiple depository accounts at PNC, then when going through the OAuth portion of the update mode flow, it's possible that they may de-select the PNC account that they originally shared with you and select a different PNC account instead. If this happens, the TAN of the account they originally shared will be invalidated. For this reason, it is recommended to call [/auth/get](https://plaid.com/docs/api/products/auth/index.html.md#authget) , [/processor/token/create](https://plaid.com/docs/api/processors/index.html.md#processortokencreate) , or [/processor/stripe/bank\_account\_token/create](https://plaid.com/docs/api/processors/index.html.md#processorstripebank_account_tokencreate) _every_ time you send a PNC Item through update mode. Note that there is no additional fee for these API calls, since Auth uses a one-time fee billing model; you are only charged for your first Auth call to each Item. PNC TAN expiration does not apply to Items initialized with Auth prior to October 2024, as these Items use real account numbers rather than TANs. #### Updates to Auth data  Because routing and account numbers are inherently persistent, Plaid does not check for updates to Auth data for existing Items except in special circumstances, such as a bank changing its routing numbers due to a system change or merger. Plaid will also check for updated Auth data if a new user account is added to an Item via [update mode](https://plaid.com/docs/link/update-mode/index.html.md#using-update-mode-to-request-new-accounts) . #### United States (ACH) Auth data  The United States uses the Automated Clearing House (ACH) system for funds transfers, which uses account and routing numbers. Banks also have a second routing number, known as the wire transfer routing number. Wire transfers can be used to receive international payments and can be faster than ACH transfers, but often involve a fee. Plaid Auth can only provide wire transfer routing numbers for institutions in the US. For a detailed, comprehensive guide to ACH transfers and payments, see Plaid's [Modern Guide to ACH](https://plaid.com/solutions/ACH-guide/) . Example Auth data for US bank account ```json "numbers": { "ach": [ { "account": "1111222233330000", "account_id": "bWG9l1DNpdc8zDk3wBm9iMkW3p1mVWCVKVmJ6", "routing": "011401533", "wire_routing": "021000021" } ], "bacs": [], "eft": [], "international": [] } ``` #### Auth data for other countries  ##### Canada (EFT)  In Canada, the routing number is in a different format than US routing numbers and broken into two pieces: the transit number (also known as the branch number), followed by the institution number. Canada uses Electronic Funds Transfer (EFT); [VoPay](https://plaid.com/docs/auth/partnerships/vopay/index.html.md) is a Plaid partner that can be used to process EFT transfers. Example Auth data for Canadian bank account ```json "numbers": { "eft": [ { "account": "111122220000", "account_id": "qVZ3Bwbo5wFmoVneZxMksBvN6vDad6idkndAB", "branch": "01533", "institution": "114" } ], ... } ``` ##### Europe (SEPA transfers)  For funds transfers in Europe, also consider the [Payment Initiation API](https://plaid.com/docs/payment-initiation/index.html.md) , which allows end-to-end payments directly, without having to integrate an additional payment processor. In the European Economic Area member states (which includes Euro zone nations, as well as the United Kingdom), institutions use a Bank Identifier Code (BIC), also known as a SWIFT code. Each bank account has an International Bank Account Number (IBAN), which is used along with the BIC for funds transfers. Many bank accounts also have internal, non-IBAN account numbers that cannot be used for funds transfers. The funds transfer system is known as the Shared European Payment Area (SEPA), and it supports SEPA credit transfer, SEPA instant credit transfer, and SEPA direct debit. Example Auth data for European bank account ```json "numbers": { "international": [ { "account_id": "blgvvBlXw3cq5GMPwqB6s6q4dLKB9WcVqGDGo", "bic": "IE64BOFI90583812345678", "iban": "IE64BOFI90583812345678" } ... ] } ``` ##### United Kingdom (BACS)  For funds transfers in the UK, also consider the [Payment Initiation API](https://plaid.com/docs/payment-initiation/index.html.md) , which allows end-to-end payments directly, without having to integrate an additional payment processor. The UK uses the SEPA system as well as the Bankers Automated Clearing System (BACS). Payments within the BACS system cannot be made outside the UK and take several days to process. BACS payments are typically used for recurring direct debit payments, such as payroll. UK bank accounts will typically have both a BACS sort code and an IBAN and support both BACS transfers and SEPA transfers. Example Auth data for UK bank account ```json "numbers": { "bacs": [ { "account": "80000000", "account_id": "blgvvBlXw3cq5GMPwqB6s6q4dLKB9WcVqGDGo", "sort_code": "040004" } ], "international": [ { "account_id": "blgvvBlXw3cq5GMPwqB6s6q4dLKB9WcVqGDGo", "bic": "MONZGB21XXX", "iban": "GB23MONZ04000480000000" } ] ... } ``` #### Sample app code  For a real-life example of an app that incorporates Auth, see the Node-based [Plaid Pattern Account Funding](https://github.com/plaid/pattern-account-funding) sample app. Pattern Account Funding is a sample account funding app that fetches Auth data in order to set up funds transfers. The Auth code can be found in [items.js](https://github.com/plaid/pattern-account-funding/blob/master/server/routes/items.js#L81-L135) . #### Testing Auth  Plaid provides a [GitHub repo](https://github.com/plaid/sandbox-custom-users) with test data for testing Auth in Sandbox, helping you test configuration options beyond those offered by the default Sandbox user. For more information on configuring custom Sandbox data, see [Configuring the custom user account](https://plaid.com/docs/sandbox/user-custom/index.html.md#configuring-the-custom-user-account) . For details on testing Auth with more complex Auth flows such as micro-deposit-based Auth, first familiarize yourself with [Adding Institution Coverage](https://plaid.com/docs/auth/coverage/index.html.md) , then see [Test in Sandbox](https://plaid.com/docs/auth/coverage/testing/index.html.md) . #### Auth pricing  Auth is billed on a [one-time fee model](https://plaid.com/docs/account/billing/index.html.md#one-time-fee) . To view the exact pricing you may be eligible for, [apply for Production access](https://dashboard.plaid.com/overview/production) or [contact Sales](https://plaid.com/contact/) . For more details about pricing and billing models, see [Plaid billing](https://plaid.com/docs/account/billing/index.html.md) . #### Next steps  Now that you understand Auth, [add Auth to your app](https://plaid.com/docs/auth/add-to-app/index.html.md) , or see [Move Money with Auth partners](https://plaid.com/docs/auth/partnerships/index.html.md) to see specific instructions for configuring Auth with Plaid partners. If you're ready to launch to Production, see the Launch Center. #### Launch Center  See next steps to launch in Production [Launch](https://dashboard.plaid.com/developers/launch-center) --- # Auth - Dwolla | Plaid Docs Add Dwolla to your app  ======================= #### Use Dwolla with Plaid Auth to send and receive payments  (An image of "Plaid and Dwolla logos, side by side.") Plaid and Dwolla have partnered to offer businesses an easier way to connect to the U.S. banking system. Plaid enables businesses to instantly authenticate a customer's bank account, giving them the ability to leverage the Dwolla API to connect to the ACH or RTP® networks for sending and receiving payments. Dwolla’s solution offers frictionless ACH or real-time payments payments for companies looking to automate their current payments process and scale their business. With the Plaid + Dwolla integration, your users can verify their accounts in seconds by inputting their banking credentials in Plaid’s front-end module. Plaid’s mobile-friendly module handles input validation, error handling, and multi-factor authentication–providing a seamless onboarding experience to convert more users for your business. As part of the integration, Dwolla customers can access Plaid’s full suite of APIs for clean, categorized transaction data, real-time balances, and more. #### Getting started  You'll first want to familiarize yourself with [Plaid Link](https://plaid.com/docs/link/index.html.md) , a drop-in client-side integration for the Plaid API that handles input validation, error handling, and multi-factor authentication. Your customers will use Link to authenticate with their financial institution and select the depository account they wish to use for ACH or RTP® transactions. From there, you'll receive a Plaid `access_token`, allowing you to leverage real-time balance checks and transaction data, and a Dwolla `processor_token`, which allows you to quickly and securely verify a bank funding source via [Dwolla's API](https://www.dwolla.com/?utm_campaign=Plaid-Documentation&utm_source=Plaid&utm_medium=Referral) without having to store any sensitive banking information. Utilizing Plaid + Dwolla enables a seamless workflow for sending and receiving payments. As a complement to this guide, you can also use [Dwolla's guide to integrating with Plaid](https://plaid.comhttps://developers.dwolla.com/docs/secure-exchange/plaid/index.html.md) . #### Instructions  ##### Set up your Plaid and Dwolla accounts  You'll need accounts at both Plaid and Dwolla in order to use the Plaid + Dwolla integration. You'll also need to be a Dwolla customer in order to add a bank funding source. First, [sign up for a Dwolla account](https://accounts.dwolla.com/sign-up/pay-as-you-go?utm_campaign=Plaid-Documentation&utm_source=Plaid&utm_medium=Referral) if you don't already have one. Next, verify that your Plaid account is enabled for the integration. If you do not have a Plaid account, [create one](https://dashboard.plaid.com/signup/dwolla) . Your account will be automatically enabled for integration access. To verify that your Plaid account is enabled for the integration, go to the [Integrations](https://dashboard.plaid.com/developers/integrations) section of the account dashboard. If the integration is off, simply click the 'Enable' button for Dwolla to enable the integration. Use the [Dwolla Sandbox](https://plaid.comhttps://developers.dwolla.com/docs/testing/index.html.md) to test the Plaid + Dwolla integration for free. ##### Complete your Plaid application profile and company profile  After connecting your Plaid and Dwolla accounts, you'll need to complete your Plaid [application profile](https://dashboard.plaid.com/settings/company/app-branding) and [company profile](https://dashboard.plaid.com/settings/company/profile) in the Dashboard, which involves filling out basic information about your app, such as your company name and website. This step helps your end-users learn more how your product uses their bank information and is also required for connecting to some banks. ##### Create a link\_token  In order to integrate with Plaid Link, you will first need to create a `link_token`. A `link_token` is a short-lived, one-time use token that is used to authenticate your app with Link. To create one, make a [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) request with your `client_id`, `secret`, and a few other required parameters from your app server. View the [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) documentation for a full list of `link_token` configurations. To see your `client_id` and `secret`, visit the [Plaid Dashboard](https://dashboard.plaid.com/developers/keys) . Node▼ ```javascript app.post('/api/create_link_token', async function (request, response) { // Get the client_user_id by searching for the current user const user = await User.find(...); const clientUserId = user.id; const request = { user: { // This should correspond to a unique id for the current user. client_user_id: clientUserId, }, client_name: 'Plaid Test App', products: ['auth'], language: 'en', webhook: 'https://webhook.example.com', redirect_uri: 'https://domainname.com/oauth-page.html', country_codes: ['US'], }; try { const createTokenResponse = await client.linkTokenCreate(request); response.json(createTokenResponse.data); } catch (error) { // handle error } }); ``` ##### Integrate with Plaid Link  Once you have a `link_token`, all it takes is a few lines of client-side JavaScript to launch Link. Then, in the `onSuccess` callback, you can call a simple server-side handler to exchange the Link `public_token` for a Plaid `access_token` and a Dwolla `processor_token`. Integrate Link ```javascript ``` See the [Link parameter reference](https://plaid.com/docs/link/web/index.html.md#create) for complete documentation on possible configurations. `Plaid.create` accepts one argument, a configuration `Object`, and returns an `Object` with three functions, [open](https://plaid.com/docs/link/web/index.html.md#open) , [exit](https://plaid.com/docs/link/web/index.html.md#exit) , and [destroy](https://plaid.com/docs/link/web/index.html.md#destroy) . Calling `open` will display the "Institution Select" view, calling `exit` will close Link, and calling `destroy` will clean up the iframe. ##### Write server-side handler  The Link module handles the entire onboarding flow securely and quickly, but does not actually retrieve account data for a user. Instead, the Link module returns a `public_token` and an `accounts` array, which is a property on the `metadata` object, via the `onSuccess` callback. Exchange this `public_token` for a Plaid `access_token` using the [/item/public\_token/exchange](https://plaid.com/docs/api/items/index.html.md#itempublic_tokenexchange) API endpoint. The `accounts` array will contain information about bank accounts associated with the credentials entered by the user, and may contain multiple accounts if the user has more than one bank account at the institution. In order to avoid any confusion about which account your user wishes to use with Dwolla, it is recommended to set [Account Select](https://dashboard.plaid.com/link/account-select) to "enabled for one account" in the Plaid Dashboard. When this setting is selected, the `accounts` array will always contain exactly one account. Once you have identified the account you will use, you will send the `account_id` property of the account to Plaid, along with the `access_token`, to create a Dwolla `processor_token`. You'll send this token to Dwolla and they will use it to securely retrieve account and routing numbers from Plaid. Node▼ ```javascript const { Configuration, PlaidApi, PlaidEnvironments, ProcessorTokenCreateRequest, } = require('plaid'); // Change sandbox to production when you're ready to go live! const configuration = new Configuration({ basePath: PlaidEnvironments[process.env.PLAID_ENV], baseOptions: { headers: { 'PLAID-CLIENT-ID': process.env.PLAID_CLIENT_ID, 'PLAID-SECRET': process.env.PLAID_SECRET, 'Plaid-Version': '2020-09-14', }, }, }); const plaidClient = new PlaidApi(configuration); try { // Exchange the public_token from Plaid Link for an access token. const tokenResponse = await plaidClient.itemPublicTokenExchange({ public_token: publicToken, }); const accessToken = tokenResponse.access_token; // Create a processor token for a specific account id. const request: ProcessorTokenCreateRequest = { access_token: accessToken, account_id: accountID, processor: 'dwolla', }; const processorTokenResponse = await plaidClient.processorTokenCreate( request, ); const processorToken = processorTokenResponse.processor_token; } catch (error) { // handle error } ``` For a valid request, the API will return a JSON response similar to: ```json { "processor_token": "processor-sandbox-0asd1-a92nc", "request_id": "[Unique request ID]" } ``` ##### Make a request to Dwolla  Once you've obtained the `processor_token`, you'll then pass it to Dwolla as the value of the `plaidToken` request parameter, along with a funding source `name`, to create a funding source for a Dwolla Customer: ```bash POST https://api-sandbox.dwolla.com/customers/AB443D36-3757-44C1-A1B4-29727FB3111C/funding-sources Content-Type: application/vnd.dwolla.v1.hal+json Accept: application/vnd.dwolla.v1.hal+json Authorization: Bearer pBA9fVDBEyYZCEsLf/wKehyh1RTpzjUj5KzIRfDi0wKTii7DqY { "plaidToken": "processor-sandbox-161c86dd-d470-47e9-a741-d381c2b2cb6f", "name": "Jane Doe’s Checking" } ... HTTP/1.1 201 Created Location: https://api-sandbox.dwolla.com/funding-sources/375c6781-2a17-476c-84f7-db7d2f6ffb31 ``` Once you’ve received a successful response from the Dwolla API, you’ll use the unique funding source URL to identify the Customer’s bank when [initiating ACH](https://docs.dwolla.com/#initiate-a-transfer?utm_campaign=Plaid-Documentation&utm_source=Plaid&utm_medium=Referral) or [RTP transfers](https://developers.dwolla.com/concepts/real-time-payments#real-time-payments?utm_campaign=Plaid-Documentation&utm_source=Landing-Page&utm_medium=Referral) . ##### Testing your Dwolla integration  You can create Dwolla `processor_tokens` in Sandbox (sandbox.plaid.com, allows testing with simulated users) or Production (production.plaid.com, requires Dwolla Production credentials). To test the integration in Sandbox mode, simply use the Plaid [Sandbox credentials](https://plaid.com/docs/sandbox/test-credentials/index.html.md) when launching Link with a `link_token` created in the Sandbox environment. When testing in the Sandbox, you have the option to use the [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) endpoint instead of the end-to-end Link flow to create a `public_token`. When using the [/sandbox/public\_token/create](https://plaid.com/docs/api/sandbox/index.html.md#sandboxpublic_tokencreate) \-based flow, the Account Select flow will be bypassed and the `accounts` array will not be populated. On Sandbox, instead of using the `accounts` array, you can call [/accounts/get](https://plaid.com/docs/api/accounts/index.html.md#accountsget) and test with any returned account ID associated with an account with the subtype `checking` or `savings`. ##### Get ready for production  Your account is immediately enabled for our Sandbox environment ([https://sandbox.plaid.com](https://sandbox.plaid.com) ). To move to Production, please request access from the [Dashboard](https://dashboard.plaid.com/developers/keys) . #### Example code in Plaid Pattern  For a real-life example of an app that incorporates the creation of processor tokens, see the Node-based [Plaid Pattern Account Funding](https://github.com/plaid/pattern-account-funding) sample app. Pattern Account Funding is a sample account funding app that creates a processor token to send to your payment partner. The processor token creation code can be found in [items.js](https://github.com/plaid/pattern-account-funding/blob/master/server/routes/items.js#L126-L135) . For a tutorial walkthrough of creating a similar app with Dwolla support, see [Account funding tutorial](https://github.com/plaid/account-funding-tutorial) . #### Support and questions  Find answers to many common integration questions and concerns—such as pricing, sandbox and test mode usage, and more, in our [docs](https://plaid.com/docs/index.html.md) . If you're still stuck, open a [support ticket](https://dashboard.plaid.com/support/new) with information describing the issue that you're experiencing and we'll get back to you as soon as we can. --- # Auth | Plaid Docs Add Gainbridge to your app  =========================== #### Instantly authenticate your customers' bank accounts to fund policies through Gainbridge's Bank Accounts API  (An image of "Partnership Gainbridge logo") #### Overview  Plaid and Gainbridge have partnered together to integrate Plaid’s connectivity platform with Gainbridge’s digital investing platform. This integration will allow you to securely establish and verify your users’ bank accounts through Plaid, and safely transmit authenticated account information to Gainbridge for policy funding through ACH payments: * Instantly authenticate users’ bank accounts with Plaid Link (i.e. enhance user experience, reduce wait times for bank account verification with Microdeposits). * Securely share tokenized banking data to connect with Gainbridge’s Bank Accounts API, used to initiate ACH debits on your customer’s bank accounts to fund a Gainbridge policy. #### Getting Started  You'll first want to familiarize yourself with [Plaid Link](https://plaid.com/plaid-link/) , a drop-in client-side integration for the Plaid API that handles input validation, error handling, and multi-factor authentication. You will also need to have a verified [Gainbridge account](https://enterprise.gainbridge.io/contact) to add a bank funding source. Your customers will use Link to authenticate with their financial institution and select the bank account they wish to connect. From there, you'll receive a Plaid `access_token` and a Gainbridge `processor_token`, which allows you to quickly and securely verify a bank funding source via [Gainbridge's API](https://enterprise.gainbridge.io/platform-overview) without having to store any sensitive banking information. Utilizing Plaid + Gainbridge enables a seamless workflow for connecting external financial accounts to Gainbridge. #### Instructions  ##### Set up your accounts  You'll need accounts at both Plaid and Gainbridge in order to use the Plaid + Gainbridge integration. You'll also need to enable your Plaid account for the Gainbridge integration. First, you will need to work with the Gainbridge team to [sign up for a Gainbridge account](https://enterprise.gainbridge.io/contact) , if you do not already have one. Next, verify that your Plaid account is enabled for the integration. If you do not have a Plaid account, [create one](https://dashboard.plaid.com/signup) . To enable your Plaid account for the integration, go to the [Integrations](https://dashboard.plaid.com/developers/integrations) section of the account dashboard. If the integration is off, simply click the 'Enable' button for Gainbridge to enable the integration. You'll need to complete your Plaid [Application Profile](https://dashboard.plaid.com/settings/company/app-branding) in the Dashboard, which involves filling out basic information about your app, such as your company name and website. This step helps your end-users learn more how your product uses their bank information and is also required for connecting to some banks. Finally, you'll need to go to the [Link customization UI](https://dashboard.plaid.com/link/data-transparency-v5) and pick the use cases that you will be using Gainbridge to power, so that Plaid can request the appropriate authorization and consent from your end users. If you have any questions, contact Gainbridge. ##### Create a link\_token  In order to integrate with Plaid Link, you will first need to create a `link_token`. A `link_token` is a short-lived, one-time use token that is used to authenticate your app with Link. To create one, make a [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) request with your `client_id`, `secret`, and a few other required parameters from your app server. For a full list of `link_token` configurations, see [/link/token/create](https://plaid.com/docs/api/link/index.html.md#linktokencreate) . To see your `client_id` and `secret`, visit the [Plaid Dashboard](https://dashboard.plaid.com/developers/keys) . /link/token/create Node▼ ```javascript const request: LinkTokenCreateRequest = { loading_sample: true }; try { const response = await plaidClient.linkTokenCreate(request); const linkToken = response.data.link_t