If you plan on supplying us with constituent data you hold on-site, for example custom baskets or index data used elsewhere within the business, you can upload this via the BYOD composites endpoint. BYOD data is checked first during enrichment and takes priority over the FundApps ETF library. Importantly, any data supplied via BYOD does not count towards your ETF library usage allowance.
For API details (endpoint, authentication, file validation, and migration from v2), see: BYOD guide – FundApps TechDocs
The BYOD composites file is a CSV using a comma , as a separator.
All data in this file is case-sensitive.
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting | WeightingQuantity |
|---|---|---|---|---|---|
| .KS100EWI | DataProviderId | 005930.KS | DataProviderId | 0.2 | 1000000 |
| .KS100EWI | DataProviderId | KR7005930003 | Isin | 0.3 | |
| KOSPI100 Index | DataProviderId | 005930 KS Equity | DataProviderId | 4001 | |
| BBG000P5WLC5 | Figi | DK0062498333 | Isin | 0.1 |
The client will need to reference the index identifier (either ISIN or BBG yellowkey/ Refinitiv RIC) in the ComponentISIN or ComponentDataProviderId columns of the relevant derivative asset class held. For example, for an index option, you reference the index's identifier in the Component columns of the option itself.
During the enrichment process, FundApps will use the identifier to call data from the market vendor for that index (for attributes such as Price and Name), and match the constituents from the client's BYOD file.
| PortfolioId | AssetId | AssetName | ISIN | DataProviderId | ComponentISIN | ComponentDataProviderId | Quantity | MarketValue | SFTType | Price | InstrumentCurrency | AssetClass | ULAssetClass | IsCashSettled | Market | MarketsListedIn | MaturityDate | Delta | ContractSize | CallOrPut |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TEST | OTC SPY Option | OTC SPY Option | US78378X1072 | 100 | 2000 | Normal | 20 | USD | Option | Index | TRUE | XXXX | XXXX | 2024-12-01 | 1 | 1 | Call | |||
| TEST | AAPL_EQ | Apple Equity | AAPL US Equity | 10 | 500 | Normal | 50 | USD | ||||||||||||
| TEST | Volkswagen_EQ | Volkswagen Equity | DE0007664039 | 20 | 600 | Normal | 30 | USD |
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting |
|---|---|---|---|---|
| US78378X1072 | ISIN | AAPL US Equity | DataProviderId | 0.3 |
| US78378X1072 | ISIN | DE0007664039 | ISIN | 0.7 |
The derivative held is the same as any other in the file already (so it must meet the standard spec for listed or OTC derivatives). The above examples were truncated here for illustrative purposes.
The client will need to reference the index identifier (BBG yellowkey/ Refinitiv RIC) in the ComponentDataProviderId column of the relevant derivative asset class held. For example, for an option on a basket, you reference the basket's identifier in the ComponentDataProviderId column of the option itself.
During the enrichment process, FundApps will use the identifier to call data from the market vendor for that index (for attributes such as Price and Name), and match the constituents from the client's BYOD file.
| PortfolioId | AssetId | AssetName | ISIN | DataProviderId | ComponentDataProviderId | ComponentISIN | Quantity | MarketValue | SFTType | Price | InstrumentCurrency | AssetClass | ULAssetClass | IsCashSettled | Market | MarketsListedIn | MaturityDate | Delta | ContractSize | CallOrPut |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TEST | OTC Option | Option on GS basket | GSABCDEF Index | 100 | 2000 | Normal | 20 | USD | Option | Index | TRUE | XXXX | XXXX | 2024-12-01 | 1 | 1 | Call | |||
| TEST | AAPL_EQ | Apple Equity | AAPL US Equity | 10 | 500 | Normal | 50 | USD | ||||||||||||
| TEST | Volkswagen_EQ | Volkswagen Equity | DE0007664039 | 20 | 600 | Normal | 30 | USD |
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting |
|---|---|---|---|---|
| GSABCDEF Index | DataProviderId | AAPL US Equity | DataProviderId | 0.3 |
| GSABCDEF Index | DataProviderId | DE0007664039 | ISIN | 0.7 |
The derivative held is the same as any other in the file already (so it must meet the standard spec for listed or OTC derivatives). The above examples were truncated here for illustrative purposes.
These are the most complex instruments as there is no standard identifier that can be used to identify and link instruments between the two files. Instead, for these, FundApps will create a CompositeId by coalescing the AssetId and ULAssetClass columns of your positions file. Generally, the ULAssetClass will be "StructuredProduct" rather than "Index," so you may be able to hard-code these. This will then have the CompositeIdType as "InstrumentId"
The below example would generate a multi-leveled instrument with the following structure: Swap > Structured Product > Apple Equity (.3), Volkswagen Equity (.7)
| PortfolioId | AssetId | AssetName | ISIN | DataProviderId | ComponentDataProviderId | ComponentISIN | ULAssetClass | Price | ULPrice | InstrumentCurrency | ULInstrumentCurrency | IsCashSettled | Market | MarketsListedIN | MaturityDate |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| TEST | OTC_SP2 | Swap on CP | StructuredProduct | 15 | 10 | USD | USD | TRUE | XXXX | XXXX | 2024-12-01 | ||||
| TEST | AAPL_EQ | Apple Equity | AAPL US Equity | 50 | USD | ||||||||||
| TEST | Volkswagen_EQ | Volkswagen Equity | DE0007664039 | 30 | USD |
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting |
|---|---|---|---|---|
| OTC_SP2_StructuredProduct | InstrumentId | AAPL US Equity | DataProviderId | 0.3 |
| OTC_SP2_StructuredProduct | InstrumentId | DE0007664039 | ISIN | 0.7 |
Where, CompositeId = AssetId_ULAssetClass from the positions file. Note, you will also need to provice the currency and price of the index via ULPrice and ULInstrumentCurrency
The client will need to reference an index identifier or InstrumentId that they are using for the Index instrument in their positions file (i.e., not being used for the parent derivative). During the enrichment process, FundApps will use the data points sent for that index such as InstrumentName and Price, and integrate the underlying constituents.
<Instruments>
<Option InstrumentId="US78378X1072Option" InstrumentName="US Index Option" CallOrPut="Call" IsCashSettled="true" Market="XHEL" ContractSize="100" MaturityDate="2015-12-15" Delta="0.8">
<Component InstrumentId="USIndex"/>
</Option>
<Index InstrumentId="USIndex" ISIN="US78378X1072" InstrumentName="US Index" Price="3120.00" InstrumentCurrency="USD">
</Instruments>
...
<Portfolios>
<Portfolio PortfolioId="11">
<Asset AssetId="US78378X1072Option" AssetName="US78378X1072Option" InstrumentId="US78378X1072Option" Quantity="30000"/>
</Portfolio>
</Portfolios>
Note, the above XML has been abbreviated for brevity so there may be specific fields missing that are unrelated to this aspect of the file build.
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting |
|---|---|---|---|---|
| US78378X1072 | ISIN | AAPL US Equity | InstrumentId | 0.3 |
| US78378X1072 | ISIN | DE0007664039 | ISIN | 0.7 |
While the matching process is the same, we generally expect clients to be using the InstrumentId as the CompositeIdType, as there is not likely to be a public asset identifier for such instruments. Many clients will use the basket identifier created by the vendor, though any value can be used so long as it's consistent across both files.
<Instruments>
<Option InstrumentId="Basket Option" InstrumentName="Basket Option" CallOrPut="Call" IsCashSettled="true" Market="XHEL" ContractSize="100" MaturityDate="2015-12-15" Delta="0.8">
<Component InstrumentId="GSABCDEF Index"/>
</Option>
<StructuredProduct InstrumentId="GSABCDEF Index" InstrumentName="basket" Price="3120.00" InstrumentCurrency="USD">
</Instruments>
...
<Portfolios>
<Portfolio PortfolioId="11">
<Asset AssetId="GSIO" AssetName="GS Index Option" InstrumentId="Basket Option" Quantity="30000"/>
</Portfolio>
</Portfolios>
Note, the above XML has been abbreviated for brevity so there may be specific fields missing that are unrelated to this aspect of the file build.
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting |
|---|---|---|---|---|
| GSABCDEF Index | InstrumentId | AAPL US Equity | InstrumentId | 0.3 |
| GSABCDEF Index | InstrumentId | DE0007664039 | ISIN | 0.7 |
This structure is identical to that of the prop baskets above. However, in lieu of having a specific identifier from the vendor as their InstrumentId, clients will generally have an internal value.
<Instruments>
<Option InstrumentId="FANCYBASKETOption" InstrumentName="FANCYBASKET Option" CallOrPut="Call" IsCashSettled="true" Market="XHEL" ContractSize="100" MaturityDate="2015-12-15" Delta="0.8">
<Component InstrumentId="FANCYBASKET"/>
</Option>
<Index InstrumentId="FANCYBASKET" InstrumentName="FANCYBASKET Index" Price="3120.00" InstrumentCurrency="USD">
</Instruments>
...
<Portfolios>
<Portfolio PortfolioId="11">
<Asset AssetId="FANCYBASKETOption" AssetName="Vodafone Equity" InstrumentId="FANCYBASKETOption" Quantity="30000"/>
</Portfolio>
</Portfolios>
Note, the above XML has been abbreviated for brevity so there may be specific fields missing that are unrelated to this aspect of the file build.
| CompositeId | CompositeIdType | ComponentId | ComponentIdType | Weighting |
|---|---|---|---|---|
| FANCYBASKET | InstrumentId | AAPL US Equity | InstrumentId | 0.3 |
| FANCYBASKET | InstrumentId | DE0007664039 | ISIN | 0.7 |