View as Markdown

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

    proportional or absolute. Determines whether min and max are 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 min or max must 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.


GET/api/v2/clients/{id}/limits

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

GET/api/v2/clients/{id}/limits
curl https://platform.aleta.io/api/v2/clients/{client_id}/limits \
  -H "Authorization: Bearer {access_token}"

GET/api/v2/limits/{id}

Retrieve a limit

Single-limit lookup — definition only, without compliance evaluation. Use the status endpoints below to retrieve current breach state.

Request

GET/api/v2/limits/{id}
curl https://platform.aleta.io/api/v2/limits/{id} \
  -H "Authorization: Bearer {access_token}"

POST/api/v2/clients/{id}/limits

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

POST/api/v2/clients/{id}/limits
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/api/v2/limits/{id}

Delete a limit

Removes the limit. No effect on holdings or transactions; only the compliance evaluation stops.

Request

DELETE/api/v2/limits/{id}
curl -X DELETE https://platform.aleta.io/api/v2/limits/{id} \
  -H "Authorization: Bearer {access_token}"

GET/api/v2/limits/{id}/status

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

GET/api/v2/limits/{id}/status
curl https://platform.aleta.io/api/v2/limits/{id}/status \
  -H "Authorization: Bearer {access_token}"

GET/api/v2/clients/{id}/limits-status

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

GET/api/v2/clients/{id}/limits-status
curl https://platform.aleta.io/api/v2/clients/{client_id}/limits-status \
  -H "Authorization: Bearer {access_token}"
  • Reporting entities — the scope a limit is evaluated against.
  • Webhooks — the delivery channel for calculated_data.created events that signal a fresh compliance evaluation is available.