Limits
Data model
Limit Type
The limitType field describes how a limit is calculated. It is one of:
-
limit-group
No constraint is applied. The limit only serves as a grouping node, for grouping other limits. -
proportional
The limit is defined as a percentage of its parent limit (only meaningful whenparentLimitIdis set). Percentages are fractional values, e.g.0.10= 10%. -
absolute
The limit is a fixed amount in the specifiedccyCodeand represents the total aggregated value of all holdings matched by the filter that must stay within this threshold.
Proportional limit payload
{
"type": "proportional",
"values": {
"min": 0.5,
"max": 1.0
}
}
min(number, optional) – minimum relative share, as a fraction.max(number, optional) – maximum relative share, as a fraction.
Absolute limit payload
{
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
}
min(number, optional) – minimum absolute value, inccyCode.max(number, optional) – maximum absolute value, inccyCode.
Limit Filter
A Limit Filter defines the scope of holdings to which a limit applies. The structure is recursive, allowing for nested and complex filtering logic.
There are two main types of filters:
- Logical Filters (
and,or): These filters combine other filters. - Condition Filter (
condition): This filter applies a specific condition.
Filters
A limit filter is an object with one of the following structures:
And / Or Filters
This is used for logical grouping of other filters.
type(string, required): The type of logical filter, eitherandoror.filters(array, required): An array of filters to be combined.
Condition Filter
This is used to define a specific matching rule.
type(string, required): Must becondition.condition(object, required): a single condition. Takes a condition as argument.
Limit Condition
A Limit Condition is an object that specifies a single rule. It must contain a type field and a corresponding value field.
type(string, required): The type ofconditionto apply.- Value Field (object, required): A field whose name depends on the
type
The possible limit condition types and their corresponding value fields are:
country-code-is/country-code-is-notcountry-code(string, required): ISO 3166-1 alpha-2 code.
asset-class-is/asset-class-is-notasset-class-id(string, required): asset class identifier.
detailed-asset-class-is/detailed-asset-class-is-notdetailed-asset-class-id(string, required): detailed asset class identifier.
currency-code-is/currency-code-is-notcurrency-code(string, required): ISO 4217 code for the currency.
security-identifier-is/security-identifier-is-notsecurity-identifier(string, required): The security identifier.
reporting-entity-is/reporting-entity-is-notreporting-entity-id(string, required): The reporting entity identifier.
portfolio-is/portfolio-is-notportfolio-id(string, required): The reporting portfolio identifier.
Example JSON:
{
"type": "or",
"filters": [
{
"type": "condition",
"condition": {
"type": "country-code-is",
"country-code": "DK"
}
},
{
"type": "condition",
"condition": {
"type": "currency-is",
"currency-code": "DKK"
}
}
]
}
Limit
The representation of a limit.
Fields:
name(string): Human-readable name of the limit.ccyCode(string): ISO 4217 code for the currency used to express this limit.startDate(string): ISO 8601 representation of the start date of the limit.limitFilter(object): The filter that defines which holdings the limit applies to. See Limit Filter.limitType(object): The type and definition of the limit. See Limit Type.
Relationships
client(string): Identifier for the client that owns the limit.parentLimit(string, optional): Identifier of an existing parent limit, if any.
Limit Status
date(string): ISO 8601 representation of the date of the limit status.limitType(object): The type and definition of the limit. See Limit Type.isBreached(boolean, optional): Indicates whether the limit has been breached. A limit has been breached if thecurrentValueis below theminvalue, or above themaxvalue, set in thelimitTypecurrentValue(number): The current value of the limit. This value will change depending on thelimitType.- For
proportional, the value will be the percentage of the total holdings that are subject to the limit. - For
absolute, the value will be the absolute amount (number) of holdings that are subject to the limit. - For
limit-group, the value will benull.
- For
Endpoints
GET /limits/:id
Fetch a single limit.
Request
GET /api/v2/limits/11a251b1-777a-452f-a4c6-088fdc2d2e52 HTTP/1.1
Accept: application/vnd.api+json
Authorization: Bearer <access token>
Response: 200 OK
{
"data": {
"id": "11a251b1-777a-452f-a4c6-088fdc2d2e52",
"type": "limit",
"attributes": {
"name": "Equity DK limit",
"ccyCode": "DKK",
"startDate": "2025-01-01",
"limitFilter": {
"type": "and",
"filters": [
{
"type": "condition",
"condition": {
"type": "country-code-is",
"country-code": "DK"
}
},
{
"type": "condition",
"condition": {
"type": "currency-code-is",
"currency-code": "DKK"
}
}
]
},
"limitType": {
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
},
},
"relationships": {
"client" : {
"data": {
"type": "client",
"id": "679c73d1722c1995a0414b10"
}
},
"parentLimit": {
"data": {
"type": "limit",
"id": "f1c1b67d-f67a-4ab0-9554-1fb329adaa30"
}
}
}
}
}
POST /limits
Create a new limit.
Request
POST /api/v2/limits HTTP/1.1
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
Authorization: Bearer <access token>
{
"data": {
"type": "limit",
"attributes": {
"name": "Equity DK limit",
"ccyCode": "DKK",
"startDate": "2025-01-01",
"limitFilter": {
"type": "and",
"filters": [
{
"type": "condition",
"condition": {
"type": "country-code-is",
"country-code": "DK"
}
},
{
"type": "condition",
"condition": {
"type": "currency-code-is",
"currency-code": "DKK"
}
}
]
},
"limitType": {
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
},
},
"relationships": {
"client": {
"data": {
"type": "client",
"id": "679c73d1722c1995a0414b10"
}
},
"parentLimit": {
"data": {
"type": "limit",
"id": "f1c1b67d-f67a-4ab0-9554-1fb329adaa30"
}
}
}
}
}
Response: 201 Created
{
"data": {
"id": "11a251b1-777a-452f-a4c6-088fdc2d2e52",
"type": "limit",
"attributes": {
"name": "Equity DK limit",
"ccyCode": "DKK",
"startDate": "2025-01-01",
"limitFilter": {
"type": "and",
"filters": [
{
"type": "condition",
"condition": {
"type": "country-code-is",
"country-code": "DK"
}
},
{
"type": "condition",
"condition": {
"type": "currency-code-is",
"currency-code": "DKK"
}
}
]
},
"limitType": {
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
},
},
"relationships": {
"client": {
"data": {
"type": "client",
"id": "679c73d1722c1995a0414b10"
}
},
"parentLimit": {
"data": {
"type": "limit",
"id": "f1c1b67d-f67a-4ab0-9554-1fb329adaa30"
}
}
}
}
}
GET /clients/:id/limits
Fetch all limits.
Request
GET /api/v2/clients/679c73d1722c1995a0414b10/limits HTTP/1.1
Accept: application/vnd.api+json
Authorization: Bearer <access token>
Response: 200 OK
{
"data": [
{
"id": "11a251b1-777a-452f-a4c6-088fdc2d2e52",
"type": "limit",
"attributes": {
"name": "Equity DK limit",
"ccyCode": "DKK",
"startDate": "2025-01-01",
"limitFilter": {
"type": "and",
"filters": [
{
"type": "condition",
"condition": {
"type": "country-code-is",
"country-code": "DK"
}
},
{
"type": "condition",
"condition": {
"type": "currency-code-is",
"currency-code": "DKK"
}
}
]
},
"limitType": {
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
},
},
"relationships": {
"client": {
"data": {
"type": "client",
"id": "679c73d1722c1995a0414b10"
}
},
"parentLimit": {
"data": {
"type": "limit",
"id": "f1c1b67d-f67a-4ab0-9554-1fb329adaa30"
}
}
}
}
]
}
DELETE /limits/:id
Delete a limit by its ID.
Request
DELETE /api/v2/limits/11a251b1-777a-452f-a4c6-088fdc2d2e52 HTTP/1.1
Accept: application/vnd.api+json
Authorization: Bearer <access token>
Response: 204 No Content
GET /limits/:id/status
Fetch the status for a single limit.
Parameters
date(query, required): ISO 8601 representation of the date to fetch the status for.
Request
GET /api/v2/limits/11a251b1-777a-452f-a4c6-088fdc2d2e52/status?date=2025-01-01 HTTP/1.1
Accept: application/vnd.api+json
Authorization: Bearer <access token>
Response: 200 OK
{
"data": {
"id": "11a251b1-777a-452f-a4c6-088fdc2d2e52",
"type": "limit-status",
"attributes": {
"date": "2025-01-01",
"limitType": {
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
},
"isBreached": true,
"currentValue": 10.0
}
}
}
GET /clients/:id/limits-status
Fetch the status for all limits.
Parameters
date(query, required): ISO 8601 representation of the date to fetch the status for.
Request
GET /api/v2/clients/679c73d1722c1995a0414b10/limits-status?date=2025-01-01 HTTP/1.1
Accept: application/vnd.api+json
Authorization: Bearer <access token>
Response: 200 OK
{
"data": [
{
"id": "11a251b1-777a-452f-a4c6-088fdc2d2e52",
"type": "limit-status",
"attributes": {
"date": "2025-01-01",
"limitType": {
"type": "absolute",
"values": {
"min": 100000,
"max": null
}
},
"isBreached": true,
"currentValue": 10.0
}
}
]
}