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`.
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/customers/merge" \ -H "Content-Type: application/json" \ -d '{ "customerIds": [ "string" ], "newCustomer": { "name": "string", "logo": true } }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "companyId": "8bb73d03-06b4-47c7-80c7-59301f770eda", "name": "string", "defaultCategorization": { "categoryId": "string", "usingDateRule": { "type": "transactionDate" }, "plSplit": { "revenue": 0, "cogs": 0, "cac": 0, "pd": 0, "ga": 0, "no": 0, "neutral": 0 }, "passThroughTax": 0, "transferTargetAccountId": "string" }, "domains": [ "string" ], "logo": true, "autoCreatedSource": "searchApiGoogleWebSearch", "countryCode": "string", "createdTime": "2019-08-24T14:15:22Z", "createdUserId": "string", "lastUpdatedTime": "2019-08-24T14:15:22Z", "lastUpdatedUserId": "string", "externalIds": [ "string" ]}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.
List external ids
List the external ids linked to a customer. These are the identifiers this customer carries in connected systems (a Stripe customer id, a HubSpot company id, and so on), and they are what lets an importer recognise the same customer across syncs.