Bring Your Own Data Guide (v3)

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 should supply this using the endpoint:

https://{environment_name}-api.fundapps.co/v3/data/composites/upload

If you use SFTP to upload Data Adapter files, you can also use this method to pass BYOD composite data. The relevant information to set this up is on your SFTP settings screen, which is visible in the UI. For more details, contact support or your Implementation Manager.

Where {environment_name} is replaced with your FundApps tenant name

  • Use a POST request
  • Authenticate using the same FundApps engine API credentials used for file upload currently, in Basic Authentication format
  • Upload a CSV (format below) in the body using a composites key and a Content-Type of multipart/form-data
  • CSV format. Please use a comma , as a separator. The table format is representative of the columns and data format.
  • All data in this file is case-sensitive
CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeightingWeightingQuantity
.KS100EWIDataProviderId005930.KSDataProviderId0.21000000
.KS100EWIDataProviderIdKR7005930003Isin0.3
KOSPI100 IndexDataProviderId005930 KS EquityDataProviderId4001
BBG000P5WLC5FigiDK0062498333Isin0.1
  • CompositeIdType and ComponentIdType fields are used to define the identifier you wish to match the parent/constituent across your BYOD File and your daily Positions File. The supported values are:
    • InstrumentId (can only be used for clients uploading XML / ExPost )
    • DataProviderId (can only be used for clients uploading the Data Adapter CSV Positions File)
    • Isin
    • Sedol
    • Cusip
    • Figi
  • Weighting or WeightingQuantity should be used, and each is defined within the InstrumentComponent Properties section on this page.

BYOD File Validation

  • You can specify additional fields within this CSV, they will be ignored for processing
  • WeightingQuantity should be provided as a positive value greater than 0
  • Weighting and/or WeightingQuantity must be set for each row
  • BYOD data is persisted until the next BYOD upload occurs, you do not need to upload it each day or run of the service
  • Partial BYOD uploads are not supported. Uploading a new BYOD file will replace all existing BYOD data in full
  • If the file passes validation you should see a return status of 201 with a message:
{
  "message": "Upload Successful"
}

Examples

Clients uploading Data Adapter CSV positions files

Market indices

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.

Positions File

PortfolioIdAssetIdAssetNameISINDataProviderIdComponentISINComponentDataProviderIdQuantityMarketValueSFTTypePriceInstrumentCurrencyAssetClassULAssetClassIsCashSettledMarketMarketsListedInMaturityDateDeltaContractSizeCallOrPut
TESTOTC SPY OptionOTC SPY OptionUS78378X10721002000Normal20USDOptionIndexTRUEXXXXXXXX2024-12-0111Call
TESTAAPL_EQApple EquityAAPL US Equity10500Normal50USD
TESTVolkswagen_EQVolkswagen EquityDE000766403920600Normal30USD

BYOD Composites File

CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeighting
US78378X1072ISINAAPL US EquityDataProviderId0.3
US78378X1072ISINDE0007664039ISIN0.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.

Proprietary baskets (created by banks, third parties)

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.

Positions File

PortfolioIdAssetIdAssetNameISINDataProviderIdComponentDataProviderIdComponentISINQuantityMarketValueSFTTypePriceInstrumentCurrencyAssetClassULAssetClassIsCashSettledMarketMarketsListedInMaturityDateDeltaContractSizeCallOrPut
TESTOTC OptionOption on GS basketGSABCDEF Index1002000Normal20USDOptionIndexTRUEXXXXXXXX2024-12-0111Call
TESTAAPL_EQApple EquityAAPL US Equity10500Normal50USD
TESTVolkswagen_EQVolkswagen EquityDE000766403920600Normal30USD

BYOD Composites File

CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeighting
GSABCDEF IndexDataProviderIdAAPL US EquityDataProviderId0.3
GSABCDEF IndexDataProviderIdDE0007664039ISIN0.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.

Custom baskets

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)

Positions Composites file

PortfolioIdAssetIdAssetNameISINDataProviderIdComponentDataProviderIdComponentISINULAssetClassPriceULPriceInstrumentCurrencyULInstrumentCurrencyIsCashSettledMarketMarketsListedINMaturityDate
TESTOTC_SP2Swap on CPStructuredProduct1510USDUSDTRUEXXXXXXXX2024-12-01
TESTAAPL_EQApple EquityAAPL US Equity50USD
TESTVolkswagen_EQVolkswagen EquityDE000766403930USD

BYOD Composites file

CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeighting
OTC_SP2_StructuredProductInstrumentIdAAPL US EquityDataProviderId0.3
OTC_SP2_StructuredProductInstrumentIdDE0007664039ISIN0.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

Clients uploading XML positions files

Market indices

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.

Positions file

<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.

BYOD Composites File

CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeighting
US78378X1072ISINAAPL US EquityInstrumentId0.3
US78378X1072ISINDE0007664039ISIN0.7

Proprietary baskets (created by banks, third parties)

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.

Positions Composites file

<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.

BYOD Composites File

CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeighting
GSABCDEF IndexInstrumentIdAAPL US EquityInstrumentId0.3
GSABCDEF IndexInstrumentIdDE0007664039ISIN0.7

Custom baskets

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.

Positions file

<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.

BYOD Composites File

CompositeIdCompositeIdTypeComponentIdComponentIdTypeWeighting
FANCYBASKETInstrumentIdAAPL US EquityInstrumentId0.3
FANCYBASKETInstrumentIdDE0007664039ISIN0.7

Migration

If you are migrating from the v2 Composites BYOD endpoint the only change needed is to the URL:

VersionUrl
v2https://<environment_name>-svc.fundapps.co/api/adapptr/v2/composites
v3https://<environment_name>-api.fundapps.co/v3/data/composites/upload

XML position file

Next to uploading the composites data via BYOD to the above endpoint, please use this NEW endpoint to send your positions to: Positions Upload (v3)