Skip to content

Latest commit

 

History

History
232 lines (170 loc) · 14.9 KB

v2.md

File metadata and controls

232 lines (170 loc) · 14.9 KB

Adapptr API@v2

Base URI

Your base URL for Adapptr is https://%company%-svc.fundapps.co/api/adapptr, e.g. https://abc-svc.fundapps.co/api/adapptr.

Authentication

Authentication to the Adapptr API is done via Basic Authentication over HTTPS. An administrator from your organisation must create a user with the role "API" for this purpose. You must authenticate for all requests.

Note: Please ensure you create a separate user for the API as if you use an existing user's account, as soon as they change their password the API upload will fail.

Methods

For all methods, authentication is made against your FundApps environment. You are required to include the Username and Password of an API user in your FundApps environment.

Available Nomenclatures GET /v2/nomenclatures

List of available data providers, identifier types, position services and more. Those can be requested from this endpoint. You must then use the appropriate ids for parameters in other requests.

Id Data Provider
1 Refinitiv
2 Bloomberg
Id Identifier Type
1 Isin
2 Sedol
3 Cusip
4 DataProviderId
Id Positions Service
2 Shareholding Disclosure
4 Position Limits
6 Shareholding Disclosure & Position Limits
Id File Data Formats
1 FundApps
2 Consensys

Data Provider Credentials POST /v2/configuration/dataproviders/:providerId/credentials

If you are using Refinitiv data you must submit your username and password to this endpoint. Before being able to post a file to Adapptr, your data provider credentials must be set. Your file upload will otherwise fail because FundApps will be unable to connect and authenticate against the data provider.

Note: This endpoint does not support Bloomberg data provider. The support team will have to use your Bloomberg generated certificate to enable Adapptr integration. Please contact [email protected] or your Client Success Manager for more details.

e.g. { "Username": "[Username]", "Password": "[Password]" }

Upload positions POST /v2/task/positions

Upload daily positions. This method expects a CSV format (example Adapptr position files). The response includes a taskId and a trackingEndpoint that can then be polled via the GET method to monitor the progress of the task through the Adapptr service.

The positions parameter must be the file that you need to upload.

The snapshotDate parameter must be included as a parameter in the format yyyy-mm-dd. This is the snapshot date of the positions being uploaded in the csv file.

The dataProvider is an integer parameter that must be included to select a specific data provider. A list of all supported providers can be obtained from the Available Nomenclatures endpoint.

The services [optional] parameter can be included if you need different from the default Shareholding Disclosure service. It expects the Id of a service(s), that could be obtained from the Available Nomenclatures endpoint.

The primaryIdentifier [optional] parameter can be included if you need to specify which identifier from your positions file you wish to use to query against the data provider. For example if a position has both ISIN and SEDOL this parameter indicates which of the two identifiers should be used when requesting data from your market data provider. If not populated, the default is ISIN. The value could be obtained from the Available Nomenclatures endpoint.

The secondaryIdentifier [optional] parameter can be included if you need to specify which identifier to fall back to if your primaryIdentifier is not populated. For example if your primaryIdentifier is set to 1 for ISIN and you have a position which doesn't have an ISIN but has a SEDOL, setting the secondaryIdentifier to 2 (SEDOL) would tell Adapptr to use SEDOL to query data from your market data provider if ISIN is not populated. By default this is empty. The value could be obtained from the Available Nomenclatures endpoint.

The tertiaryIdentifier [optional] parameter can be included if you need to specify which identifier to fall back to if your secondaryIdentifier is not populated. For example if your secondaryIdentifier is set to 1 for ISIN and you have a position which doesn't have an ISIN but has a SEDOL, setting the tertiaryIdentifier to 2 (SEDOL) would tell Adapptr to use SEDOL to query data from your market data provider if ISIN is not populated. By default this is empty. The value could be obtained from the Available Nomenclatures endpoint.

The excludeErroredAssets [optional] is a boolean parameter that can be set if you need to send the positions despite errors due to incomplete data from your market data provider. Default value: false

The copyDownParentInstrumentData [optional] is a boolean parameter that can be set if you find the data provider component data not complete enough. Setting the value to true will copy all data from the parent instrument to the instrument of the component. The resulting component instrument will be Equity. Default value: false

The populateExecutionVenueWithMarket [optional] is a boolean parameter that can be set if you need to use your data provider's Market field to populate ExecutionVenue of your assets. Default value: false

Upload positions without enrichment POST /v2/task/positions/without-enrichment)

This method converts the Consensys or Adapptr csv file format into the FundApps required format for the Position Limits service only. The response includes a taskId and a trackingEndpoint that can then be polled via the GET method to monitor the progress of the task through the Adapptr service.

The positions parameter must be the file that you need to upload.

The snapshotDate parameter must be included as a parameter in the format yyyy-mm-dd. This is the snapshot date of the positions being uploaded in the CSV file.

The format [optional] [default value = 2] parameter can be included if you prefer using different file data format. A list of all supported file data formats can be obtained from the Available Nomenclatures endpoint.

This method works only with the FundApps Position Limits service. Please see here for an example.

Example upload positions Response

