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
idstringA UUID.
entity_kindstringcash_account,custody_accountorcustodian.entity_idstringThe cash account's, custody account's or custodian's id.
asset_idstring or nullCustody account settings only: the asset the setting overrides the custody account's own setting for.
reconciliation_frequencystringdaily,weekly,monthlyorquarterly. Only adailysetting 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_pointbooleanWith a frequency other than
daily: a day with the custodian's figure but no calculated figure passes too. Adailysetting always needs both figures to agree.sum_balances, sum_holdingsboolean or nullCustodian settings only (
nullon the other kinds): the custodian's points are summed per account or holding.custody_account_data_delay_days, cash_account_data_delay_daysinteger or nullCustodian settings only (
nullon the other kinds): banking days the custodian's files may be late.use_latest_custodian_pointboolean or nullCustodian settings only (
nullon 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 nullCustodian settings only (
nullon the other kinds).tolerancesobjectThe platform's tolerances, read-only:
amount0.01andjpy_amount0.5. A figure agrees when the difference is below the tolerance.ownerstringaletafor a custodian setting (only Aleta changes it),tenantfor a cash or custody account's.created_at, updated_attimestampRFC 3339, UTC, microseconds.
archived_at, archived_by, archive_reasontimestamp, string, string or nullSet once a DELETE archived the setting: when, the id of the user who archived it, and the reason sent with it. All
nullwhile the setting is active.originstringlegacyorv1.
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_kindstringcash_account,custody_accountorcustodian.entity_idstringOne entity's settings.
asset_idstringThe per-asset overrides for this asset.
include_archivedbooleanAlso archived settings. Default
false.cursor, limitstring, integerThe page:
limitdefaults to 100 and is kept between 1 and 1000.
curl -G https://api.aleta.ai/v1/reconciliation-settings \
-H "Authorization: Bearer {access_token}" \
-d entity_kind=cash_account
{
"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
}
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.
curl https://api.aleta.ai/v1/reconciliation-settings/019f95f0-2d40-7b58-8f6e-9a3c1d7e5b02 \
-H "Authorization: Bearer {access_token}"
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_idstringRequired.
entity_idis a UUID.asset_idstringCustody account settings only: a UUID.
reconciliation_frequencystringDefault
daily.allow_empty_calculated_pointbooleanDefault
false.sum_balances, sum_holdings, use_latest_custodian_point, auto_reconcile_before_data_deliverybooleanCustodian settings only. Default
false.custody_account_data_delay_days, cash_account_data_delay_daysintegerCustodian settings only:
0or more. Default0.
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"}'
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_frequencystringdaily,weekly,monthlyorquarterly.allow_empty_calculated_pointbooleanOptional.
sum_balances, sum_holdings, use_latest_custodian_point, auto_reconcile_before_data_deliverybooleanCustodian settings only.
custody_account_data_delay_days, cash_account_data_delay_daysintegerCustodian settings only:
0or more.statusstringactivebrings back an archived setting. Archive with DELETE.reasonstringGoes to the change history.
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 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.
curl -X DELETE https://api.aleta.ai/v1/reconciliation-settings/019f95f0-2d40-7b58-8f6e-9a3c1d7e5b02 \
-H "Authorization: Bearer {access_token}"