Entity Search Service

The entity search service is the most important service involved in building out our client's fund tools! It is structured like a one stop shop / swiss army knife. It allows you to:

The following endpoints are supported

Endpoint Method Description
/searchEntity POST Search for entities such as Classes, Funds and Accounts
/getEntity POST Retrieve a specific entity
/getHistoricalDatasets POST Retrieve a single historical dataset
/fundmanagerpicture GET Get a Fund Manager's picture
/getfilters POST Return all the distinct values for the specified entity properties
/getfacets POST Returns entity properties with the value containing a search term
/searchCodes POST Returns a list of entity codes you are allowed to see
/searchEntityFundlist POST Returns a list of entity codes and fund list names

Search Entities

You can make use of this endpoint to get a list of entities, with various other related data. Keep in mind if you have data entitlements enabled, your results will be limited.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/searchEntity
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON

Here is a complete schema of the body, we explain below what each property does.

{
    "type": "CLSS",
    "fundList": "intermediaries_LU",
    "fundListExclusion": ["exclude_a_segment"],
    "includeProperties": ["admin_fee", "bloomberg_code"],
    "applyFormats": true,
    "culture": "en-GB",
    "sourceCulture": "fr-FR",
    "translate": true,
    "requireTranslations": false,
    "preserveOriginal": true,
    "disclaimers": true,
    "clientCode": ["KS1234567890", "KS1234567891"],
    "identifierSearch": {
        "properties": ["isin", "fund_name"],
        "value": "LU1",
        "fuzzy": false
    },
    "search": [
        {
            "property": "share_class",
            "values": ["EB"],
            "matchtype": "MATCH"
        }
    ],
    "sort": {
        "key": "asset_class",
        "direction": "ASC"
    },
    "advancedSort": {
        "type": "Statistics" | "Allocations",
        "code": "anyString",
        "key": "anyString",
        "value": "anyString",
        "direction": "ASC" | "DESC"
    },
    "include": {
        "timeseries": {
            "limitTo": ["prices"]
        },
        "allocations": {},
        "historicalDatasets": {
            "limitTo": ["composite_data"],
            "asAtDate": "2021-11-22"
        },
        "fundManagers": {},
        "statistics": {},
        "commentaries": {},
        "disclaimers": {},
        "documents": {
            "joinSpec": [
                {
                    "joinTo": "isin",
                    "search": [
                        {
                            "property": "document_type",
                            "matchtype": "MATCH",
                            "values": ["Factsheet", "KIID"]
                        }
                    ]
                }
            ]
        },
        "transactions": [
            {
                "code": "global_transactions"
            }
        ]
    },
    "returnFields": "",
    "limit": 10,
    "start": 0
}

Required Properties

"type": "CLSS",
"search": []

The type determines what type of entity you are searching for. Each entity has an type of either CLSS, FUND, BMRK or ACCT. The most common are CLSS (for a share class) and FUND for a fund.

The search property is explained in more depth bellow. Make use of it to filter down your results. Leaving it empty won't filter on any properties.

Search

The options below allow you to filter results. Note that they all can operate in tandem, but when combined they operate as AND; that is, the only results returned will be ones that fulfill all the clauses provided.

"search": [{
    "property": "share_class",
    "values": ["EB"],
    "matchtype": "MATCH"
}],

The search block allows you to construct more complex search terms against the data stored against an entity. The search is an array of terms, which are combined together as an AND. Each term has a property (chosen from the properties_pub property of the entity), an array of values (a match on any of which will return true for that property, an in clause essentially) and a matchtype. The match can be MATCH (for a direct match) or LIKE (for a SQL like).

Field Search

Certain fields are also searchable using the same search fields as properties. Instead of using the property name in the search object, use the entity's field name instead. Only the clientCode is currently supported, for example:

"search": [{
    "property": "clientCode",
    "values": [ "KS1" ],
    "matchtype": "LIKE"
}]

Identifier Search

"identifierSearch": {
    "properties": ["isin", "fund_name"],
    "value": "LU1",
    "fuzzy": false
}

The identifier search can be used to implement a 'full text search' on properties. You pass an array of approved property names, and a single value. It will perform a like match on all of them and return results that are true in any of the fields provided. In that sense the search operates as an OR across each of the fields. Adding fuzzy:true will make the search match any token in the string you provide.

Fund lists

N.B. You need to set up a fund list first to be able to use these filters.

"fundList": "intermediaries_LU"

Often our clients' sites will gate content from people until they identify as an investor from a certain region and of a certain class (institutional, individual, intermediary, etc.). This means certain products are not applicable to them. Fund Lists allow the client to maintain these white lists. Passing the name of one here will pre-filter the results prior to pagination. It's a nice clean way of implementing this functionality.

