Limits
Limits encode a client's investment-policy statement. They're rules like "no more than 30% in equities," "minimum 10% in cash across the family trust's reporting entity," "never hold more than 5% of a single private fund." Aleta evaluates every limit against the current reporting entity state on every data update, and surfaces breaches (and near-misses) through the dashboard and the webhook stream.
Types of limit
A limit is either proportional (percentage of AUM) or absolute (a currency amount). Most policy statements are expressed in proportions; absolute limits are useful for hard currency caps on single-position exposure.
- Name
Proportional- Type
- percentage
- Description
Bounded by a min, a max, or both, expressed as a fraction of the reporting entity's total market value.
- Name
Absolute- Type
- currency amount
- Description
Bounded by a cash number in the reporting entity's reference currency. Same min / max semantics.
Filters — what the limit applies to
The interesting bit of the limits model is the filter expression. Filters can target any subset of holdings — a single instrument, a class, a geography, a custom tag — and can be composed with and / or operators to express complex IPS rules.
- Name
ConditionFilter- Type
- leaf
- Description
A single predicate: instrument class equals X, issuer country equals Y, custom tag contains Z. The building block.
- 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 types compose freely, which is what lets the model express IPS rules that would otherwise require 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://api.aleta.io/v2/clients/{client_id}/limits \
-H "Authorization: Bearer {token}"
Create a limit
Creates a new limit. Pick proportional or absolute via the kind field; the filter expression can be a single condition or a deeply nested and/or composition.
Request
curl -X POST https://api.aleta.io/v2/limits \
-H "Authorization: Bearer {token}" \
-H "Content-Type: application/json" \
-d '{
"client_id": "...",
"kind": "proportional",
"max_pct": 0.30,
"filter": {
"kind": "condition",
"field": "instrument_class.path",
"operator": "starts_with",
"value": ["equity"]
}
}'
Status of a single limit
Returns the current value and the distance to the threshold — headroom in either units or a percentage depending on whether the limit is proportional or absolute.
Request
curl https://api.aleta.io/v2/limits/{id}/status \
-H "Authorization: Bearer {token}"
Status of every limit
Batch version — walks every limit configured across the client's reporting entities and returns current compliance in one call. Prefer this over fanning out per-limit requests in a dashboard.
Request
curl https://api.aleta.io/v2/clients/{client_id}/limits-status \
-H "Authorization: Bearer {token}"
Related
- Reporting entities — the scope a limit is evaluated against.
- Webhooks — subscribe to limit breach events.