Release Notes for Asynchronous Transaction Account Statements: 07/10/2026
This release adds asynchronous generation of a CSV account statement for one closed period of a transaction account. The caller requests a daily, weekly, or monthly period that has fully elapsed. The file is generated asynchronously and downloaded after generation has completed.
Transaction Account API changes:
See the Transaction Account API Guide for full details.
Asynchronous Transaction Account Statements
-
Added Create Asynchronous Transaction Account Statement (POST /transaction-accounts/{transactionAccountId}/account-statements). The request body uses data.transactionAccountStatement. entryDateFrom is the tenant-local start date in yyyy-MM-dd form.
The requested period may be one of the following:
period entryDateFrom covered local range daily any local date that local day weekly a Monday that Monday until the next Monday monthly the first day of a month that calendar month -
The period must have fully elapsed. Weekly and monthly statements are available when they are enabled for the tenant.
-
Create Asynchronous Transaction Account Statement API returns HTTP 200 or HTTP 201. 201 means a new statement was created and generation has started. 200 means the statement for that transaction account, period, and entryDateFrom already existed and was returned. A failed statement is generated again by the same request and is also returned with 200, with status processing.
Example Request and Response for a daily Create account statement API:
{ "workflow": {}, "data": { "transactionAccountStatement": { "period": "daily", "entryDateFrom": "2026-09-20" } }, "connect": {}, "metadata": {} }{ "workflow": {}, "data": { "accountStatement": { "id": "00000000-0000-0000-0000-000000000000", "transactionAccountId": "00000000-0000-0000-0000-000000000000", "period": "daily", "entryDateFrom": "2026-09-20", "entryDateTimeFrom": "2026-09-19T23:00:00", "entryDateTimeTo": "2026-09-20T23:00:00", "status": "processing" } }, "connect": {}, "metadata": {} }The UTC bounds in this example are for a tenant whose timezone is Europe/London, while British Summer Time is in effect.
-
Added Get Transaction Account Statement (GET /transaction-accounts/{transactionAccountId}/account-statements/{accountStatementId}). The response uses data.accountStatement. Keep the id returned by Create. Generated statements have no list operation.
Example responses for Get Transaction Account Statement:
-
{ "workflow": {}, "data": { "accountStatement": { "id": "00000000-0000-0000-0000-000000000000", "transactionAccountId": "00000000-0000-0000-0000-000000000000", "period": "monthly", "entryDateFrom": "2026-09-01", "entryDateTimeFrom": "2026-08-31T23:00:00", "entryDateTimeTo": "2026-09-30T23:00:00", "status": "completed", "fileName": "account-statement-00000000-0000-0000-0000-000000000000-monthly-20260901.csv", "fileCreationDateTime": "2026-10-05T18:30:00" } }, "connect": {}, "metadata": {} }{ "workflow": {}, "data": { "accountStatement": { "id": "00000000-0000-0000-0000-000000000000", "transactionAccountId": "00000000-0000-0000-0000-000000000000", "period": "daily", "entryDateFrom": "2026-09-21", "entryDateTimeFrom": "2026-09-20T23:00:00", "entryDateTimeTo": "2026-09-21T23:00:00", "status": "failed", "failureReason": "Account statement generation failed. Please retry." } }, "connect": {}, "metadata": {} } -
Existing GET /transaction-accounts/{transactionAccountId}/account-statements is unchanged. It returns ledger lines for a date range.
-
entryDateTimeFrom is the inclusive UTC start of the period. entryDateTimeTo is the exclusive UTC end. Both bounds follow the tenant timezone. The file includes ledger entries by entry date-time.
-
Status is processing, completed, or failed. fileName and fileCreationDateTime are returned when status is completed. failureReason is returned when status is failed.
-
Added Download Transaction Account Statement File (GET /transaction-accounts/{transactionAccountId}/account-statements/{accountStatementId}/file). The response is a text/csv attachment when status is completed. A period with no ledger entries still completes and the file contains the header row only.
-
Added two Transaction Account webhooks. module is transaction-accounts. account-statement-completed is sent when the file is ready. account-statement-failed is sent when generation stops. data.accountStatement is the same object returned by Get.
Example Webhook payloads for account-statement-completed and account-statement-failed webhook types:
{ "webhook": { "module": "transaction-accounts", "type": "account-statement-completed" }, "data": { "accountStatement": { "id": "00000000-0000-0000-0000-000000000000", "transactionAccountId": "00000000-0000-0000-0000-000000000000", "period": "daily", "entryDateFrom": "2026-09-21", "entryDateTimeFrom": "2026-09-20T23:00:00", "entryDateTimeTo": "2026-09-21T23:00:00", "status": "completed", "fileName": "account-statement-00000000-0000-0000-0000-000000000000-daily-20260921.csv", "fileCreationDateTime": "2026-10-05T16:20:00" } }, "connect": {}, "metadata": {} }{ "webhook": { "module": "transaction-accounts", "type": "account-statement-failed" }, "data": { "accountStatement": { "id": "00000000-0000-0000-0000-000000000000", "transactionAccountId": "00000000-0000-0000-0000-000000000000", "period": "daily", "entryDateFrom": "2026-09-21", "entryDateTimeFrom": "2026-09-20T23:00:00", "entryDateTimeTo": "2026-09-21T23:00:00", "status": "failed", "failureReason": "Account statement generation failed. Please retry." } }, "connect": {}, "metadata": {} }