"fundListExclusion": "exclude_a_segment"

Sometimes a client would like to specify that some entities should be excluded from being displayed. To do this we can create a list of these entities and add it to the search as above.

Both the fundList and fundListExclusion can be set to a string or an array of strings. If an entity is found in both the inclusion and exclusion fundLists then it will exclude the entity.

Client Code

The clientCode property will limit the search to only the entities with the clientCodes provided.

Include Properties

If includeProperties is set as empty, i.e. to an empty array, it will remove the properties_pub property from the entity results.

By specifying the included properties as bellow

"includeProperties": ["admin_fee", "bloomberg_code"]

It will only include the specified properties in the properties_pub.

Include relevant data

"include": {
    "timeseries": {
        "limitTo": ["prices"]
    },
    "allocations": {},
    "historicalDatasets": {},
    "fundManagers": {},
    "statistics": {},
    "commentaries": {},
    "disclaimers": {},
    "documents": {
        "joinSpec": [
            {
                "joinTo": "isin",
                "search": [
                    {
                        "property": "document_type",
                        "matchtype": "MATCH",
                        "values": ["Factsheet", "KIID"]
                    }
                ]
            },
            {
                "joinTo": "umbrella",
                "search": [
                    {
                        "property": "class_code",
                        "matchtype": "MATCH",
                        "values": ["R", "C"],
                        "inferred": "true"
                    }
                ]
            }
        ],
        "excludeExpired": true
    },
    "transactions": [
        {
            "code": "global_transactions"
        }
    ]
}

The include object allows you to add more related data to the response. This saves time on multiple requests when building a complex page. Each linked data type can be retrieved by passing a key and an object as above. For timeseries, allocations, statistics and historicalDatasets, a limitTo key can be passed. This takes the form of a string array, with each value representing a code for the data set you wish to retrieve.

With historicalDatasets, in addition to the limitTo key, either asAtDate or asAtDateStart, asAtDateEnd can be provided. If asAtDate is provided then it would return the latest dataset before or including this date. With asAtDateStart and asAtDateEnd, the datasets between these dates (including) would be returned. if provided, either an asAtDate or alternatively asAtDateStart and asAtDateEnd must be present otherwise an error is returned.

For the content includes (commentaries and disclaimers), a limitTo key can be passed with an array of values that would relate to the relevant commentaryType or disclaimerType field related to the content type. This will limit the results to only content associated to those types.

"include": {
    "commentaries": {
        "limitTo": ["investment_objective"]
    },
    "disclaimers": {
        "limitTo": ["past_performance"]
    }
}

Include Fund List Segmentation Tags in request

The fundLists request item allows users to retrieve the segmentation tags assigned to a FundList that is attached to a piece of content. There could be multiple fund lists attached to the content and the response will list tags by the different Fund List names.

To differentiate between content that is directly assigned to an entity rather than a Fund List, we have included an itemType key in the response that will be limited to either Entity or FundList.

"include": {
    "disclaimers": {
        "limitTo": ["Disclaimer Type 1"],
        "fundLists": {}
    },
}

Sample Response:

{
    "disclaimers": {
        "Disclaimer Type 1": [
            {
                "culture": "en-GB",
                "disclaimer": "Example Text",
                "linkType": "FundList",
                "linkedFundLists": {
                    "Segmentation / Fund List 1": {
                        "jurisdiction": { "value": "GB" }
                    },
                    "Segmentation / Fund List 2": {
                        "inventoryType": { "value": "Retail" }
                    }
                }
            },
            {
                "culture": "fr-FR",
                "disclaimer": "Example Text",
                "linkType": "Entity"
            },
            {
                "culture": "fr-FR",
                "disclaimer": "Example Text",
                "linkType": "FundList",
                "linkedFundLists": {
                    "Segmentation / Fund List 1": {
                        "jurisdiction": { "value": "FR" }
                    },
                    "Segmentation / Fund List 4": {
                        "inventoryType": { "value": "Consumer" }
                    }
                }
            }
        ]
    }
}

Segmentation Tags Filter Request

The segmentation tags filter allows users to futher filter the content by Fund List segmentation tags. If a piece of content (disclaimer / commentary) is assigned to a Fund List, the segmentation tags for that Fund List will be searched for the provided segmentation tags. The search will take each tag provided in the request as additive to the filter - i.e. never return when the Fund List does not possess ALL of the requested segmentation tags. However the Fund List may possess MORE tags than the request may specify.

If the segmentation tags filter option is provided, the search will return only those pieces of content that are assigned to Fund Lists, rather than a specific entity.

"include": {
    "disclaimers": {
        "fundLists": {
            "segmentationTags": [
                { "jurisdiction": ["GB"] }
            ]
        }
    }
}

Sample Response:

