> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fynn.eu/llms.txt
> Use this file to discover all available pages before exploring further.

# Datensätze

> Die Datensätze der Berichtsseiten Wiederkehrender Umsatz, Kundenbasis, Liquidität und Umsatz sowie die MRR-Tabelle und die Finanzübersicht, mit Parametern und Antwortformen.

Jede Berichtsseite der App lädt genau einen Datensatz. Mit denselben Endpunkten baust du eigene Auswertungen, ein Board-Dashboard oder einen Abgleich mit deinem Data Warehouse. Die Zahlen sind identisch mit denen der App, weil beide aus derselben Berechnung lesen.

## Übersicht

| Endpunkt | Inhalt |
| - | - |
| `GET /api/analytics/finance/recurring` | Kennzahlen, MRR-Waterfall mit Ursachen, gebundener und bekannter MRR, MRR-Tabelle, Snapshot-Stand, Definitionen |
| `GET /api/analytics/finance/customers` | Aktive Konten, ARPA, NRR und GRR, Kohorten, Kundenkonzentration, Logo-Bewegungen, Verloren nach Kündigungsgrund, Segmentvergleich |
| `GET /api/analytics/finance/liquidity` | Netto-Cash, offene und überfällige Forderungen, DSO, Cashflow mit Rechnungsprognose, Forderungsalter, Forderungstabelle, Zahlungsverhalten, Abgleich Vertrag und Rechnung |
| `GET /api/analytics/finance/revenue` | Umsatz je Land, je Produkt, Top-Produkte, Umsatzdetails, ARR am Periodenende, Umsatz je Kunde und Produkt |
| `GET /api/analytics/finance/revenue/customers` | weitere Seiten der Tabelle Umsatz je Kunde und Produkt |
| `GET /api/analytics/finance/overview` | Cashflow, MRR-Bewegungen, Umsatz nach Klasse, Forderungen, Forderungsalter, Forderungstabelle |
| `GET /api/analytics/mrr-financials` | die MRR-Tabelle: ein Wert je Zeile und Monat |

