openapi: 3.0.1
info:
title: Envestnet Aggregation APIs Account Token Associated Details API
description: 'This file describes the Yodlee Aggregation product APIs using the swagger notation that you can use to build your financial application. You can generate the client SDK in Python, JavaScript, PHP, or any other languages according to your development needs. For more details about the APIs, refer to Yodlee API v1.1 - Overview.
You will have to set the header before making the API call. The following headers apply to all the APIs:
- Authorization: This header holds the access token
- Api-Version: 1.1
Note: If there are any API-specific headers, they are mentioned explicitly in the respective API''s description.'
termsOfService: https://developer.yodlee.com/terms/condition
contact:
email: developer@yodlee.com
license:
name: Yodlee Developer License
url: https://developer.yodlee.com/terms/condition#_Services_1
version: 1.1.0
servers:
- url: /
tags:
- name: Associated Details
paths:
/insights/entityDetail:
get:
tags:
- Associated Details
summary: Envestnet Fetch the details of a insights associated with an entity Id.
description: Retrieves details of all insights applicable for a given entity Id (viewId or accountId).
operationId: getInsightDetailsBasedOnEntityId
parameters:
- name: entityId
in: query
description: The unique identifier of the account or view.
required: true
style: form
explode: false
schema:
type: string
example: 603df517392f983d50925df7 or 10231581
- name: entityType
in: query
description: The unique identifier of the entity type.
required: true
style: form
explode: false
schema:
type: string
example: ACCOUNT or VIEW
- name: insightName
in: query
description: The unique identifier of insight Name. Comma separated multiple values can be passed.
required: false
style: form
explode: true
schema:
type: string
example: BILL_PAID,NEW_BILL
responses:
'200':
description: Applicable Insights are fetched successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/EntityDetailResponse'
examples:
sampleResponse:
$ref: '#/components/examples/getEntityDetailResponseExample'
'400':
description: 'Bad request. ErrorCode and ErrorMessages below:
Y800: Invalid value for entityId
Y800: Invalid value for insightName
Y800: Invalid value for insightName; one or more insightName requested is not eligible for the entityId passed.
Y800: Invalid value for insightName; It is either invalid, duplicated, or not supported.
Y800: Invalid value for insightName; one or more insightName requested is not enabled for the entityId passed
Y800: Invalid value for entityType
Y800: Invalid value for entityType/entityId combination.
Y803: entityId and entityType is required to process this request.
Y800: Invalid value for entityId/entityType; multiple values are not supported.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: 'Y020 : Invalid token in authorization header
Y023 : Token has expired
Y011 : Invalid cobrand or incorrectly configured cobrand'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
/insights/insightDetail/{insightName}:
get:
tags:
- Associated Details
summary: Envestnet Fetch the details of entities associated with an insight name.
description: Retrieves details of all entity ids applicable for a given insight.
operationId: getEntityDetailsBasedOnInsightName
parameters:
- name: insightName
in: path
description: The name identifier of the specific insight.
required: true
style: simple
explode: false
schema:
type: string
example: SUGGESTED_SAVING_OPPORTUNITY
- name: entityType
in: query
description: The unique identifier of entity Type. Comma separated multiple values can be passed.
required: false
style: form
explode: true
schema:
type: string
example: ACCOUNT,VIEW
responses:
'200':
description: Applicable entities are fetched successfully.
content:
application/json:
schema:
$ref: '#/components/schemas/InsightDetailsResponse'
examples:
sampleResponse:
$ref: '#/components/examples/getInsightDetailResponseExample'
'400':
description: 'Bad request. ErrorCode and ErrorMessages below:
Y800: Invalid value for entityId
Y800: Invalid value for entityType; only ACCOUNT and VIEW is allowed.
Y800: Invalid value for entityType; one or more entityType requested is not eligible for the insightName passed.
Y800: Invalid value for entityType; It is either invalid, duplicated, or not supported.
Y822: Details cannot be requested for insights that are not enabled for the user.'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'401':
description: 'Y020 : Invalid token in authorization header
Y023 : Token has expired
Y011 : Invalid cobrand or incorrectly configured cobrand'
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
components:
schemas:
EligibleInsight:
properties:
insightName:
type: string
description: "Name of the Insight for which this notification is generated.
Endpoints - - GET insights/configs/customerSubscriptions customer API
\n - GET insights/configs/userSubscriptions User API
\n - PATCH /insights/configs/customerSubscriptions cusomter API
\n - PATCH /insights/configs/userSubscriptions User API
\n - GET /insights/entityDetail/{entityId}
\n - GET /insights/insightDetail/{insightName}
"
readOnly: true
example: BILL_NOT_PAID
applicableConfiguration:
type: array
items:
$ref: '#/components/schemas/EligibleDetail'
userConfiguration:
properties:
entityId:
type: string
description: Unique ID which references a specific entityType.
Users can set preferences at s specific entityId level. - if entityType is "ACCOUNT" then this field represents 'accountId'
- if entityType is "VIEW" then this field represents 'viewId'
Note - This field is only applicable for Usersubscription and not for customerSubscription.
- If the user has 5 aggregated insights and only 2 entity IDs are patched with custom preferences, the rest of the accounts will be evaluated based on the defaults provided within the customerConfiguration object.
Endpoints -- GET insights/configs/customerSubscriptions customer API
- GET insights/configs/userSubscriptions User API
- PATCH /insights/configs/customerSubscriptions cusomter API
- PATCH /insights/configs/userSubscriptions User API
example: '10001453'
entityType:
type: string
description:
Endpoints -- GET insights/configs/customerSubscriptions customer API
- GET insights/configs/userSubscriptions User API
- PATCH /insights/configs/customerSubscriptions cusomter API
- PATCH /insights/configs/userSubscriptions User API
example: ACCOUNT
isSubscribed:
type: boolean
description: "Insight Subscription APIs allow User to subscribe/unsubscribe at any particular entity level.
If an insight is not subscribed (isSubscribed = false) at the customer level, the insight will not be present in the userSubscription API.
If an insight is subscribed by the customer (isSubscribed = true), the insight will be subscribed automatically by the user and all the default configurations will be inherited.
The user can choose to turn off the insight by setting isSubscribed=false.\n
>Endpoints -- GET\n insights/configs/customerSubscriptions customer API
- GET\n insights/configs/userSubscriptions User API
- PATCH\n /insights/configs/customerSubscriptions cusomter API
- PATCH\n /insights/configs/userSubscriptions User API
"
example: true
frequency:
type: string
description: Identifies how often the insight will be evaluated.
Note - Evaluation does not mean an insight will be generated. If the conditions for generating an insight are not met, the insight will not get generated even after it being evaluated.
Depending on the insight, it might be editable for customers and users.
Endpoints -- GET /insights/configs/customerSubscriptions Cobrand API
- GET /insights/configs/userSubscriptions User API
- PATCH /insights/configs/userSubscriptions User API
example: DAILY
enum:
- DAILY
- WEEKLY
- MONTHLY
duration:
type: string
description: Identifies the duration for which the data will be considered to generate and insight.
Note - Even if the duration mentioned is ONE_YEAR, the insight can consider only data that exists. If there is data only for one month, the insight will be generated using the available one month data.
- Duration is insight specific. For some insights which are REFRESH based, duration might not be applicable. For certain insights, only a subset of the duration might be applicable.
Endpoints -- GET /insights/configs/customerSubscriptions Cobrand API
- GET /insights/configs/userSubscriptions User API
- PATCH /insights/configs/userSubscriptions User API
example: THIS_MONTH
enum:
- THIS_MONTH
- LAST_MONTH
- THREE_MONTHS
- SIX_MONTHS
- ONE_YEAR
threshold:
type: array
items:
$ref: '#/components/schemas/Threshold'
isBenchmarkEnabled:
type: boolean
description: "Identifies if peer benchmarking is enabled for a particular insight. The attribute will be returned only for insights that are eligible for peer benchmarking data points
The default value of this attribute will be based on the global configuration key to enable/disable peer benchmarking. If the global configuration is true, this attribute will be true and if the global configuration is false, this value will be false.
If the peer benchmarking is enabled by the customer (isBenchmarkEnabled = true), the benchmarks will be subscribed automatically by the user.
The user can choose to turn off the benchmark configuration for the insight by setting isBenchmarkEnabled=false.
Note - There are few insights for which the isBenchmarkEnabled attribute cannot be updated since benchmark amount is essential for the insight evaluation.\n
Endpoints -- GET\n insights/configs/customerSubscriptions customer API
- GET\n insights/configs/userSubscriptions User API
- PATCH\n /insights/configs/customerSubscriptions cusomter API
- PATCH\n /insights/configs/userSubscriptions User API
"
example: true
EntityDetail:
properties:
entityType:
type: string
description: The entityType identifies which applicableEntity of the insight the configuration will impact.
entityId:
type: string
description: "Unique ID which references a specific entityType for which the insight is generated. - if entityType is \"ACCOUNT\" then this field represents 'accountId'
- if entityType is \"VIEW\" then this field represents 'viewId'
Endpoints - - GET insights/configs/customerSubscriptions customer API
\n - GET insights/configs/userSubscriptions User API
\n - PATCH /insights/configs/customerSubscriptions cusomter API
\n - PATCH /insights/configs/userSubscriptions User API
\n - GET /insights/entityDetail/{entityId}
\n - GET /insights/insightDetail/{insightName}
"
container:
type: string
description: "The account's container.
Applicable containers - bank,creditCard,investment,insurance,loan
Endpoints -- GET insights/configs/customerSubscriptions customer API
\n - GET insights/configs/userSubscriptions User API
\n - PATCH /insights/configs/customerSubscriptions cusomter API
\n - PATCH /insights/configs/userSubscriptions User API
\n - GET /insights/entityDetail/{entityId}
\n - GET /insights/insightDetail/{insightName}
\n - GET /views/{viewId}/transactions
"
readOnly: true
example: creditCard
enum:
- bank
- creditCard
- investment
- insurance
- loan
- reward
- bill
- realEstate
- otherAssets
- otherLiabilities
link:
allOf:
- $ref: '#/components/schemas/Link'
readOnly: true
eligibleInsight:
type: array
items:
$ref: '#/components/schemas/EligibleInsight'
InsightDetailsResponse:
properties:
insightDetail:
type: array
items:
$ref: '#/components/schemas/InsightDetail'
EligibleDetail:
allOf:
- $ref: '#/components/schemas/userConfiguration'
properties:
container:
type: string
description: "The account's container.
Applicable containers - bank,creditCard,investment,insurance,loan
Endpoints - - GET insights/configs/customerSubscriptions customer API
\n - GET insights/configs/userSubscriptions User API
\n - PATCH /insights/configs/customerSubscriptions cusomter API
\n - PATCH /insights/configs/userSubscriptions User API
\n - GET /insights/entityDetail/{entityId}
\n - GET /insights/insightDetail/{insightName}
"
readOnly: true
example: creditCard
enum:
- bank
- creditCard
- investment
- insurance
- loan
- reward
- bill
- realEstate
- otherAssets
- otherLiabilities
link:
allOf:
- $ref: '#/components/schemas/Link'
readOnly: true
Threshold:
properties:
name:
type: string
description: Identifies the threshold applicable for an insight. Threshold values impact insight generation.Consider the following example - - name = CHANGE
- type = PERCENT
- value = 3
For the above insight, you can read the configuration as "Generate the insight only if the change is >= 3%"
Note- Threshold is fixed for each insight. Only value is editable.
Endpoints -- GET /insights/configs/customerSubscriptions Cobrand API
- PATCH /insights/configs/customerSubscriptions Cobrand API
- GET /insights/configs/userSubscriptions User API
- PATCH /insights/configs/userSubscriptions User API
example: CHANGE
enum:
- CHANGE
- UPPER_LIMIT
- DAYS_BEFORE
- MINIMUM
- FUTURE
- DELAY
- TOP
- BASETYPE
type:
type: string
description: Identifies the type of threshold. Threshold values impact insight generation.Consider the following example - - name = CHANGE
- type = PERCENT
- value = 3
For the above insight, you can read the configuration as "Generate the insight only if the change is >= 3%".
However, consider changing the configuration to as follows by changing the type - - name = CHANGE
- type = AMOUNT
- value = 300
For the above insight, you can read the configuration as "Generate the insight only if the change is >= $300".
Note- For a single insight, you can have multiple thresholds. If multiple thresholds have values set to a non-zero number, the relationship between the thresholds will be logical AND.
Some insights will have type as AMOUNT and PERCENT. In the above scenario, if you want to generate insight only based on one value, you can set the other to 0.
E.g. if type = AMOUNT is set to 0 and type = PERCENT is set to 3, the insight will be evaluated as "Generate the insight only if the change is >= 3%"
However, if AMOUNT = $300 and PERCENT = 3, the insight will be evaluated as "Generate the insight only if the change % is >= 3% AND change amount >= $300"
Endpoints -- GET config/insights/subscriptions Cobrand API
- PATCH /config/insights/subscriptions Cobrand API
- GET /insights/subscriptions User API
- PATCH /insights/subscriptions User API
example: PERCENT
enum:
- PERCENT
- NUMBER
- DAYS
- AMOUNT
- STRING
value:
type: string
description: The value set for the threshold. 0 is allowed only if there are multiple threshold for the same insight.
Endpoints - - GET /config/insights/subscriptions Cobrand API
- PATCH /config/insights/subscriptions Cobrand API
- GET insights/subscriptions User API
- PATCH /insights/subscriptions User API
example: '10'
InsightDetail:
properties:
insightName:
type: string
description: Name of the Insight for which this notification is generated.
Endpoints -
readOnly: true
example: BILL_NOT_PAID
insightType:
type: string
description: Identifies whether the insight is generated at an entity-level - per account or per view (OTHER), or if it considers all entities for the user - e.g. all accounts (AGGREGATE).
Endpoints - - GET config/insights/subscriptions Cobrand API
- GET insights/subscriptions User API
readOnly: true
enum:
- OTHER
- AGGREGATE
triggerType:
type: string
description: triggerType of an insight defines how an Insight was triggered in the system.
Currently following triggerType are supported - - SCHDEULE - Insight evaluation and subsequent generation triggered based on a pre-defined schedule.
- REFRESH - Insight evaluation and subsequent generation triggered when a user's account gets successfully refreshed.
- EVENT - Insight evaluation and subsequent generation triggered based on a system-defined event happening.
Endpoints -
readOnly: true
example: SCHEDULE
enum:
- SCHEDULE
- REFRESH
- EVENT
eligibleEntity:
type: array
items:
$ref: '#/components/schemas/EligibleDetail'
Link:
description: Reference path link to fetch more information about the specific entity.
properties:
entityName:
type: string
description: The name of the entity - ACCOUNT, VIEW, etc.
example: ACCOUNT
methodType:
type: string
description: The method to use while calling the URL
example: GET
url:
type: string
description: URL to access the endpoint.
example: /accounts?accountId=10231749
required:
- entityName
- url
Error:
required:
- errorCode
- referenceCode
- errorMessage
properties:
errorCode:
type: string
referenceCode:
type: string
errorMessage:
type: string
EntityDetailResponse:
properties:
entityDetail:
type: array
items:
$ref: '#/components/schemas/EntityDetail'
examples:
getEntityDetailResponseExample:
value:
entityDetail:
- entityType: ACCOUNT
entityId: 234213523
container: BANK
link:
entityName: ACCOUNT
url: /accounts?accountId=234213523
eligibleInsight:
- insightName: SUGGESTED_SAVING_OPPORTUNITY
applicableConfiguration:
- entityType: ACCOUNT
isSubscribed: true
frequency: MID_MONTHLY
duration: LAST_THREE_MONTHS
threshold:
- name: CHANGE
value: '100.00'
type: AMOUNT
- name: CHANGE
value: '10.00'
type: PERCENT
- insightName: SPENDING_BY_MERCHANT_ALL_ACCOUNTS
applicableConfiguration:
- entityType: ACCOUNT
isSubscribed: true
frequency: MONTHLY
duration: THREE_MONTHS
threshold:
- name: TOP
value: 10
type: NUMBER
getInsightDetailResponseExample:
value:
insightDetail:
- insightName: SUGGESTED_SAVING_OPPORTUNITY
insightType: OTHER
triggerType: SCHEDULE
eligibleEntity:
- entityType: ACCOUNT
entityId: 12312312
container: BANK
isSubscribed: true
frequency: MID_MONTHLY
duration: LAST_THREE_MONTHS
threshold:
- name: CHANGE
value: '100.00'
type: AMOUNT
- name: CHANGE
value: '10.00'
type: PERCENT
link:
entityName: account
url: /accounts?accountId=234213523
- entityType: VIEW
entityId: 12312312
container: BANK
isSubscribed: true
frequency: MID_MONTHLY
duration: LAST_THREE_MONTHS
threshold:
- name: CHANGE
value: '100.00'
type: AMOUNT
- name: CHANGE
value: '10.00'
type: PERCENT
link:
entityName: view
url: /views/234213523