{
    "disclaimers": {
        "Disclaimer Type 1": [
            {
                "culture": "en-GB",
                "disclaimer": "Example Text",
                "linkType": "FundList",
                "linkedFundLists": {
                    "Segmentation / Fund List 1": {
                        "jurisdiction": { "value": "GB" }
                    }
                }
            },
            {
                "culture": "fr-FR",
                "disclaimer": "Example Text",
                "linkType": "FundList",
                "linkedFundLists": {
                    "Segmentation / Fund List 1": {
                        "jurisdiction": { "value": "GB" }
                    }
                }
            }
        ]
    }
}

Documents

For documents, the way in which entities and documents are associated is loose. Therefore we use syntax for providing a join. The joinTo field specifies a piece of meta data on the document to match against the entity's client code. The entity's client code is effectively a primary key of each entity, unique to that client. The basis of this functionality is that a field exists on the document that mirrors the entity's client code. If required, a joinFrom can be provided that can specify a target property to be used instead of the client code of the fund or share class. The system will detect if the joinFrom is an inferred property on the document meta automatically, and handle the join accordingly.

You can filter the included documents by supplying the optional search property to the joinSpec. This is equivalent to how you would search documents in general. This payload will find documents whose isin meta property equals the entity's clientCode, it will then further filter down documents with the meta property of document_type that equals Factsheet OR KIID. If documents need to be filtered based on inferred document meta properties, an inferred flag will need to be supplied with a value of true. This will indicate to the system that the search property is an inferred property instead of a meta property and filter the documents accordingly.

The optional excludeExpired allows documents that have been uploaded with an expires date value to be excluded from the results. Any documents which do not have a valid expires date value will be included in the response.

Transactions

Transactions can also be included in the response from the searchEntity request. This object can be expanded and uses a similar logic to the searchEntity request body to be able to sort, search and paginate the Transactions.

It is important to remember that you can only include transactions on one of two conditions:

If there is more than one entity being returned, and no date range specified, it will provide you with a message of "To include Transactions, there must be only 1 entity returned in the response". (See example payload below Typescript declarations)

The transactions key in the include is a collection or transaction requests. This lets us define the options for different transaction codes that we want returned. The shape of one of these options requests looks like the following:

export interface TransactionsInclude {
    id?: string; // A unique identifier to target the responses
    code: string; // The transaction property code to query
    textSearch?: TransactionTextSearch; // Lets us search for partial text in fields
    search?: {
        metaProperty?: string; // When trying to search on the meta values of the transaction, possible values here are: dateTime, transactionCode
        extendedProperty?: string; // The extended property to search on
        values: string[]; // Which values to look for
        matchtype: TransactionMatchType; // How to match the value to the property, see below
    }[]; // A collection of search object
    sort?: Sort | Sort[]; // How to sort the transactions
    start?: number; // For paging, which record index to start at, zero based indexes
    limit?: number; // How many records to return, defaults to 10 if not provided
}

export interface TransactionTextSearch {
    value: string; // The partial text value to search for
    extendedProperties?: string[]; // Which extended properties to search in, label and value are included
    fuzzy?: boolean; // If the search can skip words, if true the search will split your value and search across sentences
}

export interface Sort {
    key: string; // The key to sort, can be an extendedProperty (including label and value) or a metaProperty as above
    direction: "ASC" | "DESC"; // The direction to sort, ascending or descending
}

export type TransactionMatchType =
    | "MATCH" // Direct match of the value
    | "LIKE" // The value is contained in the data
    | "DATE_LESS_THAN"
    | "DATE_LESS_THAN_OR_EQUAL_TO"
    | "DATE_GREATER_THAN"
    | "DATE_GREATER_THAN_OR_EQUAL_TO";

When using the TransactionMatchType of "DATELESSTHAN", "DATELESSTHANOREQUALTO", "DATEGREATERTHAN", "DATEGREATERTHANOREQUALTO" your value should match the format of YYYY-MM-DD.

{
    "type": "CLSS",
    "clientCode": ["clientCode001", "clientCode002"],
    "search": [],
    "include": {
        "transactions": [
            {
                "code": "attribution_by_sector",
                "search": [
                    {
                        "metaProperty": "dateTime",
                        "matchtype": "DATE_GREATER_THAN_OR_EQUAL_TO",
                        "values": ["2013-12-15"]
                    }
                ],
                "limit": 2,
                "start": 0
            }
        ]
    },
    "limit": 10,
    "start": 0
}

Apply Formats

Different cultures over the world have different requirements and standards. E.g. Culture X might have different date formats, currencies, languages etc to Culture Y. We are able to change the format of an entity's values by making use of the properties below.

"culture": "fr-FR"

A culture code used to look up region specific formats and translations.

"sourceCulture": "en-GB"

