List Unprofitable Products
GET/api/reporting/contribution-margin/unprofitable-products
Contribution margin measures profitability after both cost of goods sold and allocated operating costs:
- Gross Profit = Revenue − COGS
- Contribution Dollars = Gross Profit − Allocated Costs
- Contribution Margin % = Contribution Dollars ÷ Revenue × 100
reports:readGrant this scope to your token under Settings → Developer → Personal Access Tokens.
Revenue and COGS come from per-order-line financial records that are kept current by background financial calculations. Allocated costs come from the cost allocation system (cost entries prorated across products, orders, brands, suppliers, or sales channels).
Returns products whose contribution dollars are negative for the period — items where COGS plus allocated costs exceed revenue. This includes products with cost allocations but no sales at all (zero revenue, negative contribution). Each product row has the same shape as the by-product report lines; count is the number of unprofitable products returned.
Note: limit bounds the revenue-ranked product pool that is scanned, not the number of unprofitable rows returned — with a small limit, unprofitable products outside the top-revenue pool may be missed.
Date filtering: date_from and date_to must BOTH be provided for date filtering to apply — if either is omitted the report covers all available history. Sales figures are filtered by order date; allocated costs are matched by their allocation period when one is set (any overlap with the requested range counts), otherwise by their allocation date.
Authentication: Requires Bearer token. Scope: reports (read/write).
Request
Responses
- 200
- 401
- 403
- 422
- 429
OK
Response Headers
Unauthenticated — the bearer token is missing, revoked, expired, or malformed. Never retry automatically; fix the credential. See the Errors guide.
Forbidden — the token lacks a required scope, the endpoint is not available to API tokens, or the user behind the token lacks the permission. A human must adjust the token scopes or user permissions; do not retry.
Unprocessable Entity
Response Headers
Rate limited — platform limit is 1,000 requests/min; individual tokens may carry lower limits. Honor the Retry-After header before retrying. See the Rate Limits guide.