View as Markdown

Reconciliation settings

How a cash account, a custody account (optionally one asset in it) or a custodian is reconciled: how often a figure must agree, whether a day without a calculated figure may pass, and, for a custodian, how its files are summed and how late they may arrive. A reconciliation break is computed with these settings; a subject without a setting is reconciled daily and does not allow an empty calculated figure. Reads need custody:read, writes custody:write. Every write takes ?dry_run=true and an Idempotency-Key header and is logged in the change history.

Settings of a tenant that has not moved to v1 are kept by the legacy platform: they are shown here (origin: legacy) and are read-only, and a new setting is refused with 409 legacy_managed until the move.

Data model

idstring

A UUID.

entity_kindstring

cash_account, custody_account or custodian.

entity_idstring

The cash account's, custody account's or custodian's id.

asset_idstring or null

Custody account settings only: the asset the setting overrides the custody account's own setting for.

reconciliation_frequencystring

daily, weekly, monthly or quarterly. Only a daily setting compares the custodian's and the calculated figure against the tolerance. With another frequency a day passes when it has a calculated figure, or when the custodian's figure is zero.

allow_empty_calculated_pointboolean

With a frequency other than daily: a day with the custodian's figure but no calculated figure passes too. A daily setting always needs both figures to agree.

sum_balances, sum_holdingsboolean or null

Custodian settings only (null on the other kinds): the custodian's points are summed per account or holding.

custody_account_data_delay_days, cash_account_data_delay_daysinteger or null

Custodian settings only (null on the other kinds): banking days the custodian's files may be late.

use_latest_custodian_pointboolean or null

Custodian settings only (null on the other kinds): a contract without a custodian figure on a day takes the newest one before it. Without a custodian setting this is on.

auto_reconcile_before_data_deliveryboolean or null

Custodian settings only (null on the other kinds).

tolerancesobject

The platform's tolerances, read-only: amount 0.01 and jpy_amount 0.5. A figure agrees when the difference is below the tolerance.

ownerstring

aleta for a custodian setting (only Aleta changes it), tenant for a cash or custody account's.

created_at, updated_attimestamp

RFC 3339, UTC, microseconds.

archived_at, archived_by, archive_reasontimestamp, string, string or null

Set once a DELETE archived the setting: when, the id of the user who archived it, and the reason sent with it. All null while the setting is active.

originstring

legacy or v1.


GET/v1/reconciliation-settings

List reconciliation settings

Returns the settings you can see, oldest first (created_at, then id), as a cursor list: the settings of the cash and custody accounts you have access to, and every custodian setting. An unknown parameter, an unknown entity_kind, an asset_id that is not a UUID or an invalid cursor is a 400.

Query parameters

entity_kindstring

cash_account, custody_account or custodian.

entity_idstring

One entity's settings.

asset_idstring

The per-asset overrides for this asset.

include_archivedboolean

Also archived settings. Default false.

cursor, limitstring, integer

The page: limit defaults to 100 and is kept between 1 and 1000.

Request
GET/v1/reconciliation-settings
curl -G https://api.aleta.ai/v1/reconciliation-settings \
  -H "Authorization: Bearer {access_token}" \
  -d entity_kind=cash_account
Response
{
  "data": [
    {
      "id": "019f95f0-2d40-7b58-8f6e-9a3c1d7e5b02",
      "entity_kind": "cash_account",
      "entity_id": "019dfeb0-0511-77a7-a8be-a911ab988a0a",
      "asset_id": null,
      "reconciliation_frequency": "weekly",
      "allow_empty_calculated_point": false,
      "sum_balances": null,
      "sum_holdings": null,
      "custody_account_data_delay_days": null,
      "cash_account_data_delay_days": null,
      "use_latest_custodian_point": null,
      "auto_reconcile_before_data_delivery": null,
      "tolerances": { "amount": "0.01", "jpy_amount": "0.5" },
      "owner": "tenant",
      "created_at": "2026-10-17T06:12:00.000000Z",
      "updated_at": "2026-10-17T06:12:00.000000Z",
      "archived_at": null,
      "archived_by": null,
      "archive_reason": null,
      "origin": "v1"
    }
  ],
  "next_cursor": null,
  "limit": 100
}