The source culture that the data is stored as in the system.

"translate": true

If specified the service will load a dictionary into the response and attempt to translate the available words.

"requireTranslations": true

If the parameter is set to true, the service will return a 400 reponse when there exists a phrase that does not have a translation.

"preserveOriginal": true

This will append the original value as originalValue to the entity before formatting it.

"disclaimers": true

If specified the system will attempt to attach disclaimers to certain data points. This functionality relies on each property being tagged with a disclaimer type to link the two pieces of data.

"applyFormats": true

If specified the system will attempt to apply format codes to data on the server side. This functionality relies on each property being tagged with a format code to link the two pieces of data.

Sorting

The sort accepts an object, or an array of objects

"sort": {
    "key": "asset_class",
    "direction": "ASC"
}

or

"sort": [
    {
        "key": "asset_class",
        "direction": "ASC"
    },
    {
        "key": "bloomberg_code",
        "direction": "ASC"
    }
]

If an array is passed, the sort objects are processed in order. The sort object specifies a property to sort on (the key) and the direction (ASC or DESC).

Advanced Sorting

"advancedSort": {
    "type": "Allocations",
    "code": "country_allocation",
    "key": "Hong Kong",
    "value": "net",
    "direction": "DESC"
}

Instead of the sort object, the advancedSort allows sorting of Statistics | Allocations using the code to identify which data set key to use to identify a particular label within the data set, and which value to sort by. If the value is not supplied then it would default to the value property. The sort order defaults to ASC but can be overridden by using the direction property.

Partial Response

Property name: returnFields

Returns selected fields from the response. Based on npm package https://github.com/nemtsov/json-mask

The syntax is loosely based on XPath:

Examples

1.

A request without returnFields property

{
    "type": "CLSS",
    "search": [],
    "clientCode": ["KS1319692791"]
}

Response

{
    "values": [
        {
            "entityId": 24323,
            "parentEntityId": null,
            "type": "CLSS",
            "clientId": 1080,
            "clientCode": "KS1319692791",
            "lastModified": "2023-09-09T09:33:12.000Z",
            "lastModifiedBy": 2072,
            "created": "2023-09-09T09:33:12.000Z",
            "createdBy": 2072,
            "properties_pub": {
                "admin_fee": { "value": 0.0025 },
                "bloomberg_code": { "value": "RWGCRCH LX" },
                "ccy": { "value": "CHF" },
                "class_code": { "value": "R" },
                "distribution_type": { "value": "A" },
                "fund_code": { "value": "BOND" },
                "fund_launch_date": { "value": "2006-12-29T00:00:00.000Z" },
                "fund_name": { "value": "Kurtosys Bond Fund" },
                "fund_nick_name": { "value": "Bonds" },
                "fund_short_code": { "value": "GC" },
                "fund_uid": { "value": 158 },
                "hedged": { "value": true },
                "inception_date": { "value": "2015-11-11T00:00:00.000Z" },
                "inception_price": { "value": 100 },
                "investment_team": { "value": "Fixed Income" },
                "is_primary": { "value": false },
                "is_unlaunched": { "value": false },
                "isin": { "value": "KS1319692791" },
                "launch_date": { "value": "2015-11-11T00:00:00.000Z" },
                "long_name": { "value": "KSYS BND CV-R-CHF-H-FD" },
                "management_charge": { "value": 0.008 },
                "min_holding": { "value": 20000 },
                "min_invest_reg_savings": { "value": 5000 },
                "min_investment": { "value": 25000 },
                "on_bb": { "value": false },
                "on_website": { "value": true },
                "performance_fee": { "value": 0 },
                "price_history": { "value": true },
                "public_share_class_name": { "value": "Kurtosys Bond R CHF H Acc" },
                "salesforce_id": { "value": "SF124124124" },
                "sedol": { "value": "BZ6CTB8" },
                "short_name": { "value": "CLASS R CHF HDG" }
            },
            "properties_draft": null,
            "userProperties_pub": null,
            "userProperties_draft": null,
            "jobReference": "2e8c1e08-b056-431b-a98c-6741a640b0c7",
            "rowHash": "9c00e1015a9897cf64bf8f588dbc0199ecc1eb50bf9f9f15c2a02e6d0885ad40"
        }
    ],
    "total": 1
}

The returnFields property can be used to create partial responses as follows:

1.

Request

{
    "type": "CLSS",
    "search": [],
    "clientCode": ["KS1319692791"],
    "returnFields": "type,clientCode"
}

Will create partial response

{
    "values": [
        {
            "type": "CLSS",
            "clientCode": "KS1319692791"
        }
    ],
    "total": 1
}

2.

Request

{
    "type": "CLSS",
    "search": [],
    "clientCode": ["KS1319692791"],
    "returnFields": "properties_pub(admin_fee,bloomberg_code)"
}

