Normalized Data Schema

Summary of normalized data schema

Normalized Data Schema

Normalized data from the WealthTech API has a large number of fields.
In addition to the API Reference, below is a breakdown all fields, types and descriptions
available from normalized data endpoints grouped together in the usage patterns of the data.

Lots Schema

Open tax lots are available at /v2/data/source/lots

Cost Basis Fields

FieldTypeNullable / Empty?Description
abs_cost_basis_adjustedNumberYes. Null if there are no adjustments to cost basisCost basis adjusted for corporate actions, such as splits
abs_cost_basisNumberYes. Null if unavailableCost basis for the lot. This information might be unknown or arrive late for any given lot, especially those resulting from transferred shares. Must be provided for cost_basis_fully_known to be true
cost_basis_fully_knownBooleanNoCost basis is fully known when both the origination date and amount is provided
cost_basis_fully_known_reportedNullable booleanYes; null if no indicator provided by sourceSource-provided determination of whether cost basis is known. Null if the source doesn't provide such indications of completed cost basis information

Gain / Loss Fields

FieldTypeNullable / Empty?Description
unrealized_gain_lossNumberYes. Null if cannot be calculatedDifference between abs_current_value and abs_cost_basis. If either is null, this field will be null, but treated as zero for aggregating unrealized gain/loss
unrealized_gain_loss_reportedNumberYes. Null if not providedUnrealized gain/loss, as reported by the data source. Not all sources report unrealized gain/loss on lots
realized_gain_loss_reportedNumberYes. Null if not providedRealized gain/loss for partially closed lots as reported by the data source, or null if not provided
disallowed_loss_amountNumberYes; null if not providedLost amount that cannot be used for tax offset, if the lot is part of a wash sale violation

Units Fields

FieldTypeNullable / Empty?Description
abs_current_unitsNumberNo; if units are missing no lot will be passed throughCurrent number of open units
abs_original_open_unitsNumberYes, if not provided by sourceThe number of open units that opened the lot. Not reported by all data sources

Date and Meta Fields

FieldTypeNullable / Empty?Description
created_at_utcRFC 3339 String TimestampNoTimestamp when the record is created in the WealthTech API
original_open_dateString date, YYYY-MM-DDCan be emptyOpening date for this lot. Must be provided for cost_basis_fully_known to be true
reported_dateString date, YYYY-MM-DDNoDate the lot is reported to Bridge
certifiedBooleanNo
directionStringNo"L" for long; "S" for short positions
lot_selection_methodStringCan be empty if not providedLot matching selection method, such as FIFO, LIFO, etc. if provided by the source
original_dataJson objectYesAdditional metadata
wash_saleBooleanNo; defaults to falseTrue if the lot is part of a wash sale
durationStringYes; Empty if original open date is unknown"ST" for short term; "LT" for long term

Identifier Fields

FieldTypeNullable / Empty?Description
account_idIntegerYes; nullable if unable to link to accountsAtlas-linked account ID. Not necessarily available if the underlying account hasn't been discovered yet
account_numberStringNoSource-provided account identifier
feed_codeStringNoSource-provided feed identifier
sourceStringNoData source identifier
lot_identifierStringCan be empty if not providedLot identifier provided by source, if available
objectStringNoType indicator. Always equal to "data.source.lot"
security_idNullable intYes. Null means the security cannot be resolved to our internal mappingSecurity ID that can be used against the /securities endpoints. May be null if the security for this position wasn't able to be linked into Bridge's internal security mapping
source_security_cusipStringEmtpy if not providedSource-provided security identifier
source_security_symbolStringEmpty if not providedSource-provided security identifier
idIntegerNo

Value Fields

FieldTypeNullable / Empty?Description
abs_current_valueNumberYes, null when no price is providedCurrent market value using the source-provided price
abs_current_value_unit_priceNumberYes; null when no price is providedPrevailing price per unit of the security, as determined by the source provider
abs_current_value_reportedNumberYes; null if not providedCurrent market value as reported directly from source
abs_current_value_unit_price_reportedNumberYes; null if not providedPrice as reported directly from source lots

