Bulk remove history
Permanently delete transactions before `beforeDate` on the listed accounts and set the company data start date, so reporting begins from a clean, fully covered period. Each collapsed account gets an initial-balance seed so its running balance still ends up right; supply `initialBalances` for accounts with no existing seed, such as CSV wallets whose uploads started late, otherwise the seed is derived from the recorded sum. Pass an empty `accountIds` to only move the data start date. Accounts left with no transactions are archived and returned in `archivedAccountIds`. Transit accounts are refused with 422. This cannot be undone, so preview first.
Authentication
sf_… API key in the bearerAuth field below.A SaaSFlow API key (format sf_…) or an OAuth bearer token. Paste only the key — the proxy adds the Bearer prefix. Create an API key in Settings → Company settings → API keys — see API keys.
In: header
Path Parameters
1 <= lengthRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/companies/string/accounts/remove_history" \ -H "Content-Type: application/json" \ -d '{ "beforeDate": "string", "accountIds": [ "string" ] }'{ "results": [ { "accountId": "string", "removedCount": 0, "newBalance": "string" } ], "archivedAccountIds": [ "string" ], "dataStartDate": "string"}Remove history preview
Preview what cutting off history before a date would do, without changing anything. Returns per-account transaction counts and date ranges, plus `suggestedDate`: the earliest date from which every account has data, which is the point where the books stop having gaps. Loan accounts are ignored when computing it, since their data only spans payout to final repayment and a late loan is not a coverage gap. Only accounts with transactions are listed, and transit accounts are left out. Always run this before `remove_history`.
Reorder
Reorder accounts inside one group, and move them into it in the same call. Every id in `accountIds` is assigned to `accountGroupId` (null for the ungrouped list) and given an `order` matching its position, so send the full contents of the target group rather than just the account that moved. Fails with 404 if the group does not exist.