Will create partial response

{
    "values": [
        {
            "properties_pub": {
                "admin_fee": { "value": 0.0025 },
                "bloomberg_code": { "value": "RWGCRCH LX" }
            }
        }
    ],
    "total": 1
}

Pagination

"limit": 10,
"start": 0

limit specifies the number of entities to return, while the start specifies the index at which the objects will be returned from.

Get Entity

Retrieves a specific entity by clientCode

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getEntity
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "type": "CLSS",
    "clientCode": "UNIQUE_IDENTIFIER",
    "include": {
        "timeseries": {},
        "allocations": {},
        "historicalDatasets": { "asAtDatesOnly": true },
        "statistics": {},
        "transactions": {}
    }
}
Property Required Description
type TRUE The entity type
clientCode TRUE The unique identifier for the entity
include FALSE Opt-in to retrieving data for the entity. Limited to all timeseries, allocations, historicalDatasets, statistics and transactions associated with this entity

The historicalDatasets property may include a boolean asAtDatesOnly property. If this is included, and truthy, the returned historical datasets will not include values, values must be fetched with the getHistoricalDatasets API.

Get Historical Datasets

Retrieves a single historical dataset

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getHistoricalDatasets
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "type": "CLSS",
    "clientCode": "UNIQUE_IDENTIFIER",
    "code": "country_allocation",
    "ccy": "USD",
    "asAtDate": "2022-01-01"
}
Property Required Description
type TRUE The entity type
clientCode TRUE The unique identifier for the entity
code TRUE The encoded property for the required dataset
ccy TRUE The currency for the required dataset
asAtDate TRUE The as-at date for the required dataset (the set returned will be the most recent on or before the date given)

Get Fund Manager

Returns a Fund Manager. Note that this is a GET request that requires the Fund Manager's fundManagerId.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getFundManager/{fundManagerId}
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type As specified in the database

An example of the results based on the query above.

{
    "fundManagerId": 5,
    "clientId": 2,
    "code": "john_doe",
    "name": "John Doe",
    "biography": null,
    "headshot": null,
    "headshotContentType": null,
    "lastModified": "2020-06-12 08:54:44",
    "lastModifiedBy": 5,
    "created": "2020-06-12 08:54:44",
    "createdBy": 5,
    "relatedEntities": "['ALPHA']",
    "jobReference": "7c9438aa-8327-4ecd-a2a7-afb004d0549a",
    "extended": "{'age':34,'years_experience':12}",
    "rowHash": "92c9d779f26cb6fd9cf9f7a2f6fa009629c0b4e891f408395daeefa2ef71f37c"
}

List Fund Managers

Returns a List of Fund Managers.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/listFundManagers
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type As specified in the database

An example of the results based on the query above.

{
    "fundManagers": [
        {
            "fundManagerId": 5,
            "clientId": 2,
            "code": "john_doe",
            "name": "John Doe",
            "biography": null,
            "headshot": null,
            "headshotContentType": null,
            "lastModified": "2020-06-12 08:54:44",
            "lastModifiedBy": 5,
            "created": "2020-06-12 08:54:44",
            "createdBy": 5,
            "relatedEntities": "['ALPHA']",
            "jobReference": "7c9438aa-8327-4ecd-a2a7-afb004d0549a",
            "extended": "{'age':34,'years_experience':12}",
            "rowHash": "92c9d779f26cb6fd9cf9f7a2f6fa009629c0b4e891f408395daeefa2ef71f37c"
        },
        {
            "fundManagerId": 6,
            "clientId": 2,
            "code": "jane_doe",
            "name": "Jane Doe",
            "biography": null,
            "headshot": null,
            "headshotContentType": null,
            "lastModified": "2020-06-12 08:54:44",
            "lastModifiedBy": 5,
            "created": "2020-06-12 08:54:44",
            "createdBy": 5,
            "relatedEntities": "['ALPHA']",
            "jobReference": "7c9438aa-8327-4ecd-a2a7-afb004d0549a",
            "extended": "{'age':34,'years_experience':12}",
            "rowHash": "92c9d779f26cb6fd9cf9f7a2f6fa009629c0b4e891f408395daeefa2ef71f37c"
        }
    ]
}

Delete Fund Manager

Used to delete an existing Fund Manager using the fundManagerId.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/deleteFundManager
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "fundManagerId": 5
}
Property Required Description
fundManagerId TRUE The fund manager id

Fund Manager Picture

Returns a Fund Manager's picture. Note that this is a GET request that requires the Fund Manager code and a token.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/fundmanagerpicture?code={{code}}&token={{token}}
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type As specified in the database

Get Filters