Positions Schema

Positions are available at /v2/data/source/positions

Date and Meta Fields

FieldTypeNullable / Empty?Description
created_at_utcRFC 3339 String TimestampNoTimestamp when the record is created in the WealthTech API
sourceStringNoData source identifier
directionStringNo"L" for long positions; "S" for short positions
original_dataJson objectYesAdditional metadata
reported_dateString date, YYYY-MM-DDNoDate the lot is reported to Bridge
first_open_dateString date, YYYY-MM-DDYes; null if none of the lots have an original open dateMinimum open date on all lots

Cost Basis Fields

FieldTypeNullable / Empty?Description
abs_cost_basisNumberNo; missing data is treated as zeroCalculated by summing of all open lots with fully known cost basis. If there are no lots with fully known cost basis then the value is zero.
abs_cost_basis_ltNumberNo; missing data is treated as zeroSum of the cost basis among open lots with fully known cost basis that were originated over 365 days ago
abs_cost_basis_stNumberNo; missing data is treated as zeroSum of the cost basis among open lots with fully known cost basis that were originated over within the last year
cost_basis_fully_knownBooleanTrue if all open lots of the same security have fully known cost basis. In other words, n_open_lots == n_open_lots_with_cost_basisTrue if the cost basis amount and origination date are both provided

Identifier Fields

FieldTypeNullable / Empty?Description
account_idIntegerYes; nullable if unable to link to accountsAtlas-linked account ID. Not necessarily available if the underlying account hasn't been discovered yet
account_numberStringNoSource-provided account identifier
feed_codeStringNoSource-provided feed identifier
objectStringNoEqual to "data.source.position"
security_idNullable intYes. Null means the security cannot be resolved to our internal mappingSecurity ID that can be used against the /securities endpoints. May be null if the security for this position wasn't able to be linked into Bridge's internal security mapping
source_security_cusipStringEmtpy if not providedSource-provided security identifier
source_security_symbolStringEmpty if not providedSource-provided security identifier
idIntegerNo

Gain / Loss Fields

FieldTypeNullable / Empty?Description
unrealized_gain_lossNumberNoCalculated by summing over all lots (short-term and long-term) with a defined unrealized gain/loss value (price and cost information must be available)
unrealized_gain_loss_ltNumberNoCalculated by summing over all long-term lots (short-term and long-term) with fully known cost basis information
unrealized_gain_loss_stNumberNoCalculated by summing over all short-term lots (short-term and long-term) with fully known cost basis information
unrealized_gain_loss_reportedNumberYes. Null if not reortedSource-reported unrealized gain/loss as of the reported date
unrealized_gain_loss_lt_reportedNumberYes. Null if not reportedSource-reported unrealized long-term gain/loss as of the reported date
unrealized_gain_loss_st_reportedNumberYes. Null if not reportedSource-reported unrealized short-term gain/loss as of the reported date

Lot Status Fields

FieldTypeNullable / Empty?Description
open_lotsIntegerNoTotal number of open lots reported by the custodain for this security on the reported date.
open_lots_with_cost_basisIntegerNoTotal number of open lots with fully known cost basis reported by the custodain for this security on the reported date.
open_lots_stIntegerNoTotal number of short-term open lots reported by the custodain for this security on the reported date.
open_lots_with_cost_basis_stIntegerNoTotal number of short-term open lots with fully known cost basis reported by the custodain for this security on the reported date.
open_lots_ltIntegerNoTotal number of long-term open lots reported by the custodain for this security on the reported date.
open_lots_with_cost_basis_ltIntegerNoTotal number of long-term open lots with fully known cost basis reported by the custodain for this security on the reported date.
open_unitsNumberNoTotal number of open units reported by the custodain for this security on the reported date.
open_units_with_cost_basisNumberNoTotal number of units lots with fully known cost basis reported by the custodain for this security on the reported date.
open_units_stNumberNoTotal number of short-term open units reported by the custodain for this security on the reported date.
open_units_with_cost_basis_stNumberNoTotal number of short-term open units with fully known cost basis reported by the custodain for this security on the reported date.
open_units_ltNumberNoTotal number of long-term open units reported by the custodain for this security on the reported date.
open_units_with_cost_basis_ltNumberNoTotal number of long-term open units with fully known cost basis reported by the custodain for this security on the reported date.
abs_settled_unitsNumberYes. Null if not reportedOpen units that have completed settlement processing
abs_unitsNumberNo; positions with unreported units aren't passed throughNumber of open units

