Finance & Reports
Expense tracking, plus three read-only report endpoints — not ViewSets, so their response shape is fixed per-endpoint rather than a paginated list. Every report accepts ?date_from=&date_to= (YYYY-MM-DD). Requires the reports.view_financial permission.
Profit & Loss
Cost of goods sold uses each product's current cost price, not a historical snapshot at sale time — an intentional approximation for a running P/L, not audited accounting.
GET /api/v1/reports/profit-loss/?date_from=2026-07-01&date_to=2026-07-31
{
"date_from": "2026-07-01",
"date_to": "2026-07-31",
"revenue": "184500.00",
"refunded": "3200.00",
"cost_of_goods_sold": "92100.00",
"gross_profit": "92400.00",
"expenses_by_category": [
{ "category": "Rent", "amount": "20000.00" },
{ "category": "Packaging", "amount": "5400.00" }
],
"total_expenses": "25400.00",
"net_profit": "67000.00"
}Other reports
GET
/api/v1/reports/sales-summary/Orders vs. Sales counts, payment-method mix, top products.StaffGET
/api/v1/reports/sales-ledger/Every individual payment event — cash actually collected, one row per tender.StaffExpenses
/api/v1/expenses/Individual expense records./api/v1/expense-categories/Categories used to group expenses (rent, packaging, etc.).