This allows you to list all possible property value options for entity meta properties. Take the example below, it will query all the possible property/tag values for entities with the tags of ccy, citi_code, class_code and distribution_type. It will also further filter down if you supply it with a search clause. Keep in mind, if you have data entitlements enabled, it will filter your results based on your entitlement configuration.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getfilters
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "type": "CLSS",
    "fundList": ["professional_SE"],
    "fundListExclusion": ["UK Advisor"],
    "filterProperties": ["ccy", "citi_code", "class_code", "distribution_type"],
    "search": [
        {
            "property": "ccy",
            "values": ["USD"],
            "matchtype": "MATCH"
        }
    ],
    "translation": {
        "sourceCulture": "it-IT",
        "culture": "en-GB"
    },
    "counts": true
}

An optional translation config can be included which will modify the labels of the returned values when available. sourceCulture corresponds to the culture specified to be the default culture and culture is the requested translation. Any values that don't have a corresponding translation will be returned unmodified.

{
    "type": "CLSS",
    "filterProperties": ["ccy", "citi_code", "class_code", "distribution_type"],
    "translation": {
        "sourceCulture": "it-IT",
        "culture": "en-GB"
    },
    "counts": true
}
Property Required Description
type TRUE Filter on the entity type
filterProperties TRUE The entity properties you wish to have values returned
fundList FALSE Includes the entities in the specified fund lists
fundListExclusion FALSE Excludes the entities in the specified fund lists
translation FALSE An array of facets
search FALSE An array of strings that will be matched against the configuration
counts FALSE Returns the number of records available for the given filter. Defaults to false

The above query will scan all your entities and return a listing of the various meta values for the ccy, citi_code, class_code and distribution_type property.

If a property is not valid document meta then it will be returned with an empty array.

{
    "ccy": [
        {
            "label": "na",
            "value": "GBP",
            "count": 1
        },
        {
            "label": "na",
            "value": ["ZAR", "USD"],
            "count": 2
        }
    ],
    "citi_code": [
        {
            "label": "na",
            "value": "CT124",
            "count": 6
        },
        {
            "label": "na",
            "value": "CT124d323",
            "count": 1
        }
    ],
    "class_code": [],
    "distribution_type": []
}

Get Facets

Facets are a list of entities' meta properties filtered by a searchTerm. Only properties of STRG (string) type are returned. Results are grouped by property key and limited to 10 results per propertyValues.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getfacets
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "entityType": "CLSS",
    "searchTerm": "USD",
    "clientCode": ["KS1234567890"]
}
Property Required Description
entityType TRUE Filter on the entity type
searchTerm TRUE An value of a entity property
clientCode FALSE An array of client codes to limit this facet search to

An example of the results based on the query above.

[
    {
        "property": "Currency",
        "propertyValues": [
            {
                "propertyValue": "USD",
                "property": "Currency",
                "code": "ccy"
            }
        ]
    },
    {
        "property": "Long Name",
        "propertyValues": [
            {
                "propertyValue": "KSYS ALPHA-A-USD-FD",
                "property": "Long Name",
                "code": "long_name"
            },
            {
                "propertyValue": "KSYS ALPHA-B-USD-FD",
                "property": "Long Name",
                "code": "long_name"
            }
        ]
    }
]

Get Transaction Facets

Transaction facets are a list of a transactions' meta properties filtered by a searchTerm. Only properties of STRG (string) type are returned. Results are grouped by property key and limited to 10 results per propertyValues.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getTransactionFacets
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "entityType": "CLSS",
    "clientCode": "KS1234567890",
    "searchTerm": "abc",
    "property": "equity_transactions",
    "ccy": "USD"
}
Property Required Description
entityType TRUE Filter on the entity type
clientCode TRUE The client code to limit this facet search to
searchTerm TRUE A string to match transaction values against
property TRUE The transaction property to limit this facet search to
ccy FALSE The currency to limit this facet search to

An example of the results based on the query above.

[
    {
        "property": "Label",
        "propertyValues": [
            {
                "propertyValue": "Buy of ABC co shares",
                "property": "Label",
                "code": "label"
            }
        ]
    },
    {
        "property": "Transaction Code",
        "propertyValues": [
            {
                "propertyValue": "abc186Xy256",
                "property": "transaction Code",
                "code": "transactionCode"
            }
        ]
    }
]

Search Codes

Returns a list of entity codes you are allowed to see. This is mainly used for UI auto completion. You can filter the results by a search term. Keep in mind if you have data entitlements enabled, you will see a limited number of client codes.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/searchCodes
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "entityType": "CLSS",
    "code": "KS13"
}
Property Required Description
entityType FALSE Optional, filter on the entity type
code FALSE Filter entity codes by a search term

An example of the results based on the query above.

["KS1343908234", "KS1390743943", "KS1393234367", "KS1394743985"]

