openapi: 3.0.3 ########################################################################################################## # # # Core Exchange is 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/. 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. # # # ########################################################################################################## info: version: '6.4.0' title: FDX V6.4.0 description: | ## 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/. 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/. 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). ## Endpoints This specification contains the following endpoints: - `/customers/current` - `/accounts` - `/accounts/{accountId}` - `/accounts/{accountId}/payment-networks` - `/accounts/{accountId}/asset-transfer-networks` - `/accounts/{accountId}/statements` - `/accounts/{accountId}/statements/{statementId}` - `/accounts/{accountId}/contact` - `/accounts/{accountId}/transactions` ## 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 errors The following is an example response with an HTTP status code of 409. ```json title="FDX 705 error example" { "code": 705, "message": "Account is closed", "debugMessage": "Operation is not supported by the closed account" } ``` The following is an example response with an HTTP status code of 403. ```json title="FDX 706 error example" { "code": 706, "message": "Access forbidden", "debugMessage": "Account is locked" } ``` See the Errors table in each endpoint description for more specific message and debug message examples. contact: name: Plaid support url: 'https://plaid.com/data-connectivity-core-exchange/' email: dataconnectivity@plaid.com servers: - url: 'https://api.your-organization.com/fdx/v6' description: Financial Data Exchange V6.4.0 Core API tags: - name: Personal Information description: Search and view customer or customers - name: Account Information description: Search and view customer accounts - name: Account Statements description: Search and retrieve account statements - name: Account Transactions description: Search and view account transactions # the FDX tag 'money movement' is confusing given Core X doesn't actually move money. renaming in our docs to reflect its more limited scope. - name: Payment Networks Information description: Search and view account payment networks - name: Asset Transfer Networks Information description: Search and view asset transfer networks paths: ############################################################ # # Core paths # ############################################################ /accounts: get: operationId: searchForAccounts tags: - Account Information summary: List all accounts description: | Search and view customer accounts. security: - openIdConnect: - Account - oauth2: - Account parameters: - $ref: '#/components/parameters/OffsetQuery' - $ref: '#/components/parameters/PageKeyQuery' - $ref: '#/components/parameters/LimitQuery' responses: '200': description: | An array of accounts. May include accounts of any of the following types: [deposit](#deposit-account), [investment](#investment-account), [line of credit](#line-of-credit-account), [loan](#loan-account) **Note:** Each object in the accounts array is expected to contain at least one account type. content: application/json: schema: $ref: '#/components/schemas/Accounts' example: 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 /accounts/{accountId}: get: operationId: getAccount tags: - Account Information summary: Get detailed information for a specific account description: | Get account balances, liabilities, and other information. Plaid calls this endpoint for [deposit](#deposit-account), [investment](#investment-account), [loan](#loan-account), and [line of credit](#line-of-credit-account) accounts. Plaid uses this endpoint to get balances for deposit accounts, get liabilities for `STUDENTLOAN`, `MORTGAGE`, and `CREDITCARD` loan accounts, and get balances and holdings for investment accounts. See [Plaid Balance API](https://plaid.com/docs/api/products/signal/), [Plaid Liabilities API](https://plaid.com/docs/api/products/liabilities/), and [Plaid Investments API](https://plaid.com/docs/investments/) for more information on how Plaid uses this information. **Note:** Plaid does not call `/accounts/{accountId}` for annuity accounts, commercial accounts, digital wallet accounts, or insurance accounts. These account categories are discoverable-only. The accounts appear in `GET /accounts`, but Plaid does not consume downstream data (balances, transactions, Auth) for these categories. security: - openIdConnect: - Account - oauth2: - Account parameters: - $ref: '#/components/parameters/AccountIdPath' responses: '200': description: | The full details of an investment, loan, deposit, or line of credit account content: application/json: schema: $ref: '#/components/schemas/AccountWithDetails' /accounts/{accountId}/contact: get: operationId: getAccountContact tags: - Personal Information description: | 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/). summary: Get an account's contact information parameters: - $ref: '#/components/parameters/AccountIdPath' security: - openIdConnect: - Customer - oauth2: - Customer responses: '200': description: | Details used to verify an account. content: application/json: schema: $ref: '#/components/schemas/AccountContact' /accounts/{accountId}/payment-networks: get: operationId: getAccountPaymentNetworks tags: - Payment Networks Information description: | 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/). summary: Get payment networks supported by the account security: - openIdConnect: - Account - oauth2: - Account parameters: - $ref: '#/components/parameters/AccountIdPath' - $ref: '#/components/parameters/OffsetQuery' - $ref: '#/components/parameters/PageKeyQuery' - $ref: '#/components/parameters/LimitQuery' responses: '200': description: | Information required to execute a payment transaction against this account. **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. content: application/json: schema: $ref: '#/components/schemas/AccountPaymentNetworkList' example: page: nextOffset: 'B47D80MVP23T' paymentNetworks: - bankId: '010088889' identifier: '1111222233335820' type: US_ACH transferIn: true transferOut: true /accounts/{accountId}/transactions: get: operationId: searchForAccountTransactions tags: - Account Transactions description: | 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](#loan-account), [investment](#investment-account), [deposit](#deposit-account), and [line of credit](#line-of-credit-account) accounts. summary: Search for account transactions security: - openIdConnect: - Transactions - oauth2: - Transactions parameters: - $ref: '#/components/parameters/AccountIdPath' - $ref: '#/components/parameters/OffsetQuery' - $ref: '#/components/parameters/PageKeyQuery' - $ref: '#/components/parameters/LimitQuery' - $ref: '#/components/parameters/StartTimeQuery' - $ref: '#/components/parameters/EndTimeQuery' - $ref: '#/components/parameters/StartDateQuery' - $ref: '#/components/parameters/EndDateQuery' responses: '200': description: | Paginated collection of transactions. Plaid consumes the following transaction types: InvestmentTransaction, DepositTransaction, LoanTransaction, or LocTransaction. content: application/json: schema: $ref: '#/components/schemas/Transactions' example: 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.00 - 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.80 - 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.80 /customers/current: get: operationId: getCustomerInfo tags: - Personal Information description: | Get the ID of the customer within the authorization scope. If you use [OIDC authentication](https://plaid.com/core-exchange/docs/authentication/oauth-server-setup) (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. summary: Get current authenticated customer ID security: - openIdConnect: [] - oauth2: [] responses: '200': description: | Data describing current authenticated customer. content: application/json: schema: $ref: '#/components/schemas/Customer' example: customerId: 'someLongTermUniqueIDString' /accounts/{accountId}/statements: get: operationId: searchForAccountStatements tags: - Account Statements description: | Get account statements. summary: Search for statements parameters: - $ref: '#/components/parameters/AccountIdPath' - $ref: '#/components/parameters/OffsetQuery' - $ref: '#/components/parameters/PageKeyQuery' - $ref: '#/components/parameters/LimitQuery' - $ref: '#/components/parameters/StartTimeQuery' - $ref: '#/components/parameters/EndTimeQuery' - $ref: '#/components/parameters/StartDateQuery' - $ref: '#/components/parameters/EndDateQuery' responses: '200': description: | Paginated list of available statements. content: application/json: schema: $ref: '#/components/schemas/Statements' example: page: nextOffset: 'B47D80MVP23T' statements: - accountId: '10001' statementId: '20001' links: - href: "/accounts/1111/statements?offset=2&limit=10" /accounts/{accountId}/statements/{statementId}: get: operationId: getAccountStatement tags: - Account Statements description: | Get account statement PDF. summary: Get account statement parameters: - $ref: '#/components/parameters/AccountIdPath' - $ref: '#/components/parameters/StatementIdPath' responses: '200': description: | A PDF of an account statement. content: application/pdf: schema: $ref: '#/components/schemas/StatementPDF' /accounts/{accountId}/asset-transfer-networks: get: operationId: getAccountAssetTransferNetworks tags: - Asset Transfer Networks Information description: | 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/#investmentsauthget). summary: Get asset transfer details for this account parameters: - $ref: '#/components/parameters/AccountIdPath' - $ref: '#/components/parameters/OffsetQuery' - $ref: '#/components/parameters/PageKeyQuery' - $ref: '#/components/parameters/LimitQuery' responses: '200': description: | Information required to execute an asset transfer transaction against this account. content: application/json: schema: $ref: '#/components/schemas/AssetTransferNetworkList' example: assetTransferNetworks: - identifier: '23348817826' identifierType: 'ACCOUNT_NUMBER' institutionName: 'First Plaidypus Bank' institutionId: 'FPB' type: 'US_ACATS' jointAccount: true components: ############################################################ # # Security schema # ############################################################ securitySchemes: openIdConnect: type: openIdConnect description: | This API uses an [OpenID Connect (OIDC) authentication flow](https://plaid.com/core-exchange/docs/authentication) and accepts the resulting [access token](https://plaid.com/core-exchange/docs/authentication) as a bearer token. For example, `curl -H 'Authorization: Bearer '`. openIdConnectUrl: https://www.your-organization.com/.well-known/openid-configuration oauth2: type: oauth2 description: | This API uses an [OAuth 2.0 authorization code flow](https://plaid.com/core-exchange/docs/authentication/oauth-flow) 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 tokenUrl: https://www.your-organization.com/token scopes: Account: (optional) Read account data Customer: (optional) Read customer data Transactions: (optional) Read transaction data ############################################################ # # Parameters # ############################################################ parameters: ############################################################ # # Shared request parameters (usable by core and all extensions) # ############################################################ LimitQuery: name: limit in: query description: | 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 `nextPageKey` field to send a subsequent request until the `nextPageKey` is no longer included. schema: type: integer OffsetQuery: name: offset in: query deprecated: true description: | 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 schema: type: string example: qwer123454q2f PageKeyQuery: name: pageKey in: query description: | Opaque cursor used by the provider to send the next set of records. Pagination can be implemented per provider's preference schema: type: string StartDateQuery: name: startDate in: query description: | 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. schema: $ref: '#/components/schemas/DateString' EndDateQuery: name: endDate in: query description: | 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. schema: $ref: '#/components/schemas/DateString' StartTimeQuery: name: startTime in: query description: | Start time for use in retrieval of elements (ISO 8601). When used with the `/transactions` endpoint, Plaid filters by the `postedTimestamp`. Will support filtering by time in a future major release. To support filtering by date only, see StartDateQuery Return everything you hold in the requested range. A fixed lookback of your own is indistinguishable from an account with little history. schema: $ref: '#/components/schemas/DateString' EndTimeQuery: name: endTime in: query description: | End time for use in retrieval of elements (ISO 8601). When used with the `/transactions` endpoint, Plaid filters by the `postedTimestamp`. Will support filtering by time in a future major release. To support filtering by date only, see EndDateQuery schema: $ref: '#/components/schemas/DateString' ############################################################ # # Core request parameters # ############################################################ AccountIdPath: name: accountId in: path description: | Account identifier, found in the `GET /accounts` endpoint response. Plaid expects the ID to be a different value from the account number required: true schema: $ref: '#/components/schemas/Identifier' StatementIdPath: name: statementId in: path description: | Statement identifier, found in the `GET /accounts/{accountId}/statements` endpoint response required: true schema: $ref: '#/components/schemas/Identifier' ############################################################ # # Schemas # ############################################################ schemas: ############################################################ # # Path-related entities (usable by core and all extensions) # ############################################################ PaginatedArray: title: Paginated Array description: | Base class for results that may be paginated type: object properties: page: $ref: '#/components/schemas/PageMetadata' PageMetadata: title: Page Metadata description: | Contains the opaque identifier, `nextPageKey`, to indicate a paginated result set. The `nextOffset` identifier is deprecated and will be removed with a future major release. type: object properties: nextOffset: type: string example: 'B47D80MVP23T' deprecated: true description: | Opaque identifier. Does not need to be numeric or have any specific pattern. Deprecated in favor of `nextPageKey`, will be removed with a future major release nextPageKey: type: string example: 'B47D80MVP23T' description: | Opaque identifier. Does not need to be numeric or have any specific pattern. Implementation specific totalElements: type: integer example: 3 description: | Total number of elements ############################################################ # # Common data types (usable by core and all extensions) # ############################################################ Identifier: title: Identifier description: | Value for a unique identifier type: string maxLength: 256 example: someLongTermUniqueIDString Iso3166CountryCode: title: ISO 3166 Country Code description: | ISO 3166-1 alpha-2 codes as of April 5, 2023, from officially assigned Country Codes on [ISO Online Browsing Platform](https://www.iso.org/obp/ui/). Change log is at [ISO 3166 Maintenance Agency](https://www.iso.org/committee/48750.html) type: string enum: - 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 Iso4217Code: title: ISO 4217 Code description: | 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. type: string example: CAD enum: - 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 # Deprecated String255: title: String 255 description: | String with a maximum length of 255 characters type: string maxLength: 255 String64: title: String 64 description: | String with a maximum length of 64 characters type: string maxLength: 64 Timestamp: title: Timestamp description: | 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) Send UTC or a local time with its correct offset. Plaid doesn't normalize timestamps, so a local time labeled `Z` is read as UTC. type: string format: date-time example: '2021-07-15T14:46:41.375Z' DateString: title: Date String description: | ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) type: string format: date maxLength: 10 example: '2021-07-15' Currency: title: Currency entity description: | A currency object containing an [ISO 4217](https://www.iso.org/iso-4217-currency-codes.html) currency code. type: object example: currencyCode: CAD properties: currencyCode: $ref: '#/components/schemas/Iso4217Code' required: - currencyCode # Holding and Investment Transactions SecurityIdType: title: Security ID Type description: | 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. type: string enum: - CINS - CMC - CME - CUSIP - ISIN - ITSA - NASDAQ - SEDOL - SICC - VALOR - WKN ############################################################ # # Core data entities # ############################################################ # /accounts Accounts: title: Accounts entity type: object description: | An optionally paginated array of account descriptors. Each account descriptor carries a required `accountCategory` field identifying its type; see the `AccountCategory` schema for the full list of values. allOf: - $ref: '#/components/schemas/PaginatedArray' - type: object properties: accounts: type: array description: | An optionally paginated array of account descriptors. Each account descriptor carries a required `accountCategory` field identifying its type; see the `AccountCategory` schema for the full list of values. items: $ref: '#/components/schemas/AccountWithDescriptor' minItems: 1 required: - accounts AccountWithDescriptor: title: Account entity description: | This provides an instance of an account without full details. Plaid expects that the `accountType` field is set to one of the [account types](#account-types) listed below type: object discriminator: propertyName: accountCategory mapping: ANNUITY_ACCOUNT: '#/components/schemas/AnnuityAccountDescriptor' COMMERCIAL_ACCOUNT: '#/components/schemas/CommercialAccountDescriptor' DEPOSIT_ACCOUNT: '#/components/schemas/DepositAccountDescriptor' DIGITAL_WALLET: '#/components/schemas/DigitalWalletDescriptor' INSURANCE_ACCOUNT: '#/components/schemas/InsuranceAccountDescriptor' INVESTMENT_ACCOUNT: '#/components/schemas/InvestmentAccountDescriptor' LOAN_ACCOUNT: '#/components/schemas/LoanAccountDescriptor' LOC_ACCOUNT: '#/components/schemas/LineOfCreditAccountDescriptor' oneOf: - $ref: '#/components/schemas/AnnuityAccountDescriptor' - $ref: '#/components/schemas/CommercialAccountDescriptor' - $ref: '#/components/schemas/DepositAccountDescriptor' - $ref: '#/components/schemas/DigitalWalletDescriptor' - $ref: '#/components/schemas/InsuranceAccountDescriptor' - $ref: '#/components/schemas/InvestmentAccountDescriptor' - $ref: '#/components/schemas/LoanAccountDescriptor' - $ref: '#/components/schemas/LineOfCreditAccountDescriptor' AccountCategory: title: Account Category type description: | The category of account. For example, annuity, commercial, deposit, digital wallet, insurance, investment, loan, or line of credit. enum: - ANNUITY_ACCOUNT - COMMERCIAL_ACCOUNT - DEPOSIT_ACCOUNT - DIGITAL_WALLET - INSURANCE_ACCOUNT - INVESTMENT_ACCOUNT - LOAN_ACCOUNT - LOC_ACCOUNT AccountDescriptor: title: Account Descriptor entity description: | This descriptor provides minimal information about the account for use in lightweight arrays type: object discriminator: propertyName: accountCategory properties: accountCategory: $ref: '#/components/schemas/AccountCategory' accountId: description: | Long-term persistent identity of the account, though not an account number. This identity must be unique within your organization. This value must never change, including when the account number changes, and must not be derived from an account number. $ref: '#/components/schemas/Identifier' accountNumberDisplay: description: | 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. Send at most 4 letters or digits, for example `5820` — not `****5820` or `xxxx-5820`. type: string example: "4321" productName: type: string example: "Premier Account" description: | Marketed product name for this account. Used in UIs to assist in account selection productId: $ref: '#/components/schemas/Identifier' description: Unique ID of the marketed product for this account nickname: description: | Account nickname type: string status: $ref: '#/components/schemas/AccountStatus' currency: $ref: '#/components/schemas/Currency' required: - accountCategory - accountId - productName - status - currency AccountStatus: title: Account Status description: | Account status. Use `RESTRICTED`, with a normal 200, for a locked or limited account that's still open — not FDX error 705, which means closed. type: string example: OPEN enum: - CLOSED - DELINQUENT - NEGATIVECURRENTBALANCE - OPEN - PAID - PENDINGCLOSE - PENDINGOPEN - RESTRICTED DepositAccountDescriptor: description: | 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. - `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. - `HIGHINTERESTSAVINGSACCOUNT`: A savings account that offers a higher interest rate than a standard savings account. - `FIRSTHOMESAVINGSACCOUNT`: A tax-advantaged savings account for a first home purchase. - `OTHERDEPOSIT`: Use when none of the listed enums apply. **Consumption scope:** - **Balances**: Plaid returns balances for all deposit account types. - **Auth**: Plaid maps each account's `accountType` to an internal subtype, and the mapping can vary by institution. By default, `CHECKING` and `SAVINGS` resolve to Auth-eligible subtypes (`checking`, `savings`, or `cash management`); other types require Plaid to enable Auth for your institution before they return Auth data. - **Transactions**: Plaid consumes transactions for deposit accounts that resolve to Plaid's internal `depository` account type. By default this includes `CHECKING`, `SAVINGS`, `CD`, and `MONEYMARKET`, though the mapping can vary by institution. Accounts that don't resolve to `depository` return balances only (no Auth, no transactions). allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: DEPOSIT_ACCOUNT enum: - DEPOSIT_ACCOUNT accountType: $ref: '#/components/schemas/DepositAccountType' required: - accountType - accountCategory DepositAccountType: description: | 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. type: string example: SAVINGS enum: - CHECKING - SAVINGS - CD - ESCROW - MONEYMARKET - HIGHINTERESTSAVINGSACCOUNT - FIRSTHOMESAVINGSACCOUNT - OTHERDEPOSIT DigitalWalletDescriptor: description: | Information for a digital wallet account **Note:** Digital wallet accounts are discoverable-only. Plaid does not consume downstream data (balances, transactions, Auth) for digital wallet accounts. type: object allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: DIGITAL_WALLET enum: - DIGITAL_WALLET accountType: $ref: '#/components/schemas/DigitalWalletType' required: - accountType - accountCategory DigitalWalletType: description: | 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. type: string example: DIGITALWALLET enum: - DIGITALWALLET LoanAccountDescriptor: description: | A loan account. For example, mortgage, student loan or auto loan. Revolving debt, where the balance can be drawn on again after it is paid down, belongs under `LOC_ACCOUNT` instead. 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. - `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. Use when none of the other loan enums apply. - `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. allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: LOAN_ACCOUNT enum: - LOAN_ACCOUNT accountType: $ref: '#/components/schemas/LoanAccountType' required: - accountType - accountCategory LoanAccountType: description: | 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. type: string example: HOMEEQUITYLOAN enum: - AUTOLOAN - HOMEEQUITYLOAN - INSTALLMENT - LOAN - MILITARYLOAN - MORTGAGE - PERSONALLOAN - SMBLOAN - STUDENTLOAN LineOfCreditAccountDescriptor: description: | A line-of-credit account. For example, a credit card or home equity line of credit. This category covers revolving debt, where the balance can be drawn on again after it is paid down; non-revolving debt belongs under `LOAN_ACCOUNT`. 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. Use when none of the other line of credit enums apply. - `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. Send credit cards as this type, not as a loan account. - `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. type: object allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: LOC_ACCOUNT enum: - LOC_ACCOUNT accountType: $ref: '#/components/schemas/LineOfCreditAccountType' required: - accountType - accountCategory LineOfCreditAccountType: description: | 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. type: string example: CREDITCARD enum: - LINEOFCREDIT - CHARGE - CREDITCARD - HOMELINEOFCREDIT InvestmentAccountDescriptor: description: | 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, cooperative hospital service organizations, and self-employed ministers. - `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. - `COMMERCIALINVESTMENT`: An investment account for commercial customers, for example a commercial brokerage account. Available in v5.2 only; from v5.3 use `COMMERCIALINVESTMENT` under `CommercialAccountType`. - `COVERDELL`: A trust or custodial account set up solely for paying qualified education expenses for the designated beneficiary. - `DIGITALASSET`: An account containing digital assets. - `DEFINEDBENEFIT`: An employer-sponsored retirement plan where benefits are computed using a formula considering factors such as length of employment and salary history. - `DEFERREDPROFITSHARINGPLAN`: A Canadian employer-sponsored plan (DPSP) that distributes a share of company profits to employees. - `ESOP`: An employee stock ownership plan that gives employees an ownership interest in the company. - `GUARDIAN`: An account of a child in the parent’s name, with legal title to the assets, capital gains, and tax liabilities belonging to the parent. - `INDIVIDUALPENSIONPLAN`: A Canadian defined-benefit pension plan (IPP) covering a single participant, typically an owner-manager. - `INSTITUTIONALTRUST`: An institutional trust account. - `INVESTMENTACCOUNT`: A general investment account not covered by a more specific type. - `IRA`: An individual retirement account (IRA), a tax-advantaged account used to save and invest for retirement. - `KEOGH`: A tax-deferred pension plan available to self-employed individuals or unincorporated businesses. - `LIFEINCOMEFUND`: A Canadian life income fund (LIF), a locked-in retirement income fund with both minimum and maximum annual withdrawals. - `LOCKEDINRETIREMENTACCOUNT`: A Canadian locked-in retirement account (LIRA) holding pension funds that cannot be withdrawn until retirement. - `LOCKEDINRETIREMENTINCOMEFUND`: A Canadian locked-in retirement income fund (LRIF). - `LOCKEDINRETIREMENTSAVINGSPLAN`: A Canadian locked-in retirement savings plan (LRSP). - `NONQUALIFIEDPLAN`: A type of tax-deferred employer-sponsored retirement plan that falls outside of ERISA guidelines. - `NONQUALIFEDPLAN`: A misspelling of `NONQUALIFIEDPLAN` inherited from the FDX specification. Both values validate; send `NONQUALIFIEDPLAN`. - `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 offering tax-free growth and tax-free withdrawals in retirement. - `PRESCRIBEDREGISTEREDRETIREMENTINCOMEFUND`: A Canadian prescribed registered retirement income fund (PRIF), which has no maximum annual withdrawal. - `PREPAID`: A prepaid account. Added in v6.2. - `REGISTEREDPENSIONPLAN`: A Canadian registered pension plan (RPP). - `REGISTEREDDISABILITYSAVINGSPLAN`: A Canadian registered disability savings plan (RDSP). - `REGISTEREDEDUCATIONSAVINGSPLAN`: A Canadian registered education savings plan (RESP). - `REGISTEREDRETIREMENTINCOMEFUND`: A Canadian registered retirement income fund (RRIF). - `REGISTEREDRETIREMENTSAVINGSPLAN`: A Canadian registered retirement savings plan (RRSP). - `RESTRICTEDLIFEINCOMEFUND`: A Canadian restricted life income fund (RLIF). - `RESTRICTEDLOCKEDINSAVINGSPLAN`: A Canadian restricted locked-in savings plan (RLSP). - `SPECIFIEDPENSIONPLAN`: A Canadian specified pension plan (SPP). - `SARSEP`: A simplified employee pension (SEP) plan set up before 1997 that includes a salary reduction arrangement. - `TAXABLE`: A taxable investment account. - `TAXFREESAVINGSACCOUNT`: A Canadian tax-free savings account (TFSA). - `TDA`: A tax-deferred annuity, a type of retirement plan similar to a 403(b). Plaid maps this to the same account subtype as `403B`. - `TRUST`: An account opened by an individual and managed by a designated trustee for the benefit of a third party. - `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. - `VARIABLEANNUITY`: An annuity whose value varies with the performance of its underlying investments. allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: INVESTMENT_ACCOUNT enum: - INVESTMENT_ACCOUNT accountType: $ref: '#/components/schemas/InvestmentAccountType' required: - accountType - accountCategory InvestmentAccountType: description: | 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. type: string example: ROTH enum: - 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 InsuranceAccountDescriptor: description: | 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. **Note:** Insurance accounts are discoverable-only. Plaid does not consume downstream data (balances, transactions, Auth) for insurance accounts. allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: INSURANCE_ACCOUNT enum: - INSURANCE_ACCOUNT accountType: $ref: '#/components/schemas/InsuranceAccountType' required: - accountType - accountCategory InsuranceAccountType: description: | 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. type: string example: WHOLELIFE enum: - LONGTERMDISABILITY - SHORTTERMDISABILITY - UNIVERSALLIFE - WHOLELIFE AnnuityAccountDescriptor: description: | 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. **Note:** Annuity accounts are discoverable-only. Plaid does not consume downstream data (balances, transactions, Auth) for annuity accounts. allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: ANNUITY_ACCOUNT enum: - ANNUITY_ACCOUNT accountType: $ref: '#/components/schemas/AnnuityAccountType' required: - accountType - accountCategory AnnuityAccountType: description: | 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. type: string example: FIXEDANNUITY enum: - ANNUITY - FIXEDANNUITY - VARIABLEANNUITY CommercialAccountDescriptor: description: | A commercial account. For example, a business deposit account. The `accountType` field for commercial accounts may be set to any of the [account types](#commercial-account-types) listed below. **Note:** Commercial accounts are discoverable-only. Plaid does not consume downstream data (balances, transactions, Auth) for commercial accounts. allOf: - $ref: '#/components/schemas/AccountDescriptor' - type: object properties: accountCategory: type: string example: COMMERCIAL_ACCOUNT enum: - COMMERCIAL_ACCOUNT accountType: $ref: '#/components/schemas/CommercialAccountType' required: - accountType - accountCategory CommercialAccountType: description: | 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. type: string example: COMMERCIALLOAN enum: - COMMERCIALDEPOSIT - COMMERCIALINVESTMENT - COMMERCIALLOAN - COMMERCIALLINEOFCREDIT # /accounts/{accountId} AccountWithDetails: title: Account With Details entity description: | An account with full details. type: object discriminator: propertyName: accountCategory mapping: DEPOSIT_ACCOUNT: '#/components/schemas/DepositAccount' INVESTMENT_ACCOUNT: '#/components/schemas/InvestmentAccount' LOAN_ACCOUNT: '#/components/schemas/LoanAccount' LOC_ACCOUNT: '#/components/schemas/LineOfCreditAccount' oneOf: - $ref: '#/components/schemas/DepositAccount' - $ref: '#/components/schemas/LoanAccount' - $ref: '#/components/schemas/LineOfCreditAccount' - $ref: '#/components/schemas/InvestmentAccount' DepositAccount: title: Deposit Account Details entity description: | 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](#deposit-account-types) listed below. type: object allOf: - $ref: '#/components/schemas/DepositAccountDescriptor' - type: object properties: currentBalance: type: number example: 1399.02 description: | 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/#transactions-get-response-accounts-balances-current) availableBalance: type: number example: 1399.02 description: | 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/#transactions-get-response-accounts-balances-available) earnedInterest: $ref: '#/components/schemas/InterestRate' description: The periodic (usually monthly) interest rate earned on account balances underArbitration: type: boolean example: false description: If `true`, the account is currently under arbitration overdraftOptIn: type: boolean example: false description: Whether customer has opted-in to coverage for FI to allow transactions which overdraw their account balance due to a debit card payment or ATM withdrawal overdrafted: type: boolean example: false description: Whether account currently has a negative or overdrafted account balance overdraftProtectionFunded: type: boolean example: false description: Whether customer has arranged alternate funding source(s) for FI to authorize and pay transactions on their account which might otherwise be declined or cause an overdraft on the account overdraftFundingSources: type: array description: List of the customer's alternate funding sources from which FI can transfer funds to cover transactions if customer has overdraft protection from a consented account. In the order of which accounts will be attempted to transfer the coverage amount needed items: $ref: '#/components/schemas/FundingSource' required: - currentBalance - availableBalance LoanAccount: title: Loan Account entity type: object description: | Full details of a loan account. The `accountType` field for loan accounts may be set to any of the [account types](#loan-account-types) listed below. Revolving debt, where the balance can be drawn on again after it is paid down, belongs under `LOC_ACCOUNT` instead. Plaid only consumes the `MORTGAGE` and `STUDENTLOAN` types for its [Liabilities API](https://plaid.com/docs/api/products/liabilities/). 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` Plaid can exempt specific institutions and platforms from `interestRate` and `interestRateType`. To request this behavior, contact Plaid during your onboarding process. `principalBalance` is always required. 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` allOf: - $ref: '#/components/schemas/LoanAccountDescriptor' - type: object properties: accountNumber: type: string example: 'loanAccount0000001' description: | Full account number for the end user's handle for the account at the owning institution For `accountType` `MORTGAGE`, at least one of this field or `accountNumberDisplay` is required; if both are sent, this one takes precedence. principalBalance: type: number example: 580303.95 description: | Principal balance escrowBalance: type: number example: 3400.61 description: | Escrow balance of loan originalPrincipal: type: number example: 650400.00 description: | Original principal of loan originatingDate: $ref: '#/components/schemas/DateString' description: | Date loan originated ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) loanTerm: type: integer example: 360 description: | Term of loan in months nextPaymentAmount: type: number example: 2483.12 description: | Amount of next payment. May differ from the scheduled payment amount if the customer pays more than required or out of cycle nextPaymentDate: $ref: '#/components/schemas/DateString' description: | Due date of next payment. May differ from the payment due date listed on the customer's most recent statement 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#section-5.6) lastPaymentAmount: type: number example: 2483.12 description: | Amount of last payment lastPaymentDate: $ref: '#/components/schemas/DateString' description: | Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) maturityDate: $ref: '#/components/schemas/DateString' description: | Maturity date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) interestPaidYearToDate: type: number example: 403.04 description: | Interest paid year to date interestRate: type: number example: 6.99 description: | 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: $ref: '#/components/schemas/InterestRateType' currentSchool: type: string example: 'University of California' description: | Current school the student loan is connected to loanProviderName: type: string example: 'Great Lakes' description: | Name of the institution providing the loan chargedInterest: $ref: '#/components/schemas/InterestRate' description: The periodic interest rate on the loan annualPercentageRate: type: number example: 6.99 description: The Annual Percentage Rate on the loan required: - principalBalance - interestRate - interestRateType LineOfCreditAccount: type: object description: | 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](#line-of-credit-account-types) listed below. This category covers revolving debt, where the balance can be drawn on again after it is paid down; non-revolving debt belongs under `LOAN_ACCOUNT`. Plaid consumes the following parameters returned by the `GET /accounts` endpoint: * `availableCredit` — required for every `accountType` except `CHARGE`. * `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` allOf: - $ref: '#/components/schemas/LineOfCreditAccountDescriptor' - type: object properties: creditLine: type: number example: 10000.00 description: | Credit limit availableCredit: type: number example: 8302.73 description: | Available credit. Required for every line of credit `accountType` except `CHARGE`. nextPaymentAmount: type: number example: 1832.11 description: | Amount of next payment. May differ from `minimumPaymentAmount` if the customer pays more than their minimum or out of cycle nextPaymentDate: $ref: '#/components/schemas/DateString' description: | Due date of next payment. May differ from the payment due date listed on the customer's most recent statement 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#section-5.6) principalBalance: type: number example: 132.28 description: | Principal balance currentBalance: type: number example: 1722.81 description: | Current balance of line of credit minimumPaymentAmount: type: number example: 190.32 description: | Minimum payment amount from last statement balance, which is due at the payment due date listed on that statement lastPaymentAmount: type: number example: 2852.91 description: | Amount of last payment lastPaymentDate: $ref: '#/components/schemas/DateString' description: | Last payment date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) pastDueAmount: type: number example: 0 description: | Amount owed that the account holder failed to pay on the due date lastStmtBalance: type: number example: 5393.81 description: | Final balance amount at end of last statement lastStmtDate: $ref: '#/components/schemas/DateString' description: | Last statement date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) purchasesApr: type: number example: 0 description: | Annual percentage rate for purchases advancesApr: type: number example: 0 description: | Annual percentage rate for cash advances transfersApr: type: number example: 0 description: Annual Percentage Rate for balance transfers bills: type: array description: Payments due on the account items: $ref: '#/components/schemas/Bills' scheduledPayments: type: array description: Array of payments scheduled items: $ref: '#/components/schemas/ScheduledPayments' chargedInterest: $ref: '#/components/schemas/InterestRate' description: The periodic interest rate on the line of credit cashAdvanceBalance: type: number example: 0 description: Total balance of cash advances transferBalance: type: number example: 0 description: Total of all balance transfer amounts ppilBalance: type: number example: 0 description: Total balance of Post Purchase Installment Loans (PPIL) underArbitration: type: boolean example: false description: If `true`, the account is currently under arbitration feeSchedule: type: string example: 'Fees can range from 2.59% to 2.99%, plus 49 cents.' description: Describes the current fee schedule for the account ppilApr: type: number example: 0 description: Current annual percentage rate (APR) for Post Purchase Installment Loans (PPIL) balanceTransfersApr: type: number example: 0 description: Current annual percentage rate (APR) for Balance Transfers targetRateSaleApr: type: number example: 0 description: Current annual percentage rate (APR) for Target Rate Sales required: - currentBalance InvestmentAccount: description: | 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` type: object allOf: - $ref: '#/components/schemas/InvestmentAccountDescriptor' - type: object properties: availableCashBalance: type: number example: 3209.54 description: | Cash balance across all sub-accounts. Plaid expects that this includes sweep funds earnedInterest: $ref: '#/components/schemas/InterestRate' description: The periodic (usually monthly) interest rate earned on account cash balances balanceAsOf: description: | 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) Send UTC or a local time with its correct offset. Plaid doesn't normalize timestamps, so a local time labeled `Z` is read as UTC. $ref: '#/components/schemas/Timestamp' currentValue: type: number example: 34938.20 description: | Total current value of all investments holdings: type: array description: | 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/#securities-and-holdings) items: $ref: '#/components/schemas/Holding' example: - securityIds: - id: '123456789' idType: CUSIP holdingName: 'Apple Inc.' holdingType: STOCK symbol: AAPL purchasedPrice: 150.00 currentUnitPrice: 175.00 currentUnitPriceDate: '2023-10-01' units: 1 marketValue: 1750.00 cashAccount: false currency: currencyCode: USD fiAttributes: - name: 'isCashEquivalent' value: 'false' required: - availableCashBalance - currentValue InterestRateType: title: Interest Rate Type description: | 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 type: string example: FIXED enum: - FIXED - INDEXED - VARIABLE InterestRate: title: Interest Rate entity description: Full description of a single interest rate type: object properties: rate: type: number example: 5.25 description: Current interest rate value rateAsOf: $ref: '#/components/schemas/DateString' description: Date of change to the current interest rate value compoundingPeriod: $ref: '#/components/schemas/CompoundingPeriod' description: One of `DAILY`, `WEEKLY`, `BIWEEKLY`, `SEMIMONTHLY`, `MONTHLY`, `SEMIANNUALLY`, `ANNUALLY` priorRate: type: number example: 4.75 description: Prior interest rate value, if any, before change on AsOf date type: $ref: '#/components/schemas/InterestRateType' description: One of `FIXED`, `INDEXED` or `VARIABLE` index: type: string example: SOFR description: >- If an INDEXED rate, the name of the index to which the rate is tied: `EONIA`, `EURIBOR`, `EURREPO`, `FEFUND`, `LIBOR`, `PRIME`, `SOFR`, `SONIA`, etc. CompoundingPeriod: title: Compounding Period description: Interest compounding Period type: string example: MONTHLY enum: - ANNUALLY - BIWEEKLY - DAILY - MONTHLY - SEMIANNUALLY - SEMIMONTHLY - WEEKLY FundingSource: title: Funding Source description: >- Accounts for customer's alternate funding sources from which FI can transfer funds to cover transactions if customer has overdraft protection from a consented account. In the order of which accounts will be attempted to transfer the coverage amount needed. Contains masked or truncated account number or nickname, account type and/or institution name for full clarity on an internal or external funding source type: object properties: accountId: $ref: '#/components/schemas/Identifier' description: >- Long-term persistent identity of the funding source account, not an account number. This identity must be unique to the owning institution accountNumberDisplay: type: string example: "4321" description: Funding source account's masked or truncated account number or its nickname for display to the customer accountType: type: string example: CHECKING description: FDX account type of the funding source account (e.g. `CHECKING`, `SAVINGS`) institutionName: type: string example: "Plaid Bank" description: The name of the institution holding the account Bills: title: Bills entity description: Statements of payments due for an account type: object properties: totalPaymentDue: type: number example: 190.32 description: >- Total payment due or next payment due as it appears on the account statement. Monthly payment due for loans. May be the same amount as the `statementBalance` minimumPaymentDue: type: number example: 35.00 description: The minimum amount which is due on the account statement dueDate: $ref: '#/components/schemas/DateString' description: The date that the payment is due as indicated on the statement autoPayEnabled: type: boolean example: false description: Whether the user's bill is paid automatically as indicated on the statement autoPayAmount: type: number example: 190.32 description: The amount of money the user has set to autopay this bill as indicated on the statement autoPayDate: $ref: '#/components/schemas/DateString' description: The date the autopayment is set to trigger for this bill as indicated on the statement pastDueAmount: type: number example: 0 description: >- The amount that the user should have already paid as it appears on the statement. The value is negative if the user owes money lastPaymentAmount: type: number example: 190.32 description: The amount of the most recent payment as indicated on the statement lastPaymentDate: $ref: '#/components/schemas/DateString' description: The date of most recent payment as indicated on the statement statementBalance: type: number example: 5393.81 description: >- The amount of the last statement. The value is negative if the user owes money statementDate: $ref: '#/components/schemas/DateString' description: The date the statement was issued ScheduledPayments: title: Scheduled Payments entity description: The payments scheduled on the account type: object properties: amount: type: number example: 190.32 description: Total payment due or next payment due. Monthly payment due for loans date: $ref: '#/components/schemas/DateString' description: The date that the payment is due type: $ref: '#/components/schemas/ScheduledPaymentType' description: Type of payment (`AUTOPAY`, `ONE_TIME`, `REPEATING`) payToPrincipal: type: boolean example: false description: Whether payment is applied to principal or not ScheduledPaymentType: title: Scheduled Payment Type description: The type of a payment scheduled on the account type: string example: AUTOPAY enum: - AUTOPAY - ONE_TIME - REPEATING Holding: title: Holding entity description: | A holding in an investment account. 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/#securities-and-holdings) allOf: - type: object properties: securityIds: description: | Array of security identifiers Each entry must carry both `id` and `idType`. A holding whose entry has only one of the pair is rejected. type: array items: $ref: '#/components/schemas/SecurityId' holdingName: type: string description: | Holding name or security name Send a name specific to the security, whether or not you also send a ticker, CUSIP, ISIN, or SEDOL. Plaid treats this name as unique on its own, so a generic value such as `Money Market Fund` can collide with a same-named security from another institution and fail to resolve. When the security has none of those identifiers, this name is the only thing identifying it, so send the same string every time — with nothing else to match on, a change of spacing, casing, or punctuation reads as a different security and splits the holding's history. When one of those identifiers is present it carries the identity instead, and the name can safely change. holdingType: $ref: '#/components/schemas/HoldingType' holdingSubType: $ref: '#/components/schemas/HoldingSubType' symbol: type: string description: | Ticker / Market symbol Every holding must carry at least one identifying value: this field, `securityIds`, or `holdingName`. A holding with none of them fails validation for the whole holdings response, not just that holding. For a security with no public identifier, send `holdingName` alone rather than putting a proprietary code in this field. purchasedPrice: type: number description: | Price of holding at the time of purchase. Plaid determines an approximate [cost basis](https://plaid.com/docs/api/products/investments/#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: type: number description: | Current unit price. Plaid uses this as the [`institution_price`](https://plaid.com/docs/api/products/investments/#investments-holdings-get-response-holdings-institution-price). Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/#investments-holdings-get-response-securities-close-price) if you don't return `securityIds` for holdings involving securities. currentUnitPriceDate: $ref: '#/components/schemas/DateString' description: | 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#section-5.6) units: type: number description: | 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: type: number description: | Market value at the time the data was retrieved faceValue: type: number description: | Required for bonds. Face value at the time the data was retrieved. If this isn't present, Plaid assumes the holding isn't a bond and falls back to `marketValue`. cashAccount: type: boolean description: | 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/#investments-holdings-get-response-securities-is-cash-equivalent) status. Must agree with `holdingSubType`. If this field is `false` and `holdingSubType` is `CASH` or `MONEYMARKET`, the holding will be rejected. currency: $ref: '#/components/schemas/Currency' description: | Currency information if it is different from Account entity fiAttributes: type: array description: | Array of financial institution-specific attributes. Plaid recommends including a value for the `isCashEquivalent` attribute in this array, sent as a string value of `true` or `false`. This populates the [`is_cash_equivalent`](https://plaid.com/docs/api/products/investments/#investments-holdings-get-response-securities-is-cash-equivalent) field in Plaid's customer-facing API. If you return a value for `isCashEquivalent`, then return the same value for `cashAccount` as a boolean. items: $ref: '#/components/schemas/FiAttribute' taxLots: type: array description: | Array of tax lots items: $ref: "#/components/schemas/TaxLot" required: - cashAccount - marketValue SecurityId: title: Security ID entity description: | Unique identifier for a security type: object properties: id: $ref: '#/components/schemas/Identifier' idType: $ref: '#/components/schemas/SecurityIdType' HoldingType: title: Holding Type description: | Plaid maps the holding type to the Plaid [security type](https://plaid.com/docs/api/products/investments/#investments-holdings-get-response-securities-type). Plaid expects you to return `OTHER` and set the `holdingSubType` to indicate cash-type holdings (`CASH`, `MONEYMARKET`). type: string enum: - ANNUITY - BOND - CD - DIGITALASSET - MUTUALFUND - OPTION - OTHER - STOCK HoldingSubType: title: Holding SubType description: | The subtype of an investment holding. Set this to `CASH` or `MONEYMARKET` to indicate a cash-type holding, with `holdingType` set to `OTHER`. type: string enum: - CASH - MONEYMARKET FiAttribute: title: FI Attribute entity description: | Financial institution-specific attribute. Sent as an array of name/value pairs, not a keyed object, with string values: `[{"name": "isCashEquivalent", "value": "false"}]`, not `{"isCashEquivalent": false}`. `isCashEquivalent` must be `"true"` or `"false"`. type: object properties: name: type: string description: | Name of the financial institution-specific attribute value: type: string description: | Value of the financial institution-specific attribute TaxLot: title: Tax Lot entity description: | Block of securities receiving the same tax treatment type: object properties: originalPurchaseDate: $ref: "#/components/schemas/DateString" description: | Lot acquired date ISO 8601 full-date in format 'YYYY-MM-DD' according to [IETF RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) quantity: type: number description: | Lot quantity purchasedPrice: type: number description: | Original purchase price costBasis: type: number description: | Total amount of money spent acquiring this lot including any fees or commission expenses incurred currentValue: type: number description: | Lot market value positionType: $ref: "#/components/schemas/PositionType" description: | LONG, SHORT PositionType: title: Position Type description: | The type of an investment position type: string enum: - LONG - SHORT # /accounts/{accountId}/contact AccountContact: title: Account Contact entity description: | Details used to verify an account type: object properties: holders: type: array items: $ref: '#/components/schemas/AccountHolder' minItems: 1 description: | 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/) example: - relationship: SECONDARY name: first: 'Ernest' middle: 'Miller' last: 'Hemingway' suffix: 'IV' - relationship: PRIMARY_JOINT name: first: "Maya" last: "Angelou" middle: "Annie" emails: type: array items: type: string minItems: 1 description: | Email addresses associated with the account example: - "ernest.m.hemingway@domain.tld" - "m.angelou@domain.tld" addresses: type: array items: $ref: '#/components/schemas/DeliveryAddress' minItems: 1 description: | Physical mail addresses associated with the account example: - 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: array items: $ref: '#/components/schemas/TelephoneNumber' minItems: 1 description: | Telephone numbers associated with the account example: - type: HOME country: '1' number: '3127771926' - type: CELL country: '53' number: '45915607' - type: HOME country: '1' number: '4157771926' required: - holders - emails - addresses - telephones AccountHolder: title: Account Holder entity description: | A customer's relationship to a given account, extending their base customer information. Mark business holders by setting `type` or `relationship` to `BUSINESS`, with the legal entity name on `businessCustomer`. Unmarked holders are treated as individuals and must supply `name.first` and `name.last`. type: object allOf: - $ref: '#/components/schemas/CustomerWithoutId' - type: object properties: relationship: $ref: '#/components/schemas/AccountHolderRelationship' description: | Customer's relationship to the account BusinessOrConsumer: title: Business or Consumer Type description: | Indicates whether the customer is a consumer (individual) or a business entity type: string enum: - BUSINESS - CONSUMER BusinessCustomer: title: Business Customer entity description: | When the account holder is a business customer, provides business-specific customer information type: object properties: name: type: string description: | Name of the business customer CustomerWithoutId: title: Customer entity description: | Represents a customer. Plaid-specific schema created to exclude the `customerId` property of the FDX `Customer` schema type: object properties: type: $ref: '#/components/schemas/BusinessOrConsumer' description: | Whether this customer is a consumer (individual) or a business customer name: $ref: '#/components/schemas/CustomerName' businessCustomer: $ref: '#/components/schemas/BusinessCustomer' description: | When customer `type` is `BUSINESS`, business-specific customer information, such as business name CustomerName: title: Customer Name entity description: | 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 type: object allOf: - $ref: '#/components/schemas/IndividualName' - type: object properties: prefix: description: | Prefix, e.g. Mr., Mrs., Dr. type: string IndividualName: title: Individual Name description: | First name, middle initial, last name, suffix fields type: object properties: first: description: | First name type: string middle: description: | Middle name type: string last: description: | Last name type: string suffix: description: | Generational or academic suffix, e.g. Jr., Sr., III type: string required: - first - last AccountHolderRelationship: title: Account Holder Relationship description: | Types of relationships between accounts and holders. Some definitions: * `AUTHORIZED_SIGNER` - An Authorized Signer is an individual who has been given permission by the account owner/holder to sign checks, make withdrawals, and conduct transactions on behalf of an account holder for deposit account types, such as checking or savings, but does not own the account. They may also have an ability to make changes to the account (e.g. can close the account) * `AUTHORIZED_USER` - An Authorized User is an individual added to a credit card account by the primary account holder, who has been authorized to make purchases using the card, but has no legal responsibility to repay the debt. The primary account holder remains legally responsible for repaying the debt for all charges incurred, including those of the Authorized User. Authorized User may not have access to the full account control (e.g. cannot close the account) type: string enum: - 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 DeliveryAddress: title: Delivery Address description: | A delivery address and its location type type: object allOf: - $ref: '#/components/schemas/Address' - type: object properties: type: $ref: '#/components/schemas/DeliveryAddressType' description: Type of address location. One of BUSINESS, DELIVERY, HOME, MAILING primary: type: boolean description: Whether this is the primary and first address to use for contact DeliveryAddressType: title: Delivery Address Type description: | The location type of an address type: string enum: - BUSINESS - DELIVERY - HOME - MAILING Address: title: Address description: | Postal address type: object properties: line1: $ref: '#/components/schemas/String64' description: | Address line 1 line2: $ref: '#/components/schemas/String64' description: | Address line 2 line3: $ref: '#/components/schemas/String64' description: | Address line 3 city: $ref: '#/components/schemas/String64' description: | City region: $ref: '#/components/schemas/String64' description: | State or province postalCode: type: string maxLength: 10 description: | Postal code country: $ref: '#/components/schemas/Iso3166CountryCode' description: | ISO 3166-1 alpha-2 code, upper case, for example `US` — three-letter codes, full names, and lower case are rejected. Plaid also checks against its own supported-country list, so a valid code can still fail. required: - line1 - city - country TelephoneNumber: title: Telephone Number description: | Standard for international phone numbers type: object properties: type: $ref: '#/components/schemas/TelephoneNumberPurpose' description: | 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 by the `CELLULAR` value in the `network` field country: type: string minLength: 1 maxLength: 4 pattern: ^\+?[1-9][0-9]{0,2}$ description: | Country calling codes defined by ITU-T recommendations E.123 and E.164, such as '+1' for United States and Canada, see [list of country calling codes](https://en.wikipedia.org/wiki/List_of_country_calling_codes) number: type: string maxLength: 15 pattern: '\d+' description: | Telephone subscriber number defined by ITU-T recommendation E.164 network: $ref: '#/components/schemas/TelephoneNetwork' description: | The network technology used for this telephone. One of CELLULAR, LANDLINE, PAGER, SATELLITE, or VOIP primary: type: boolean description: | Whether this is the primary and first telephone number to call required: - number - type TelephoneNumberPurpose: title: Telephone Number Purpose description: | 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 by the `CELLULAR` value in the `network` field type: string enum: - BOTH - BUSINESS - CELL # deprecated, replaced by a TelephoneNetwork value - FAX - HOME - PERSONAL TelephoneNetwork: title: Telephone Network description: | The network technology used for this telephone. One of CELLULAR, LANDLINE, PAGER, SATELLITE, or VOIP type: string enum: - CELLULAR - LANDLINE - PAGER - SATELLITE - VOIP # /accounts/{accountId}/payment-networks AccountPaymentNetworkList: title: Payment Networks entity type: object description: | Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH allOf: - $ref: '#/components/schemas/PaginatedArray' - type: object properties: paymentNetworks: type: array description: | Array of payment networks. Not all deposit accounts support ACH transfers. For example, a prepaid debit card account doesn't support ACH items: $ref: '#/components/schemas/PaymentNetwork' minItems: 1 example: - bankId: '010088889' identifier: '1111222233335820' type: US_ACH transferIn: true transferOut: true required: - paymentNetworks PaymentNetwork: title: Payment Network Supported by Account description: | This provides details required to execute a transaction against the account within the payment network type: object properties: bankId: type: string description: | 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: type: string description: | The number used to identify the account within the payment network. Send 4 to 17 digits with no separators, even if displayed to customers formatted. A value with separators is rejected and that account's Auth data will be discarded, though the response still succeeds and the account still appears. type: $ref: '#/components/schemas/PaymentNetworkType' transferIn: type: boolean description: | Can transfer funds to the account using this information. Plaid expects 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: type: boolean description: | Can transfer funds from the account using this information. Plaid expects 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 required: - bankId - identifier - type - transferIn - transferOut PaymentNetworkType: title: Payment Network Type description: | 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 (mostly small banks) * US_CHIPS: Clearinghouse Interbank Payments System (primarily big banks) * US_FEDNOW: Federal Reserve Instant Payment System **NOTE**: `US_FEDNOW` is supported as of v6.0. `US_FEDWIRE` and `US_RTP` are not supported payment network types. type: string enum: - CA_ACSS - CA_LVTS - US_ACH - US_CHIPS - US_FEDNOW - US_FEDWIRE - US_RTP # /accounts/{accountId}/transactions Transactions: title: Transactions entity description: | A page of transactions for an account, spanning deposit, investment, loan, and line-of-credit transaction types. allOf: - $ref: '#/components/schemas/PaginatedArray' - type: object properties: transactions: type: array description: | An optionally paginated array of transactions. May be any of the following: [deposit transaction](#deposit-transaction), [investment transaction](#investment-transaction), [loan transaction](#loan-transaction), [line of credit transaction](#line-of-credit-transaction) items: discriminator: propertyName: accountCategory mapping: DEPOSIT_ACCOUNT: '#/components/schemas/DepositTransaction' INVESTMENT_ACCOUNT: '#/components/schemas/InvestmentTransaction' LOAN_ACCOUNT: '#/components/schemas/LoanTransaction' LOC_ACCOUNT: '#/components/schemas/LineOfCreditTransaction' oneOf: - $ref: '#/components/schemas/DepositTransaction' - $ref: '#/components/schemas/InvestmentTransaction' - $ref: '#/components/schemas/LineOfCreditTransaction' - $ref: '#/components/schemas/LoanTransaction' required: - transactions Transaction: title: Transaction description: | Base entity for financial transactions. For monetary amounts, Plaid expects a decimal amount, with two places to represent fractional values of the base currency, for example `101.99` type: object discriminator: propertyName: accountCategory properties: accountCategory: $ref: '#/components/schemas/AccountCategory' transactionId: description: | Long term persistent unique identifier of the transaction. Each ID must be unique within the scope of the account, as a duplicate ID will cause the transaction to be overwritten. The pending and posted versions of a transaction must have different IDs; you can associate them by sharing a `referenceTransactionId` instead of this field. This identifier's value must not be based on a counter that resets, such as at the end of a day or a statement cycle. $ref: '#/components/schemas/Identifier' referenceTransactionId: description: | 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 $ref: '#/components/schemas/Identifier' postedTimestamp: description: | 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) Send UTC or a local time with its correct offset. Plaid doesn't normalize timestamps, so a local time labeled `Z` is read as UTC. $ref: '#/components/schemas/Timestamp' transactionTimestamp: description: | 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) Send UTC or a local time with its correct offset. Plaid doesn't normalize timestamps, so a local time labeled `Z` is read as UTC. $ref: '#/components/schemas/Timestamp' cardNumberDisplay: type: string description: | 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: type: string description: | 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: $ref: '#/components/schemas/DebitCreditMemo' category: type: string description: | Transaction category, preferably MCC or SIC. Plaid expects your organization to provide MCC, if available and applicable subCategory: type: string description: | Transaction category detail specifying the standard of the transaction category. For example, "MCC" status: $ref: '#/components/schemas/TransactionStatus' amount: type: number description: | 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: type: number description: | The amount of money in the foreign currency. If this amount is specified, then Plaid expects that the `foreignCurrency` property is also set foreignCurrency: $ref: '#/components/schemas/Iso4217Code' required: - debitCreditMemo - description - transactionId - transactionTimestamp - status - amount DebitCreditMemo: title: DebitCreditMemo description: | 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.) type: string enum: - CREDIT - DEBIT - MEMO TransactionStatus: title: Transaction Status description: | 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 type: string enum: - AUTHORIZATION - MEMO - PENDING - POSTED DepositTransaction: title: Deposit Transaction entity description: | A transaction on a deposit account type type: object allOf: - $ref: '#/components/schemas/Transaction' - type: object properties: accountCategory: type: string enum: - DEPOSIT_ACCOUNT payee: allOf: - $ref: '#/components/schemas/String255' description: | Payee name. checkNumber: type: integer description: | Check number. Plaid expects this solely if the transaction involves a check required: - accountCategory example: accountCategory: DEPOSIT_ACCOUNT transactionId: '78RJ3311PLU34300E' transactionTimestamp: '2024-07-15T14:46:41.375+02:00' description: 'ATM deposit' debitCreditMemo: CREDIT status: PENDING amount: 38.90 InvestmentTransaction: title: Investment Transaction entity description: | 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` type: object allOf: - $ref: '#/components/schemas/Transaction' - type: object properties: accountCategory: type: string enum: - INVESTMENT_ACCOUNT transactionType: $ref: '#/components/schemas/InvestmentTransactionType' securityId: type: string description: | 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: $ref: '#/components/schemas/SecurityIdType' securityType: $ref: '#/components/schemas/SecurityType' symbol: type: string description: | Ticker / Market symbol This field is **required** unless both `securityId` and `securityIdType` are provided commission: type: number description: | Plaid expects that your organization includes a value for commission if the commission isn't included in `fees` fees: type: number description: | Fees applied to the trade. Plaid expects that the `fees` include the commission, unless your organization separately provides a value for `commission` unitPrice: type: number description: | Unit price. Plaid uses this as the [price](https://plaid.com/docs/api/products/investments/#investments-transactions-get-response-investment-transactions-price). Plaid falls back to using this as the [close price](https://plaid.com/docs/api/products/investments/#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: type: number description: | 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: $ref: '#/components/schemas/UnitType' fiAttributes: type: array description: | Array of financial institution-specific attributes. Plaid recommends including a value for the `isCashEquivalent` attribute in this array, sent as a string value of `true` or `false`. This populates the [`is_cash_equivalent`](https://plaid.com/docs/api/products/investments/#investments-transactions-get-response-securities-is-cash-equivalent) field in Plaid's customer-facing API. items: $ref: '#/components/schemas/FiAttribute' required: - fees - transactionType - accountCategory example: 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 fiAttributes: - name: 'isCashEquivalent' value: 'false' InvestmentTransactionType: title: Investment Transaction Type description: | The type of an investment transaction. Plaid maps these enums to Plaid [investment transaction types](https://plaid.com/docs/api/accounts/#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 type: string enum: - 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 SecurityType: title: Security Type description: | The type of a security type: string enum: - BOND - DEBT - MUTUALFUND - DIGITALASSET - OPTION - OTHER - STOCK - SWEEP UnitType: title: Unit Type description: | The units of an investment transaction type: string enum: - CURRENCY - SHARES LoanTransaction: title: Loan Transaction entity description: | A transaction on a loan account type: object allOf: - $ref: '#/components/schemas/Transaction' - type: object properties: accountCategory: type: string enum: - LOAN_ACCOUNT transactionType: $ref: '#/components/schemas/LoanTransactionType' required: - accountCategory example: 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 LoanTransactionType: title: Loan Transaction Type description: | 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. type: string enum: - ADJUSTMENT - FEE - INTEREST - PAYMENT - LUMP_SUM_PAYMENT - SKIP_PAYMENT - DOUBLE_UP_PAYMENT - PAYOFF LineOfCreditTransaction: title: Line-Of-Credit Transaction entity description: | A line-of-credit transaction type: object allOf: - $ref: '#/components/schemas/Transaction' - type: object properties: accountCategory: type: string enum: - LOC_ACCOUNT transactionType: $ref: '#/components/schemas/LineOfCreditTransactionType' checkNumber: type: integer description: | Check number. Plaid expects this solely if the transaction involves a check required: - accountCategory example: accountCategory: LOC_ACCOUNT transactionId: '78RJ3311PLU34300E' transactionTimestamp: '2024-07-15T14:46:41.375+02:00' description: 'Recurring payment' debitCreditMemo: CREDIT status: AUTHORIZATION amount: 38.90 LineOfCreditTransactionType: title: Line-Of-Credit Transaction Type description: | The type of a line of credit (LOC) transaction. Plaid passes through all LOC transaction types type: string enum: - ADJUSTMENT - CHECK - FEE - INTEREST - PAYMENT - WITHDRAWAL - PURCHASE # /customers/current Customer: title: Customer entity description: | Represents a customer. Plaid-specific schema created to hold one property, the `customerId` property of the FDX `Customer` schema type: object properties: customerId: $ref: '#/components/schemas/Identifier' description: | 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 required: - customerId # /accounts/{accountId}/statements Statements: title: Statements entity description: | A paginated array of account statements. Return only statements within the requested window. Returning full history makes the same statement reappear on every extraction. type: object allOf: - $ref: '#/components/schemas/PaginatedArray' - type: object properties: statements: type: array description: | An array of statements, each with its own HATEOAS link to retrieve the account statement items: $ref: '#/components/schemas/Statement' required: - statements Statement: title: Statement entity description: | An account statement type: object properties: accountId: $ref: '#/components/schemas/Identifier' description: | Corresponds to `accountId` in Account entity statementId: $ref: '#/components/schemas/Identifier' description: | Long-term persistent identity of the statement. This identity must be unique within your organization statementDate: $ref: '#/components/schemas/DateString' description: | The date the statement becomes available to be viewed by the user description: type: string description: | Description of the statement links: $ref: '#/components/schemas/HateoasLinks' description: | The HATEOAS links to retrieve this account statement, or to invoke other APIs. **Note:** Plaid only accepts one link object in this array status: type: string description: | Availability status of statement HateoasLinks: title: HATEOAS links array description: | An array of HATEOAS links type: array items: $ref: '#/components/schemas/HateoasLink' HateoasLink: title: HATEOAS Link description: | HATEOAS (Hypermedia As The Engine Of Application State) link required: - href type: object properties: href: type: string format: uri-reference description: | The resource URL example: "https://api.fi.com/fdx/v6/accounts/12345" action: description: | The HTTP method to use for the request $ref: '#/components/schemas/HttpAction' rel: description: | The relation of this link to its containing entity, as defined by the [IETF RFC8288](https://datatracker.ietf.org/doc/html/rfc8288) type: string types: type: array items: $ref: '#/components/schemas/ContentTypes' description: | The content-types that can be used in the Accept header. **Note:** Plaid currently only accepts the PDF (`application/pdf`) content type HttpAction: title: HTTP action type description: | The HTTP method to use for requests type: string enum: - GET - POST - PATCH - DELETE - PUT ContentTypes: title: Content Types description: | Types of document formats. (Suggested values) type: string enum: - application/pdf - image/gif - image/jpeg - image/tiff - image/png - application/json # /accounts/{accountId}/statements/{statementId} StatementPDF: title: Statement PDF description: | An account statement in PDF format. Each statement must carry distinct, non-empty binary content. Plaid rejects duplicates and invalid payloads. format: binary # /accounts/{accountId}/asset-transfer-networks AssetTransferNetworkList: title: Asset Transfer Networks description: | A paginated array of asset transfer networks for the account type: object properties: assetTransferNetworks: type: array description: | A paginated array of asset transfer networks for the account items: $ref: '#/components/schemas/AssetTransferNetwork' required: - assetTransferNetworks AssetTransferNetwork: title: Asset Transfer Network description: | Information required to facilitate asset transfer from this account type: object properties: identifier: type: string description: | 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: $ref: '#/components/schemas/PaymentNetworkIdentifierType' institutionName: description: | The name of the institution holding the account type: string institutionId: description: | Institution identifier used by the asset transfer network, e.g., the Depository Trust and Clearing Corporation code for the institution holding the account type: string type: $ref: '#/components/schemas/AssetTransferType' jointAccount: description: | Whether this account has joint owners type: boolean required: - identifier - institutionId - type PaymentNetworkIdentifierType: title: Payment Network Identifier Type description: | The type of identifier used to identify the account in the payment network type: string enum: - ACCOUNT_NUMBER - TOKENIZED_ACCOUNT_NUMBER AssetTransferType: title: Asset Transfer Type description: | The type of asset transfer type: string enum: - CA_ATON - US_ACATS - US_DTC