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:

    periodentryDateFromcovered local range
    dailyany local datethat local day
    weeklya Mondaythat Monday until the next Monday
    monthlythe first day of a monththat 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": {}
    }