Search Entity Fund List

Returns a list of entity codes and fund list names you are allowed to see. This is mainly used for UI auto completion. You can filter the results by a search term. Keep in mind if you have data entitlements enabled, you will see a limited number of client codes.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/searchEntityFundlist
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "code": "UK"
}
Property Required Description
code FALSE Filter entity codes by a search term

An example of the results based on the query above.

[
    {
        "code": "UK0943338144",
        "source": "Entity"
    },
    {
        "code": "UK1017297455",
        "source": "Entity"
    },
    {
        "code": "UK Advisor",
        "source": "FundList"
    },
    {
        "code": "UK Individual",
        "source": "FundList"
    },
    {
        "code": "UK Institutional",
        "source": "FundList"
    }
]

Update Saved Search Entity

This endpoint is used to upsert a saved search entity, The key, name and a valid searchEntity request body is required.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/upsertSavedSearchEntity
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON

Notes regarding validating schema: Using placeholder strings for string properties will be handled as is since the validation schema will still function correctly. When dealing with properties of different types, the best result will be to specify the default value and provide a dot-notation string path for the input. The key is still required to map up to the key which is passed when executing the Saved Search Entity

{
    "savedSearchEntityKey": "defaultShareClass",
    "name": "Default Share Class Request",
    "description": "The default share class request used on the apps",
    "body": {
        "type": "CLSS",
        "applyFormats": true,
        "search": [
            {
                "property": "isin",
                "values": ["{isin}"],
                "matchtype": "MATCH"
            }
        ],
        "include": {
            "allocations": {},
            "historicalDatasets": {},
            "statistics": {},
            "commentaries": {},
            "disclaimers": {}
        }
    },
    "inputs": [
        {
            "key": "isin",
            "label": "ISIN",
            "dataType": "STRG",
            "isArray": true
        },
        {
            "key": "applyFormats",
            "label": "Apply Formats",
            "dataType": "BOOL",
            "path": "applyFormats"
        }
    ]
}
Property Required Description
savedSearchEntityKey TRUE The unique key per client
name TRUE The display name
description FALSE A useful description for what is being saved
body TRUE The request body, same as searchEntity
inputs FALSE The mapping of inputs in the request body

Inputs

Property Required Description
key TRUE The key used for mapping a string input to the query param
label FALSE The display name
dataType TRUE Specify the data type of the property (STRG, BOOL, ITGR, DCML)
isArray FALSE Identifies if the property being mapped is an array
path FALSE The mapping of inputs in the request body. This is required when dealing with types other than STRG

Delete Saved Search Entity

Used to delete an existing Saved Search Entity using the savedSearchEntityKey or savedSearchEntityId.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/deleteSavedSearchEntity
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "savedSearchEntitykey": "defaultSavedSearchEntity"
}

or

{
    "savedSearchEntityId": 441
}
Property Required Description
savedSearchEntityKey FALSE The unique key per client
savedSearchEntityId FALSE The unique id

List Saved Search Entity

Returns a list of Saved Search Entities without the respective request bodies.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/listSavedSearchEntities
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type JSON

An example of the results based on the query above.

{
    "savedSearchEntities": [
        {
            "savedSearchEntityId": 441,
            "clientId": 955,
            "name": "Saved Search Entity 1",
            "savedSearchEntityKey": "savedSearchEntity1",
            "description": null,
            "lastModified": "2020-01-28T12:08:23.000Z",
            "lastModifiedBy": 955,
            "created": "2020-01-28T12:08:23.000Z",
            "createdBy": 955
        },
        {
            "savedSearchEntityId": 442,
            "clientId": 955,
            "name": "Saved Search Entity 2",
            "savedSearchEntityKey": "savedSearchEntity2",
            "description": null,
            "lastModified": "2020-01-28T12:08:23.000Z",
            "lastModifiedBy": 955,
            "created": "2020-01-28T12:08:23.000Z",
            "createdBy": 955
        }
    ]
}

Get Saved Search Entity

Returns a single Saved Search Entity with the searchEntity body.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/getSavedSearchEntity/{savedSearchEntityKey}
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type JSON

An example of the results based on the query above.

{
    "savedSearchEntityId": 454,
    "clientId": 961,
    "savedSearchEntityKey": "defaultSavedSearchEntity",
    "name": "Default Saved Search Entity",
    "description": null,
    "body": {
        "type": "CLSS",
        "applyFormats": true,
        "search": [
            {
                "property": "isin",
                "values": ["{isin}"],
                "matchtype": "MATCH"
            }
        ],
        "include": {
            "allocations": {},
            "historicalDatasets": {},
            "statistics": {},
            "commentaries": {},
            "disclaimers": {}
        }
    },
    "inputs": [
        {
            "key": "isin",
            "label": "ISIN",
            "dataType": "STRG",
            "isArray": true
        }
    ],
    "lastModified": "2020-01-28T12:27:36.000Z",
    "lastModifiedBy": 961,
    "created": "2020-01-28T12:27:36.000Z",
    "createdBy": 961
}

