Create product
Create a product. Pass `productGroupId` to file it under a group straight away, or leave it null or absent for an ungrouped product. Fails with 404 if the named group does not exist. Products imported from a billing provider are created by the importer, so create by hand only for revenue you track yourself.
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/products" \ -H "Content-Type: application/json" \ -d '{ "name": "string" }'{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "companyId": "8bb73d03-06b4-47c7-80c7-59301f770eda", "name": "string", "productGroupId": "c416ccc2-c7d5-4733-9136-58a3b93937ed", "order": -8388608, "createdTime": "2019-08-24T14:15:22Z", "createdUserId": "string", "lastUpdatedTime": "2019-08-24T14:15:22Z", "lastUpdatedUserId": "string", "externalIds": [ "string" ]}List products
List a company's products, each with `eventCount` (how many subscription events reference it) and `cmrrByCurrency` (current committed MRR keyed by currency code, unconverted). Products are the plans and add-ons that subscription events are booked against, which is what makes revenue breakdowns by product possible. `productGroupId` is null for products that sit outside any group.
Reorder
Reorder products inside one group, and move them into it in the same call. Every id in `productIds` is assigned to `productGroupId` (send null for the ungrouped list) and given an `order` matching its position. This is the endpoint behind drag-and-drop between groups, so send the full contents of the target group, not just the product that moved. Fails with 404 if the group does not exist.