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

Transactions Schema

Transactions are available at /v2/data/source/transactions

All Fields

FieldTypeNullable?Default Value?Description
idIntegerNoN/AThe unique resource id for the transaction
account_idIntegerYesN/AThe id of the Account associated with this Transaction. The field can be empty or “null” in rare cases when the system was not able to match transaction with any existing account.
security_idIntegerYesN/AThe id of the Security associated with this Transaction. The field can be empty or “null” in rare cases when the system was not able to match transaction with any existing security.
reported_dateString date, YYYY-MM-DDNoN/AThe date the custodian reports the transaction
sourceStringNoN/ACustodian or source the transaction data comes from.

APX = Apex Fintech Solutions, DST = DST Systems, FPR = Fidelity 401k/403b, IBK = Interactive Brokers, NFS = Fidelity Investments, PER = Pershing, SWB = Charles Schwab, TDA = TD Ameritrade (Available prior to Sept. 2, 2023), EGB = Eaglebrook, MLT = Millennium Trust, TIA = TIAA Financial Services

APX DST FPR IBK NFS PER SWB TDA (Available prior to Sept. 2, 2023) EGB MLT TIA
account_numberStringNoN/AThe account number of the Account associated with this Transaction
feed_codeStringNoN/AThe feed code of the Account associated with this Transaction
source_security_symbolStringNoN/AThe symbol of the corresponding security as reported by the source if applicable
source_security_cusipStringNoN/AThe CUSIP of the corresponding security as reported by the source if applicable
source_transaction_codeStringNoN/AThe custodian reported transaction code for the transaction
categoryStringNoothBridgeFT transaction categorization. Used in conjunction with classification to classify transaction type.

trd = Trade, xfr = Transfer, inc = Income / Expense, crp = Corporate Action, oth = Other

trd xfr inc crp oth
classificationStringNoothBridgeFT transaction categorization. Used in conjunction with classification to classify transaction type.

bto = Buy to Open, stc = Sell to Close, btc = Buy to Close, sto = Sell to Open, dvr = Dividend Reinvestment, inc = Income, exp = Expense, div = Dividend, int = Interest Payment, mfe = Management Fee, tax = Tax Fee, dep = Cash Deposit, wth = Cash Withdrawal, rec = Security Deposit, del = Security Withdrawal, spl = Split, chg = Symbol Change, jnl = Journal, oth = Other

bto stc btc sto dvr inc exp div int mfe tax dep wth rec del spl chg jnl oth
transaction_dateString date, YYYY-MM-DDNoreported_dateThe date when transaction is happened. This date may be different from the reported_date. For example cancellation of the transaction can be reported by the custodian in a some time after this happened. In most cases these values are the same, and when a transaction date isn’t provided it is set to the reported_date.
settle_dateString date, YYYY-MM-DDYesN/AThe date that the transaction settled if reported
unitsFloatDepends on the transaction classificationN/AThe signed quantity of shares for the reported transaction
amountFloatDepends on the transaction classificationN/AThe signed net amount for the reported transaction
unit_priceFloatYesN/AThe unit price of the transaction. Populated as per following logic:

1. Custodian reported price (if provided), if not provided then =>

2. BridgeFT calculated value (by dividing amount and units). This generally applies to trades and other transactions where we have both amounts and units values.

3. If it’s a cash or cash equivalent, the price = 1.0

4. If none of that works this field returns null.
feesFloatNoN/AAny fees for the transaction as reported by the custodian
is_cancelBooleanNofalseTrue if the transaction is canceled. Canceled transactions are often paired with a matching uncanceled transactions.
descriptionStringNoN/AExtra description for the transaction
created_at_utcString date, YYYY-MM-DDNoN/ATimestamp for when the record was created in BridgeFT

Below are the Classification Codes for various Source Transaction scenarios. The table below will explain the “Code” returned in the API, a brief description of what that code relates to, as well as the rules for units (the signed quantity of shares for the reported transaction) and amount (the signed net amount for the reported transaction) values.

For example, the Code of bto, is a “Buy to Open” which will have a Non-nullable field in both units and amount. Meaning that the bto code will have a value in both the units and amount field. The code of rec, is a “Security Deposit” which will have a Non-nullable field for units but a Null field for amount. Meaning that the rec code will have a value units, but will have a Null or blank on the amount field.

CodeDescriptionunits fieldamount field
btoBuy to OpenNon-nullableNon-nullable
stcSell to CloseNon-nullableNon-nullable
btcBuy to CloseNon-nullableNon-nullable
stoSell to OpenNon-nullableNon-nullable
dvrDividend ReinvestmentNon-nullableNon-nullable
incIncomeNullNon-nullable
expExpenseNullNon-nullable
divDividendNullNon-nullable
intInterest PaymentNullNon-nullable
mfeManagement FeeNullNon-nullable
taxTax FeeNullNon-nullable
depCash DepositNullNon-nullable
wthCash WithdrawalNullNon-nullable
recSecurity DepositNon-nullableNull
delSecurity WithdrawalNon-nullableNull
splSplitNon-nullableNon-nullable
chgSymbol ChangeNon-nullableNon-nullable
jnlJournalNon-nullableNon-nullable
othOtherNon-nullableNon-nullable