{
    "id": "d1188c41-9cd4-467a-9c80-d3d3cba88b1c",
    "type": {
        "id": 1,
        "name": "Positions"
    },
    "status": {
        "id": 1,
        "name": "Accepted",
        "description": "Position file accepted. Please check the tracking endpoint to check for any errors in the file upload and to track the progress of the file enrichment and transmission."
    },
    "dateCreated": "2022-06-24T11:32:22.7427025Z",
    "trackingEndpoint": "/api/adapptr/v2/task/d1188c41-9cd4-467a-9c80-d3d3cba88b1c/status"
}

Upload composites POST /v2/composites

This method uploads the composites file that will be used in the positions/expost enrichment.

The composites parameter must be the file that you need to upload. It is required to be a .csv file or a .zip of a csv file.

Example upload composites Response

{
    "message": "Upload Successful"
}

Upload positions with composite enrichment POST /v2/task/positions/expost

This method uploads the positions and enriches using the latest uploaded composites file from the v2/composites upload.

The positions parameter must be the file that you need to upload. It is required to be a .xml file or a .zip of a .xml file.

The response includes a taskId and a trackingEndpoint that can then be polled via the GET method to monitor the progress of the task through the Adapptr service.

Example upload positions with composite enrichment

{
    "id": "3b5a2647-b8e5-4cfc-a452-4f877172ac97",
    "type": {
        "id": 3,
        "name": "Expost Positions"
    },
    "status": {
        "id": 1,
        "name": "Accepted",
        "description": "Position file accepted. Please check the tracking endpoint to check for any errors in the file upload and to track the progress of the file enrichment and transmission."
    },
    "dateCreated": "2022-08-31T13:08:08.5288727Z",
    "trackingEndpoint": "/api/adapptr/v2/task/3b5a2647-b8e5-4cfc-a452-4f877172ac97/status"
}

Task status GET /v2/task/:taskID/status

GET the task status. This method returns a status of the requested TaskId and if the task has failed, the errors that have contributed to the failure.

There are 4 status ids

id status Explanation
1 Accepted Job just received; not processed yet.
2 Enriched Data is being requested from data provider, then enriched with the csv file and the xml file generated but not yet sent.
3 Transmitted xml file sent to fundapps.
4 Enriched With Exclusions Data is being requested from data provider, then enriched with the csv file and the xml file generated but not yet sent, some positions skipped due to incomplete data.
5 Transmitted With Exclusions xml file sent to fundapps, some positions skipped due to incomplete data.
6 Waiting Extractions A request is sent to the data provider, but there is no response yet.
500 Failed Job has failed. Please read errors to identify cause of job failure.

Once transmitted, the request will give the trackingEndpoint URL which can be polled to check the status of the XML positions file upload to FundApps.

Example task status Response

{
    "id": "9b134cda-81db-44c0-9c52-cfeb897e663a",
    "type": {
        "id": 1,
        "name": "Positions"
    },
    "status": {
        "id": 5,
        "name": "Transmitted With Exclusions",
        "description": "Successfully transmitted. Some positions were skipped, most likely due to incomplete data from your market data provider. Please check the warnings field for a list of all skipped positions as well as the cause reason."
    },
    "dateCreated": "2021-07-22T17:09:01.186+03:00",
    "dateUpdated": "2021-07-22T17:13:19.024+03:00",
    "trackingEndpoint": "https://demo-melon-api.fundapps.co/v1/expost/result/38ba5713-c253-42d1-896a-bd6e00ea5ec3",
    "statusReport": {
        "errors": null,
        "warnings": [
            "Identifier: <Identifier> | Component is required for this instrument. Refinitiv returned null or empty value for UnderlyingISIN and UnderlyingRIC. Consider providing ComponentISIN value in the positions file.",
            "Identifier: <Identifier> | Empty result while getting enrichment data for item. Please check if the identifier is valid.",
            "For component | Parent Identifier: <Identifier> | Identifier: <Identifier> | Unsupported AssetClass: <AssetClass>"
        ]
    }
}

ETF Library Usage GET /v2/composites/usage

GET information regarding the utilization of the subscribed ETF Library. This method provides a list of selected ETF ISINs from the library, along with details on the contracted number of ETFs and the total count already utilized. You will receive an HTTP 200 reply with the example json showing below.

{
    "used": 2,
    "contracted": 10,
    "etfsUsed": [
        {
            "etfISIN": "DE000A0F5UK5",
            "etfBenchmarkISIN": "EU0009658632"
        },
        {
            "etfISIN": "IE0005042456"
        }
    ]
}

If you have no subscription to ETF Library the API will return an error: HTTP 403 Forbidden

Power shell scripts

As a helper to automate the setup and daily operations there are a group of power shell scripts provided that aim to help the process of upload daily positions files. Those scripts create power shell functions to allow the use of the Adapptr APIs.

Once the functions are created, they can be used from the command line directly or integrated with other scripts created by client's own teams.

On the header of each script there is a description of how to use the functions created.

script Explanation
check-task-status.ps1 create a function that will call the task status api to check a task status
post-data-provider-credentials.ps1 create a function that will call the data provider api to registry the provider credentials
upload-positions-without-enrichment.ps1 create functions that allow to submit positions file to run without enrichment without enrichment api
upload-positions.ps1 create functions that allow to submit positions file to run with enrichment enrichment api
entry-provider-credentials.ps1 this script allow the use of data provider api asking the information required and submit the request to the API. The password requested will be obscured.

Return to Main page