Investment managers
An investment manager is a firm that manages assets for your clients, internal or external. Custody accounts and cash accounts name the investment manager that runs them. The register has two parts: Aleta's shared list of investment managers with a public identifier (an LEI or a CRD number), owner: aleta, and your own investment managers on top, owner: tenant. Investment managers have no link to a client, so everyone with read access sees all of them. Reads need structure:read or access:read; writes need structure:write or access:write. Every write takes ?dry_run=true and an optional Idempotency-Key header, and a write that changes an investment manager is logged in the change history.
You write your own investment managers only. Aleta's shared list is changed by Aleta. The investment managers copied from the legacy platform count as Aleta's (owner: aleta) until they are sorted into the shared list or yours. While your tenant has not moved from the legacy platform, every investment manager copied from it is read-only: while it is owner: aleta a change is 403 aleta_owned, otherwise 409 legacy_managed. The 403 comes first.
Data model
idstringStable identifier for the investment manager. A UUID.
namestringThe investment manager's name.
external_reference_idstring or nullYour own reference for the investment manager.
leistring or nullThe Legal Entity Identifier (ISO 17442): 18 upper-case letters or digits, then two check digits.
crdstring or nullThe CRD number, digits only.
typestring or nullinternal(your firm's own) orexternal.originstringlegacy(copied from the legacy platform) orv1.ownerstringaleta(Aleta's shared list, or a copy from the legacy platform not yet sorted into yours) ortenant(yours).created_attimestampRFC 3339, UTC, whole seconds.
List investment managers
Returns Aleta's shared list and your investment managers together, ordered by name, then id, one page at a time. Names sort by their bytes: digits before upper case, upper case before lower case, letters outside A-Z last. An unknown query parameter is a 400.
Query parameters
limitintegerPage size. Default 100; a value below 1 or above 1000 is clamped to that range.
cursorstringThe
next_cursorof the previous page;next_cursorisnullon the last page. A malformed cursor is a400bad_request.
curl https://api.aleta.ai/v1/investment-managers \
-H "Authorization: Bearer {access_token}"
{
"data": [
{
"id": "4f6a2c1e-8b3d-4e5f-9a7b-1c2d3e4f5a6b",
"name": "Nordic Asset Management",
"external_reference_id": "mgr-1",
"lei": "529900T8BM49AURSDO55",
"crd": null,
"type": "external",
"origin": "v1",
"owner": "tenant",
"created_at": "2026-10-17T06:12:00Z"
}
],
"next_cursor": null,
"limit": 100
}
Retrieve an investment manager
Returns one investment manager, yours or from Aleta's shared list, with the number of custody accounts and cash accounts that name it and are open today, counted over the ones you can see. An unknown id, or one that is not a UUID, is a 404 not_found.
Extra fields
custody_account_countintegerOpen custody accounts you can see that name this investment manager.
cash_account_countintegerOpen cash accounts you can see that name this investment manager.
curl https://api.aleta.ai/v1/investment-managers/4f6a2c1e-8b3d-4e5f-9a7b-1c2d3e4f5a6b \
-H "Authorization: Bearer {access_token}"
{
"id": "4f6a2c1e-8b3d-4e5f-9a7b-1c2d3e4f5a6b",
"name": "Nordic Asset Management",
"external_reference_id": "mgr-1",
"lei": "529900T8BM49AURSDO55",
"crd": null,
"type": "external",
"origin": "v1",
"owner": "tenant",
"created_at": "2026-10-17T06:12:00Z",
"custody_account_count": 3,
"cash_account_count": 2
}
Create an investment manager
Creates one of your own investment managers (owner: tenant, origin: v1) and returns 201 with it, without custody_account_count and cash_account_count. name, lei, crd and external_reference_id are trimmed; a blank lei, crd or external_reference_id is left out.
The answers: 400 bad_request for a missing or blank name, an lei that is not 18 upper-case letters or digits followed by valid check digits, a crd with anything but digits, an unknown type or an unknown field. 409 already_exists for an lei or crd that Aleta's shared list already has, naming that investment manager, with next_action ask_aleta on GET /v1/investment-managers/{id}: use it instead of a copy. 409 already_exists for an lei, crd or external_reference_id an investment manager in your tenant already has, with next_action update on PATCH /v1/investment-managers/{id} of that investment manager.
Body
namestringRequiredThe investment manager's name.
typestring or nullinternalorexternal.leistring or nullThe investment manager's LEI.
crdstring or nullThe investment manager's CRD number.
external_reference_idstring or nullYour own reference for the investment manager.
curl -X POST https://api.aleta.ai/v1/investment-managers \
-H "Authorization: Bearer {access_token}" \
-H "Idempotency-Key: {uuid}" \
-H "Content-Type: application/json" \
-d '{"name": "Nordic Asset Management", "type": "external", "lei": "529900T8BM49AURSDO55", "external_reference_id": "mgr-1"}'
{
"id": "4f6a2c1e-8b3d-4e5f-9a7b-1c2d3e4f5a6b",
"name": "Nordic Asset Management",
"external_reference_id": "mgr-1",
"lei": "529900T8BM49AURSDO55",
"crd": null,
"type": "external",
"origin": "v1",
"owner": "tenant",
"created_at": "2026-10-17T06:12:00Z"
}
Update an investment manager
Renames one of your investment managers or sets its type, and returns 200 with it as the GET shows it, with custody_account_count and cash_account_count. name is trimmed; type: null clears the type. lei, crd and external_reference_id are set when the investment manager is created and cannot be changed.
The answers: 400 bad_request for a body without name or type, a blank name, an unknown type or an unknown field. 404 not_found for an unknown id. 403 forbidden for an investment manager on Aleta's shared list. For one copied from the legacy platform: 403 aleta_owned while it is owner: aleta, before and after your move; once it is yours, 409 legacy_managed while your tenant has not moved from the legacy platform, and a normal update after.
Body
namestringThe investment manager's new name.
typestring or nullinternal,externalornull.
curl -X PATCH https://api.aleta.ai/v1/investment-managers/4f6a2c1e-8b3d-4e5f-9a7b-1c2d3e4f5a6b \
-H "Authorization: Bearer {access_token}" \
-H "Idempotency-Key: {uuid}" \
-H "Content-Type: application/json" \
-d '{"name": "Nordic AM", "type": "internal"}'
{
"id": "4f6a2c1e-8b3d-4e5f-9a7b-1c2d3e4f5a6b",
"name": "Nordic AM",
"external_reference_id": "mgr-1",
"lei": "529900T8BM49AURSDO55",
"crd": null,
"type": "internal",
"origin": "v1",
"owner": "tenant",
"created_at": "2026-10-17T06:12:00Z",
"custody_account_count": 3,
"cash_account_count": 2
}