Value Fields

FieldTypeNullable / Empty?Description
abs_valueNumberYes; null if price is not availableMarket value using source-provided prices on the reported date. Unsigned; short positions have positive values despite technically being liabilities
abs_value_stNumberNoPortion of the market value that has been held for less than 1 year. Calculated by summing lots with fully known cost basis, so abs_value_st + abs_value_lt <= abs_value
abs_value_ltNumberNoPortion of the market value that has been held for more than 1 year. Calculated by summing lots with fully known cost basis, so abs_value_st + abs_value_lt <= abs_value
abs_value_unit_priceNumberYes. Null if security price isn't available from the sourcePrice per unit (qty) using source-provided market prices of the security
abs_value_reportedNumberYes; null if not providedCurrent market value as reported directly from the source
abs_value_unit_price_reportedNumberYes; null if not providedPrice as reported on source positions

Realized Gain/loss Schema

Realized gain/loss data is available at /v2/data/source/realized-gain-loss

Units Fields

FieldTypeNullable / Empty?
abs_closed_unitsNumberYesUnits closed out in winding down the lot
abs_opened_unitsNumberYesRemaining open units in winding down the lot

Value Fields

FieldTypeNullable / Empty?
abs_closed_valueNumberYesValue of the closed units at the time of the sale / buy-back
abs_opened_valueNumberYesValue of the remaining open units at the time of the sale / buy-back
amountNumberNoAmount of the realized gain/loss
amount_ltNumberYes. Null if cost basis is missing or unreportedPortion of the realized gain/loss that was held for more than 1 year
amount_stNumberYes. Null if cost basis is missing or unreportedPortion of the realized gain/loss that was held for less than 1 year

Date and Meta Fields

FieldTypeNullable / Empty?
close_dateString date, YYYY-MM-DDNoDate the lot was fully or partially closed
created_at_utcRFC 3339 String TimestampNoTimestamp when the record is created in the WealthTech API
sourceStringNoData source identifier
directionStringNo"L" for long; "S" for short positions
lot_selection_methodStringEmpty if not providedLot matching selection method, such as FIFO, LIFO, etc. if provided by the source
open_dateString date, YYYY-MM-DDYes, null if not providedDate the closed lot was opened
original_dataJson objectYesAdditional metadata
reported_dateString date, YYYY-MM-DDNoDate the lot is reported to Bridge
settle_dateString date, YYYY-MM-DDYes; null if not providedDate the proceeds have completed settlement processing

Identfier Fields

FieldTypeNullable / Empty?
account_idIntegerYes; nullable if unable to link to accountsAtlas-linked account ID. Not necessarily available if the underlying account hasn't been discovered yet
account_numberStringNoSource-provided account identifier
feed_codeStringNoSource-provided feed identifier
lot_identifierStringEmpty if not providedLot identifier provided by source, if available
objectStringNoEqual to "data.source.realized_gain_loss"
security_idIntegerYes. Null means the security cannot be resolved to our internal mappingSecurity ID that can be used against the /securities endpoints. May be null if the security for this position wasn't able to be linked into Bridge's internal security mapping
source_security_cusipStringEmpty if not providedSource-provided security identifier
source_security_symbolStringEmpty if not providedSource-provided security identifier
idIntegerNo

