Reports API
GET /api/v1/reports/pnl
Gewinn- und Verlustrechnung für einen Zeitraum.
Rate Limit: 30 Requests / Minute
Query-Parameter:
| Parameter | Typ | Beschreibung |
|---|---|---|
from | string | Startmonat YYYY-MM |
to | string | Endmonat YYYY-MM |
Response (200):
{
"period": { "from": "2026-01", "to": "2026-03" },
"kpis": {
"b2b_revenue": 12500.00,
"shopify_revenue": 3200.00,
"total_revenue": 15700.00,
"variable_costs": 4800.00,
"fixed_costs": 5200.00,
"contribution_margin": 10900.00,
"net_profit": 5700.00,
"avg_roast_loss_pct": 14.2,
"total_roasted_kg": 850.5,
"total_raw_kg": 991.3,
"roast_count": 342
},
"monthly_trend": [
{
"period": "2026-01",
"revenue": 4800.00,
"variable_costs": 1500.00,
"fixed_costs": 1700.00,
"contribution_margin": 3300.00,
"net_profit": 1600.00
}
],
"warnings": [
"3 Röstungen ohne Einkaufspreis im Lot"
]
}
Berechnungen:
- B2B Revenue: Summe finalisierter Rechnungen (netto)
- Variable Costs: Rohkaffeekosten aus Röstlog × Lot-Einkaufspreise
- Fixed Costs: Expandiert aus
fixed_costsTabelle (Einmalig/Monatlich/Jährlich) - Blend-Handling: Gewichteter Durchschnitt aller beteiligten Lot-Preise
GET /api/v1/reports/product-profitability
Deckungsbeitrag (DB) pro Produkt-Variante.
Rate Limit: 30 Requests / Minute
Query-Parameter: Wie P&L (from, to)
Response (200):
{
"period": { "from": "2026-01", "to": "2026-03" },
"products": [
{
"variant_id": "uuid",
"variant_name": "Ethiopia Sidamo 250g",
"units_sold": 420,
"revenue": 5460.00,
"avg_unit_price": 13.00,
"raw_cost_per_unit": 3.20,
"packaging_cost_per_unit": 0.45,
"weight_g": 250,
"db_per_unit": 9.35,
"db_total": 3927.00
}
],
"break_even": {
"fixed_costs": 5200.00,
"avg_db_per_kg": 37.40,
"break_even_kg": 139.0,
"actual_roasted_kg": 850.5
},
"warnings": []
}
Berechnungen:
- DB/Einheit = Verkaufspreis - Rohkaffeekosten/Einheit - Verpackungskosten/Einheit
- Break-Even = Fixkosten / durchschnittlicher DB pro kg