Alle Endpunkte brauchen `analytics:read`. Jeder Datensatz enthält das [`meta`-Objekt](https://docs.fynn.eu/v2-finance-api/concepts#das-meta-objekt) mit dem Stand der Berechnung und `meta.forecast`.

## Gemeinsame Parameter

| Parameter | Bedeutung |
| - | - |
| `from`, `to` | Zeitraum als `YYYY-MM`, höchstens 36 Monate. Ohne Angabe die letzten zwölf Monate bis zum laufenden. |
| `currency` | ISO-4217-Code. Ohne Angabe die Standardwährung. |
| `scope` | Ebene der Bewegungen: `subscription`, `invoice_address`, `customer`, `organisation`. Ohne Angabe die Einstellung der Organisation. |
| `segmentId` | nur die Kunden eines gespeicherten Segments |
| `customerIds[]`, `productIds[]` | nur diese Kunden oder Produkte (Umsatz, Finanzübersicht, MRR-Tabelle) |

Weitere Parameter: `month` wählt bei `recurring` den Monat des MRR-Waterfalls (ohne Angabe der letzte abgeschlossene Monat des Zeitraums). `compareSegmentId` und `granularity` (`month`, `quarter`) gelten für `customers`. `page`, `pageSize` (50, höchstens 100) und `search` blättern und suchen in der Tabelle Umsatz je Kunde und Produkt.

## Die MRR-Tabelle

`GET /api/analytics/mrr-financials` liefert die Tabelle, die in der App unter Wiederkehrender Umsatz steht. `months` gibt die Spalten vor, jede Zeile unter `rows` hat genau einen Wert je Monat in derselben Reihenfolge.

```bash theme={null}
curl "https://coreapi.io/api/analytics/mrr-financials?from=2026-07&to=2026-09&scope=customer" \
  -H "Authorization: Bearer api_DEIN_TOKEN"
```

```json theme={null}
{
  "months": [
    "2026-07",
    "2026-08",
    "2026-09"
  ],
  "rows": {
    "one_off": [
      {
        "amount": "2050.00",
        "currency": "EUR"
      },
      {
        "amount": "1270.00",
        "currency": "EUR"
      },
      {
        "amount": "1470.00",
        "currency": "EUR"
      }
    ],
    "variable": [
      {
        "amount": "1283.40",
        "currency": "EUR"
      },
      {
        "amount": "1270.80",
        "currency": "EUR"
      },
      {
        "amount": "1377.00",
        "currency": "EUR"
      }
    ],
    "mrr_bop": [
      {
        "amount": "49076.90",
        "currency": "EUR"
      },
      {
        "amount": "51831.50",
        "currency": "EUR"
      },
      {
        "amount": "51846.00",
        "currency": "EUR"
      }
    ],
    "mrr_eop": [
      {
        "amount": "51831.50",
        "currency": "EUR"
      },
      {
        "amount": "51846.00",
        "currency": "EUR"
      },
      {
        "amount": "53414.80",
        "currency": "EUR"
      }
    ],
    "accounted_mrr": [
      {
        "amount": "51980.50",
        "currency": "EUR"
      },
      {
        "amount": "51767.00",
        "currency": "EUR"
      },
      {
        "amount": "53414.80",
        "currency": "EUR"
      }
    ],
    "billing_gap": [
      {
        "amount": "-149.00",
        "currency": "EUR"
      },
      {
        "amount": "79.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      }
    ],
    "new": [
      {
        "amount": "1529.00",
        "currency": "EUR"
      },
      {
        "amount": "456.00",
        "currency": "EUR"
      },
      {
        "amount": "1976.00",
        "currency": "EUR"
      }
    ],
    "expansion": [
      {
        "amount": "717.40",
        "currency": "EUR"
      },
      {
        "amount": "319.00",
        "currency": "EUR"
      },
      {
        "amount": "1281.70",
        "currency": "EUR"
      }
    ],
    "contraction": [
      {
        "amount": "63.80",
        "currency": "EUR"
      },
      {
        "amount": "387.50",
        "currency": "EUR"
      },
      {
        "amount": "350.90",
        "currency": "EUR"
      }
    ],
    "lost": [
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "373.00",
        "currency": "EUR"
      },
      {
        "amount": "1338.00",
        "currency": "EUR"
      }
    ],
    "resurrecting": [
      {
        "amount": "572.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      }
    ],
    "arr_eop": [
      {
        "amount": "621978.00",
        "currency": "EUR"
      },
      {
        "amount": "622152.00",
        "currency": "EUR"
      },
      {
        "amount": "640977.60",
        "currency": "EUR"
      }
    ],
    "revenue_churn_rate": [
      "0.001300",
      "0.014673",
      "0.032575"
    ],
    "mom_growth": [
      "0.056128",
      "0.000280",
      "0.030259"
    ],
    "cash_collected": [
      {
        "amount": "58028.29",
        "currency": "EUR"
      },
      {
        "amount": "71981.72",
        "currency": "EUR"
      },
      {
        "amount": "59869.28",
        "currency": "EUR"
      }
    ],
    "cash_collected_this_month": [
      {
        "amount": "39628.84",
        "currency": "EUR"
      },
      {
        "amount": "45130.08",
        "currency": "EUR"
      },
      {
        "amount": "42103.00",
        "currency": "EUR"
      }
    ],
    "cash_collected_other_months": [
      {
        "amount": "18399.45",
        "currency": "EUR"
      },
      {
        "amount": "26851.64",
        "currency": "EUR"
      },
      {
        "amount": "17766.28",
        "currency": "EUR"
      }
    ],
    "cash_collected_unassigned": [
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      }
    ],
    "cash_refunded": [
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "113.65",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      }
    ],
    "cash_net": [
      {
        "amount": "58028.29",
        "currency": "EUR"
      },
      {
        "amount": "71868.07",
        "currency": "EUR"
      },
      {
        "amount": "59869.28",
        "currency": "EUR"
      }
    ],
    "cash_forecast": [
      null,
      null,
      null
    ],
    "receivables_eop": [
      {
        "amount": "28729.46",
        "currency": "EUR"
      },
      {
        "amount": "21463.61",
        "currency": "EUR"
      },
      {
        "amount": "28656.90",
        "currency": "EUR"
      }
    ]
  },
  "totals": {
    "one_off": {
      "amount": "4790.00",
      "currency": "EUR"
    },
    "variable": {
      "amount": "3931.20",
      "currency": "EUR"
    },
    "mrr_bop": {
      "amount": "49076.90",
      "currency": "EUR"
    },
    "mrr_eop": {
      "amount": "53414.80",
      "currency": "EUR"
    },
    "accounted_mrr": {
      "amount": "53414.80",
      "currency": "EUR"
    },
    "billing_gap": {
      "amount": "0.00",
      "currency": "EUR"
    },
    "new": {
      "amount": "3961.00",
      "currency": "EUR"
    },
    "expansion": {
      "amount": "2318.10",
      "currency": "EUR"
    },
    "contraction": {
      "amount": "802.20",
      "currency": "EUR"
    },
    "lost": {
      "amount": "1711.00",
      "currency": "EUR"
    },
    "resurrecting": {
      "amount": "572.00",
      "currency": "EUR"
    },
    "arr_eop": {
      "amount": "640977.60",
      "currency": "EUR"
    },
    "revenue_churn_rate": null,
    "mom_growth": null,
    "cash_collected": {
      "amount": "189879.29",
      "currency": "EUR"
    },
    "cash_collected_this_month": {
      "amount": "126861.92",
      "currency": "EUR"
    },
    "cash_collected_other_months": {
      "amount": "63017.37",
      "currency": "EUR"
    },
    "cash_collected_unassigned": {
      "amount": "0.00",
      "currency": "EUR"
    },
    "cash_refunded": {
      "amount": "113.65",
      "currency": "EUR"
    },
    "cash_net": {
      "amount": "189765.64",
      "currency": "EUR"
    },
    "cash_forecast": {
      "amount": "0.00",
      "currency": "EUR"
    },
    "receivables_eop": {
      "amount": "28656.90",
      "currency": "EUR"
    }
  },
  "reasons": {
    "new": {
      "contract_start": [
        {
          "amount": "800.00",
          "currency": "EUR"
        },
        {
          "amount": "456.00",
          "currency": "EUR"
        },
        {
          "amount": "1392.00",
          "currency": "EUR"
        }
      ],
      "trial_conversion": [
        {
          "amount": "729.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "584.00",
          "currency": "EUR"
        }
      ]
    },
    "expansion": {
      "quantity_change": [
        {
          "amount": "632.20",
          "currency": "EUR"
        },
        {
          "amount": "319.00",
          "currency": "EUR"
        },
        {
          "amount": "1132.70",
          "currency": "EUR"
        }
      ],
      "product_added": [
        {
          "amount": "149.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "149.00",
          "currency": "EUR"
        }
      ],
      "discount_start": [
        {
          "amount": "-63.80",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ]
    },
    "contraction": {
      "quantity_change": [
        {
          "amount": "-63.80",
          "currency": "EUR"
        },
        {
          "amount": "-159.50",
          "currency": "EUR"
        },
        {
          "amount": "-350.90",
          "currency": "EUR"
        }
      ],
      "product_removed": [
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "-228.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ]
    },
    "lost": {
      "contract_end": [
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "-373.00",
          "currency": "EUR"
        },
        {
          "amount": "-1338.00",
          "currency": "EUR"
        }
      ]
    },
    "resurrecting": {
      "reactivation": [
        {
          "amount": "572.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ]
    },
    "billing_gap": {
      "price_mismatch": [
        {
          "amount": "-149.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ],
      "not_yet_billed": [
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "79.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ]
    }
  },
  "meta": {
    "asOf": "2026-10-01T04:00:00+00:00",
    "buildId": "0199c0de-0000-7000-8000-00000000b001",
    "scope": "customer",
    "currency": "EUR",
    "from": "2026-07",
    "to": "2026-09",
    "findings": {
      "error": 0,
      "warning": 6,
      "info": 9
    },
    "filtersNotApplied": [],
    "notSnapshotted": [
      "one_off",
      "variable",
      "accounted_mrr",
      "billing_gap",
      "cash_collected",
      "cash_collected_this_month",
      "cash_collected_other_months",
      "cash_collected_unassigned",
      "cash_refunded",
      "cash_net",
      "cash_forecast",
      "receivables_eop"
    ],
    "projectedFrom": null,
    "forecast": {
      "incomplete": false,
      "failedSubscriptions": 0
    },
    "build": {
      "status": "succeeded",
      "builtAt": "2026-10-01T04:00:00+00:00",
      "buildId": "0199c0de-0000-7000-8000-00000000b001",
      "failed": null
    },
    "dataBuildId": "0199c0de-0000-7000-8000-00000000b001"
  },
  "reasonLabels": {
    "contract_end": "Vertragsende",
    "contract_start": "Vertragsbeginn",
    "discount_start": "Rabatt beginnt",
    "not_yet_billed": "Rechnung ausstehend",
    "price_mismatch": "Rechnungsbetrag weicht ab",
    "product_added": "Produkt hinzugefügt",
    "product_removed": "Produkt entfernt",
    "quantity_change": "Mengenänderung",
    "reactivation": "Reaktivierung",
    "trial_conversion": "Testphase beendet"
  }
}
```

Die Zeilen im Überblick:

| Zeile | Bedeutung |
| - | - |
| `mrr_bop`, `mrr_eop` | MRR am Ende des Vormonats und am Ende des Monats |
| `new`, `expansion`, `contraction`, `lost`, `resurrecting` | die fünf Bewegungen; Kontraktion und Verloren sind positive Beträge, die den MRR senken |
| `arr_eop` | MRR am Monatsende mal 12, die eine ARR aller Seiten |
| `revenue_churn_rate`, `mom_growth` | (Kontraktion + Verloren) / MRR zu Beginn und (Ende − Beginn) / Beginn, als Rate |
| `accounted_mrr` | wiederkehrende Rechnungspositionen nach Leistungszeitraum (30/360) |
| `billing_gap` | Differenz Vertrag zu Rechnung: `mrr_eop − accounted_mrr`, die Ursachen stehen unter `reasons.billing_gap` |
| `one_off`, `variable` | Nettoumsatz einmaliger und nutzungsabhängiger Positionen der im Monat abgeschlossenen Belege |
| `cash_collected` | Zahlungseingang nach Zahldatum, aufgeteilt in `cash_collected_this_month`, `cash_collected_other_months` und `cash_collected_unassigned` |
| `cash_refunded`, `cash_refunded_refund`, `cash_refunded_chargeback`, `cash_refunded_payout`, `cash_net` | Zahlungsausgang mit seinen Teilen Erstattungen, Rücklastschriften und Auszahlungen, und Zahlungseingang abzüglich Zahlungsausgang |
| `cash_forecast` | Rechnungsprognose brutto, nur für den laufenden und spätere Monate |
| `receivables_eop` | offene Forderungen am Monatsende |

Die Zahlen prüfen sich gegenseitig. Im September gilt 51.846,00 + 1.976,00 + 1.281,70 + 0,00 − 350,90 − 1.338,00 = 53.414,80 für den Waterfall und 42.103,00 + 17.766,28 + 0,00 = 59.869,28 für den Zahlungseingang. Im August erklärt die Ursache `not_yet_billed` die ganze Differenz Vertrag zu Rechnung von 79,00 €.

`totals` ist die Summenspalte. Bewegungen und Zahlungen werden über den Zeitraum addiert: Neu ergibt von Juli bis September 3.961,00 €. Bestände wie `mrr_eop`, `accounted_mrr` und `receivables_eop` zeigen den letzten Monat, `mrr_bop` den ersten. Raten haben keine Summe.

`reasons` teilt die Bewegungen nach Ursachen auf, mit Vorzeichen. `reasonLabels` nennt für jeden Schlüssel aus `reasons` den deutschen Namen, den auch die Karte Ursachen der Bewegungen und die Excel-Bücher zeigen. Jede Ursache ist eine eigene Unterzeile: Hinzugefügte und entfernte Produkte werden nie verrechnet, und „Sonstiges" gibt es nur für einen unbekannten Schlüssel. Eine Ursache kann gegenläufig sein: Im Juli enthält die Expansion einen beginnenden Rabatt über −63,80 €.

## Wiederkehrender Umsatz

`GET /api/analytics/finance/recurring` liefert alles für die Seite Wiederkehrender Umsatz in einer Antwort.

```bash theme={null}
curl "https://coreapi.io/api/analytics/finance/recurring?from=2026-07&to=2026-09&month=2026-09" \
  -H "Authorization: Bearer api_DEIN_TOKEN"
```

> [!NOTE]
>
> Im Beispiel ist `mrrWire` auf die MRR-Zeilen gekürzt, `backlog.events` auf drei Ereignisse, `definitions` auf zwei Einträge ohne Änderungsverlauf und `movementMonths` auf den gewählten Monat. Die API liefert `mrrWire` vollständig in der Form der MRR-Tabelle oben, `movementMonths` für jeden Monat des Zeitraums und den ganzen [Definitionskatalog](https://docs.fynn.eu/v2-finance-api/definitions.md).

```json theme={null}
{
  "tenantName": "Taktwerk GmbH",
  "currency": "EUR",
  "asOf": "2026-10-01T04:00:00+00:00",
  "months": [
    "2026-07",
    "2026-08",
    "2026-09"
  ],
  "mrrWire": {
    "months": [
      "2026-07",
      "2026-08",
      "2026-09"
    ],
    "rows": {
      "mrr_bop": [
        {
          "amount": "49076.90",
          "currency": "EUR"
        },
        {
          "amount": "51831.50",
          "currency": "EUR"
        },
        {
          "amount": "51846.00",
          "currency": "EUR"
        }
      ],
      "mrr_eop": [
        {
          "amount": "51831.50",
          "currency": "EUR"
        },
        {
          "amount": "51846.00",
          "currency": "EUR"
        },
        {
          "amount": "53414.80",
          "currency": "EUR"
        }
      ],
      "accounted_mrr": [
        {
          "amount": "51980.50",
          "currency": "EUR"
        },
        {
          "amount": "51767.00",
          "currency": "EUR"
        },
        {
          "amount": "53414.80",
          "currency": "EUR"
        }
      ],
      "billing_gap": [
        {
          "amount": "-149.00",
          "currency": "EUR"
        },
        {
          "amount": "79.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ],
      "new": [
        {
          "amount": "1529.00",
          "currency": "EUR"
        },
        {
          "amount": "456.00",
          "currency": "EUR"
        },
        {
          "amount": "1976.00",
          "currency": "EUR"
        }
      ],
      "expansion": [
        {
          "amount": "717.40",
          "currency": "EUR"
        },
        {
          "amount": "319.00",
          "currency": "EUR"
        },
        {
          "amount": "1281.70",
          "currency": "EUR"
        }
      ],
      "contraction": [
        {
          "amount": "63.80",
          "currency": "EUR"
        },
        {
          "amount": "387.50",
          "currency": "EUR"
        },
        {
          "amount": "350.90",
          "currency": "EUR"
        }
      ],
      "lost": [
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "373.00",
          "currency": "EUR"
        },
        {
          "amount": "1338.00",
          "currency": "EUR"
        }
      ],
      "resurrecting": [
        {
          "amount": "572.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        },
        {
          "amount": "0.00",
          "currency": "EUR"
        }
      ]
    },
    "totals": {
      "mrr_bop": {
        "amount": "49076.90",
        "currency": "EUR"
      },
      "mrr_eop": {
        "amount": "53414.80",
        "currency": "EUR"
      },
      "accounted_mrr": {
        "amount": "53414.80",
        "currency": "EUR"
      },
      "billing_gap": {
        "amount": "0.00",
        "currency": "EUR"
      },
      "new": {
        "amount": "3961.00",
        "currency": "EUR"
      },
      "expansion": {
        "amount": "2318.10",
        "currency": "EUR"
      },
      "contraction": {
        "amount": "802.20",
        "currency": "EUR"
      },
      "lost": {
        "amount": "1711.00",
        "currency": "EUR"
      },
      "resurrecting": {
        "amount": "572.00",
        "currency": "EUR"
      }
    },
    "reasons": {
      "lost": {
        "contract_end": [
          {
            "amount": "0.00",
            "currency": "EUR"
          },
          {
            "amount": "-373.00",
            "currency": "EUR"
          },
          {
            "amount": "-1338.00",
            "currency": "EUR"
          }
        ]
      }
    },
    "meta": {
      "asOf": "2026-10-01T04:00:00+00:00",
      "buildId": "0199c0de-0000-7000-8000-00000000b001",
      "scope": "customer",
      "currency": "EUR",
      "from": "2026-07",
      "to": "2026-09",
      "findings": {
        "error": 0,
        "warning": 6,
        "info": 9
      },
      "filtersNotApplied": [],
      "notSnapshotted": [
        "one_off",
        "variable",
        "accounted_mrr",
        "billing_gap",
        "cash_collected",
        "cash_collected_this_month",
        "cash_collected_other_months",
        "cash_collected_unassigned",
        "cash_refunded",
        "cash_net",
        "cash_forecast",
        "receivables_eop"
      ],
      "projectedFrom": null,
      "forecast": {
        "incomplete": false,
        "failedSubscriptions": 0
      },
      "build": {
        "status": "succeeded",
        "builtAt": "2026-10-01T04:00:00+00:00",
        "buildId": "0199c0de-0000-7000-8000-00000000b001",
        "failed": null
      },
      "dataBuildId": "0199c0de-0000-7000-8000-00000000b001"
    },
    "reasonLabels": {
      "contract_end": "Vertragsende"
    }
  },
  "recurring": {
    "kpis": [
      {
        "id": "mrr",
        "title": "MRR",
        "valueKind": "money",
        "value": "53414.80",
        "delta": "1568.80",
        "better": "up",
        "sparkline": [
          "32074.00",
          "33728.00",
          "35406.00",
          "39440.90",
          "44674.40",
          "45797.40",
          "46869.70",
          "47533.40",
          "49076.90",
          "51831.50",
          "51846.00",
          "53414.80"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "arr",
        "title": "ARR",
        "valueKind": "money",
        "value": "640977.60",
        "delta": "18825.60",
        "better": "up",
        "sparkline": [
          "384888.00",
          "404736.00",
          "424872.00",
          "473290.80",
          "536092.80",
          "549568.80",
          "562436.40",
          "570400.80",
          "588922.80",
          "621978.00",
          "622152.00",
          "640977.60"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "net_new",
        "title": "Netto-Neu-MRR",
        "valueKind": "money",
        "value": "1568.80",
        "delta": "1554.30",
        "better": "up",
        "sparkline": [
          "1318.00",
          "1654.00",
          "1678.00",
          "4034.90",
          "5233.50",
          "1123.00",
          "1072.30",
          "663.70",
          "1543.50",
          "2754.60",
          "14.50",
          "1568.80"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "quick_ratio",
        "title": "Quick Ratio",
        "valueKind": "ratio",
        "value": "1.93",
        "delta": "0.91",
        "better": "up",
        "sparkline": [
          "3.43",
          "58.03",
          "12.26",
          "6.23",
          "7.17",
          "5.93",
          "2.96",
          "1.49",
          "2.78",
          "44.18",
          "1.02",
          "1.93"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "accounted_mrr",
        "title": "Accounted MRR",
        "valueKind": "money",
        "value": "53414.80",
        "delta": "1647.80",
        "better": "up",
        "sparkline": [
          "32074.00",
          "33728.00",
          "35406.00",
          "38976.90",
          "44674.40",
          "45797.40",
          "46710.20",
          "47533.40",
          "48887.30",
          "51980.50",
          "51767.00",
          "53414.80"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      }
    ],
    "movementMonths": [
      {
        "month": "2026-09",
        "bop": "51846.00",
        "eop": "53414.80",
        "steps": [
          {
            "key": "new",
            "value": "1976.00",
            "accounts": 3
          },
          {
            "key": "expansion",
            "value": "1281.70",
            "accounts": 5
          },
          {
            "key": "resurrecting",
            "value": "0.00",
            "accounts": 0
          },
          {
            "key": "contraction",
            "value": "-350.90",
            "accounts": 1
          },
          {
            "key": "lost",
            "value": "-1338.00",
            "accounts": 1
          }
        ],
        "reasons": [
          {
            "movement": "new",
            "reason": "contract_start",
            "amount": "1392.00",
            "accounts": 2,
            "label": "Vertragsbeginn"
          },
          {
            "movement": "new",
            "reason": "trial_conversion",
            "amount": "584.00",
            "accounts": 1,
            "label": "Testphase beendet"
          },
          {
            "movement": "expansion",
            "reason": "quantity_change",
            "amount": "1132.70",
            "accounts": 4,
            "label": "Mengenänderung"
          },
          {
            "movement": "expansion",
            "reason": "product_added",
            "amount": "149.00",
            "accounts": 1,
            "label": "Produkt hinzugefügt"
          },
          {
            "movement": "contraction",
            "reason": "quantity_change",
            "amount": "-350.90",
            "accounts": 1,
            "label": "Mengenänderung"
          },
          {
            "movement": "lost",
            "reason": "contract_end",
            "amount": "-1338.00",
            "accounts": 1,
            "label": "Vertragsende"
          }
        ]
      }
    ],
    "backlog": {
      "asOfMonth": "2026-09",
      "committed": "303835.60",
      "averageRemainingMonths": "5.7",
      "accounts": 53,
      "buckets": [
        {
          "key": "lt3",
          "amount": "16966.20"
        },
        {
          "key": "3to6",
          "amount": "54560.30"
        },
        {
          "key": "6to12",
          "amount": "186126.10"
        },
        {
          "key": "gt12",
          "amount": "46183.00"
        }
      ],
      "forward": [
        {
          "month": "2026-09",
          "mrr": "53414.80"
        },
        {
          "month": "2026-10",
          "mrr": "53530.80"
        },
        {
          "month": "2026-11",
          "mrr": "53052.30"
        },
        {
          "month": "2026-12",
          "mrr": "53251.30"
        },
        {
          "month": "2027-01",
          "mrr": "53635.10"
        },
        {
          "month": "2027-02",
          "mrr": "55325.80"
        },
        {
          "month": "2027-03",
          "mrr": "54898.80"
        },
        {
          "month": "2027-04",
          "mrr": "54898.80"
        },
        {
          "month": "2027-05",
          "mrr": "54898.80"
        },
        {
          "month": "2027-06",
          "mrr": "54898.80"
        },
        {
          "month": "2027-07",
          "mrr": "54898.80"
        },
        {
          "month": "2027-08",
          "mrr": "54898.80"
        },
        {
          "month": "2027-09",
          "mrr": "54898.80"
        }
      ],
      "events": [
        {
          "id": "0199c0de-0000-7000-8000-a00000000038-0",
          "month": "2026-10",
          "kind": "discount_end",
          "customer": {
            "id": "0199c0de-0000-7000-8000-c00000000038",
            "name": "Löwenzahn Apotheken OHG",
            "number": "K-10038"
          },
          "accounts": 1,
          "amount": "116.00",
          "product": null,
          "cancellationReason": null
        },
        {
          "id": "0199c0de-0000-7000-8000-a00000000010-0",
          "month": "2026-11",
          "kind": "end",
          "customer": {
            "id": "0199c0de-0000-7000-8000-c00000000010",
            "name": "Kranich Sicherheitsdienste GmbH",
            "number": "K-10010"
          },
          "accounts": 1,
          "amount": "-478.50",
          "cancellationReason": "competitor",
          "product": null
        },
        {
          "id": "0199c0de-0000-7000-8000-a00000000037-0",
          "month": "2026-12",
          "kind": "end",
          "customer": {
            "id": "0199c0de-0000-7000-8000-c00000000037",
            "name": "Isarwerk Studios GmbH",
            "number": "K-10037"
          },
          "accounts": 1,
          "amount": "-381.00",
          "cancellationReason": "price",
          "product": null
        }
      ]
    }
  },
  "selectedMonth": "2026-09",
  "mrrCells": {
    "mrr_eop": [
      {
        "snapshot": "51831.50",
        "snapshotVersion": 1,
        "restatement": null,
        "snapshotAccounts": 50
      },
      {
        "snapshot": "51646.00",
        "snapshotVersion": 1,
        "restatement": {
          "delta": "200.00",
          "accounts": 1,
          "cause": "segment_added",
          "causeLabel": "Konto hinzugekommen"
        },
        "snapshotAccounts": 50
      },
      {
        "snapshot": "53414.80",
        "snapshotVersion": 1,
        "restatement": null,
        "snapshotAccounts": 53
      }
    ]
  },
  "definitions": {
    "version": "v7",
    "validFrom": "2026-10-22",
    "entries": [
      {
        "id": "mrr_bop",
        "title": "MRR (Periodenbeginn)",
        "definition": "MRR am Ende des Vormonats.",
        "formula": "MRR(Monatsende des Vormonats)"
      },
      {
        "id": "arr",
        "title": "ARR",
        "definition": "MRR am Monatsende, auf ein Jahr gerechnet. Bei nutzungsabhängigen Produkten zählt die feste Gebühr je Intervall.",
        "formula": "MRR × 12"
      }
    ],
    "changelog": []
  },
  "meta": {
    "asOf": "2026-10-01T04:00:00+00:00",
    "buildId": "0199c0de-0000-7000-8000-00000000b001",
    "scope": "customer",
    "currency": "EUR",
    "from": "2026-07",
    "to": "2026-09",
    "findings": {
      "error": 0,
      "warning": 6,
      "info": 9
    },
    "filtersNotApplied": [],
    "notSnapshotted": [
      "one_off",
      "variable",
      "accounted_mrr",
      "billing_gap",
      "cash_collected",
      "cash_collected_this_month",
      "cash_collected_other_months",
      "cash_collected_unassigned",
      "cash_refunded",
      "cash_net",
      "cash_forecast",
      "receivables_eop"
    ],
    "projectedFrom": null,
    "forecast": {
      "incomplete": false,
      "failedSubscriptions": 0
    },
    "build": {
      "status": "succeeded",
      "builtAt": "2026-10-01T04:00:00+00:00",
      "buildId": "0199c0de-0000-7000-8000-00000000b001",
      "failed": null
    },
    "dataBuildId": "0199c0de-0000-7000-8000-00000000b001"
  }
}
```

| Feld | Inhalt |
| - | - |
| `recurring.kpis` | Kacheln `mrr`, `arr`, `net_new`, `quick_ratio`, `accounted_mrr` für den letzten abgeschlossenen Monat, mit Veränderung zum Vormonat, bis zu zwölf Verlaufspunkten, `asOfMonth`, `monthComplete` und `current` |
| `recurring.movementMonths` | je Monat der Waterfall von `bop` zu `eop` mit den fünf Schritten und ihren Ursachen, jede Ursache mit `label` |
| `recurring.backlog` | vertraglich gebundener MRR, die Restlaufzeit-Bänder, der bekannte MRR der nächsten zwölf Monate und die bekannten Ereignisse |
| `mrrCells` | je festgehaltener Zeile und Monat der Snapshot-Wert, seine Version und ein möglicher Nachtrag |
| `definitions` | der Katalog, nach dem die Zahlen berechnet sind |

`valueKind` sagt, wie ein Kachelwert zu lesen ist: `money`, `rate`, `ratio`, `count` oder `days`. `better` gibt die günstige Richtung an. Für DSO ist das `down`. Reicht der Zeitraum bis in den laufenden Monat, steht dessen bisheriger Wert in `current`, siehe [Der laufende Monat](https://docs.fynn.eu/v2-finance-api/concepts.md#der-laufende-monat). Die Accounted-MRR-Kachel vergleicht nur abgeschlossene Monate, ihr `current.delta` ist immer `null`.

`mrrCells.mrr_eop` zeigt im August den Nachtrag: Festgehalten sind 51.646,00 €, heute sind es 51.846,00 €. Die Differenz von +200,00 € mit der Ursache `segment_added` betrifft ein Konto.

## Kundenbasis

`GET /api/analytics/finance/customers` liefert unter `customers` sieben Bereiche:

| Feld | Inhalt |
| - | - |
| `kpis` | `active`, `arpa`, `nrr`, `grr` |
| `retention` | NRR und GRR je Monat über zwölf Monate |
| `cohorts` | das Kohorten-Dreieck: je Startmonat die Konten, der MRR bei Alter 0 und je Alter der MRR und die Bindung |
| `concentration` | Anteile der größten Konten (`top1`, `top2_5`, `top6_10`, `rest`) und die zehn größten Konten |
| `logos` | neue, reaktivierte und verlorene Konten je Monat |
| `churnReasons` | verlorener MRR je Kündigungsgrund, die Anteile ergeben genau 1 |
| `segmentMetrics` | alle Konten, das Segment und das Vergleichssegment nebeneinander |

Ausschnitt der Antwort für den Zeitraum bis September 2026:

```json theme={null}
{
  "customers": {
    "kpis": [
      {
        "id": "active",
        "title": "Aktive Konten",
        "valueKind": "count",
        "value": "53",
        "delta": "2",
        "better": "up",
        "sparkline": [
          "31",
          "33",
          "36",
          "38",
          "38",
          "40",
          "43",
          "45",
          "46",
          "50",
          "51",
          "53"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "arpa",
        "title": "ARPA",
        "valueKind": "money",
        "value": "1007.83",
        "delta": "-8.76",
        "better": "up",
        "sparkline": [
          "1034.65",
          "1022.06",
          "983.50",
          "1037.92",
          "1175.64",
          "1144.94",
          "1089.99",
          "1056.30",
          "1066.89",
          "1036.63",
          "1016.59",
          "1007.83"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "nrr",
        "title": "NRR 12 Monate",
        "valueKind": "rate",
        "value": "1.154006",
        "delta": "-0.028306",
        "better": "up",
        "sparkline": [
          "1.015696",
          "1.024772",
          "1.107326",
          "1.233321",
          "1.174759",
          "1.191093",
          "1.478865",
          "1.446721",
          "1.362233",
          "1.188678",
          "1.182312",
          "1.154006"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "grr",
        "title": "GRR 12 Monate",
        "valueKind": "rate",
        "value": "0.900618",
        "delta": "0.010610",
        "better": "up",
        "sparkline": [
          "0.958077",
          "0.962930",
          "0.970780",
          "0.998305",
          "0.952305",
          "0.955795",
          "0.941343",
          "0.926672",
          "0.918567",
          "0.874865",
          "0.890008",
          "0.900618"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      }
    ]
  }
}
```

ARPA ist MRR je zahlendem Konto: 53.414,80 € / 53 Konten = 1.007,83 €. Tragen zwei verschiedene Kunden oder Produkte in einer Liste denselben Namen, hängt die API die Nummer an, zum Beispiel „Fynn Pro (P-10001)".

## Liquidität

`GET /api/analytics/finance/liquidity` liefert die Zahlungs- und Forderungssicht. `overviewWire` hat die Form der Finanzübersicht (Cashflow, Forderungsalter, Forderungstabelle), `liquidity` die Kennzahlen, das Zahlungsverhalten und den Abgleich Vertrag und Rechnung. `accountingClosed` sagt je Monat, ob die Buchhaltung ihn abgeschlossen hat.

Ausschnitt `liquidity` für Juli bis September 2026:

```json theme={null}
{
  "liquidity": {
    "kpis": [
      {
        "id": "net_cash",
        "title": "Netto-Cash",
        "valueKind": "money",
        "value": "189765.64",
        "delta": null,
        "better": "up",
        "sparkline": [
          "47884.85",
          "33152.62",
          "59627.57",
          "38431.82",
          "38174.97",
          "74589.59",
          "45482.29",
          "74685.66",
          "62296.08",
          "58028.29",
          "71868.07",
          "59869.28"
        ],
        "caption": "im Zeitraum",
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "outstanding",
        "title": "Offene Forderungen",
        "valueKind": "money",
        "value": "28656.90",
        "delta": "7193.29",
        "better": "down",
        "sparkline": [
          "17218.71",
          "27480.40",
          "13176.32",
          "24000.83",
          "41076.71",
          "23634.18",
          "37015.98",
          "21706.08",
          "20844.90",
          "28729.46",
          "21463.61",
          "28656.90"
        ],
        "caption": "heute",
        "asOfMonth": "2026-10",
        "monthComplete": false,
        "current": null
      },
      {
        "id": "overdue",
        "title": "Überfällig",
        "valueKind": "money",
        "value": "6922.26",
        "delta": null,
        "better": "down",
        "sparkline": [],
        "caption": "heute",
        "asOfMonth": "2026-10",
        "monthComplete": false,
        "current": null
      },
      {
        "id": "dso",
        "title": "DSO 3 Monate",
        "valueKind": "days",
        "value": "13.3",
        "delta": "3.0",
        "better": "down",
        "sparkline": [
          "13.6",
          "20.2",
          "9.3",
          "16.0",
          "24.6",
          "13.1",
          "19.2",
          "11.4",
          "10.6",
          "14.2",
          "10.3",
          "13.3"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      },
      {
        "id": "dso_12m",
        "title": "DSO 12 Monate",
        "valueKind": "days",
        "value": "15.1",
        "delta": "0.2",
        "better": "down",
        "sparkline": [
          "16.4",
          "16.2",
          "15.9",
          "15.8",
          "16.0",
          "15.7",
          "15.6",
          "15.4",
          "15.2",
          "15.1",
          "14.9",
          "15.1"
        ],
        "caption": null,
        "asOfMonth": "2026-09",
        "monthComplete": true,
        "current": null
      }
    ],
    "paymentBehaviour": {
      "termDays": 14,
      "months": [
        {
          "month": "2026-09",
          "averageDays": {
            "sepa_debit": "4.6",
            "bank_transfer": "17.7",
            "card": "0.8"
          },
          "openOverdueCount": 0
        }
      ],
      "summary": [
        {
          "method": "sepa_debit",
          "averageDays": "6.4",
          "withinTerm": "0.954167",
          "invoices": 240
        },
        {
          "method": "bank_transfer",
          "averageDays": "22.2",
          "withinTerm": "0.191919",
          "invoices": 198
        },
        {
          "method": "card",
          "averageDays": "0.6",
          "withinTerm": "1.000000",
          "invoices": 43
        }
      ]
    },
    "reconciliation": {
      "totalDifference": "-70.00",
      "rows": [
        {
          "id": "0199c0de-0000-7000-8000-d00000033002:2026-07",
          "customer": {
            "id": "0199c0de-0000-7000-8000-c00000000033",
            "number": "K-10033",
            "name": "Eichenhof Senioren GmbH"
          },
          "subscription": {
            "id": "0199c0de-0000-7000-8000-b00000000033",
            "number": "ABO-2033"
          },
          "invoice": {
            "id": "0199c0de-0000-7000-8000-000000000565",
            "number": "RE-2026-0278"
          },
          "product": "Schichtplanung",
          "month": "2026-07",
          "contract": "149.00",
          "billed": "298.00",
          "difference": "-149.00",
          "cause": "price_mismatch",
          "causeLabel": "Rechnungsbetrag weicht ab",
          "parts": [
            {
              "cause": "price_mismatch",
              "causeLabel": "Rechnungsbetrag weicht ab",
              "amount": "-149.00"
            }
          ],
          "invoices": [
            {
              "id": "0199c0de-0000-7000-8000-000000000565",
              "number": "RE-2026-0278"
            }
          ],
          "findingId": "3f0b6d2e-8a41-5c77-9e20-1d4c7a9b5e33",
          "belowTolerance": false,
          "monthComplete": true
        },
        {
          "id": "0199c0de-0000-7000-8000-d00000018003:2026-08",
          "customer": {
            "id": "0199c0de-0000-7000-8000-c00000000018",
            "number": "K-10018",
            "name": "Havelland Reinigung GmbH"
          },
          "subscription": {
            "id": "0199c0de-0000-7000-8000-b00000000018",
            "number": "ABO-2018"
          },
          "invoice": null,
          "product": "Lohnexport",
          "month": "2026-08",
          "contract": "79.00",
          "billed": "0.00",
          "difference": "79.00",
          "cause": "not_yet_billed",
          "causeLabel": "Rechnung ausstehend",
          "parts": [
            {
              "cause": "not_yet_billed",
              "causeLabel": "Rechnung ausstehend",
              "amount": "79.00"
            }
          ],
          "invoices": [],
          "findingId": "7a2c9e41-0d5b-5f18-8c63-2e9b4f1a0c18",
          "belowTolerance": false,
          "monthComplete": true
        }
      ],
      "monthTotals": {
        "2026-07": "-149.00",
        "2026-08": "79.00",
        "2026-09": "0.00"
      }
    },
    "dso": "13.3"
  }
}
```

Netto-Cash gilt für den Zeitraum und trägt dessen letzten Monat. Offene und überfällige Forderungen gelten für heute und tragen den laufenden Monat mit `monthComplete: false`.

**Abgleich Vertrag und Rechnung.** `reconciliation` enthält jede Position und jeden Monat, in dem Vertrag und Accounted MRR auseinanderliegen, also genau die Bestandteile der Zeile Differenz Vertrag zu Rechnung der MRR-Tabelle.

| Feld | Bedeutung |
| - | - |
| `id` | stabile Kennung aus Position und Monat (`item:month`) |
| `contract`, `billed` | MRR laut Vertrag am Monatsende und Accounted MRR der Position |
| `difference` | Vertrag minus Rechnung; positiv heißt, es wurde weniger abgerechnet |
| `parts` | alle Ursachen mit ihrem Anteil, sie ergeben `difference` |
| `invoices`, `invoice` | die Belege hinter `billed`; `invoice` nur, wenn es genau einer ist |
| `findingId` | der zugehörige Hinweis `BILLED_VS_CONTRACT_DIFF`, falls die Position über der Toleranz liegt |
| `belowTolerance` | die Abweichung liegt innerhalb von max(2,00 €, 2 % des Vertrags) |
| `monthComplete` | `false` für den laufenden Monat, Rechnungen können noch folgen |

`monthTotals` ist je Monat gleich der Zelle `billing_gap` der MRR-Tabelle, `totalDifference` ihre Summe: −149,00 + 79,00 + 0,00 = −70,00 €. Die Eichenhof Senioren GmbH hat im Juli 149,00 € im Vertrag und 298,00 € auf der Rechnung RE-2026-0278, die Havelland Reinigung GmbH im August 79,00 € im Vertrag und noch keine Rechnung. Die Erklärung eines Hinweises öffnest du mit `GET /api/analytics/mrr-financials/findings/{findingId}`.

Ausschnitt `overviewWire.ageing`, das Forderungsalter heute:

```json theme={null}
{
  "ageing": {
    "asOf": "2026-10-01T04:00:00+00:00",
    "total": {
      "amount": "28656.90",
      "currency": "EUR"
    },
    "overdueTotal": {
      "amount": "6922.26",
      "currency": "EUR"
    },
    "buckets": [
      {
        "key": "not_due",
        "amount": {
          "amount": "21734.64",
          "currency": "EUR"
        },
        "invoiceCount": 14,
        "topCustomers": []
      },
      {
        "key": "1_30",
        "amount": {
          "amount": "5044.44",
          "currency": "EUR"
        },
        "invoiceCount": 6,
        "topCustomers": [
          {
            "customer": {
              "id": "0199c0de-0000-7000-8000-c00000000015",
              "name": "Ostwind Energie GmbH",
              "number": "K-10015"
            },
            "amount": {
              "amount": "1695.75",
              "currency": "EUR"
            },
            "invoiceCount": 1
          }
        ]
      },
      {
        "key": "31_60",
        "amount": {
          "amount": "625.94",
          "currency": "EUR"
        },
        "invoiceCount": 1,
        "topCustomers": [
          {
            "customer": {
              "id": "0199c0de-0000-7000-8000-c00000000023",
              "name": "Bergmann Personalservice GmbH",
              "number": "K-10023"
            },
            "amount": {
              "amount": "625.94",
              "currency": "EUR"
            },
            "invoiceCount": 1
          }
        ]
      },
      {
        "key": "61_90",
        "amount": {
          "amount": "625.94",
          "currency": "EUR"
        },
        "invoiceCount": 1,
        "topCustomers": [
          {
            "customer": {
              "id": "0199c0de-0000-7000-8000-c00000000023",
              "name": "Bergmann Personalservice GmbH",
              "number": "K-10023"
            },
            "amount": {
              "amount": "625.94",
              "currency": "EUR"
            },
            "invoiceCount": 1
          }
        ]
      },
      {
        "key": "over_90",
        "amount": {
          "amount": "625.94",
          "currency": "EUR"
        },
        "invoiceCount": 1,
        "topCustomers": [
          {
            "customer": {
              "id": "0199c0de-0000-7000-8000-c00000000023",
              "name": "Bergmann Personalservice GmbH",
              "number": "K-10023"
            },
            "amount": {
              "amount": "625.94",
              "currency": "EUR"
            },
            "invoiceCount": 1
          }
        ]
      }
    ],
    "over365": {
      "amount": "0.00",
      "currency": "EUR"
    }
  }
}
```

Die Buckets ergeben den Gesamtbetrag 28.656,90 €. Alles außer `not_due` ist überfällig: 6.922,26 €.

Zahlungsverhalten und DSO gelten immer für die ganze Organisation. Mit einem Segment steht das in `meta.filtersNotApplied`.

## Umsatz

`GET /api/analytics/finance/revenue` zeigt den abgerechneten Nettoumsatz aller Klassen nach dem Monat, in dem die Belege ausgestellt wurden: `byCountry`, `byProduct`, `topProducts` (die zehn größten), `revenueDetails`, `arrAtPeriodEnd` und `byCustomerAndProduct`. Gutschriften und Stornos zählen im Monat ihrer Ausstellung negativ.

Ausschnitt mit `revenueDetails` und `arrAtPeriodEnd` für Juli bis September 2026:

```json theme={null}
{
  "revenueDetails": [
    {
      "currency": "EUR",
      "recurring": [
        {
          "amount": "52310.20",
          "currency": "EUR"
        },
        {
          "amount": "51402.40",
          "currency": "EUR"
        },
        {
          "amount": "53866.90",
          "currency": "EUR"
        }
      ],
      "oneOff": [
        {
          "amount": "2050.00",
          "currency": "EUR"
        },
        {
          "amount": "1270.00",
          "currency": "EUR"
        },
        {
          "amount": "1470.00",
          "currency": "EUR"
        }
      ],
      "variable": [
        {
          "amount": "1283.40",
          "currency": "EUR"
        },
        {
          "amount": "1270.80",
          "currency": "EUR"
        },
        {
          "amount": "1377.00",
          "currency": "EUR"
        }
      ],
      "total": [
        {
          "amount": "55643.60",
          "currency": "EUR"
        },
        {
          "amount": "53943.20",
          "currency": "EUR"
        },
        {
          "amount": "56713.90",
          "currency": "EUR"
        }
      ],
      "totals": {
        "recurring": {
          "amount": "157579.50",
          "currency": "EUR"
        },
        "oneOff": {
          "amount": "4790.00",
          "currency": "EUR"
        },
        "variable": {
          "amount": "3931.20",
          "currency": "EUR"
        },
        "total": {
          "amount": "166300.70",
          "currency": "EUR"
        }
      }
    }
  ],
  "arrAtPeriodEnd": {
    "committed": [
      {
        "amount": "621978.00",
        "currency": "EUR"
      },
      {
        "amount": "622152.00",
        "currency": "EUR"
      },
      {
        "amount": "640977.60",
        "currency": "EUR"
      }
    ],
    "variable": [
      {
        "amount": "14702.30",
        "currency": "EUR"
      },
      {
        "amount": "14859.10",
        "currency": "EUR"
      },
      {
        "amount": "15030.90",
        "currency": "EUR"
      }
    ],
    "total": [
      {
        "amount": "621978.00",
        "currency": "EUR"
      },
      {
        "amount": "622152.00",
        "currency": "EUR"
      },
      {
        "amount": "640977.60",
        "currency": "EUR"
      }
    ]
  }
}
```

`revenueDetails` teilt den Umsatz je Währung und Monat in wiederkehrend, einmalig und variabel. `total` ist ihre Summe, im September 53.866,90 + 1.470,00 + 1.377,00 = 56.713,90 €. `totals.total` über den Zeitraum ist gleich der Summe aller Länder und aller Produkte.

`arrAtPeriodEnd.total` ist dieselbe ARR wie auf allen anderen Seiten: MRR am Monatsende mal 12, im September 640.977,60 €. `committed` hat denselben Wert. `variable` ist eine eigene Reihe, der variable Umsatz der letzten zwölf Monate, und gehört nicht zur ARR. `details` wiederholt diese Reihen für jede Währung der Organisation.

`byCustomerAndProduct` enthält die erste Seite der Kundentabelle. Weitere Seiten lädst du über `GET /api/analytics/finance/revenue/customers` mit denselben Filtern und `page`. Die Reihenfolge ist stabil: Kunden sind absteigend nach Nettoumsatz sortiert, gleiche Beträge nach Kunden-ID.

`accountingClosed` markiert Monate, deren Buchungen abgeschlossen sind. Die Umsatzzahlen folgen den Belegdaten und können sich auch nach dem Abschluss noch ändern, zum Beispiel durch eine spätere Gutschrift. Eine solche Änderung erzeugt den Hinweis `POST_CLOSE_CHANGE`.

## Finanzübersicht

`GET /api/analytics/finance/overview` liefert Cashflow, MRR-Bewegungen mit Vorzeichen, Umsatz nach Klasse (wiederkehrend, einmalig, variabel), offene Forderungen je Monatsende, das Forderungsalter und die Forderungstabelle. Die Liquiditätsseite enthält denselben Datensatz als `overviewWire`. Ausschnitt `cashflow`:

```json theme={null}
{
  "cashflow": {
    "collected": [
      {
        "amount": "58028.29",
        "currency": "EUR"
      },
      {
        "amount": "71981.72",
        "currency": "EUR"
      },
      {
        "amount": "59869.28",
        "currency": "EUR"
      }
    ],
    "refunded": [
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "113.65",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      }
    ],
    "net": [
      {
        "amount": "58028.29",
        "currency": "EUR"
      },
      {
        "amount": "71868.07",
        "currency": "EUR"
      },
      {
        "amount": "59869.28",
        "currency": "EUR"
      }
    ],
    "forecastBilled": [
      null,
      null,
      null
    ],
    "collectedThisMonth": [
      {
        "amount": "39628.84",
        "currency": "EUR"
      },
      {
        "amount": "45130.08",
        "currency": "EUR"
      },
      {
        "amount": "42103.00",
        "currency": "EUR"
      }
    ],
    "collectedOtherMonths": [
      {
        "amount": "18399.45",
        "currency": "EUR"
      },
      {
        "amount": "26851.64",
        "currency": "EUR"
      },
      {
        "amount": "17766.28",
        "currency": "EUR"
      }
    ],
    "collectedUnassigned": [
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      },
      {
        "amount": "0.00",
        "currency": "EUR"
      }
    ]
  }
}
```

Der Zahlungseingang zählt abgewickelte Zahlungen nach Zahldatum. Die drei Teile ergeben ihn: im August 45.130,08 € für Rechnungen des Monats, 26.851,64 € für Rechnungen anderer Monate und 0,00 € ohne Rechnung, zusammen 71.981,72 €. `forecastBilled` ist für vergangene Monate `null`. Meldet `meta.forecast.incomplete` eine unvollständige Prognose, ist jeder Prognosewert eine Untergrenze.

## Weiter

> **[Drill-downs](https://docs.fynn.eu/v2-finance-api/drill-downs.md)**
>
> Die Zeilen hinter einer Zelle der Datensätze.

> **[Excel-Exporte](https://docs.fynn.eu/v2-finance-api/excel.md)**
>
> Jede Seite als Excel-Buch mit allen Rohdaten.