Account Balances Schema

Account balances are available at /v2/data/source/account-balances

Identifier Fields

FieldTypeNullable / Empty?Description
account_idIntegerYes; nullable if unable to link to accountsAtlas-linked account ID. Not necessarily available if the underlying account hasn't been discovered yet
account_numberStringNoSource-provided account identifier
feed_codeStringNoSource-provided feed identifier
objectStringNoType indicator. Always equal to "data.source.balance"
idIntegerNo

Date and Meta Fields

FieldTypeNullable / Empty?Description
created_at_utcRFC 3339 String TimestampNoTimestamp when the record is created in the WealthTech API
sourceStringNoData source identifier
original_dataJson objectYesAdditional metadata
reported_dateString date, YYYY-MM-DDNoPortfolio date the balance corresponds to

Income / Expense Fields

FieldTypeNullable / Empty?Description
abs_expenseNumberNoTotal expenses from held securities on the reported date
abs_incomeNumberNoTotal income from held securities on the reported date
net_incomeNumberNoTotal net income from held securities on the reported date
abs_non_performing_expenseNumberNoTotal expense exempt from performance impact on the reported date
abs_non_performing_incomeNumberNoTotal income exempt from performance impact on the reported date
net_non_performing_incomeNumberNoTotal net income exempt from performance impact on the reported date

Cash Flow Fields

FieldTypeNullable / Empty?Description
abs_cash_contributionNumberNoTransfers in of cash and cash equivalents (i.e., money market assets) on the reported date
abs_cash_withdrawalNumberNoTransfers out of cash and cash equivalents on the reported date
total_net_contributionNumberNoTotal net contributions made to the account on the reported date
abs_security_contributionNumberNoTransfers in of securities on the reported date
abs_security_withdrawalNumberNoTransfers out of securities on the reported date
total_abs_contributionNumberNoTotal transfer-in of assets (cash and securities) on the reported date
total_abs_withdrawalNumberNoTotal transfer-out of assets (cash and securities) on the reported date

Gain / Loss Fields

FieldTypeNullable / Empty?Description
total_unrealized_gain_loss_reportedNumberYes; null if not reportedSource-reported total unrealized gain/loss in the account as of the reported date
total_unrealized_gain_lossNumberNoTota unrealized gain/loss (short and long-term) among all open lots as of the reported date
unrealized_gain_loss_lt_reportedNumberYes; null if not reportedTotal long-term unrealized gain/loss, among all open lots with fully known cost basis.
unrealized_gain_loss_st_reportedNumberYes; null if not reportedTota short-term unrealized gain/loss, among all open lots with fully known cost basis
unrealized_gain_loss_ltNumberNoUnrealized long-term gain/loss calculated from all open lots with fully known cost basis. Lots without fully known cost basis are treated as zero
unrealized_gain_loss_stNumberNoUnrealized short-term gain/loss calculated from all open lots with fully known cost basis. Lots without fully known cost basis are treated as zero
cost_basis_fully_knownNumberNoTrue only if ALL cost basis is fully known across all positions in the account. This will naturally be the case if the account has no security transfers and all transactions happen within the account. However cost basis information may be missing for accounts with security transfers.

Fee Fields

FieldTypeNullable / Empty?Description
abs_management_feeNumberNoManagement fees applied to the account on the reported date
total_abs_feesNumberNoTotal fees applied to the account on the reported date

Value Fields

FieldTypeNullable / Empty?Description
cash_valueNumberNoTotal cash holdings in the account as of the reported date
cash_value_reportedNumberYes; null if not reportedSource-reported cash holdings in the account as of the reported date
securities_valueNumberNoValue of all securities in the account on the reported date
securities_value_reportedNumberYes; null if not reportedSource-reported value of all securities in the account on the reported date
total_valueNumberNoTotal value of assets (cash and securities) on the reported date
total_value_reportedNumberYes; null if not reportedSource-reported value of assets (cash and securities) on the reported date