Investments Guide
Version Differences
This endpoint is available in API versions 2 and 3. Note the following differences:
Area | V2 | V3 |
|---|---|---|
x-akoya-interaction-type header | Optional | Required |
x-akoya-last-access header | Not Supported | Required |
x-akoya-intent-type header | Not Supported | Required |
Overview
The Akoya Investments product combines basic consumer account information with balance data and extended investment details to provide your consumer with in-depth insight into their investments.
This product includes the /accounts and /taxlots endpoints.
Accounts returns all data available in both the Account info and Balances products plus all other available data for investment accounts including holdings, contributions, vesting, and more. To use this endpoint, you must have the consumer’s consent and their associated ID token for permissioned data.
The API returns results in JSON in FDX format. While this endpoint is needed to retrieve extended data for the investment account category, you may also use it for other account categories (annuity, deposit, insurance, line of credit, or loans). If used for account categories other than investment, you will receive the same data as with the balances product.
Taxlots allows you to retrieve tax lots of consumer-permissioned accounts. A tax lot records the details of a security’s acquisition.
Common Use Cases
Wealth Management: Give users and/or financial advisors the ability to collate investments, assets, and other held-away account information for one sweeping financial picture (in conjunction with Balances and Transactions).
Security
The Investments API requires authentication using a bearer token (id_token assigned to the permissioned user). You should include the id_token in the Authorization header of each request. The actual token lifetime varies by provider, but assume a lifetime of 15 minutes and code your application to automatically refresh the token if it has expired.
Base URL
Like all Akoya APIs, Investments operates in both sandbox and prod:
Sandbox:
https://sandbox-products.ddp.akoya.com
Production:
https://products.ddp.akoya.com
Endpoints
Accounts
GET /accounts/{version}/{providerId}
Get detailed account information that includes Akoya products Account Info and Balances for all account types (annunity, deposit, insurance, investments, line of credit, and loan) and adds the Investments product to investment accounts including contributions, holdings, vesting information, and more.
Path Params
Param | Description |
|---|---|
{version} | Major API version (e.g. v3) |
{providerId} | ID for the financial institution providing the data |
Query Params
Param | Type | Required | Description |
|---|---|---|---|
mode | String | No | BETA. Default is raw. Use standard for FDX-aligned, standardized data values. |
accountIds | String | No | Comma-separated list of accountIds |
offset | String | No | The number of items to skip before the first in the response. The default is 0. |
limit | String | No | The maximum number of items to be returned in the response. The default is 50. |
Headers
Header | Type | Required | Description |
|---|---|---|---|
Authorization | String | Yes | The ID Token for the permissioned user |
x-akoya-interaction-type | String (Enum) | v2: No v3: Yes | Indicates whether a consumer action prompted the request (USER) or the request is part of a batch process (BATCH). |
x-akoya-last-access | String (Date-Time) | v2: N/A v3: Yes | The date and time stamp for the last active use by the user. |
x-akoya-intent-type | String (Enum) | v2: N/A v3: Yes | Indicates whether a transaction involves a payment. Acceptable values are payments or nonpayments. |
Example Response
JSON
Supported Data Elements
All Account Categories
Includes:
Name | Required | Description |
|---|---|---|
account info | true | Includes account info data elements |
balances | true | Includes balances data elements |
Investment Accounts
May also include:
Name | Type | Description |
|---|---|---|
holdings | Array [holding] | Array of holdings |
openOrders | Array [openOrder] | Array of open orders |
contribution | Array [contribution] | Describes how the account distributes new contributions among the available securities. |
vesting | Array [vesting] | Provides the past, present, and future vesting schedule and percentages |
investmentLoans | Array [investmentLoan] | Array of investment loans |
pensionSource | Array [pensionSource] | Array of Pension Source |
equityGrants | Array [equityGrants] | Array of equity grants |
Holding
Name | Type | Description |
|---|---|---|
anonymous | Object | none |
assetClasses | Array | Percent breakdown by asset class. |
assetClasses.assetClass | String | none |
assetClasses.percent | Number | Percentage of asset class that falls under this asset |
averageCost | Boolean | Cost is average of all purchases for holding. |
cashAccount | Boolean | If true, this holding maintains proceeds from sales, dividends, and other cash postings to the investment account. |
changeInPrice | Number | Change in current price compared to previous day's close |
currency | Array [currency] | none |
currentUnitPrice | Number | none |
currentUnitPriceDate | String (Date-Time) | Current unit price as of date |
debtSecurity | Object {debtSecurity} | Information about the security specific to the type of security |
debtSecurity.parValue | Number | Par value amount |
debtSecurity.debtType | String | Debt type. COUPON, ZERO. |
debtSecurity.debtClass | String | Classification of debt. TREASURY, MUNICIPAL, CORPORATE, OTHER. |
debtSecurity.couponRate | Number | Bond coupon rate for next closest call date |
debtSecurity.couponDate | String (Date-Time) | Maturity date for next coupon |
debtSecurity.couponMatureFrequency | String | When coupons mature. MONTHLY, QUARTERLY, SEMIANNUAL, ANNUAL, or OTHER. |
debtSecurity.callPrice | Number | Bond call price |
debtSecurity.yieldToCall | Number | Yield to next call |
debtSecurity.callDate | String (Date-Time) | Next call date |
debtSecurity.callType | String | Type of next call. CALL, PUT, PREFUND, MATURITY. |
debtSecurity.yieldToMaturity | Number | Yield to maturity |
debtSecurity.bondMaturityDate | String (Date-Time) | Bond Maturity date |
description | String | Description of the holding |
expirationDate | String (Date-Time) | For CDs, bonds, and other time-based holdings. |
faceValue | Number | Required for bonds. Face value at the time of data retrieved. |
fiAssetClasses | Array | Percent breakdown by FI-specific asset class percentage breakdown |
fiAssetClasses.assetClass | String | FI-specific asset class |
fiAssetClasses.percent | Number | Percentage of asset class that falls under this asset |
fiAttributes | Array [fiAttribute] | [Data provider-specific attribute] |
heldInAccount | String | Sub-account |
holdingId | String | Long term persistent identity of the holding |
holdingName | String | Holding name or security name |
holdingSubType | String | none |
holdingType | String | none |
inv401kSurce | String | Source for money for this security. |
marketValue | Number | Market value at the time of data retrieved |
mutualFundSecurity | Object {mutualFundSecurity} | Information about the security specific to the type of security |
mutualFundSecurity.mutualFundType | String | Mutual fund type. OPENEND, CLOSEEND, OTHER. |
mutualFundSecurity.unitsStreet | Number | Units in the FI's street name, positive quantity |
mutualFundSecurity.unitsUser | Number | Units in user's name directly, positive quantity |
mutualFundSecurity.reinvestDividends | Boolean | Reinvest dividends |
mutualFundSecurity.reinvestCapitalGains | Boolean | Reinvest capital gains |
mutualFundSecurity.yield | Number | Current yield reported as portion of the fund's assets |
mutualFundSecurity.yieldAsOfDate | String (Date-Time) | As-of date for yield value |
originalPurchaseDate | String (Date-Time) | Date of original purchase |
optionSecurity | Object {optionSecurity} | Information about the security specific to the type of security |
optionSecurity.secured | String | How the account secures the option. NAKED, COVERED. |
optionSecurity.optionType | String | PUT or CALL |
optionSecurity.strikePrice | Number | Strike price / Unit price |
optionSecurity.expireDate | String (Date-Time) | Expiration date of option |
optionSecurity.sharesPerContract | Number | Shares per contract |
otherSecurity | Object {otherSecurity} | Information about the security specific to the type of security |
typeDescription | String | Description of Other Security. Required if otherSecurity is included |
positionType | String | LONG, SHORT. |
purchasedPrice | Number | Price of holding at the time of purchase |
rate | Number | For CDs, bonds, and other rate based holdings. |
securityId | String | Unique identifier of security |
securityIdType | String | Security identifier type |
stockSecurity | Object {stockSecurity} | Information about the security specific to the type of security |
stockSecurity.unitsStreet | Number | Units in the FI's street name, positive quantity |
stockSecurity.unitsUser | Number | Units in user's name directly, positive quantity |
stockSecurity.reinvestDividends | Boolean | Reinvest dividends |
stockSecurity.stockType | String | COMMON, PREFERRED, CONVERTIBLE, OTHER |
stockSecurity.yield | Number | Current yield |
stockSecurity.yieldAsOfDate | String (Date-Time) | Yield as-of date |
sweepSecurity | Object {sweepSecurity} | Information about the security specific to the type of security |
sweepSecurity.currentBalance | Number | Balance of funds in account |
sweepSecurity.availableBalance | Number | Balance of funds available for use |
sweepSecurity.balanceAsOf | String (Date-Time) | As-of date of balances |
sweepSecurity.checks | Boolean | Whether or not checks can be written on the account |
symbol | String | Ticker / Market symbol |
taxLots | Array [object] | Breakdown by tax lot. |
taxLots.costBasis | Number | Total amount of money spent acquiring this lot including any fees or commission expenses incurred. |
taxLots.currentValue | Number | Lot market value |
taxLots.originalPurchaseDate | String (Date-Time) | Lot acquired date. |
taxLots.postionType | String | LONG, SHORT. |
taxLots.purchasedPrice | Number | Original purchase price. |
taxLots.quantity | Number | Lot quantity. |
units | Number | Required for stock, mutual funds. Number of shares (with decimals). |
Contribution
Name | Type | Description |
|---|---|---|
securityId | String | Unique identifier of security |
securityIdType | String | Security identifier type CUSIP, ISIN, SEDOL, SICC, VALOR, WKN |
employerMatchPercentage | Number | Employer contribution match percentage |
employerMatchAmount | Number | Employer contribution match amount |
employeePreTaxAmount | Number | Employee pre‐tax contribution amount |
employeePreTaxPercentage | Number | Employee pre‐tax contribution percentage |
employeeAfterTaxAmount | Number | Employee after tax contribution amount |
employeeAfterTaxPercentage | Number | Employee after tax contribution percentage |
employeeDeferPreTaxAmount | Number | Employee defer pre‐tax contribution match amount |
employeeDeferPreTaxPercentage | Number | Employee defer pre‐tax contribution match percentage |
employeeYearToDate | Number | Employee total year to date contribution |
employerYearToDate | Number | Employer total year to date contribution |
rolloverContributionPercentage | Number | Rollover contribution percentage |
rolloverContributionAmount | Number | Rollover contribution Amount |
EquityGrants
Name | Type | Description |
|---|---|---|
grantId | String | Unique identifier of grant. |
grantDate | String (Date-Time) | Date of grant. |
grantType | String | Type of grant. |
seqNum | Number | Sequence number. |
grantPrice | Number | Grant price. |
grantCurrencyCode | String | Indicates the currency of grant USD vs AUD vs EUR, etc. (for share awards, you will still get a USD). |
quantityGranted | Number | Number of options. |
quantityOutstanding | Number | Outstanding quantity. |
expirationDate | String (Date-Time) | Date grant expires. |
vestings | Array | An array of equityGrant.vestings. Provides the past, present, and future vesting schedule and percentages. |
vestings.vestedQuantity | Number | Vested quantity (Vested shares total qty of vesting tranche) |
vestings.vestedValue | Number | Vested balance at grant (aggregate of all vestings). |
vestings.vestingDate | String (Date-Time) | Vesting date |
vestings.vestExpireDate | String (Date-Time) | Expiration date, i.e., forfeited unless exercised by this date |
vestings.vestedStatus | String | Valid, active, or cancelled |
InvestmentLoan
Name | Type | Description |
|---|---|---|
loanId | String | Unique identifier for this loan |
loanDescription | String | Description |
initialLoanBalance | Number | Initial loan balance amount |
loanStartDate | String (Date-Time) | Start date of the loan |
currentLoanBalance | Number | Current loan principal balance amount |
dateAsOf | String (Date-Time) | Date and time of current loan balance |
loanRate | Number | Loan annual interest rate for the loan |
loanPaymentAmount | Number | Loan payment amount |
loanPaymentFrequency | String | WEEKLY, BIWEEKLY, TWICEMONTHLY, MONTHLY,FOURWEEKS, BIMONTHLY, QUARTERLY, SEMIANNUALLY, ANNUALLY, OTHER. |
loanPaymentInitial | Number | Initial number of loan payments |
loanPaymentsRemaining | Integer | Remaining number of loan payments |
loanMaturityDate | String (Date-Time) | Expected loan end date |
loanInterestToDate | Number | Total interest paid to date on this loan |
loanTotalProjectedInterest | Number | Total projected interest to be paid on this loan |
loanNextPaymentDate | String (Date-Time) | The next payment date for the loan |
OpenOrder
Name | Type | Description |
|---|---|---|
orderId | String | Long term persistent identity of the order. Id for this order transaction. |
securityId | String | Unique identifier of security. |
securityIdType | String | Security identifier type. CUSIP, ISIN, SEDOL, SICC, VALOR, WKN. |
symbol | String | Market symbol |
description | String | Description of order |
units | Number | number of units (shares or bonds etc) |
orderType | String | BUY, SELL, BUYTOCOVER, BUYTOOPEN, SELLTOCOVER, SELLTOOPEN, SELLSHORT, SELLCLOSE. |
orderDate | String (Date-Time) | Order date |
unitPrice | Number | Unit price |
unitType | String | SHARES, CURRENCY. |
orderDuration | String | This order is good for DAY, GOODTILLCANCEL, IMMEDIATE |
subAccount | String | CASH, MARGIN, SHORT, OTHER. |
limitPrice | Number | Limit Price |
stopPrice | Number | Stop price |
inv401kSource | String | For 401(k) accounts, source of money for this order. PRETAX, AFTERTAX, MATCH, PROFITSHARING, ROLLOVER, OTHERVEST, OTHERNONVEST. Default if not present is OTHERNONVEST. |
PensionSource
Name | Type | Description |
|---|---|---|
displayName | String | Name of the Source |
amount | Number | Benefit Amount |
paymentOption | String | Form of payment |
asOfDate | String (Date-Time) | Date the system calculated the benefit |
frequency | String | Allowed values: ANNUALLY, BIWEEKLY, DAILY, MONTHLY, SEMIANNUALLY, SEMIMONTHLY, WEEKLY |
startDate | String (Date-Time) | Assumed retirement date ‐ As of date amount is payable |
Vesting
Name | Type | Description |
|---|---|---|
vestingDate | String (Date-Time) | Vesting date |
symbol | String | Security symbol |
strikePrice | Number | Strike price |
vestingPercentage | Number | Vesting percentage |
otherVestAmount | Number | Other vest amount |
otherVestPercentage | Number | Other vest percentage |
vestedBalance | Number | Vested balance |
unVestedBalance | Number | Unvested balance |
vestedQuantity | Number | Vested quantity |
unVestedQuantity | Number | Unvested quantity |
Taxlots
GET /taxlots/{version}/{providerId}/{accountId}/{holdingId}
Allows you to retrieve tax lots of consumer-permissioned accounts.
Path Params
Param | Description |
|---|---|
{version} | Major API version (e.g. v3) |
{providerId} | ID for the financial institution providing the data |
{accountId} | Account identifier |
{holdingId} | Consumer's holdingId under investments |
Query Params
Param | Type | Required | Description |
|---|---|---|---|
offset | String | No | The number of items to skip before the first in the response. The default is 0. |
limit | String | No | The maximum number of items to be returned in the response. The default is 50. |
Headers
Header | Type | Required | Description |
|---|---|---|---|
Authorization | String | Yes | The ID Token for the permissioned user |
x-akoya-interaction-type | String (Enum) | v2: No v3: Yes | Indicates whether a consumer action prompted the request (USER) or the request is part of a batch process (BATCH). |
x-akoya-last-access | String (Date-Time) | v2: N/A v3: Yes | The date and time stamp for the last active use by the user. |
x-akoya-intent-type | String (Enum) | v2: N/A v3: Yes | Indicates whether a transaction involves a payment. Acceptable values are payments or nonpayments. |
Example Response
JSON
Supported Data Elements
Name | Type | Description |
|---|---|---|
accountId | String | Unique identifier of the account that owns the holding. |
costBasis | Number | Total cost basis of the tax lot, typically calculated as purchase price multiplied by quantity, adjusted for applicable fees or corporate actions |
currentValue | Number | Current market value of the tax lot based on the latest available pricing. |
holdingId | String | Long term persistent identity of the holding |
originalPurchaseDate | String (Date-Time) | Date of original purchase |
positionType | String (Enum) | Indicates whether the position is long or short (for example, LONG or SHORT). |
purchasedPrice | Number | Price per unit or share paid at the time of acquisition for this tax |
quantity | Number | Number of units or shares acquired in this tax lot |
securityId | String | Unique identifier of security |
securityIdType | String | Security identifier type |
Error Responses
See our error documentation.