Skip to main content
Version: 2026-01-07.1

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 when parentLimitId is set). Percentages are fractional values, e.g. 0.10 = 10%.

  • absolute
    The limit is a fixed amount in the specified ccyCode and 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, in ccyCode.
  • max (number, optional) – maximum absolute value, in ccyCode.

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, either and or or.
  • 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 be condition.
  • 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 of condition to 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-not
    • country-code (string, required): ISO 3166-1 alpha-2 code.
  • asset-class-is / asset-class-is-not
    • asset-class-id (string, required): asset class identifier.
  • detailed-asset-class-is / detailed-asset-class-is-not
    • detailed-asset-class-id (string, required): detailed asset class identifier.
  • currency-code-is / currency-code-is-not
    • currency-code (string, required): ISO 4217 code for the currency.
  • security-identifier-is / security-identifier-is-not
    • security-identifier (string, required): The security identifier.
  • reporting-entity-is / reporting-entity-is-not
    • reporting-entity-id (string, required): The reporting entity identifier.
  • portfolio-is / portfolio-is-not
    • portfolio-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 the currentValue is below the min value, or above the max value, set in the limitType
  • currentValue (number): The current value of the limit. This value will change depending on the limitType.
    • 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 be null.

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
}
}
]
}