Zum Hauptinhalt springen

Reports API

GET /api/v1/reports/pnl

Gewinn- und Verlustrechnung für einen Zeitraum.

Rate Limit: 30 Requests / Minute

Query-Parameter:

ParameterTypBeschreibung
fromstringStartmonat YYYY-MM
tostringEndmonat 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_costs Tabelle (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