Batch delete
Delete many files at once. `selection` takes either `mode: "ids"` with an explicit list, or `mode: "filter"` with the same filter the list endpoint takes plus `excludedIds` for the rows the user unticked, which is what "select all matching" sends. Selections resolving to more than 10,000 files are refused with 413 and a body giving the count and the cap. Stored documents go too, so this is not reversible.
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
curl -X POST "https://example.com/companies/string/files/batch_delete" \ -H "Content-Type: application/json" \ -d '{ "selection": { "mode": "ids", "ids": [ "string" ] } }'{ "success": true, "affected": 0}Update file
Update a file record: rename it, correct the parsed amount, date, or document type, or change which transactions it is attached to. `transactionIds` replaces the attachment list rather than adding to it, so include the ids you want to keep. This is how a receipt gets matched to the payment it belongs to.
Upload
Upload a receipt or invoice. The document goes in `fileBase64` as base64, capped at 10 MB by `size`. Pass `transactionIds` to attach it on upload, or leave it out and match it later. PDFs and PNGs are queued for automatic parsing of amount, date, and document type; other extensions are stored as-is and never get `parseData`. Parsing runs in the background, so the file comes back with `parseStatus: "open"` and fills in later. Only the new `fileId` is returned, so read the file back for the rest.