Limits
Limits encode a client's investment-policy statement — rules like "no more than 30% in equities," "minimum 10% cash on the family trust," "never hold more than 5% of any single private fund." Aleta evaluates every limit against the current reporting-entity state on every data update and exposes the current value, the threshold, and whether the limit is breached.
Limit shape
JSON:API resource type: limit. Each limit pairs a bound (a min, a max, or both) with a filter that selects which holdings the bound applies to. Bounds are either proportional (a fraction of total reporting-entity AUM) or absolute (a currency amount).
- Name
- id
- Type
- string
- Description
Stable identifier.
- Name
- kind
- Type
- enum
- Description
proportionalorabsolute. Determines whetherminandmaxare interpreted as fractions or as currency amounts.
- Name
- min
- Type
- decimal | null
- Description
Lower bound. Optional.
- Name
- max
- Type
- decimal | null
- Description
Upper bound. Optional. At least one of
minormaxmust be set.
- Name
- filter
- Type
- filter expression
- Description
The predicate selecting which holdings count toward the bound. See Filters below.
Relationships
- Name
- client
- Type
- client
- Description
The client this limit belongs to.
Filters
Filters are recursive. A filter is either a single condition (a leaf) or a composition of inner filters joined by and / or.
- Name
- ConditionFilter
- Type
- leaf
- Description
A single predicate — instrument class equals X, country equals Y, custom tag contains Z.
- Name
- AndFilter
- Type
- composite
- Description
Matches holdings that satisfy every inner filter. Use for intersections: "equities AND emerging markets."
- Name
- OrFilter
- Type
- composite
- Description
Matches holdings that satisfy at least one inner filter. Use for unions: "hedge funds OR private equity."
The three forms compose freely, which is what lets the model express IPS rules that would otherwise need a rule engine.
List limits
Returns every limit configured on the client, with their filter expressions expanded. The response is compact enough to fetch eagerly when loading a limits editor UI.
Request
curl https://platform.aleta.io/api/v2/clients/{client_id}/limits \
-H "Authorization: Bearer {access_token}"
Retrieve a limit
Single-limit lookup — definition only, without compliance evaluation. Use the status endpoints below to retrieve current breach state.
Request
curl https://platform.aleta.io/api/v2/limits/{id} \
-H "Authorization: Bearer {access_token}"
Create a limit
Creates a new limit. Pick proportional or absolute via kind; the filter expression can be a single condition or a deeply nested and/or composition.
Request
curl -X POST https://platform.aleta.io/api/v2/clients/{client_id}/limits \
-H "Authorization: Bearer {access_token}" \
-H "Content-Type: application/vnd.api+json" \
-d '{
"data": {
"type": "limit",
"attributes": {
"kind": "proportional",
"max": 0.30,
"filter": {
"kind": "condition",
"field": "instrumentClass.path",
"operator": "starts_with",
"value": ["equity"]
}
}
}
}'
Delete a limit
Removes the limit. No effect on holdings or transactions; only the compliance evaluation stops.
Request
curl -X DELETE https://platform.aleta.io/api/v2/limits/{id} \
-H "Authorization: Bearer {access_token}"
Status of a single limit
Returns the current evaluated value of the limit and the distance to its threshold. Use to render breach indicators per limit.
Request
curl https://platform.aleta.io/api/v2/limits/{id}/status \
-H "Authorization: Bearer {access_token}"
Status of every limit
Batch version — walks every limit configured across the client and returns current compliance in one call. Prefer this over fanning out per-limit requests in a dashboard.
Request
curl https://platform.aleta.io/api/v2/clients/{client_id}/limits-status \
-H "Authorization: Bearer {access_token}"
Related
- Reporting entities — the scope a limit is evaluated against.
- Webhooks — the delivery channel for
calculated_data.createdevents that signal a fresh compliance evaluation is available.