Execute Saved Search Entity

Used to execute the Saved Search Entity and return the saved search entity result set.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/savedSearchEntity/{savedSearchEntityKey}?{inputs}
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type JSON

An example of the results based on the query above.

{
    "entityId": 10962,
    "parentEntityId": null,
    "type": "FUND",
    "clientId": 1151,
    "clientCode": "BOND",
    "lastModified": "2020-01-30T10:13:58.000Z",
    "lastModifiedBy": 1151,
    "created": "2020-01-30T10:13:58.000Z",
    "createdBy": 1151,
    "properties_pub": {
        "fund_code": {
            "value": "BOND"
        },
        "fund_name": {
            "value": "Kurtosys Bond Fund"
        }
    },
    "properties_draft": null,
    "userProperties_pub": null,
    "userProperties_draft": null,
    "jobReference": "26afac34-8590-48c6-bcf6-3b214066e724",
    "rowHash": "4d00915d9cec91c5e1134eb2c51cd5ae0d50f060d254b7512b20d836af9bda9f"
}

Validate Saved Search Entity

Used to validate a saved search entity with the input query parameters. The returned result will be the parsed saved search entity body that can be requested against the searchEntity API endpoint.

Parameter Value
End Point https://<US: api-us.kurtosys.app OR UK: api-uk.kurtosys.app>/fund/validateSavedSearchEntity/{savedSearchEntityKey}?{inputs}
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method GET
Return Type JSON

An example of the results based on the query above.

{
    "type": "CLSS",
    "applyFormats": true,
    "search": [
        {
            "property": "isin",
            "values": ["KS1319692791"],
            "matchtype": "MATCH"
        }
    ],
    "include": {
        "allocations": {},
        "historicalDatasets": {},
        "statistics": {},
        "commentaries": {},
        "disclaimers": {}
    }
}

Get Transaction Filters

This would allow you to list all possible value options for transactions related to an entity. Take the example below, it will query all the possible property/tag values for transactions with the extended properties of label, number_of_shares and the dateTime meta values. It will also further filter down if you supply it with a search clause or textSearch clause. Keep in mind, if you have data entitlements enabled, it will filter your results based on your entitlement configuration.

Parameter Value
End Point https://api.fundpress.io/fund/getTransactionFilters
Headers X-KSYS-TOKEN
Content Type application/json
HTTP Method POST
Return Type JSON
{
    "type":"CLSS",
    "clientCode": "LU1234567890",
    "code":"transactions",
    "extendedProperties":["label", "number_of_shares"],
    "metaProperties": ["dateTime"],
    "translation": {
        "sourceCulture": "en-GB",
        "culture": "fr-FR"
    }
}

An optional translation config can be included which will modify the label's of the returned values when available. sourceCulture corresponds to the culture specified to be the default culture and culture is the requested translation. Any values that don't have a corresponding translation will be returned unmodified.

Property Required Description
type TRUE Filter on the entity type
clientCode TRUE The entity client code to find the filters for
code TRUE The transaction property code
extendedProperties FALSE The extended properties you wish to have values returned
metaProperties FALSE The meta properties you wish to have values returned: transactionCode, dateTime
translation FALSE An object defining the source and target cultures
search FALSE An array of objects that filter down the transactions, same as TransactionIncludes search
textSearch FALSE An objects to filter down the transactions by searching on text, same as TransactionIncludes textSearch
{
    "type": "CLSS",
    "clientCode": "LU1234567890",
    "code": "transactions",
    "messages": [],
    "entityId": 1,
    "metaProperties": {
        "dateTime": [
            {
                "label": "2021-02-04T10:55:43.000Z",
                "value": "2021-02-04T10:55:43.000Z"
            },
            {
                "label": "2002-12-31T09:16:47.000Z",
                "value": "2002-12-31T09:16:47.000Z"
            },
            {
                "label": "2002-12-31T09:15:47.000Z",
                "value": "2002-12-31T09:15:47.000Z"
            }
        ]
    },
    "extendedProperties": {
        "number_of_shares": [
            {
                "label": 500000,
                "value": 500000
            },
            {
                "label": 200000,
                "value": 200000
            },
            {
                "label": 800000,
                "value": 800000
            }
        ],
        "label": [
            {
                "label": "FR - Buy of XYZ co shares",
                "value": "Buy of XYZ co shares"
            },
            {
                "label": "Buy of ABC co shares",
                "value": "Buy of ABC co shares"
            }
        ]
    }
}