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 |
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
}
"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.
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).
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"
}]
"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.
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.
The clientCode
property will limit the search to only the entities with the clientCode
s provided.
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": {
"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"]
}
}
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" }
}
}
}
]
}
}
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" }
}
}
}
]
}
}
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 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
}
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.
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).
"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.
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
}
"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.
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.
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) |
Returns a Fund Manager. Note that this is a
GET
request that requires the Fund Manager'sfundManagerId
.
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"
}
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"
}
]
}
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 |
Returns a Fund Manager's picture. Note that this is a
GET
request that requires the Fund Managercode
and atoken
.
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 |
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 ofccy
,citi_code
,class_code
anddistribution_type
. It will also further filter down if you supply it with asearch
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 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.
{
"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": []
}
Facets are a list of entities' meta properties filtered by a
searchTerm
. Only properties ofSTRG
(string) type are returned. Results are grouped by propertykey
and limited to 10 results perpropertyValues
.
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"
}
]
}
]
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"
}
]
}
]
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"]
Returns a list of entity
codes
andfund 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"
}
]
This endpoint is used to upsert a saved search entity, The
key
,name
and a validsearchEntity
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 |
Used to delete an existing Saved Search Entity using the
savedSearchEntityKey
orsavedSearchEntityId
.
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 |
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
}
]
}
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
}
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"
}
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": {}
}
}
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 thedateTime
meta values. It will also further filter down if you supply it with asearch
clause ortextSearch
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"
}
]
}
}