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.
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
curl -X POST "https://example.com/companies/string/files/upload" \ -H "Content-Type: application/json" \ -d '{ "fileBase64": "string", "fileName": "string", "size": 10485760, "contentType": "string" }'{ "fileId": "string"}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.
Download
Get a signed URL for downloading the stored document. The URL expires after 15 minutes and carries its own access, so treat it as a secret and fetch it when the user is ready to download rather than embedding it in a page that gets cached. Returns 404 if the file does not exist or belongs to another company.