Batch delete
Delete many customers in one call. `selection` works two ways: `mode: "ids"` with an explicit list, or `mode: "filter"` with the same filter the list endpoint takes (`q`, `onlyActive`) plus `excludedIds` for the rows the user unticked. Filter mode is what "select all matching" in the UI sends, so nothing has to round-trip every id. Selections resolving to more than 10,000 customers are refused with 413 and a body giving the count and the cap. The response reports how many rows were actually affected.
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/customers/batch_delete" \ -H "Content-Type: application/json" \ -d '{ "selection": { "mode": "ids", "ids": [ "string" ] } }'{ "success": true, "affected": 0}Update customer
Update a customer. Only the fields you send change. Changing `defaultCategorization` affects future categorizations only; transactions already categorized keep what they have.
Merge
Merge duplicate customers into one, in a single transaction. Creates the customer described by `newCustomer`, repoints the transaction categorizations, subscriptions, and external ids of every id in `customerIds` onto it, then deletes the originals. Use this rather than delete when the same account was imported twice: it keeps revenue history and MRR continuous, where a delete would cascade the subscriptions away. Returns the merged customer with its `logoUrl` and combined `externalIds`.