GET/v1/reconciliation-settings/{id}

Retrieve a reconciliation setting

Returns one setting, an archived one too; 200 with the setting. An unknown id, one you cannot see, or one that is not a UUID is a 404.

Request
GET/v1/reconciliation-settings/{id}
curl https://api.aleta.ai/v1/reconciliation-settings/019f95f0-2d40-7b58-8f6e-9a3c1d7e5b02 \
  -H "Authorization: Bearer {access_token}"

POST/v1/reconciliation-settings

Create a reconciliation setting

Creates the setting of one entity (or one asset in a custody account); 201 with the setting. Takes dry_run and Idempotency-Key.

The checks run in this order: an invalid body is a 400 (an unknown field, an unknown entity_kind or frequency, an entity_id that is not a UUID, asset_id on a setting that is not a custody account's, a custodian field on another kind, a negative delay); a custodian setting by anyone but Aleta a 403; an entity or asset you cannot see a 404; a cash or custody account setting without a grant on the whole account a 403; before your tenant has moved, 409 legacy_managed. A second setting for the same entity (and asset) is a 409 already_exists whose next_action is PATCH /v1/reconciliation-settings/{id}, with field: status when the existing one is archived.

Body parameters

entity_kind, entity_idstring

Required. entity_id is a UUID.

asset_idstring

Custody account settings only: a UUID.

reconciliation_frequencystring

Default daily.

allow_empty_calculated_pointboolean

Default false.

sum_balances, sum_holdings, use_latest_custodian_point, auto_reconcile_before_data_deliveryboolean

Custodian settings only. Default false.

custody_account_data_delay_days, cash_account_data_delay_daysinteger

Custodian settings only: 0 or more. Default 0.

Request
POST/v1/reconciliation-settings
curl -X POST https://api.aleta.ai/v1/reconciliation-settings \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{"entity_kind": "cash_account", "entity_id": "019dfeb0-0511-77a7-a8be-a911ab988a0a", "reconciliation_frequency": "weekly"}'

PATCH/v1/reconciliation-settings/{id}

Update a reconciliation setting

Changes the fields you send; 200 with the setting. Takes dry_run and Idempotency-Key. The checks run in this order: an unknown field or frequency is a 400, an unknown or hidden setting a 404, a field the setting's kind does not take or a negative delay a 400, a caller who may not write the entity 403 (a custodian setting: anyone but Aleta), a legacy setting before the move 409 legacy_managed, and status: archived a 400.

Body parameters

reconciliation_frequencystring

daily, weekly, monthly or quarterly.

allow_empty_calculated_pointboolean

Optional.

sum_balances, sum_holdings, use_latest_custodian_point, auto_reconcile_before_data_deliveryboolean

Custodian settings only.

custody_account_data_delay_days, cash_account_data_delay_daysinteger

Custodian settings only: 0 or more.

statusstring

active brings back an archived setting. Archive with DELETE.

reasonstring

Goes to the change history.

Request
PATCH/v1/reconciliation-settings/{id}
curl -X PATCH https://api.aleta.ai/v1/reconciliation-settings/019f95f0-2d40-7b58-8f6e-9a3c1d7e5b02 \
  -H "Authorization: Bearer {access_token}" \
  -H "Content-Type: application/json" \
  -d '{"allow_empty_calculated_point": true, "reason": "Account closed at the bank."}'

DELETE/v1/reconciliation-settings/{id}

Delete a reconciliation setting

Archives the setting; 204. The entity is reconciled on the defaults again, and PATCH with status: active brings the setting back. An archived setting answers 204 again and nothing is logged. Optional ?reason= is kept as archive_reason and goes to the change history. Takes ?dry_run=true and Idempotency-Key; any other query parameter is a 400. The checks run in this order: an unknown or hidden setting is a 404, a caller who may not write the entity 403, and a legacy setting before the move 409 legacy_managed.

Request
DELETE/v1/reconciliation-settings/{id}
curl -X DELETE https://api.aleta.ai/v1/reconciliation-settings/019f95f0-2d40-7b58-8f6e-9a3c1d7e5b02 \
  -H "Authorization: Bearer {access_token}"